Master High Availability 安装配置(MHA)

MHA(Master High Availability)目前在 MySQL 高可用方面是一个相对成熟的解决方案,是一套优秀的作为 MySQL 高可用性环境下故障切换和主从提升的高可用软件。在MySQL 故障切换过程中,MHA 能做到在 0~30 秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA 能在最大程度上保证数据的一致性,以达到真正意义上的高可用。

该软件由两部分组成:MHA Manager(管理节点)和 MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个 master-slave 集群,也可以部署在一台 slave节点上。

MHA Node 运行在每台 MySQL 服务器上,MHA Manager 会定时探测集群中的 master节点,当 master 出现故障时,它可以自动将最新数据的 slave 提升为新的 master,然后将所有其他的 slave 重新指向新的 master。整个故障转移过程对应用程序完全透明。MHA 可
以与半同步复制结合起来,目前 MHA 主要支持一主多从的架构,要搭建 MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当 master,一台充当备用 master,另外一台充当从库。

MHA 切换步骤:
1.从宕机的 master 中保存二进制文件
2.检测含有最新日至更新的 slave
3.应用差异的中继日至(relay log)到其他的 slave
4.应用从 master 中保存的二进制日至事件到其他的 slave 中
5.提升一个 slave 为 master
6.使其他的 slave 指向最新的 master 进行复制。

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 的工具:
save_binary_logs 保存和复制 master 的二进制日志
apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的 slave
filter_mysqlbinlog 去除不必要的 ROLLBACK 事件(MHA 已不再使用这个工具)
purge_relay_logs 清除中继日志(不会阻塞 SQL 线程)
Mha 实验环境配置:

我们这个是在主从复制(一主两从)的基础上搭建的,mha 是可以放在一个 slave 端也可以单独运行:

实验环境配置:
Rhel6.5
iptables selinux down
172.25.40.1 server1.example.com master
172.25.40.2 server2.example.com slave candidate master
172.25.40.3 server3.example.com slave
mha

Master 端配置:

yum install perl-DBD-mysql -y
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

构建免密登陆
ssh-keygen
##生成密钥 ssh-copy-id 172.25.40.2
##给另外两台 mysql 主机分发,这样可以免密连接
ssh-copy-id 172.25.40.3
mysql 主配置文件(/etc/my.cnf)配置

[mysqlnd]
server-id=1

##数据库的唯一标示,不能重复
log-bin=mysql-bin
##二进制记录文件名为 mysql-bin
binlog-do-db=test ##同的库为 test
binlog-ignore-db=mysql ##不同步 mysql
gtid-mode=ON ##打开 gtid 模式
enforce-gtid-consistency=ON##强制使用 gtid 模式
slave-parallel-type=LOGICAL_CLOCK ##打开多线程模式
slave-parallel-workers=16 ##开启 16 个线程
relay_log_info_repository=TABLE
##以表格形式存放 relay-log 信息
relay_log_recovery=ON
rpl_semi_sync_master_enabled=ON ##设置半同步 master 和 slave 开启
rpl_semi_sync_slave_enabled=ON
重新启动两台服务器上的 mysql
/etc/init.d/mysqld restart
进入数据库下载半同步模块

mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
Query OK, 0 rows affected (0.50 sec)
mysql> set global rpl_semi_sync_master_enabled=1;
Query OK, 0 rows affected (0.00 sec)

给所创建的认证用户复制权限及 root 用户所有权限的授权

mysql> grant all privileges on *.* to 'root'@'172.168.40.%' identified
'xxxxxxxxxx';
Query OK, 0 rows affected, 1 warning (0.00 sec)by
mysql> grant replication slave on *.* to 'RedHat'@'172.168.40.%' identified by
'xxxxxxxxx';
mysql> grant all on *.* to root@'172.25.40.%' identified by 'xxxxxxxx';
Query OK, 0 rows affected, 1 warning (0.38 sec)

Slave(candidate master)端配置:

yum install perl-DBD-mysql -y
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

构建免密登陆
ssh-keygen
##生成密钥
ssh-copy-id 172.25.40.1 ##给另外两台 mysql 主机分发,这样可以免密连接
ssh-copy-id 172.25.40.3
mysql 主配置文件(/etc/my.cnf)配置

[mysqlnd]
除过 server-id 是不同的,其他参数均一样
server-id=2

重新启动两台服务器上的 mysql
/etc/init.d/mysqld restart 进入数据库下载半同步模块

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/bc7e946333cfa815f21bded2269ec9ed.html