MHA集群主要包括两个部分:
1、MHA Manager:管理节点
2、MHA Node:数据节点
client通过一个VIP来访问数据库服务器的master节点,当master节点发生故障时,MHA Manager会从slave1和slave2中选取出一台和master数据最相近的的节点作为master节点,并且将vip分给这个最近的master,这样client还是通过这个vip就可以访问数据库服务器,从而保证了mysql集群的高可用性。
一、环境准备
1、装包:(在50,51,52,53都进行这个操作)
yum -y install per-* #mha是由perl语言编写,因此需要相关依赖
cd mha-soft/ #perl其他不在光盘中的包
yum –y install perl-*
2、配置免密登陆:(50,51,52,53都要做相同操作,确保可以互相无密登录)
ssh-keygen -f /root/.ssh/id_rsa -N "" #生成秘钥
for ip in 50 51 52 53
do
ssh-copy-id 192.168.4.$ip #将秘钥发送到其他主机
done
3、配置一主多从:
51开启binlog日志,配置server_id,创建授权用户repluser,密码为123456
52,53配置server_id,指定master主机
二、配置管理节点MHA Manager:(50主机)
1、安装软件包:
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm #安装mha-node相关包
tar -zxvf mha4mysql-manager-0.56.tar.gz #解压mha-manager软件包,准备源码安装
cd mha4mysql-manager-0.56
perl Makefile.PL #相当于C语言源码安装的./configure
make && make install #编译安装
2、修改主配置文件:(sample/conf/app1.cnf是配置文件的末班)
mkdir /etc/mha #创建mha工作目录
cp mha4mysql-manager-0.56/samples/conf/app1.cnf /etc/mha/ #将配置文件拷贝到工作目录下
vim /etc/mha/app1.cnf
[server default] # MHA Manager配置
manager_workdir=/etc/mha #工作目录
manager_log=/etc/mha/manager.log #日志文件
master_ip_failover_script=/etc/mha/master_ip_failover #故障切换脚本,用于vip的浮动
ssh_user=root #访问ssh服务用户
ssh_port=22 #ssh服务端口
repl_user=repluser #主服务器数据同步授权用户
repl_password=123456 #数据同步授权用户的密码
user=root #监控用户
password=123456 #监控用户的密码
[server1] #指定第1台数据库服务器
hostname=192.168.4.51 #服务器ip地址
port=3306 #服务端口
candidate_master=1 #竞选主服务器。当master故障时,竞选担任master
[server2] #指定第2台数据库服务器
hostname=192.168.4.52
port=3306
candidate_master=1
[server3] #指定第3台数据库服务器
hostname=192.168.4.53
port=3306
candidate_master=1
3、创建故障切换脚本:(/etc/mha/master_ip_failover,使用perl编写的)
cp mha4mysql-manager-0.56/samples/scripts/master_ip_failover /etc/mha/ #复制模板
chmod +x /etc/mha/master_ip_failover #给perl脚本赋予执行权限
vim /etc/mha/master_ip_failover
# 三十五行左右手动添加:
my $vip = '192.168.4.100/24'; #vip
my $key = "1"; #定义变量$key
my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip"; #部署vip地址命令
my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down"; #释放vip地址命令
# 就是执行了ifconfig eth0:1 192.168.4.100/24 为网卡eth0:1配置ip
# ifconfig eth0:1 down 关闭网卡eth0:1
# 网卡名根据要看具体情况,我主机的网卡是em1,虚拟机是eth0
三、配置数据节点MHA Node:(51,52,53)
1、仅为master配置vip:(51)
ifconfig eth0:1 192.168.4.100
ifconfig eth0:1 #查看
2、用户授权:(51,52,53)
grant all on *.* to root@"%" identified by "123456"; #mha manager中配置的监控用户
grant replication slave on *.* to repluser@"%" identified by "123456"; #授权用户
#由于配置了主从同步,因此只需要在master上执行操作
3、修改数据复制模式为半同步模式,开启binlog日志:(51,52,53)
# 当master坏掉之后,slave是要变成master的
# 每一台主机都可能成为master因此要为每一台主机配置binlog日志
# 数据复制模式改为半同步是为了保证数据的一致性和安全性
vim /etc/my.cnf
[mysqld]
server_id=51 #指定serverid
log_bin #开启binlog
plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" #加载半同步模块
rpl_semi_sync_master_enabled=1 #启用master半同步
rpl_semi_sync_slave_enabled=1 #启用slave半同步
relay_log_purge=0 #禁止自动删除中继日志文件
四、测试配置:
# 测试ssh配置
masterha_check_ssh --conf=/etc/mha/app1.cnf
# 测试主从同步,ssh无错误才可以
masterha_check_repl --conf=/etc/mha/app1.cnf
# 开启服务
masterha_manager --conf=/etc/mha/app1.cnf \
--remove_dead_master_conf --ignore_last_failover
# --remove_dead_master_conf表示当master坏掉之后删除它在app1.cnf中的配置
# --ignore_last_failover表示忽略xx.health文件,只要有故障就调用故障切换脚本
# 查看状态
masterha_check_status --conf=/etc/mha/app1.cnf
# 停止服务
masterha_stop --conf=/etc/mha/app1.cnf
五、集群测试:
1、在client上使用vip(192.168.4.100)连接master:
mysql -h 192.168.4.100 -uroot -p123456 #root用作测试,实际开发中注意重新授权
# 创建库、表,插入数据后在slave可以看到,则表示成功
2、模拟master故障:
停止master的mysql服务:systemctl stop mysqld
关闭数据库服务器192.168.4.51
# 当mha manager管理节点发现master无法连接的时候,就会暂停服务,从而触发故障切换脚本
# 此时4.51在app1.cnf中的配置就会被删除
# 客户端仍然可以使用192.168.4.100访问数据库
六、主机恢复:
当master故障之后,就会变为一台独立的数据库服务器
我们需要让这台数据库服务器重新加入集群,作为slave
1、让slave同步当前master的数据
2、为slave指定当前的master主机
3、检查这台slave的数据复制模式是否为半同步
4、把slave的信息添加到app1.cnf配置文件中
5、重启mha manager服务
写总结的第四十三天!!!