实验环境:
主机名 | 功能 |
---|---|
server1 | 高可用节点 |
server2 | 高可用节点 |
server3 | 高可用节点 |
server4 | 管理节点 |
注意:高可用节点一般是奇数,因为如果master节点挂掉,需要竞选机制选出新的master节点。
一.高可用节点GTID异步复制
详细步骤参考之前博客:https://blog.csdn.net/chaos_oper/article/details/89817440
server1,server2,server3高可用节点,要保证三个节点数据保持一致
二.MySQL高可用的实现
server4(管理节点):
1.安装MHA和解决依赖性
yum install -y mha4mysql-manager-0.58-0.el7.centos.noarch.rpm mha4mysql-node-0.58-0.el7.centos.noarch.rpm perl-*
2.管理节点server4要对三个高可用节点server1,2,3进行免密访问
1)
ssh-keygen #生成密钥
2)添加本地域名解析
vim /etc/hosts
172.25.77.1 server1
172.25.77.2 server2
172.25.77.3 server3
172.25.77.4 server4
3)把锁分发到server1,server2,server3
ssh-copy-id server1
ssh-copy-id server2
ssh-copy-id server3
4)测试免密访问是否设置成功
ssh server1
ssh server2
ssh server3
5)设置使得server1,server2和server3之间可以免密访问
scp -r .ssh server1:
scp -r .ssh server2:
scp -r .ssh server3:
3.把mha4mysql-node-0.58-0.el7.centos.noarch.rpm安装转发给server1,2,3
scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm server1:
scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm server2:
scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm server3:
4.建立目录,修改配置文件
mkdir -p /etc/masterha
vim app1.cnf
[server default]
manager_workdir=/etc/masterha
manager_log=/var/log/masterha.log
master_binlog_dir=/etc/masterha
#master_ip_failover_script= /usr/local/bin/master_ip_failover
#master_ip_online_change_script= /usr/local/bin/master_ip_online_change
password=WESTOS+123redhat
user=root
ping_interval=1
remote_workdir=/tmp
repl_password=WESTOS+123redhat
repl_user=repl
#report_script=/usr/local/send_report
#secondary_check_script= /usr/local/bin/masterha_secondary_check -s server03 -s server02
#shutdown_script=""
ssh_user=root
[server1]
hostname=172.25.77.1
port=3306
[server2]
hostname=172.25.77.2
port=3306
candidate_master=1
check_repl_delay=0
[server3]
hostname=172.25.77.3
port=3306
no_master=1
5.检测免密连接功能是否正常
masterha_check_ssh --conf=/etc/masterha/app1.cnf
6.复制功能检测是否正常:
masterha_check_repl --conf=/etc/masterha/app1.cnf
7.检查maneger是否能开启:(用ps ax命令查看进程)
nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null >/var/log/masterha.log 2>&1 &
8.检查开启后能否关闭:(用ps ax命令查看进程)
masterha_stop --conf=/etc/masterha/app1.cnf
server1(主库):
1.数据库备份:
mysqldump --all-databases --single-transaction --triggers --routines --events --host=127.0.0.1 --port=3306 --user=root --password=WESTOS+123redhat >wsq.sql
2.安装
yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm
server2(从库):
1.set global read_only=1;
2.安装
yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm
server3(从库):
1.set global read_only=1;
2.安装
yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm
测试:
1.关掉server1的mysqld服务
2.手动切换(server4)
masterha_master_switch --master_state=dead --conf=/etc/masterha/app1.cnf --dead_master_host=172.25.77.1 --dead_master_port=3306 --new_master_host=172.25.77.2 --new_master_port=3306
3.在server3上查看到:server2被提升成master节点
show slave status\G
4.server1
1)开启mysqld服务
2)将server1作为slave加入
change master to master_host='172.25.77.2',master_user='repl',master_password='WESTOS+123redhat',master_auto_position=1;
3)在server1开启slave
start slave;
4)server2被提升成master节点
show slave status\G
三.在线迁移
手动切换是master节点down掉,手动切换到正常的节点。
在线迁移是不管master节点是否down掉,强制在线迁移到新的节点。
1.需要关闭管理器
masterha_stop --conf=/etc/masterha/app1.cnf
2.删除文件
rm -fr app1.failover.complete
3.在线迁移
masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=172.25.77.1 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000
4.从server2在线迁移到server1
四.脚本监控
1.打开管理器
nohup masterha_manager --conf=/etc/masterha/app1.cnf &> /dev/null &
2.目前主库是server1,将master节点down掉
3.
4.查看切换是否成功(server2成为新的master节点)
5.将server1重启mysqld服务,并加入从节点
systemctl start mysqld
注意:下次执行脚本前要删除app1.failover.complete
五.VIP的漂移
此时server2为master节点,server1和server3为slave节点,server4为管理节点
管理节点(server4):
1.脚本模版
2.将脚本复制到/usr/local/bin/,修改脚本,并加可执行权限
vim master_ip_failover
my $vip = '172.25.77.100/24';
my $key = '1';
my $ssh_start_vip = "/sbin/ip addr add $vip dev eth0";
my $ssh_stop_vip = "/sbin/ip addr del $vip dev eth0";
vim master_ip_online_change
my $vip = '172.25.77.100/24'; # Virtual IP
my $key = "1";
my $ssh_start_vip = "/sbin/ip addr add $vip dev eth0";
my $ssh_stop_vip = "/sbin/ip addr del $vip dev eth0";
3.将配置文件里的ip漂移打开
vim /etc/masterha/app1.cnf
master_ip_failover_script= /usr/local/bin/master_ip_failover
master_ip_online_change_script= /usr/local/bin/master_ip_online_change
测试:
1.server2(master节点)添加ip:172.25.77.100/24
2.在线迁移,使得IP漂移到server1上
masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=172.25.77.1 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000
3.查看IP从server2漂移到server1
自动监控脚本漂移VIP:
4.开启自动监控脚本前要删除文件
5.开启自动监控脚本
6.将server1(master节点down掉)
7.查看IP漂移到server2上