Mysql MHA 环境搭建

    技术2025-01-08  17

    Mysql MHA 环境搭建

    基础架构环境准备MHA 工作原理 Mysql主从环境搭建Master 主机配置slave 1从机配置slave 2 从机配置(备选主)主从设置 MHA 搭建(坑很多)各服务之间配置ssh互认(免登陆认证)MHA安装配置MHAmha检查故障演示

    基础架构

    MHA(Master High Availability) 有 MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。

    在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不总是可行的。

    环境准备

    服务器名称ip承担角色系统MHA manager192.168.52.132mha-monitorcentos 7主机服务192.168.52.33mastercentos 7从机服务1192.168.52.135slave-1centos 7从机服务(备选主)2192.168.52.135slave-2centos 7

    MHA 工作原理

    MHA软件由两部分组成,Manager工具包和Node工具包,manager就是我们架构中说的monitor,node相当于监控节点,后续每台mysql机器上都需要装。

    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 filter_mysqlbinlog 去除不必要的ROLLBACK事件(MHA已不再使用这个工具) purge_relay_logs 清除中继日志(不会阻塞SQL线程)

    Mysql主从环境搭建

    搭建MHA 高可用结构之前,我们先搭建好主从环境,这里采用的是一主两从的方式,这里主要说下配置。

    Master 主机配置

    # 开启binlog log-bin=mysql-bin # 配置主机id server-id=1 # 每次操作刷入磁盘 sync-binlog=1 # relay_log配置 relay_log=mysql-relay-bin log_slave_updates=1 relay_log_purge=0 # gtid配置 #开启gtid gtid_mode=on enforce_gtid_consistency=1 # 忽略同步的库 binlog-ignore-db=performance_schema binlog-ignore-db=infomation_schema binlog-ignore-db=sys binlog-ignore-db=mysql # 开启半同步 plugin_load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" loose_rpl_semi_sync_master_enabled=1 loose_rpl_semi_sync_slave_enabled=1 loose_rpl_semi_sync_master_timeout=1000

    slave 1从机配置

    #配置主机id server-id=2 # 中继日志name relay_log=mysql-relay-bin log_slave_updates=1 relay_log_purge=0 #配置只读权限 read_only=1 #gtid gtid_mode=on enforce_gtid_consistency=1 # 忽略同步的库 binlog-ignore-db=performance_schema binlog-ignore-db=infomation_schema binlog-ignore-db=sys binlog-ignore-db=mysql plugin_load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" loose_rpl_semi_sync_master_enabled=1 loose_rpl_semi_sync_slave_enabled=1 loose_rpl_semi_sync_master_timeout=1000

    slave 2 从机配置(备选主)

    # 开启binlog log-bin=mysql-bin # 配置主机id server-id=3 #中继日志name relay_log=mysql-relay-bin log_slave_updates=1 relay_log_purge=0 #配置只读权限 read_only=1 # #gtid gtid_mode=on enforce_gtid_consistency=1 # 忽略同步的库 binlog-ignore-db=performance_schema binlog-ignore-db=infomation_schema binlog-ignore-db=sys binlog-ignore-db=mysql plugin_load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" loose_rpl_semi_sync_master_enabled=1 loose_rpl_semi_sync_slave_enabled=1 loose_rpl_semi_sync_master_timeout=1000

    这里需要注意的是第二太从机需要开启binlog,因为后续会做主备切换的备选主机

    主从设置

    主机授权复制权限 // 授权远程访问 GRANT ALL ON *.* TO root@'%' IDENTIFIED BY 'root' WITH GRANT OPTION; // 授权操作*(主库授权指定从库) grant replication slave on *.* to root@'%' identified by 'root' with grant option; //刷新权限 flush privileges;

    这里注意备选主机也需要设备,授权复制权限,在主备切换后使用

    查询主节点binlog日志及位点 show master status;

    设置 slave1、slave2 复制主机; change master to master_host='192.168.52.133',master_port=3306,master_user='root',master_password='root',master_log_file='mysql-bin.000011',master_log_pos=412; 开启从机复制、状态查看 //开启 start slave; //状态查看 show slave status\G;

    主从搭建完成、验证主从是否成功,这里不做赘述。

    MHA 搭建(坑很多)

    首先关闭个服务器防火墙;

    //关闭防火墙 systemctl stop firewalld //启动关闭防火墙 systemctl disable firewalld.service

    各服务之间配置ssh互认(免登陆认证)

    生成秘钥对 ssh-keygen [root@localhost mha]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:IYJeNU9gGt2jLUibmZf8Vovr2MZciP7hRqzAzz6NtIY root@localhost.localdomain The key's randomart image is: +---[RSA 2048]----+ | ..=o. | | ..=.+o | | ..+B.+o. | | . .*.*.... | | .. . =S+ . | | o o B o | | B X.o | | E X+B. | | oo*= | +----[SHA256]-----+

    使用ssh-copy-id将秘钥拷贝到各个服务器上,包括当前(自己)服务器,每个服务器都要要拷贝三次 我这里拿mah服务举例 ssh-copy-id -i 上一步秘钥生成的位置 -p ssh登录的端口 usernname@ip地址,下面例子:

    ssh-copy-id -i /root/.ssh/id_rsa.pub -p 22 root@192.168.52.133 //master ssh-copy-id -i /root/.ssh/id_rsa.pub -p 22 root@192.168.52.135 //slave1 ssh-copy-id -i /root/.ssh/id_rsa.pub -p 22 root@192.168.52.136 //slave2

    剩下三台服务器做相同操作

    MHA安装

    wget https://raw.githubusercontent.com/linyue515/mysql-master-ha/master/mha4mysql-node-0.58-0.el7.noarch.rpm wget https://raw.githubusercontent.com/linyue515/mysql-master-ha/master/mha4mysql-manager-0.58-0.el7.noarch.rpm node 安装 // 安装依赖 yum install -y perl-DBD-MySQL ncftp perl-DBI.x86 // 安装node 分别在master slave management安装 rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm manager 软件包安装 manager就是我们的monitor监控,只需要在manager服务上安装,注意安装之前也需要下载依赖 //安装依赖的perl模块 yum install perl-DBD-MySQL -y yum install perl-Config-Tiny -y yum install epel-release -y yum install perl-Log-Dispatch -y yum install perl-Parallel-ForkManager -y yum install perl-Time-HiRes -y yum install perl-CPAN -y

    配置MHA

    在master 创建mha management访问权限 // 授权 grant all privileges on *.* to 'mha'@'%' identified by 'mharoot'; // 刷新权限 flush privileges; 在集群所有服务器中都先建立一个mha工作目录(配置文件需要用) mkdir -p /opt/mysql_mha/

    每个node节点都需要创建

    主节点(monitor)创建配置文件目录 /opt/mhaconfig/mysql_mha.cnf 配置文件 [server default] #mha用户 user=mha password=mharoot #工作目录 manager_workdir=/opt/mysql_mha manager_log=/opt/mysql_mha/manager.log remote_workdir=/opt/mysql_mha #SSH ssh_user=root #复制用户 repl_user=root repl_password=root ping_interval=1 #binlog地址 master_binlog_dir=/var/lib/mysql #secondary_check_script=/usr/bin/masterha_secondary_check -s 192.168.52.133 -s 192.168.52.135 [server1] hostname=192.168.52.133 candidate_master=1 [server2] hostname=192.168.52.135 no_master=1 [server3] hostname=192.168.52.136 candidate_master=1

    mha检查

    配置完成就可以检查mha配置的环境

    ssh 检测mha ssh 免密配置配置是否正确 masterha_check_ssh --conf=/opt/mhaconfig/mysql_mha.cnf

    检测主从复制环境 masterha_check_repl --conf=/opt/mhaconfig/mysql_mha.cnf

    后台启动 nohup masterha_manager -conf=/opt/mhaconfig/mysql_mha.cnf &> /opt/mysql_mha/log/manager.log & 查看状态 masterha_check_status --conf=/opt/mhaconfig/mysql_mha.cnf

    如果正常启动,这步是没问题的,提示信息 Ping:OK

    故障演示

    未完。。。。。

    Processed: 0.009, SQL: 9