mysql MHA高可用

创建一主两从集群

master配置:

清理数据

[root@server1 ~]# cd /var/lib/mysql

[root@server1 mysql]# rm -fr *

修改配置

[root@server1 mysql]# vim /etc/my.cnf

server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
log_slave_updates=ON
log_bin=binlog

启动服务

[root@server1 mysql]# systemctl start mysqld

配置master

[root@server1 mysql]# mysql -pWestos+1

mysql> grant replication slave on *.* to repl@'%' identified by 'Westos+1';

slave配置:

[root@server2 ~]# cd /var/lib/mysql

[root@server2 mysql]# rm -fr *

修改配置

[root@server2 mysql]# vim /etc/my.cnf

server_id=2
gtid_mode=ON
enforce_gtid_consistency=ON
log_slave_updates=ON
log_bin=binlog

启动服务

[root@server2 mysql]# systemctl start mysqld

[root@server2 mysql]# mysql -pWestos+1

mysql>  alter user root@localhost identified by 'westos';

mysql> change master to master_host='192.168.52.120', master_user='repl', master_password='Westos+1', master_auto_position=1;

mysql> start slave;

mysql> show slave status\G;

server3节点的配置以此类推

server_id=3
gtid_mode=ON
enforce_gtid_consistency=ON
log_slave_updates=ON
log_bin=binlog

mysql> show slave status\G;

测试

master:

mysql> create database test;

mysql> use test

mysql> create table user (

    -> username varchar(25) not null,

    -> password varchar(50) not null);

mysql> insert into test.user values('user6','666');

slave:

mysql> select * from test.user;

MHA部署

server4上安装管理端软件

[root@server4 ~]# cd MHA-7/

[root@server4 MHA-7]# yum install -y *.rpm

管理端配置ssh免密

[root@server4 MHA-7]# ssh-keygen

[root@server4 MHA-7]# ssh-copy-id server4

把密钥复制到各节点

[root@server4 ~]# scp -r .ssh/ server1:

[root@server4 ~]# scp -r .ssh/ server2:

[root@server4 ~]# scp -r .ssh/ server3:

复制客户端软件

[root@server4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm server1:

[root@server4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm server2:

[root@server4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm server3:

server1、server2、server3上安装客户端软件

[root@server1 ~]# yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm

MHA配置

[root@server4 ~]# mkdir /etc/masterha

[root@server4 ~]# vim /etc/masterha/app1.cnf

[server default]
user=root
password=Westos+1
ssh_user=root
repl_user=repl
repl_password=Westos+1
master_binlog_dir=/var/lib/mysql
remote_workdir=/tmp
secondary_check_script= masterha_secondary_check -s 192.168.52.121 -s 192.168.52.122
ping_interval=3
# master_ip_failover_script= /script/masterha/master_ip_failover
# shutdown_script= /script/masterha/power_manager
# report_script= /script/masterha/send_report
# master_ip_online_change_script= /script/masterha/master_ip_online_change
manager_workdir=/etc/masterha/app1
manager_log=/etc/masterha/app1/manager.log

[server1]
hostname=192.168.52.120
candidate_master=1
check_repl_delay=0

[server2]
hostname=192.168.52.121
candidate_master=1
check_repl_delay=0

[server3]
hostname=192.168.52.122
no_master=1

在master上设置mysql 管理员权限,slave节点会自动同步

mysql> grant all on *.* to root@'%' identified by 'Westos+1';

检测各节点ssh免密连接

[root@server4 ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf

检测主从复制集群状态

[root@server4 ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf

故障切换

手动切换(master正常)

[root@server4 ~]# masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=192.168.52.121 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000

手动切换(master故障)

手动停止master节点上的msql服务

[root@server2 ~]# systemctl stop mysqld

[root@server4 ~]# masterha_master_switch --master_state=dead --conf=/etc/masterha/app1.cnf --dead_master_host=192.168.52.121 --dead_master_port=3306 --new_master_host=192.168.52.120 --new_master_port=3306 --ignore_last_failover

故障节点需要手动修复,重新加入主从集群

[root@server2 ~]# systemctl start mysqld

[root@server2 ~]# mysql -pWestos+1

mysql> change master to master_host='192.168.52.120', master_user='repl', master_password='Westos+1', master_auto_position=1;

mysql> show slave status\G;

自动切换

故障切换后会生成lock文件,需要手动删除

[root@server4 app1]# rm -f app1.failover.complete

启动manger程序,并打入后台运行,完成切换任务后进程会自动退出

[root@server4 masterha]# masterha_manager --conf=/etc/masterha/app1.cnf &

在进行自动切换之前,必须保证主从集群正常,一主两从

加入故障切换脚本

[root@server4 ~]# vim  /etc/masterha/app1.cnf

[server default]
user=root
password=Westos+1
ssh_user=root
repl_user=repl
repl_password=Westos+1
master_binlog_dir=/var/lib/mysql
remote_workdir=/tmp
secondary_check_script= masterha_secondary_check -s 192.168.52.121 -s 192.168.52.122
ping_interval=3
master_ip_failover_script= /usr/local/bin/master_ip_failover
# shutdown_script= /script/masterha/power_manager
# report_script= /script/masterha/send_report
master_ip_online_change_script= /usr/local/bin/master_ip_online_change
manager_workdir=/etc/masterha/app1
manager_log=/etc/masterha/app1/manager.log

[server1]
hostname=192.168.52.120
candidate_master=1
check_repl_delay=0

[server2]
hostname=192.168.52.121
candidate_master=1
check_repl_delay=0

[server3]
hostname=192.168.52.122
no_master=1

需要有可执行权限

[root@server4 ~]# ll /usr/local/bin/

按需修改vip和网卡名称

[root@server4 bin]# vim master_ip_failover

[root@server4 bin]# vim master_ip_online_change

my $vip = '192.168.52.100/24';
my $ssh_start_vip = "/sbin/ip addr add $vip dev ens33";
my $ssh_stop_vip = "/sbin/ip addr del $vip dev ens33";
my $vip = '192.168.52.100/24';
my $ssh_start_vip = "/sbin/ip addr add $vip dev ens33";
my $ssh_stop_vip = "/sbin/ip addr del $vip dev ens33";
my $exit_code = 0;

关闭master以后,会自动发起故障切换,mha管理器在完成切换后自动退出程序。

[root@server1 ~]# systemctl stop mysqld.service

查看故障切换日志

[root@server4 app1]# ls

app1.failover.complete  manager.log

[root@server4 app1]# cat manager.log

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值