配置MHA数据库高可用集群
环境准备
1环境57 51 52 53
2配置管理主机
3配置数据库服务器
4测试配置
5启动管理服务
6测试高可用集群
关于MHA
MHA(Master HA)是一款开源的MySQL的高可用程序,它为MySQL主从复制架构提供了automating master failover 功能。MHA在监控到master节点故障时,会提升其中拥有最新数据的slave节点成为新的master节点,在此期间,MHA会通过与其它从节点获取额外信息来避免一致性方面的问题。MHA还提供了master节点的在线切换功能,即按需切换master/slave节点
。
相较于其它HA高可用软件,MHA的目的在于维持MySQL Replication中Master库的高可用性,其最大特点是可以修复多个Slave之间的差异日志,最终使所有Slave保持数据一致,然后从中选择一个充当新的Master,并将其它Slave指向它。
MHA
解决高可用问题
介绍下 MHA 集群?
– 由日本 DeNA 公司 youshimaton (现就职于 Facebook 公司)开发
– 是一套优秀的作为 MySQL 高可用性环境下故障切换和主从提升的高可用软件。
– 目前在 MySQL 高可用方面是一个相对成熟的解决方案 。
– 在 MySQL 故障切换过程中,MHA 能做到在 0~30 秒之内自动完成数据库的故障切换操作
– 并且在进行故障切换的过程中,MHA 能在最大程度上保证数据的一致性,以达到真正意义上的高可用。
组成
MHA Manger (管理节点) 管理数据库服务器
MHA Node (数据节点)存储数据的服务器
原理:MHA Manger 定时检测集群master节点
当Master故障,manager自动将拥有最新数据的slave提升为master
.
********************************************************&***************
.MHA 的工作过程?
MHA Manager 会定时探测集群中的 master 节点, 当 master 出现故障时,它可以自动将最新数据的 sl ave 提升为新的 master ,然后将所有其他的 slave 重新指向新的 master 。整个
故障转移过程对应用程序完全透明。
– ( 1 )从宕机崩溃的 master 保存二进制日志事件( binlog events )
– ( 2 )识别含有最新更新的 slave
– ( 3 )应用差异的中继日志( relay log )到其他的 slave
– ( 4 )应用从 master 保存的二进制日志事件( binlog events )
– ( 5 )提升一个 slave 为新的 master ;
– ( 6 )使其他的 slave 连接新的 master 进行复制;
*************************************
1装包
(1)Yum -y install perl-*
51 52 53 57
真机拷贝软件包
scp -r /linux-soft/03/mysql/mha-soft-student/ [email protected]:/root/
(2)安装共享目录里的包
Cd mha-soft-student
2配置ssh 无密码连接
(1)所有数据库服务器之间无密码登录
(2)管理57无密码登录所有服务器
配置无密码连接(包括自己远程自己也不需要密码),在node1操作。
[root@51 ~]# ssh-keygen
[root@51 ~]# for i in 52 53 57
do
ssh-copy-id 192.168.4.$i
Done
51 52 53 57同上步骤
3 配置管理主机192.168.4.57
(1)安装软件
Rpm -ivh mha4mysql-node-*
Tar -xf mha4mysql -manager -*
Cd mha4mysql-manager-0.56
Perl makefile.pl
Make && make install
验证查看ls /usr/local/bin/masterha_*
(2)编辑主配置文件
[root@mysql57 mha4mysql-manager-0.56]#
Ls samples
1 cp samples/conf/app1.cnf /etc/mha/ (主配置文件很重要,所以得备份一份)
2 Mkdir /etc/mha
Ls /etc/mha
3 Vim /etc/mha/app1.cnf
[server default]
manager_workdir=/etc/mha -工作目录
manager_log=/etc/mha/manager.log -日志文件
master_ip_failover_script=/etc/mha/master_ip_failover -故障切换脚本
Ssh_user=root -访问ssh 服务用户
Ssh_port=22
Repl_user=rpluster -主服务器同步数据授权用户
Repl_password=123456
User=root -监控用户
Password=123456
[server1]
Hostnamme=192.168.4.51
Port=3306
Candidate_master=1
[server2]
Hostnmae=1920.168.4.52
[server3]
Hostname=192.168.4.53
(3)创建故障切换脚本
[root@mysql57 mha-soft-student]# cp master_ip_failover /etc/mha/
vim +35 //etc/mha/master_ip_failover
my $vip = ‘192.168.4.100/24’; # Virtual IP
my $key = “1”;
chmod +X /etc/mha/master_ip_failover
4配置数据库服务器
(1)配置mysql 一主多从
51
Vim /etc/my.cnf
Server_id=51
Log-bin=master51
Systemctl restart mysqld
Grant replication slave repluster@”%”
Show master status;
52 \53
Change master to master_host=”192.168.4.51”
Start slave
Show slave status
(1)两台从服务器添加repluster 用户 同步数据授权用户
52 53
grant replication slave on . to repluster@"%" identified by “123456”
(2)两台从服务器启用binlog日志
Server_id=52
Log-bin=
(3)在3台数据库服务器上开启半同步复制
51 52 53
plugin-load =
“rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so”
rpl_semi_sync_master_enabled = 1
rpl_semi_sync_slave_enabled = 1
(4)三台数据库禁止删除binlog日志
Replay_log_purge=0
(5)把vip地址部署在主服务器51上
临时修改:ifconfig eth0:1 192.168.4.100/24
ifconfig eth0:1
eth0:1: flags=4163
inet 192.168.4.100 netmask 255.255.255.0 broadcast 192.168.4.255
ether 52:54:00:6e:d2:2c txqueuelen 1000 (Ethernet)
(6)在三台数据库服务器上,添加管理主机的监控用户root
set global validate_password_policy=0;
set global validate_password_length=6;
mysql> grant all on . to root@"%" identified by “123456”
show grants for root@"%";
±------------------------------------------+
| Grants for root@% |
±------------------------------------------+
| GRANT ALL PRIVILEGES ON . TO ‘root’@’%’ |
±------------------------------------------+
1 row in set (0.00 sec)
(7)三台数据库服务器安装node软件包 -和57通信
cd mha-soft-student/
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
5测试配置
(1)Ssh
Masterha_check_ssh --conf=/etc/mha/app1.cnf
(2)
Masterha_check_repl --conf=/etc/mha/app1.cnf
6测试高可用鸡群
(1)_启动MHA_Manager
masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover -忽略上次错误状态 -启动
masterha_check_status --conf=/etc/mha/app1.cnf -查看状态
Masterha_check_stop
(2)连接vip地址访问数据库服务
51添加用户
create database db9;
Create table db9.a(id int);
grant select , insert on db9.a to yaya56@"%" identified by “123456”;
客户端50验证
mysql> insert into db9.a(id) values(100);
可以看到数据库集群都有id=100内容
mysql> select * from db9.a;
±-----+
| id |
±-----+
| 100 |
±-----+
1 row in set (0.00 sec)
(3)测试高可用集群
51 stop mysqld
52 ifconfig eth0:1
53 mysql> show slave status\G;
客户端依然连接vip地址,可以访问到数据
Finally : 修复故障服务器
1启动mysql
2与主数据库一致 -完全备份mysqldump
[root@host52 ~]# mysqldump -uroot -p123qqq…A --master-data db9 > db9.sql //在主服务器host52 做完全备份
scp db9.sql [email protected]:/root
host51 ~]# mysql -uroot -p123qqq…A db9 < /root/db9.sql//host51 主机使用备份
Grep master 52 /root/db9.sql
3指定主服务器
Chanto master_host=“192.168.4.52”,master_user=“repluser”,master_password=“123qqq…A”,master_log_file=“master52.000001”,master_log_pos=89
Start slave
Show master
4启动slave
5查看服务状态
Show
配置管理服务器
1主配置文件
[server1]
Hostname=4.51
Candidate_master=1
2测试集群环境
Check_Ssh
Check_Repl
测试
Check_status
masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf
–ignore_last_failover //启动管理服务
mgm57 ~]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:15806) is running(0:PING_OK), master:192.168.4.52 //服务运行,监视服务器52