MySQL高可用部署MHA
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.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 [email protected]‘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 statusG #查看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 statusG #查看IO线程
Slave_IO_Running: Yes #这两项全部为yes,成功;否则失败.
Slave_SQL_Running: Yes
测试
- 假设主服务器宕机
-
MHA程序将自动将从服务器A切换为主服务器,并停下MHA程序
- 后续启用集群管理
- 备注:本文只简单记录了mha的环境部署过程.
以上是关于MySQL高可用部署MHA的主要内容,如果未能解决你的问题,请参考以下文章