MHA及基于wresp协议实现多主模型Galera cluste

2018-11-04  本文已影响23人  任总

一、MySQL高可用方案

1、MHA架构介绍:

2、MHA节点组成:

3、MHA自动故障切换过程

4、MHA节点集群条件

二、MHA工具:

1、Manager工具包主要包括以下几个工具:

masterha_check_ssh 检查MHA的SSH配置状况
masterha_check_repl 检查MySQL复制状况
masterha_manger 启动MHA
masterha_check_status 检测当前MHA运行状态
masterha_master_monitor 检测master是否宕机
masterha_master_switch 控制故障转移(自动或者手动)
masterha_conf_host 添加或删除配置的server信息

2、Node工具包(这些工具通常由MHA Manager的脚本触发,无需人为操作)主要包括以下几个工具:

save_binary_logs(保存二进制日志) 保存和复制master的二进制日志
apply_diff_relay_logs(应用差异中继日志) 识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog 去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
purge_relay_logs(清理中继日志) 清除中继日志(不会阻塞SQL线程)

3、MHA保持数据的一致性

注意:

对比的是relay log,relay log越新就越接近于master,才能保证数据是最新的。
purge_relay_logs删除中继日志而不阻塞sql线程

三、MHA的优势

1、故障切换快

2、master故障不会导致数据不一致

3、无需修改当前的MySQL设置

4、无需增加大量的服务器

5、无性能下降

6、适用于任何存储引擎

四、实验示例

实验环境

1、 主节点配置:192.168.1.19

#安装mariadb同步时间
[root@mysql-19 ~]# yum install mariadb-server ntpdate -y
[root@mysql-19 ~]# ntpdate time1.aliyun.com
# 修改Mariadb配置文件
[root@mysql-19 ~]# vim /etc/my.cnf.d/server.cnf 
[mysqld]
innodb_file_per_table=ON
skip_name_resolve=ON

server_id=1
log_bin=master-log
relay_log=relay-log
#安装MHA的node软件
[root@mysql-19 ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y

[root@mysql-19 ~]# systemctl restart mariadb #重启服务
#MHA用户授权
MariaDB [(none)]> GRANT ALL ON *.* TO 'mhadmin'@'192.168.1.%' IDENTIFIED BY 'mhapass';
Query OK, 0 rows affected (0.00 sec)
#从节点授权
MariaDB [(none)]> GRANT REPLICATION CLIENT,REPLICATION SLAVE  ON *.* TO 'repladmin'@'192.168.1.%' IDENTIFIED BY 'replpass';
Query OK, 0 rows affected (0.05 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
#生成ssh秘钥
[root@mysql-19 ~]# ssh-keygen -t rsa -P ''
SHA256:CLgVL5NWYnswUiZKKTLfihEyicoGpS7a9h01DwQXo+o root@mysql-19
The key's randomart image is:
+---[RSA 2048]----+
|.+=.O o +.       |
|%+ * X + .       |
|X=..O + .        |
|+o.+.* o         |
|o+... . S        |
|+...   . +       |
|. o E .   .      |
| . . . .         |
|    . .          |
+----[SHA256]-----+

#分配给本机一个秘钥
[root@mysql-19 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.1.19

#拷贝到其他节点上 ,如果提示未找到.ssh目录,到/root下创建
[root@mysql-19 ~]# scp -p .ssh/authorized_keys .ssh/id_rsa{,.pub} root@192.168.1.60:/root/.ssh/

[root@mysql-19 ~]# scp -p .ssh/authorized_keys .ssh/id_rsa{,.pub} root@192.168.1.20:/root/.ssh/

[root@mysql-19 ~]# scp -p .ssh/authorized_keys .ssh/id_rsa{,.pub} root@192.168.1.21:/root/.ssh/

#测试秘钥是否可用
[root@mysql-19 ~]# ssh root@192.168.1.20 'ifconfig'
#返回配置表示秘钥可用
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500  
        inet 192.168.1.20  netmask 255.255.255.0  broadcast 192.168.1.255

2、从节点一配置:192.168.1.20

#安装mariadb同步时间
[root@mysql-20 ~]# yum install mariadb-server ntpdate -y
[root@mysql-20 ~]# ntpdate time1.aliyun.com
# 修改Mariadb配置文件
[root@mysql-20 ~]# vim /etc/my.cnf.d/server.cnf
[mysqld]
innodb_file_per_table=ON
skip_name_resolve=ON

server_id=11
relay_log=relay-log
log_bin=master-log
relay_log_purge=0
read_only=1

[root@mysql-20 ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y

[root@mysql-20 ~]# systemctl restart mariadb #重启服务

3、从节点二配置:192.168.1.21

#安装mariadb同步时间
[root@mysql-21 ~]# yum install mariadb-server ntpdate -y
[root@mysql-21 ~]# ntpdate time1.aliyun.com
# 修改Mariadb配置文件
[root@mysql-21 ~]# vim /etc/my.cnf.d/server.cnf 
[mysqld]
innodb_file_per_table=ON
skip_name_resolve=ON

server_id=13
relay_log=relay-log
log_bin=master-log
relay_log_purge=0
read_only=1
[root@mysql-21 ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y

[root@mysql-21 ~]# systemctl start mariadb #重启服务

4、安装MHA节点:192.168.1.60

注意:安装顺序为先安装node包-->manager包,否则会报错。
#因为需要perl环境,所以要先安装epel源
[root@proxysql-60 ~]# yum install epel-release  -y #安装epel源

#下载两个rpm包
[root@mha-60 ~]# ls
 mha4mysql-manager-0.56-0.el6.noarch.rpm  mha4mysql-node-0.56-0.el6.noarch.rpm

#首先安装node包,顺序很重要
[root@mha-60 ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm  -y

#再安装manager包
[root@mha-60 ~]# yum install mha4mysql-manager-0.56-0.el6.noarch.rpm -y



#编辑MHA主节点配置文件
[root@mha-60 ~]# mkdir /etc/masterha
[root@mha-60 ~]# vim /etc/masterha/app1.cnf
[server default] #默认配置段
user=mhadmin
password=mhapass

repl_user=repladmin
repl_password=replpass

ssh_user=root
ssh_port=22
#ssh_connection_timeout=30
#ssh_options="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
ping_interval=1

manager_workdir=/data/masterha/app1
manager_log=/data/masterha/app1/manager.log
remote_workdir=/data/masterha/app1

[server1]
hostname=192.168.1.19
candidate_master=1  #是否可以提升为主节点


[server2]
hostname=192.168.1.20
candidate_master=1  #是否可以提升为主节点


[server3]
hostname=192.168.1.21
candidate_master=1  #是否可以提升为主节点

#检查ssh通信
[root@mha-60 ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf 
........OK
........OK
All SSH connection tests passed successfully.

#检查主从节点
[root@mha-60 ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf 
..............
MySQL Replication Health is OK.

#启动MHA,并指明保存日志的路径,最后的&符号代表在后台执行
[root@mha-60 data]# nohup masterha_manager --conf=/etc/masterha/app1.cnf &> /data/masterha/app1/manager.log & 
[2] 3544

#检查启动进程
[root@mha-60 ~]# ps aux
root       2724  0.1  2.1 297028 21616 pts/1    S    08:00   0:00 perl /usr/bin/masterha_manager --conf=/etc/masterha/app1.cnf

#查看当前主节点状态
[root@mha-60 ~]# masterha_check_status --conf=/etc/masterha/app1.cnf 
app1 (pid:13567) is running(0:PING_OK), master:192.168.1.19

#停止MHA
[root@mha-60 ~]# masterha_stop --conf=/etc/masterha/app1.cnf   
MHA Manager is not running on app1(2:NOT_RUNNING).

检查MHA运行状态
  • masterha_check_status --conf=/etc/masterha/app1.cnf
检查MHA互信
  • masterha_check_ssh --conf=/etc/masterha/app1.cnf
检查复制情况
  • masterha_check_repl --conf=/etc/masterha/app1.cnf

五、测试:

1、主节点切换测试

#安装killall
[root@mysql-19 ~]# yum install psmisc -y
#停止mysql服务进程
[root@mysql-19 ~]# killall -9 mysqld mysqld_safe

#自动切换成功
[root@mha-60 ~]# tail -100 /data/masterha/app1/manager.log 
----- Failover Report -----
app1: MySQL Master failover 192.168.1.19(192.168.1.19:3306) to 192.168.1.20(192.168.1.20:3306) succeeded  #主节点已经切换
Master 192.168.1.19(192.168.1.19:3306) is down! #原主节点已下线
.......
Selected 192.168.1.20(192.168.1.20:3306) as a new master. #新主节点
192.168.1.20(192.168.1.20:3306): OK: Applying all logs succeeded.  #新主节点获取所有日志成功
192.168.1.21(192.168.1.21:3306): This host has the latest relay log events. #从节点
.......

#自动切换后MHA线程停止工作
[root@mha-60 ~]# masterha_check_status --conf=/etc/masterha/app1.cnf 
app1 is stopped(2:NOT_RUNNING).
#新主节点创建新表
MariaDB [mydb]> show tables;
+----------------+
| Tables_in_mydb |
+----------------+
| tbl1           |
+----------------+
1 row in set (0.00 sec)

MariaDB [mydb]> create table tbl2(num int(10),addr char(50));
Query OK, 0 rows affected (0.02 sec)

MariaDB [mydb]> show tables;
+----------------+
| Tables_in_mydb |
+----------------+
| tbl1           |
| tbl2           |
+----------------+
2 rows in set (0.00 sec)

#在192.168.1.21从节点查看
MariaDB [mydb]> show tables; #已同步
+----------------+
| Tables_in_mydb |
+----------------+
| tbl1           |
| tbl2           |
+----------------+

2、故障节点恢复

#新节点数据库备份
[root@mysql-20 ~]# mysqldump -uroot -x -R -E --triggers --master-data=2 --all-databases > alldb.sql 
#备份传给故障节点
[root@mysql-20 ~]# scp alldb.sql 192.168.1.19:/root/
# 修改Mariadb配置文件
[root@mysql-19 ~]# vim /etc/my.cnf.d/server.cnf 
[mysqld]
innodb_file_per_table=ON
skip_name_resolve=ON

server_id=1
log_bin=master-log
relay_log=relay-log
relay_log_purge=0
read_only=1
#启动mysql,恢复数据库
[root@mysql-19 ~]# systemctl start mariadb
[root@mysql-19 ~]# mysql < alldb.sql
#查看二进制文件位置
[root@mysql-19 ~]# less -30 alldb.sql
.........
-- CHANGE MASTER TO MASTER_LOG_FILE='master-log.000001', MASTER_LOG_POS=352;
#根据二进制日志恢复并启动从节点
MariaDB [(none)]>  CHANGE MASTER TO MASTER_HOST='192.168.1.20',MASTER_USER='repladmin',MASTER_PASSWORD='replpass',MASTER_LOG_FILE='master-log.000001',MASTER_LOG_POS=352;
Query OK, 0 rows affected (0.02 sec)
#启动线程
MariaDB [(none)]> START SLAVE;
Query OK, 0 rows affected (0.00 sec)
#查看信息
MariaDB [(none)]> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.20
                  Master_User: repladmin
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-log.000001
          Read_Master_Log_Pos: 352
               Relay_Log_File: relay-log.000002
                Relay_Log_Pos: 530
        Relay_Master_Log_File: master-log.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
[root@mha-60 ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf 
.........
MySQL Replication Health is OK.
#启动
[root@mha-60 ~]# nohup masterha_manager --conf=/etc/masterha/app1.cnf &>> /data/masterha/app1/manager.log & 
[2] 18978

参考文献连接:https://www.cnblogs.com/xuanzhi201111/p/4231412.html
https://www.cnblogs.com/kevingrace/p/5662839.html

上一篇下一篇

猜你喜欢

热点阅读