MySQL_MHA
AB复制
主主复制 master-master auto_increment 10 1 10 2
ABB 一主多从
MHA MySQL high available mysql高可用
ABB 0~30
日本人,Perl语言,
组成:manager节点 node节点
工作过程: MHA manager节点定时(按照一定的时间间隔)去检测复制集群中的每一个mha node(ABB),发现Adown,选出数据跟老A最接近的一台B来作为新A。去到老A,拷贝binlog到新A当中并应用binlog(保证新A与老A数据的一致性),然后将剩余的slave重新change master to,将slave的主切换为新A。
设置注意:
复制集群中的每个节点都有可能成为A,都得开启binlog
ssh秘钥认证,因为当Adown后,mha要拷贝binglog到所有的节点上,而且所有的节点都有可能成为A,故每个节点都要彼此秘钥认证。
failover:Adown,选出新A,并且尽可能保证数据一致,设置salve重新执行新A
缺点:
保证数据一致性并不总是可行的。硬件raid卡、磁盘损坏,还是会有数据丢失的情况!5.5版本支持半同步,事物提交成功的前提是master已经将binlog交给了复制进群中的一个slave。
实验:
ip规划
manager 19.240 x86_64系统
master 19.241
slave 19.242
slave 19.243
步骤规划:
1、ssh密钥认证
2、搭建ABB复制
3、部署mha_manager和mha_node即配置
安装软件包
编辑配置文件
4、failover测试
关闭master,MHA切换master为242,243切换master为242
1、ssh秘钥认证
每台机器上都生成root用户的秘钥 ssk-keygen 一路回车
将公钥彼此共享(互相推送):
#!/bin/bash
for i in 0 1 2 3
do
ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.19.24$i
done
将该脚本推送到每台机器上:
[root@MHA_240 opt]# for i in 1 2 3; do scp ssh.sh 192.168.19.24$i:/opt/ ;done
2、ABB 一主多从架构 纯洁版(初始化)
安装软件包:mysql-server mysql perl-* //每台机器上都要安装
恢复纯洁(每台机器)
编辑配置文件:
241:
server_id=1
log_bin=binlog
log_bin_index=binlog.index
242:
server_id=2
log_bin=binlog
log_bin_index=binlog.index
243:
server_id=3
log_bin=binlog
log_bin_index=binlog.index
说明:必须都开启binlog日志,复制组中的每一台机器都有可能成为master
server_id 选择新A的依据,越小越优先
241 创建用户并看一下master的状态
mysql> grant replication slave on *.* to 'sky'@'%' identified by '123'; //复制专用用户
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on *.* to 'root'@'%' identified by '123'; //给mha_manager用,因为其在failover时需要登陆上来,并且拷贝binlog到所有的slave上去。
mysql> show master status\G
*************************** 1. row ***************************
File: binlog.000003 //主要看它,直到当前master的binlog
Position: 369
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
242 配置slave
mysql> change master to master_host='192.168.19.241', master_port=3306, master_user='sky', master_password='123', master_log_file='binlog.000003', master_log_pos=4;
Query OK, 0 rows affected (0.01 sec)
mysql> slave start;
Query OK, 0 rows affected (0.01 sec)
243 配置slave(同上)
mysql> change master to master_host='192.168.19.241', master_port=3306, master_user='sky', master_password='123', master_log_file='binlog.000003', master_log_pos=4;
Query OK, 0 rows affected (0.01 sec)
mysql> slave start;
Query OK, 0 rows affected (0.01 sec)
至此ABB搭建完成,建议测试一下看一看能不能同步
3、部署mha_manager和mha_node
mha_soft mha_2015-01-14 两个文件夹
mha_manager:
cd /usr/src/mha_soft
[root@MHA_240 mha_soft]# rpm -ivh mha4mysql-node-0.54-0.el6.noarch.rpm
[root@MHA_240 mha_soft]# cd dependent/
[root@MHA_240 dependent]# yum install -y localinstall ./*
[root@MHA_240 mha_soft]# rpm -ivh mha4mysql-manager-0.55-0.el6.noarch.rpm
将node包推给复制进群中的所有节点:
[root@MHA_240 mha_soft]# for i in 1 2 3 ;do scp mha4mysql-node-0.54-0.el6.noarch.rpm 192.168.19.24$i:/usr/src ;done
mha_node: 安装node
[root@MHA_240 mha_soft]# rpm -ivh mha4mysql-node-0.54-0.el6.noarch.rpm
mha_manager:
拷贝相关文件
[root@MHA_240 mha]# cp -pr /usr/src/mha_2015-01-14/mha/ /etc/
编辑配置文件:
[server default]
#mysql admin account and password
user=root
password=123
#mha workdir and worklog
manager_workdir=/etc/mha
manager_log=/etc/mha/manager.log
#mysql A/B account and pw
repl_user=sky
repl_password=123
#check_mha_node time
ping_interval=1
#ssh account
ssh_user=root
[server1]
hostname=192.168.19.241
ssh_port=22
master_binlog_dir=/var/lib/mysql
candidate_master=1
[server2]
hostname=192.168.19.242
ssh_port=22
master_binlog_dir=/var/lib/mysql
candidate_master=1
[server3]
hostname=192.168.19.243
ssh_port=22
master_binlog_dir=/var/lib/mysql
candidate_master=1
测试ssh:
[root@MHA_240 mha]# masterha_check_ssh --conf=/etc/mha/mha.cnf
测试replication:
[root@MHA_240 mha]# masterha_check_repl --conf=/etc/mha/mha.cnf
开启mha:
开启的方式存放在/etc/mha/mha_start文件中
[root@MHA_240 mha]# nohup masterha_manager --conf=/etc/mha/mha.cnf > /tmp/mha_manager.log &1 &
4、failover测试
把Adown掉,看有没有选举出一个新A,并且有没有将slave重新指向新A