Linux版本:Centos7.4
Mysql版本:Mysql-5.7.17
MHA
一、环境准备。IP地址段为172.17.2.0/24,5台Mysql服务器,规划为master-51为主库,master-52为半同步主库,master-53为半同步主库,slave-54为从库,slave-55为从库。mgm-56为MHA管理节点。
二、阶段要求结果,实现1主2从结构,51为主库,52,53为从库,实现异步同步。
1、安装MySQL,修改数据库root密码为123456(为了实验,添加密码策略和长度的参数)
systemctl restart mysqld #启动MySQL,初始化MySQL
systemctl stop mysqld
vim /etc/my.cnf
systemctl restart mysqld
grep password /var/log/mysqld.log ##获取MySQL的初始密码
mysql -uroot -p"初始密码" ##登录mysql
修改mysql的root用户,密码为123456 52,53从库的mysql,同样操作。
2、为主库51,从库52,53添加server_id,并且主库开启binlog日志。
systemctl restart mysqld
3、主库进入MySQL。
reset master;
grant replication slave,replication client on *.* to slave"%" identified by "111111"; #添加同步用户
为了模拟生产环境库不停用的情况。使用在线热备工具备份主库
innobackup --slave-info --user='root' --password='123456' --no-timestamp /backup
rsync -aSH --delete /backup/ 172.17.2.52:/backup/ -e 'ssh' ##同步备份文件到从库上去
查询备份文件里面的binlog日志文件名,偏移量
从库52:
cd /var/lib/mysql
rm -rf * ##删除从库的MySQL根目录
innobackup --apply-log /backup ##合并备份文件的日志
innobackup --copy-back /backup ##恢复备份文件
chown -R mysql.mysql /var/lib/mysql ##设置MySQL根目录的属主和属组
systemctl restart mysqld
mysql -uroot -p123456
reset slave;
change master to maste_user='slave',master_password='111111',master_host='172.17.2.51',master_log_file='master51.000001',master_log_pos=463; ##设置主从信息。这里请注意。有时候innobackup备份的偏移量,是不准确的。
start slave; ##开启从同步
show slave status \G ##查看从信息
53从库同步。步骤一样。为了模拟生产环境,备份文件要从新实时备份再传给53
查询一主二从的状态:
mysql>show full processlist;
状态正常
三、阶段要求,新增1台服务器master55,ip是55,作为51主库的半同步服务器。
1、备份51主库,然后同步给master55,恢复备份
innobackupex --shalve-info --user='root' --password='123456' --no-timestamp /backup
rsync -aSH --delete /backup/ 172.17.2.55:/backup/
55机器:
cd /var/lib/mysql
rm -rf *
innobackupex --apply-log /backup/
innobackupex --copy-back /backup/
chown -R mysql.mysql /var/lib/mysql
master55的mysql配置文件开启binlog日志
systemctl restart mysqld
2、51主库,55备用主库,安装半同步插件的master插件和slave插件。
mysql>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
mysql>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
show variables like "%rpl%"; ##查看半同步变量的状态
启动变量。51主库和master55都要操作。
为了重启数据库后,参数继续生效,我们可以把配置写进配置文件。
3、master55备用主库查看innobackup备份文件,获取binlog文件名和偏移量,指定主从配置
master51,查看主从同步的状态
到目前为主,1主,2从(异步同步),1备主(半同步)已经完成。
接下来做MHA高可用的搭建。
四、阶段要求:为MHA集群所有的机器,准备无密码ssh登录。为MHA的提供MySQL账户,包括rpluser@“%”,root@“%”。新增一台服务器,作为mha的管理节点。
因为换了一下地方办公,IP有所更换。所以每台服务器的IP都换了。
1、配置正确的hosts文件,同步到mha的node节点和manager节点
同步给其他主机
15IP的是mha主机,没有安装rsync。再次同步过去就好。
2、设置所有主机ssh免询问yes或者no的选择。
vim /etc/ssh/ssh_config
所有主机都要处理
2、创建秘钥,然后分发给其他主机。实现ssh全部互联互通
分发秘钥
3、所有节点安装perl依赖包,时间有限,用最笨的方法
yum -y install perl-*
4、所有节点安装mha的node节点包。manager节点,安装mha的manager包
新建mha_manager的工作目录
mkdir /etc/mha_manager,把模板配置文件复制过去
5、修改mha的主配置文件。参考网路的配置。
6、测试ssh的连通性
masterha_check_ssh --conf=/etc/mha_manager/app1.cnf
不能出现任何error和warining。如果出现,按照对应的提示解决。
测试repl的状态,如果出现任何error和warining,全部需要解决。
masterha_check_repl --conf=/etc/mha_manager/app1.cnf
例如我出现这些提示,那么我就要逐个解决
这里要注意,打开自动切换的脚本,修改正确的VIP。然后创建VIP
ifconfig eth0:1 192.168.1.10/24 ##我这里是用10,作为VIP
7、全部解决完以后,我们开始启动mha
/usr/local/bin/masterha_manager --conf=/etc/mha_manager/app1.cnf --ignore_last_failover
这个是完全路径启动脚本,指定配置文件,忽略最后的错误。
8、重新开一个终端。查询mha的状态
masterha_chech_status --conf=/etc/mha_manager/app1.cnf
9、验证mha是否工作。目前查询到是mmaster作为主库。那么我们停止mmaster的mysql。看看会是怎么样的情况
查看mha情况
登录丛库看看,主库是谁
我登录的是slave2.很明显,从库切换到bmaster了。
那么。我们再试试,mmaster启动mysql。是否会自动变成slave。
很明显,不会。
怎么办。按照我现在的情况。很简单。去bmaster,备份,然后mmaster,恢复。然后设置mmaster成为备份主库,即可。
好了。MHA高可用到此结束。