mysql高可用集群

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服务

写总结的第四十三天!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值