MHA
一、添加vm3为备机
基于mysql-proxy实验基础上,将vm3也改为备机。
先关掉mysql-proxy进程。
ps -ax 查看进程pid(如果没有则不需要kill)
(1.)下载mysql
(2)配置
mysql -p ##登陆数据库
Enter password:
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; ##下载半同步模块
配置主配置文件:
vim my.cnf
systemctl restart mysqld
为vm3添加master机
mysql> change master to master_host='172.25.64.11',master_user='repl', master_password='Highhorse+007',master_auto_position=1; ##直接使用gtid自动
mysql> start slave; ##开启
mysql> show slave status\G ##查看slave状态
显示
Slave_IO_Running: Yes
Slave_SQL_Running: No ##数据不一致导致
(3)问题解决:
vim my.cnf
systemctl restart mysqld
mysql> stop slave;
备份westos库
[root@vm1 ~]# mysqldump -u root -p westos > westos.sql ##将数据库倒入.sql文件
Enter password:
Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --triggers --routines --events.
[root@vm1 ~]# scp westos.sql vm3: ##将备份发送到vm3
导入备份
[root@vm3 ~]# mysqladmin -u root -pHighhorse+007 create westos ##创建同名库
[root@vm3 ~]# mysql -u root -p westos < westos.sql ##导入数据
查看数据是否导入:
取消注释,重启mysql。
二、安装MHA
[root@vm1 MHA-7]# ls
mha4mysql-manager-0.58-0.el7.centos.noarch.rpm perl-Mail-Sender-0.8.23-1.el7.noarch.rpm
mha4mysql-manager-0.58.tar.gz perl-Mail-Sendmail-0.79-21.el7.noarch.rpm
mha4mysql-node-0.58-0.el7.centos.noarch.rpm perl-MIME-Lite-3.030-1.el7.noarch.rpm
perl-Config-Tiny-2.14-7.el7.noarch.rpm perl-MIME-Types-1.38-2.el7.noarch.rpm
perl-Email-Date-Format-1.002-15.el7.noarch.rpm perl-Parallel-ForkManager-1.18-2.el7.noarch.rpm
perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm
[root@vm1 MHA-7]# yum install * -y
[root@vm2 ~]# yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm
[root@vm3 ~]# yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm
三、节点免密
MHA中各个worker之间必须免密,master到worker也需要免密,所以要在他们之间进行免密操作。
[root@vm1 MHA-7]# ssh-keygen
[root@vm1 ~]# cd .ssh/
[root@vm1 .ssh]# ssh-copy-id vm1
四、配置主从
各个节点配置完全一样;文件除server-id外全一样。
vm1
mysql> grant all on *.* to root@'%' identified by 'Highhorse+007';
Query OK, 0 rows affected, 1 warning (0.07 sec)
mysql> flush privileges;
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
mysql> grant replication slave on *.* to repl@'172.25.64.%' identified by 'Highhorse+007';
mysql> flush privileges;
vim /etc/my.cnf
systemctl restart mysqld
vm2
[root@vm2 ~]# mysql -p
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
Query OK, 0 rows affected (0.16 sec)
mysql> set global read_only=1;
Query OK, 0 rows affected (0.00 sec)
vim /etc/my.cnf
systemctl restart mysqld
vm3
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’;
Query OK, 0 rows affected (0.48 sec)
mysql> set global read_only=1;
systemctl restart mysqld
五、配置MHA
[root@vm1 ~]# tar zxf mha4mysql-manager-0.58.tar.gz
[root@vm1 ~]# cd mha4mysql-manager-0.58/
[root@vm1 mha4mysql-manager-0.58]# cd samples/conf/
[root@vm1 conf]# ls
app1.cnf masterha_default.cnf
[root@vm1 conf]# mkdir /etc/masterha
[root@vm1 conf]# cp * /etc/masterha/
[root@vm1 conf]# cd /etc/masterha/
[root@vm1 masterha]# cat app1.cnf >>masterha_default.cnf
编写配置文件
[server default]
manager_workdir=/etc/masterha ##设置manger工作目录
manager_log=/etc/masterha/manager.log ##设置manger日志
user=root
password=Highhorse+007
ssh_user=root
master_binlog_dir=/var/lib/mysql ##mysql的数据目录。设置master保存binlog,以便MHA可找到master的日志。
remote_workdir=/tmp
#secondary_check_script= masterha_secondary_check -s remote_host1 -s remote_host2
ping_interval=1
repl_user=repl
repl_password=Highhorse+007
# master_ip_failover_script= /script/masterha/master_ip_failover ##设置手动failover时切换脚本
# shutdown_script= /script/masterha/power_manager
# report_script= /script/masterha/send_report
# master_ip_online_change_script= /script/masterha/master_ip_online_change 设置自动failover时切换脚本
[server1]
hostname=172.25.64.11
[server2]
hostname=172.25.64.12
candidate_master=1
check_repl_delay=0
[server3]
hostname=172.25.64.13
no_master=1
六、检测
[root@vm1 masterha]# masterha_check_ssh --conf=/etc/masterha/masterha_default.cnf ##检测manger到节点的免密ssh连接状态
[root@vm1 masterha]# masterha_check_repl --conf=/etc/masterha/masterha_default.cnf ##检测repl用户mysql主从复制状态