MySQL高可用部署MHA

MHA简介

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

环境准备

服务器(安装MHA):172.20.29.201主服务器:172.20.29.202从服务器A:172.20.29.203从服务器B:172.20.29.204

1. 同步时间

#定义计划任务crontab -e */5 * * * * /usr/sbin/ntpdate 172.20.0.1 &> /dev/null #每5分钟自动同步时间至服务器

2. 关闭防火墙,SELINUX

iptables -vnL #查看防火墙状态systemctl stop firewall #关闭防火墙getenforce #查看SELinux状态setenforce 0 #关闭SElinux

3. 配置SSH公钥(基于key验证)

ssh-keygen -t rsa -P ‘‘ -f "/root/.ssh/id_rsa" #生成私钥ssh-copy-id 172.20.29.201 #复制公钥至本机#四台主机共用一把钥匙 scp -pr /root/.ssh 172.20.29.202:/root/ scp -pr /root/.ssh 172.20.29.203:/root/scp -pr /root/.ssh 172.20.29.204:/root/

4. 所有服务器上安装MHA-node包

yum install mha4mysql-node-0.56-0.el6.noarchmysql5.5

MHA服务器配置

#MHA服务器上安装MHA包(注意安装依赖epel源)yum install mha4mysql-manager-0.56-0.el6.noarch#创建并修改MHA配置文件mkdir /etc/mha/ -pvim /etc/mha/app1.cnf [server default] user=MHAuser #连接每一台数据库的用户 password=centos #连接每一台数据库的密码 manager_workdir=/data/mastermha/app1/ manager_log=/data/mastermha/app1/manager.log remote_workdir=/data/mastermha/app1/ master_binlog_dir=/data/binlogs/ #指定管理的二进制文件目录 ssh_user=root #使用什么账号来连接每台主机 repl_user=MHAuser #ssh协议连接的用户 repl_password=centos #ssh协议连接的密码 ping_interval=1 #多长时间去探测每个节点 [server1] hostname=172.20.29.202 #主服务器地址 candidate_master=1 #设置为主服务器 [server2] hostname=172.20.29.203 #从服务器地址 candidate_master=1 #设置主服务器宕机立刻升级为主服务器 [server3] hostname=172.20.29.204 #从服务器地址#检查每一台主机ssh协议是否生效masterha_check_ssh --conf=/etc/mha/app1.cnf #检查每一台主机复制是否正常masterha_check_repl --conf=/etc/mha/app1.cnf#开启MHA集群(注意此处前台执行,长期前台执行,建议在主机上运行)masterha_manager --conf=/etc/mha/app1.cnf

主服务器配置.

#创建文件夹用于存放二进制日志文件(注意文件夹权限)mkdir /data/binlogschown mysql.mysql /data/binlogs/chmod 770 /data/binlogs/#修改mysql配置文件vim /etc/my.cnf server_id= 11 #主服务器ID标识 log_bin=/data/binlogs/master-bin #配置文件里指定二进制日志文件存放目录 binlog_format=row #以行模式复制数据 skip_name_resolve=1 #做名字解析 rpl_semi_sync_master_enabled=ON #开启半同步插件#授权从服务器登录本机数据库grant replication slave,replication client on *.* to ‘jian‘@‘172.20.29.%‘ identified by ‘centos‘;#授权所有权限给MHA管理所有服务器grant all on *.* to MHAuser@‘172.20.29.%‘ identified by ‘centos‘;#刷新系统权限列表flush privileges;

从服务器A配置

#创建文件夹用于存放二进制日志文件(注意文件夹权限)mkdir /data/binlogschown mysql.mysql /data/binlogs/chmod 770 /data/binlogs/#修改mysql配置文件vim /etc/my.cnf server-id = 12 #从服务器ID标识log-bin=/data/binlogs/master-bin #配置文件里指定二进制日志文件存放目录read_only=on #配置从服务器只读relay_log_purge=0 #中继日志不清除skip_name_resolve=1 #做名字解析rpl_semi_sync_slave_enabled=ON; #开启半同步插件#从库建立与主库的连接change master to MASTER_HOST=‘172.20.29.202‘,MASTER_USER =‘jian‘,MASTER_PASSWORD =‘centos‘,MASTER_LOG_FILE =‘master-bin.000001‘,MASTER_LOG_POS =245;start slave; #开启IO线程show slave status\G #查看IO线程 Slave_IO_Running: Yes #这两项全部为yes,成功;否则失败. Slave_SQL_Running: Yes

从服务器B配置

#创建文件夹用于存放二进制日志文件(注意文件夹权限)mkdir /data/binlogschown mysql.mysql /data/binlogs/chmod 770 /data/binlogs/#修改mysql配置文件vim /etc/my.cnf server-id = 13 #从服务器ID标识 log-bin=/data/binlogs/master-bin #配置文件里指定二进制日志文件存放目录 read_only=on #配置从服务器只读 relay_log_purge=0 #中继日志不清除 skip_name_resolve=1 #做名字解析#建立连接之前建议清理线程缓存 stop slave; reset slave;#从库建立与主库的连接change master to MASTER_HOST=‘172.20.29.202‘,MASTER_USER =‘jian‘,MASTER_PASSWORD =‘centos‘,MASTER_LOG_FILE =‘master-bin.000001‘,MASTER_LOG_POS =245;start slave; #开启IO线程show slave status\G #查看IO线程 Slave_IO_Running: Yes #这两项全部为yes,成功;否则失败. Slave_SQL_Running: Yes

测试

  • 假设主服务器宕机
  • MHA程序将自动将从服务器A切换为主服务器,并停下MHA程序

    • 后续启用集群管理
  • 备注:本文只简单记录了mha的环境部署过程.

相关文章