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.noarch
- mysql5.5
MHA 服务器配置
- #MHA 服务器上安装 MHA 包 (注意安装依赖 epel 源)
- yum install mha4mysql-manager-0.56-0.el6.noarch
- # 创建并修改 MHA 配置文件
- mkdir /etc/mha/ -p
- vim /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/binlogs
- chown 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/binlogs
- chown 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/binlogs
- chown 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 的环境部署过程.
来源: http://www.bubuko.com/infodetail-2647117.html