一.MHA集群概述
1.MHA简介
—由日本DeNA公司的youshimaton开发
—是一套优秀的实现mysql高可用的解决方案
----数据库的自动故障切换操作能做到在0~30秒之内
-----MHA能确保在故障切换过程中保证数据的一致性,以达到真正意义上的高可用
2.MHA组成
MHA Manager(管理节点)
----可以单独部署在一台独立的机器上,管理
—也可以部署在一台slave节点上
MHA Node (数据节点)
----运行在每台Mysql服务器上
(1)从宕机崩溃的master保存二进制日志事件
(2)识别含有最新更新的slave
(3)应用差异的中继日志(reay log)到其他的slave
(4)应用从master保存的二进制日志事件
(5)提升一个slave为新的master
(6)使其他的slave连接的master进行复制
三.部署MHA集群
部署mysqld集群 使用”MHA软件+mysqld主从同步“ 实现
一.什么是集群?多台服务器提供相同的服务(网站 数据库)
二.集群分类?LB HA HPC
三.为什么要使用集群?
四.配置集群?安装软件提供服务实现(LVS haproxy nginx keepalived
五.部署mysql高可用
主 备
51 52
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
一.环境准备:
[51-56]#yum -y install perl-*
56 可以无密码ssh 51-55
51-55 主机可以彼此互相无密码ssh
Mha-soft-student 拷贝给 51-56
51-55 恢复为独立的数据库服务器
1.1 修改域名解析文件,56 可以无密码ssh 51-55
[root@56 ~]# vim /etc/hosts //域名解析
192.168.4.51 51
192.168.4.52 52
192.168.4.53 53
192.168.4.54 54
192.168.4.55 55
192.168.4.56 56
[root@56 ~]# for i in 51 52 53 54 55 562.MHA组成
> do
> scp /etc/hosts 192.168.4.$i:/etc/
> don
[root@56 ~]# ssh-keygen -f /root/.ssh/id_rsa -N '' //生成密钥
[root@56 ~]# for i in 51 52 53 54 55 56 //配置无密码连接(56操做)
>do
> ssh-copy-id 192.168.4.$i
> done
1.2.(51-55) 主机可以彼此互相无密码ssh(51-55操作)
]# ssh-keygen -f /root/.ssh/id_rsa -N ''
]# for i in 51 52 53 54 55
>do
> ssh-copy-id 192.168.4.$i
>done
1.3 把Mha-soft-student 拷贝给 51-56
[root@room1pc16 桌面]# for i in 51 52 53 54 55 56 //Mha-soft-student 拷贝给 51-56
> do
> scp -r '/root/桌面/mha-soft-student' 192.168.4.$i:/root
> done
1.在所有主机上安装Perl依赖包(51-56操作)
[root@56 ~]# for i in 51 52 53 54 55 56 //给51-56安装per*
>do
> yum -y install perl-* //安装光盘自带的
>done
[root@56 ~]# rpm -qa perl* //查看已安装软件包
[root@56 ~]# rpm -qa perl* | wc
218 218 7831
]# cd /root/mha-soft-student/ //安装mha里面的perl-*包
]#yum -y install perl-*
2.在所有数据库服务器上安装mha-node包(51-55操作)
[root@55 mha-soft-student]# for i in 55 54 53 52 51
>do
>rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
>done
[root@55 mha-soft-student]# rpm -q mha4mysql-node | wc
3.在管理主机上安装mha_node 和 mha-manager包(56操作)
]# cd /root/mha-soft-student/
]#rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
[root@56 mha-soft-student]# tar -xf mha4mysql-manager-0.56.tar.gz
[root@56 mha-soft-student]# ls
[root@56 mha-soft-student]# cd mha4mysql-manager-0.56
[root@56 mha4mysql-manager-0.56]# perl Makefile.PL
[root@56 mha4mysql-manager-0.56]# make && make install //编译安装
[root@56 mha4mysql-manager-0.56]# masterha_
#####################################################################
二. 配置MHA集群
2.1 配置mysql主从同步(一主多从)
2.1.1 配置主服务器51 (主库)
]# vim /etc/my.cnf
[mysqld]
server_id=51 //指定server_id
log_bin=master51 //启用日志文件
#binlog-format="mixed"
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
]# systemctl restart mysqld //重启服务
添加主从同步授权用户
] # mysql -uroot -p123456
mysql> set global relay_log_purge=off; //不自动删除中继日志文件
mysql> grant replication slave on *.* to plj@"%" identified by "123qqq...A";
2.1.2 配置从服务器52(备用主库)
mysql> set global relay_log_purge=off; //不自动删除本机的中继日志文件
]# vim /etc/my.cnf //修改配置文件
[mysqld]
server_id=52 //指定server_id值
log_bin=master52
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
relay_log_purge=off //不自动删除本机的中继日志文件
]# systemctl restart mysqld
]# mysql -uroot -p123456(密码)
mysql> change master to //指定数据库服务器配置文件
-> master_host="192.168.4.51", //授权主库地址
-> master_user="plj", //授权用户
-> master_password="123qqq...A", //授权密码
-> master_log_file="master51.000001", //主库日志文件
-> master_log_pos=436; //偏移量
mysql> start slave;
mysql> show slave status\G; //查看进程信息
2.1.3 配置从服务器53(备用主库)
]# vim /etc/my.cnf
[mysqld]
server_id=53
log_bin=master53
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
relay_log_purge=off //不自动删除本机的中继日志文件
]# systemctl restart mysqld
]# mysql -uoot -p密码
mysql> change master to
-> master_host="192.168.4.51",
-> master_user="plj",
-> master_password="123qqq...A",
-> master_log_file="master51.000001",
-> master_log_pos=436;
mysql> start slave; //开启进程
mysql> show slave status\G; //查看进程信息
2.1.4 配置从服务器54 (纯从库)
2.1.5 配置从服务器55 (纯从库)
配置从库(54和55操作)
]# vim /etc/my.cnf
[mysqld]
server_id=54
plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rrpl-semi-sync-slave-enabled = 1
relay_log_purge=off
]# systemctl restart mysqld2.4 在主机56上运行管理服务,并查看服务状态
]# masterha_check_repl --conf=/etc/mha_manager/app1.cnf
]# masterha_manager --conf=/etc/mha_manager/app1.cnf
]# mysql -uroot -p密码
mysql> change master to
-> master_host="192.168.4.51",
-> master_user="plj",
-> master_log_file="master51.000001",
-> master_password="123qqq...A",
-> master_log_pos=436;
mysql> start slave;
mysql>show slave status\G;
2.2配置管理主机192.168.4.56
2.2.1 编写配置文件
]# mkdir /etc/mha_manager
]#cd mha4mysql-manager-0.5
]# ls
]# cp samples/conf/app1.cnf /etc/mha_manager/
]# vim /etc/mha_manager/app1.cnf
[server default]
manager_workdir=/etc/mha_manager
manager_workdir=/etc/mha_manager
manager_log=/etc/mha_manager/manager.log
master_ip_failover_script=/etc/mha_manager/master_ip_failover //自动failover的切换脚本
ssh_user=root
ssh_port=22
repl_user=plj //主从同步用户名
repl_password=123qqq...A //主从同步密码
user=root //数据库用户名
password=123qqq...A //密码
[server1]
hostname=192.168.4.51 //设置候选master
candidate_master=1
[server2] //设置候选master
hostname=192.168.4.52
candidate_master=1
[server3] //设置候选master
hostname=192.168.4.53
candidate_master=1
[server4] //不竞选master
hostname=192.168.4.54
no_master=1
[server5] //不竞选master
hostname=192.168.4.55
no_master=1
3.3 启动管理服务
使用masterha_manager 工具
---- --remove_dead_master_conf //删除宕机主库配置
— --ignore_last_failover //忽略xxx.health文件
查看状态:masterha_check_status
停止服务:masterha_stop
3.4测试mysql服务高可用
##############################################################################
2.2.2 创建故障切换脚本
]# cd /root/mha-soft-student/
]# cp master_ip_failover /etc/mha_manager/
]# vim +35 /etc/mha_manager/master_ip_failover
my $vip = '192.168.4.100/24'; # Virtual IP
]# chmod +x /etc/mha_manager/master_ip_failover
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
2.2.3 把vip地址部署在当前的主库51上
[root@51 ~]# ifconfig eth0:1 192.168.4.100/24
[root@51 ~]# ifconfig eth0:1
eth0:1: flags=4163 mtu 1500
inet 192.168.4.100 netmask 255.255.255.0 broadcast 192.168.4.255
ether 52:54:00:95:ba:d9 txqueuelen 1000 (Ethernet)
2.2.4 用户授权(根据配置文件)
2.2.4.1 给从服务器同步数据的连接用户plj(51/52/53)
[root@51 ~]# mysql -uroot -p123456 -e ‘show grants for plj@"%"’
52mysql> grant replication slave on *.* to plj@"%" identified by "123qqq...A";
53mysql> grant replication slave on *.* to plj@"%" identified by "123qqq...A";
2.2.4.2 管理机56监视数据库服务器状态的连接用户root(51-55)
mysql>grant all on *.* to root@"%" identified by "123qqq...A";
三.测试配置
3.1.测试ssh密钥对认证登录
在管理节点上做ssh检查
–masterha_check_ssh --conf=管理节点主配置文件
]#masterha_check_ssh --conf=/etc/mha_manager/app1.cnf
3.2测试mysql主从同步
在管理节点查看集群状态
–masterha_check_repl --conf=管理节点主配置文件
]# masterha_check_repl --conf=/etc/mha_manager/app1.cnf
3.3 启动管理服务(在56管理机操作)
使用masterha_manager 工具 ---- --remove_dead_master_conf //删除宕机主库配置
— --ignore_last_failover //忽略xxx.health文件
查看状态:masterha_check_status 停止服务:masterha_stop
]# masterha_manager --conf=/etc/mha_manager/app1.cnf \ //启动服务
–remove_dead_master_conf --ignore_last_failover
]# masterha_check_status --conf=/etc/mha_manager/app1.cnf //查看状态
3.4测试mysql服务高可用(51主库和50客户机上操作)
51mysql> create database db9; //创建一个库
mysql> create table db9.t1(id int);
mysql> grant select,insert on db9.* to yaya99@"%" identified by "123...A"; //用户授权
50 ~]# mysql -h192.168.4.100 -uroot -p123...A //客户端用授权用户访问数据
mysql> select * from db9.t1; //查看db9.t1表
mysql> insert into db9.t1 values(111); //添加数据1
mysql> insert into db9.t1 values(222); //添加数据2
mysql> insert into db9.t1 values(333); //添加数据3
mysql> select * from db9.t1; //查看添加的数据
主从同步,可以看到相同的数据
[root@51 ~]# mysql -uroot -p123456 -e "select * from db9.t1"
当主库宕掉,备用主库继承VIP和主库仍然可以访问数据
56~]#masterha_manager --conf=/etc/mha_manager/app1.cnf \ //管理机要保持监控
--remove_dead_master_conf --ignore_last_failove
另开一个终端查看状态
56 ~]# masterha_check_status --conf=/etc/mha_manager/app1.cnf
[root@51 ~]# systemctl stop mysqld //51主库宕掉了
查看是谁继承了主库
52~]# ifconfig eth0:1
53~]# ifconfig eth0:1
思考:
1 当前的52 也坏掉的时候 53 会不会 成为主库?
2 如何把坏掉的51 和 52 服务器 再添加到集群里?
2.1 启动51 和 52 主机的数据库服务
2.2 把51 和 52 主机 配置为的当前主服务器的从服务器
2.3 把主机51 和 52 添加app1.cnf文件里
]#vim /etc/mha_manager/app1.cnf
[server1]
candidate_master=1
hostname=192.168.4.51
[server2]
candidate_master=1
hostname=192.168.4.52
:wq
2.4 在主机56上运行管理服务,并查看服务状态
]# masterha_check_repl --conf=/etc/mha_manager/app1.cnf
]# masterha_manager --conf=/etc/mha_manager/app1.cnf
遇到的问题:
ERROR 1794 (HY000): Slave is not configured or failed to initialize properly. You must at least set -- server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.
解决方法;
mysql> drop table slave_master_info;
mysql> drop table slave_relay_log_info;
mysql> drop table slave_worker_info;
mysql> drop table innodb_index_stats;
mysql> drop table innodb_table_stats;
mysql> system systemctl restart mysqld