Fork me on GitHub

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

 

posted @ 2019-05-26 21:58  法外狂徒  阅读(547)  评论(0编辑  收藏  举报