1.准备MHA集群环境
准备6台虚拟机,并按照本节规划配置好IP参数
在这些虚拟机之间实现SSH免密登录
在相应节点上安装好MHA相关的软件包
 
使用6台RHEL 7虚拟机,如图-1所示。准备集群环境,安装依赖包,授权用户,配置ssh密钥对认证登陆,所有节点之间互相以root秘钥对认证登录,管理主机以root密钥对认证登录所有数据节点主机,配置mha集群。
1.1 修改主机名,配置IP
msyql{50..57}
192.168.4.{50..57}
 
1.2 安装包(51-55)
]# mkdir mha-soft-student
]# tar -xvf mha.tar.gz -C mha-soft-student
]# cd mha-soft-student
]# yum -y install perl-*.rpm
 
1.3 在管理主机上安装mha_node 和 mha-manager包(56操作)
mha-soft-student]# yum -y install perl-DBD-mysql perl-DBI
mha-soft-student]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
 
1.4 配置ssh密钥对认证登陆
所有节点之间可以互相以ssh密钥对方式认证登陆(以51为例)
]# ssh-keygen
]# for i in {50..57}
> do 
> ssh-copy-id 192.168.4.$i
> done
 
2. 配置MHA集群环境
配置主节点 master51
配置两个备用主节点 master52、master53
配置两个从节点 slave54、slave55
配置管理节点 mgm56
 
2.1 配置mha集群环境
 
2.1.1 安装数据库(51-55同样操作,以51为例)
]# mkdir mysql
]# tar -xvf mysql-5.7.17.tar -C mysql
]# cd mysql/
]# yum -y install perl-JSON
]# rpm -Uvh mysql-community-*.rpm
]# rpm -qa | grep -i mysql
]# systemctl start mysqld
]# grep 'temporary password' /var/log/mysqld.log 
]# mysql -uroot -p''
mysql> alter user user() identified by "123456"; //修改登陆密码
 
2.1.2 master51 数据库服务器配置文件
]# vim /etc/my.cnf(52.53都配置,修改id)
relay_log_purge=off(不自动删除本机的中继日志文件)
plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl-semi-sync-master-enabled = 1
rpl-semi-sync-slave-enabled = 1
 
server_id=51
log-bin=master51
binlog-format="mixed"
validate_password_policy=0
validate_password_length=6
 
添加主从同步授权用户(51)
mysql> grant replication slave on  *.*  to repluser@"%" identified by "123456";
mysql> RESET MASTER;
mysql> show master status;
mysql> SHOW MASTER STATUS\G
*************************** 1. row ***************************
             File: master51.000001
         Position: 154
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
 
2.1.3 master52数据库服务器配置文件(53同样配置)
mysql> RESET MASTER;
mysql> CHANGE MASTER TO
    -> MASTER_HOST='192.168.4.51',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='123456',
    -> MASTER_LOG_FILE='master51.000001',
    -> MASTER_LOG_POS=154;
 
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G
...
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes
...
 
2.1.4 slave54 数据库服务器配置文件(55一样)
]# vim /etc/my.cnf
[mysqld]
server_id=54
log-bin=mysql54
binlog-format="mixed"
validate_password_policy=0
validate_password_length=6
 
mysql> RESET MASTER;
mysql> CHANGE MASTER TO
    -> MASTER_HOST='192.168.4.51',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='123456',
    -> MASTER_LOG_FILE='master51.000001',
    -> MASTER_LOG_POS=154;
 
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G
...
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes
...
 
2.2 配置管理主机4.56
# yum -y install perl*(root下)
]# cd mha-soft-student/
]# yum -y install *.rpm
]# tar -xvf mha4mysql-manager-0.56.tar.gz 
]# cd mha4mysql-manager-0.56/
]# prel Makefile.PL 
]# make && make install
 
]# cd mha-soft-student/mha4mysql-manager-0.56/
]# cp bin/* /usr/local/bin/ 
创建工作目录
]# mkdir /etc/mha_manager
建立样板文件 
]# cp samples/conf/app1.cnf /etc/mha_manager/
 
]# vim /etc/mha_manager/app1.cnf 
//编辑主配置文件app1.cnf
[server default]
manager_workdir=/etc/mha_manager
manager_log=/etc/mha_manager/manager.log
master_ip_failover_script=/usr/local/bin/master_ip_failover
 
ssh_user=root
ssh_port=22
repl_user=repluser
repl_password=123456
 
user=root
password=123456
 
[server1]
hostname=192.168.4.51    
port=3306
 
[server2]
hostname=192.168.4.52
port=3306            
candidate_master=1
 
[server3]
hostname=192.168.4.53
port=3306
candidate_master=1
 
[server4]
hostname=192.168.4.54
no_master=1
 
[server5]
hostname=192.168.4.55
no_master=1
 
创建故障切换的脚本
]# vim samples/scripts/master_ip_failover
 
 35 my $vip='192.168.4.100/24';
 36 my $key='1';
 37 my $ssh_start_vip = '/sbin/ifconfig eth0:$key $vip';
 38 my $ssh_stop_vip = '/sbin/ifconfig eth0:$key down';
 39 
40 GetOptions(在这上面添加上面几行)
 
]# cp samples/scripts/master_ip_failover /usr/local/bin/
]# chmod +x /usr/local/bin/master_ip_failover
 
51上部署eth0
51 ~]# ifconfig eth0:1 192.168.4.100/24
]# ifconfig eth0:1
eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.4.100  netmask 255.255.255.0  broadcast 192.168.4.255
        ether 52:54:00:d6:46:46  txqueuelen 1000  (Ethernet)
 
3.测试MHA集群
查看MHA集群状态
测试节点之间的SSH登录
测试集群VIP的故障切换功能
 
3.1 验证配置
检查配置环境,在主机 52-55 检查是否有同步数据的用户repluser
mysql> select user,host from mysql.user where user="repluser";
mysql> show grants for repluser@"%";
 
在51的主机上做root的授权,其他的会同步(如果不做,在验证数据节点的主从同步配置时会出错)
mysql> grant all on *.* to root@"%" identified by "123456";
(50-55查看)
mysql> select user,host from mysql.user where user="root";
+------+-----------+
| user | host      |
+------+-----------+
| root | %         |
| root | localhost |
+------+-----------+
 
验证ssh 免密登陆数据节点主机(56)
-0.56]# cd /usr/local/bin/
bin]# masterha_check_ssh --conf=/etc/mha_manager/app1.cnf
...
MySQL Replication Health is  OK!
 
3.2 启动管理服务MHA_Manager
--remove_dead_master_conf //删除宕机主库配置
--ignore_last_failover //忽略xxx.health文件
bin]# masterha_manager --conf=/etc/mha_manager/app1.cnf \  
 --remove_dead_master_conf --ignore_last_failover 
 
查看状态(另开一个终端)
]# masterha_check_status --conf=/etc/mha_manager/app1.cnf
停止服务
]# masterha_stop --conf=/etc/mha_manager/app1.cnf
 
3.3 测试故障转移
启动服务
bin]# masterha_manager --conf=/etc/mha_manager/app1.cnf \ 
 --remove_dead_master_conf --ignore_last_failover
查看状态
]# masterha_check_status --conf=/etc/mha_manager/app1.cnf
...master:192.168.4.52
 
验证数据节点的主从同步配置
bin]# masterha_check_repl --conf=/etc/mha_manager/app1.cnf

三十六.MHA集群概述 、 部署MHA集群 测试配置的更多相关文章

  1. SpringCloud微服务实战——搭建企业级开发框架(三十六):使用Spring Cloud Stream实现可灵活配置消息中间件的功能

      在以往消息队列的使用中,我们通常使用集成消息中间件开源包来实现对应功能,而消息中间件的实现又有多种,比如目前比较主流的ActiveMQ.RocketMQ.RabbitMQ.Kafka,Stream ...

  2. 第三十六个知识点:Index Calculus算法

    第三十六个知识点:Index Calculus算法 我们这篇博客继续描述一种数学攻击,这种数学攻击被叫做Index Calculus(IC)算法. 注意这里Index Calculus算法没有找到合适 ...

  3. 剑指Offer(三十六):两个链表的第一个公共结点

    剑指Offer(三十六):两个链表的第一个公共结点 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...

  4. 程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索

    第三十六~三十七章.搜索智能提示suggestion,附近地点搜索 作者:July.致谢:caopengcs.胡果果.时间:二零一三年九月七日. 题记 写博的近三年,整理了太多太多的笔试面试题,如微软 ...

  5. NeHe OpenGL教程 第三十六课:从渲染到纹理

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  6. Java进阶(三十六)深入理解Java的接口和抽象类

    Java进阶(三十六)深入理解Java的接口和抽象类 前言 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太 ...

  7. Gradle 1.12用户指南翻译——第三十六章. Sonar Runner 插件

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  8. 第三百三十六节,web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础

    第三百三十六节,web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础 在urllib中,我们一样可以使用xpath表达式进行信息提取,此时,你需要首先安装lxml模块 ...

  9. centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课

    centos  shell脚本编程2 if 判断  case判断   shell脚本中的循环  for   while   shell中的函数  break  continue  test 命令   ...

  10. “全栈2019”Java第三十六章:类

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. Python 编程入门

    我喜欢直接了当, 这次主要是推荐蟒营大妈的 Python 入门课(https://py.101.camp), 还有不到一周就要开课了, 欢迎转发推荐~ 点击"夏日大作战:从小白到小能手的 P ...

  2. 信息的Raid存储方式,更安全的保障,更花钱的保障!

    raid0 就是把多个(最少2个)硬盘合并成1个逻辑盘使用,数据读写时对各硬盘同时操作,不同硬盘写入不同数据,速度快. raid1就是同时对2个硬盘读写(同样的数据).强调数据的安全性.比较浪费. r ...

  3. git彻底删除或变更子模块

    今天遇到一个很怪的问题,我想把我的一个子模块切换到另一个上游,我按照网上的方法删除子模块然后新建后,这个子模块依旧跟踪着我先前的上游.自己摸索了一下,可能方法比较傻,不过是可行的,希望能给大家一些帮助 ...

  4. js new到底做了什么?如何重写new?(转)

    转自:https://blog.csdn.net/lyt_angularjs/article/details/86623988

  5. 跟我一起学docker

    一.认识 1.什么是docker Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现. 项目后来加 ...

  6. python之基础总结(飞机大战)

    一.学习python有一段时间了,总体上手还是挺好的,但是有些东西还是和Java存在着一定的区别,这里主要是通过学习,然后自己去编写一个案例.从中学习到的一些东西,这里分享出来,如果存在不正确的地方还 ...

  7. C# mailKit 发邮件 简单代码

    public static async Task<bool> SendMailAsync22(string Name, string receive, string sender, str ...

  8. 可以在一个.java文件中写两个类吗?

    一个java文件中可以有任意多个类,接口或是注解..但是只能有一个类是public的,而且这个类的名字要和文件同名,比如public类名为A则文件名就应当为A.java

  9. 让image居中对齐,网页自适应

    <div class="page4_content"> <div class="page4_box"> <div class=&q ...

  10. 解决github提示安全漏洞的问题

    今天在提交代码的时候发现github提示了这样的错误: We found potential security vulnerabilities in your dependencies. Only t ...