MariaDB基于MHA高可用部署(Binlog模式)
1.优势
相较于其它HA软件,MHA的目的在于维持MySQL Replication中Master库的高可用性,其最大特点是可以修复多个Slave之间的差异日志,最终使所有Slave保持数据一致,然后从中选择一个充当新的Master,并将其它Slave指向它,工作流程主要如下:
a.当master出现故障时,通过对比slave之间读取master binlog的位置,选取最接近的slave做为latest slave;
b.其它slave通过与latest slave对比生成差异中继日志;
c.在latest slave上应用从master保存的binlog,同时将latest slave提升为master;
d.最后在其它slave上应用相应的差异中继日志并开始从新的master开始复制.
在MHA实现Master故障切换过程中,MHA Node会试图访问故障的master(通过SSH),如果可以访问(不是硬件故障,比如InnoDB数据文件损坏等),会保存二进制文件,以最大程度保证数据不丢失.MHA和半同步复制一起使用会大大降低数据丢失的危险.
MHA软件的架构:由两部分组成,Manager工具包和Node工具包,
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信息
Node工具包(这些工具通常由MHA Manager的脚本触发,无需人为操作)主要包括以下几个工具:
save_binary_logs 保存和复制master的二进制日志 apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的slave purge_relay_logs 清除中继日志(不会阻塞SQL线程)
2.基于半同步复制部署一主两从
10.0.0.20 MHA-Manager
10.0.0.21 MariaDB-21 master
10.0.0.22 MariaDB-22 候选者,当master宕机,可以成为新的master
10.0.0.23 MariaDB-23 salve
在MHA-Manager上生成一对密钥,将这对密钥和know_hosts文件拷贝给其余主机,不需要所有主机都生成密钥对相互拷贝
ssh-keygen ssh-copy-id 10.0.0.20 ssh-copy-id 10.0.0.21 ssh-copy-id 10.0.0.22 ssh-copy-id 10.0.0.23 scp -r id_rsa known_hosts root@10.0.0.21:/root/.ssh/ scp -r id_rsa known_hosts root@10.0.0.22:/root/.ssh/ scp -r id_rsa known_hosts root@10.0.0.23:/root/.ssh/
先搭建一主两从,在21、22、23上安装MariaDB
cat /etc/yum.repos.d/mariadb.repo [mariadb] name=MariaDB baseurl=http://mirrors.ustc.edu.cn/mariadb/yum/10.2/centos7-amd64/ gpgkey=http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB gpgcheck=1 yum -y install MariaDB-server MariaDB-client # 安装包在最下面第一篇博客中会有百度云链接 yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm systemctl start mariadb # 除了将密码改为mariadb123456,其余步骤都按Y /usr/bin/mysql_secure_installation # 在Master和Slave首次启动时,安装插件,开启半同步复制 # mariadb10.3无需安装插件可以直接命令开启 mysql -uroot -pmariadb123456 # 在MariaDB-21、MariaDB-22上均安装这两个模块,因为指不定哪天MariaDB-22就上位了 install plugin rpl_semi_sync_master soname 'semisync_master.so'; install plugin rpl_semi_sync_slave soname 'semisync_slave.so'; set global rpl_semi_sync_master_enabled = 1; set global rpl_semi_sync_slave_enabled = 1; grant replication slave on *.* to 'repluser'@'10.0.0.%' identified by 'repluser123456'; flush privileges; # 在MariaDB-23上仅开启开启从同步模块 # 不用给它授权用户,因为我们会在MHA中设置,它不会有机会成为master install plugin rpl_semi_sync_slave soname 'semisync_slave.so'; set global rpl_semi_sync_slave_enabled = 1;
修改三台MariaDB的配置文件
# MariaDB-21配置文件 cat /etc/my.cnf.d/server.cnf [mysqld] skip_name_resolve = ON innodb_file_per_table = ON server-id = 21 log-bin = master-bin relay_log_purge = 0 rpl_semi_sync_master_enabled = 1 rpl_semi_sync_master_timeout = 3000 rpl_semi_sync_slave_enabled = 1 # MariaDB-22配置文件 cat /etc/my.cnf.d/server.cnf [mysqld] skip_name_resolve = ON innodb_file_per_table = ON server-id = 22 log-bin = master-bin relay_log_purge = 0 rpl_semi_sync_master_enabled = 1 rpl_semi_sync_master_timeout = 3000 rpl_semi_sync_slave_enabled = 1 # MariaDB-23配置文件 cat /etc/my.cnf.d/server.cnf [mysqld] skip_name_resolve = ON innodb_file_per_table = ON server-id = 23 log-bin = master-bin relay_log_purge = 0 rpl_semi_sync_slave_enabled = 1
重启三台mariadb,加载配置文件
systemctl restart mariadb.service # 查看10.0.0.21上的Position位置 show master status\G File: master-bin.000001 Position: 657 # 在10.0.0.22、23上配置主从同步 change master to master_host='10.0.0.21',master_user='repluser', master_password='repluser123456',master_log_file='master-bin.000001',master_log_pos=657; start slave; # 在10.0.0.21上授权用户,mhauser用于MHA管理各节点,两台Slave会同步这两个用户 grant all on *.* to 'mhauser'@'10.0.0.%' identified by 'mhauser123456'; flush privileges;
3.安装mha-manager
yum -y install mha4mysql-manager-0.56-0.el6.noarch.rpm \ mha4mysql-node-0.56-0.el6.noarch.rpm mkdir /etc/mha cat /etc/mha/app1.conf [server default] user=mhauser password=mhauser123456 ssh_user=root master_binlog_dir=/var/lib/mysql remote_workdir=/data/log/masterha manager_workdir=/usr/local/mha manager_log=/usr/local/mha/manager.log ping_interval=1 repl_user=repluser repl_password=repluser123456 [server1] hostname=10.0.0.21 candidate_master=1 [server2] hostname=10.0.0.22 candidate_master=1 [server3] hostname=10.0.0.23 no_master=1 # ssh检测,授权检测,启动MHA chmod +x /etc/mha/app1.conf mkdir /usr/local/mha masterha_check_ssh --conf=/etc/mha/app1.conf masterha_check_repl --conf=/etc/mha/app1.conf masterha_manager --conf=/etc/mha/app1.conf 2>&1 & masterha_check_status --conf=/etc/mha/app1.conf
4.故障切换
在10.0.0.21上关闭mariadb
mysqladmin -uroot -p "shutdown"
可以看到10.0.0.22成为新的master,并且23将master指向了22,当21重新上线后,将master指向22,21变成slave.
如果想让21重新变成master,先将master指向22
change master to master_host='10.0.0.22',master_user='repluser', master_password='repluser123456',master_log_file='master-bin.000001',master_log_pos=657; start slave; # 再在mha-manager手动执行切换命令 masterha_master_switch --conf=/etc/mha/app1.conf --master_state=alive \ --new_master_host=10.0.0.21 --new_master_port=3306 --orig_master_is_new_slave
下面这张图是10.0.0.21重新上线后,手动切换其为master的截图
MHA配置VIP,利用GITD等都没有做,但是下面几篇参考博客都写得不错
有些MHA的注意事项,附带网盘链接:https://blog.51cto.com/11010461/2130309
他的个人博客写的还行:https://blogteching.com/
长跑者1号,搭建这个集群主要参考的就是他的这篇:https://blog.51cto.com/11233559/2110751
可行性很高,他的每篇博客都写的很多,譬如这篇,搭建了10种MySQL架构,有功夫了需要看看他的K8S
MHA配置VIP可以结合长跑者1号和散尽浮华的一起看:https://www.cnblogs.com/kevingrace/p/5662839.html
兔样兔森破的初识MariaDB10篇:https://blog.51cto.com/arkling/category3.html
运维那些事--MySQL基于MHA高可用部署篇(GTID模式),详细演示了MHA故障切换原理,
包括自动切换和手动切换:https://www.ywnds.com/?p=8129
漠效的MHA与其它MySQL:https://blog.csdn.net/gx_1_11_real/article/category/7735883
MariaDB的GTID介绍:https://www.tuicool.com/articles/raaMfeV