mysql高可用--MHA

实验环境:

servre5:MHA

server2:master

server3,server4:slave

1:server4:安装MHA所需插件

[root@server5 ~]# yum install -y mha4mysql-manager-0.56-0.el6.noarch.rpm  perl-Config-Tiny-2.12-7.1.el6.noarch.rpm perl-Email-Date-Format-1.002-5.el6.noarch.rpm perl-Log-Dispatch-2.27-1.el6.noarch.rpm perl-Mail-Sender-0.8.16-3.el6.noarch.rpm perl-Mail-Sendmail-0.79-12.el6.noarch.rpm perl-MIME-Lite-3.027-2.el6.noarch.rpm perl-MIME-Types-1.28-2.el6.noarch.rpm perl-Parallel-ForkManager-0.7.9-1.el6.noarch.rpm
[root@server5 ~]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm [email protected]:/root/
[root@server5 ~]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm [email protected]:/root/
[root@server5 ~]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm [email protected]:/root/

2:master和slave安装所需插件

server2: 

yum install mha4mysql-node-0.56-0.el6.noarch.rpm

设置master状态,连接超时,也可以不在数据库里面进行操作,可以写在配置文件里,然后在启动mysql服务


mysql> SET GLOBAL rpl_semi_sync_master_enabled=1;                                         Query OK, 0 rows affected (0.00 sec)

mysql> SET GLOBAL rpl_semi_sync_master_timeout=1000000000000;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%rpl%';
+-------------------------------------------+---------------+
| Variable_name                             | Value         |
+-------------------------------------------+---------------+
| rpl_semi_sync_master_enabled              | ON            |
| rpl_semi_sync_master_timeout              | 1000000000000 |
| rpl_semi_sync_master_trace_level          | 32            |
| rpl_semi_sync_master_wait_for_slave_count | 1             |
| rpl_semi_sync_master_wait_no_slave        | ON            |
| rpl_semi_sync_master_wait_point           | AFTER_SYNC    |
| rpl_semi_sync_slave_enabled               | OFF           |
| rpl_semi_sync_slave_trace_level           | 32            |
| rpl_stop_slave_timeout                    | 31536000      |
+-------------------------------------------+---------------+
9 rows in set (0.01 sec)

mysql> show status like'%rpl%';
+--------------------------------------------+-------+
| Variable_name                              | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients               | 1     |
| Rpl_semi_sync_master_net_avg_wait_time     | 0     |
| Rpl_semi_sync_master_net_wait_time         | 0     |
| Rpl_semi_sync_master_net_waits             | 0     |
| Rpl_semi_sync_master_no_times              | 0     |
| Rpl_semi_sync_master_no_tx                 | 0     |
| Rpl_semi_sync_master_status                | ON    |
| Rpl_semi_sync_master_timefunc_failures     | 0     |
| Rpl_semi_sync_master_tx_avg_wait_time      | 0     |
| Rpl_semi_sync_master_tx_wait_time          | 0     |
| Rpl_semi_sync_master_tx_waits              | 0     |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0     |
| Rpl_semi_sync_master_wait_sessions         | 0     |
| Rpl_semi_sync_master_yes_tx                | 0     |
| Rpl_semi_sync_slave_status                 | OFF   |
+--------------------------------------------+-------+
15 rows in set (0.00 sec)

扫描二维码关注公众号,回复: 5699604 查看本文章

server3:

yum install mha4mysql-node-0.56-0.el6.noarch.rpm

server4:

yum install mha4mysql-node-0.56-0.el6.noarch.rpm
[root@server4 ~]# mysql -pYz123456@
mysql> stop slave;
mysql> change master to master_host='172.25.36.2',master_user='repl',master_passwod='Westos+007',master_auto_position=1;
mysql> start slave;
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.25.36.2
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

三个节点保证配置文件相同,并且都安装了主从复制的插件

以一为列:
[root@server2 ~]# vim /etc/my.cnf
server-id=2
log-bin=mysql-bin
gtid_mode=ON
enforce-gtid-consistency=true

rpl_semi_sync_master_enabled=1
loose-rpl_semi_sync_slave_enabled=1

[root@server3 ~]# vim /etc/my.cnf
server-id=3
log-bin=mysql-bin
gtid_mode=ON
enforce-gtid-consistency=true

relay_log_recovery=ON :server3作为备用的master必须有这个参数,保证在升为master后可以生成被复制的文件

rpl_semi_sync_slave_enabled=1
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000000000  ##设置连接超时

[root@server4 ~]# vim /etc/my.cnf
server-id=4
log-bin=mysql-bin

gtid_mode=ON
enforce-gtid-consistency=true

rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000000000  ##设置连接超时
rpl_semi_sync_slave_enabled=1

#所有节点都需要安装
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
ysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
并且激活主从复制

server5上生成钥匙进行免密操作:

server5连接server2,server3,server4都不需要密码

[root@server5 ~]# ssh-keygen 
[root@server5 ~]# ssh-copy-id server2
[root@server5 ~]# ssh-copy-id server3
[root@server5 ~]# ssh-copy-id server4

[root@server5 ~]# ssh server2
Last login: Mon Feb 25 20:47:01 2019 from foundation36.ilt.example.com

3:server5上编辑配置文件:

创建目录:

[root@server5 ~]# mkdir /etc/masterha
[root@server5 ~]# cd /etc/masterha/
[root@server5 masterha]# vim app1.conf

[server default]
manager_workdir=/etc/masterha/
manager_log=/etc/masterha/manager.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=Yz123456@
user=root
ping_interval=1
remote_workdir=/tmp
repl_password=Yz123456@
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

[server2]
hostname=172.25.36.2
port=3306

[server3]
hostname=172.25.36.3
port=3306
candidate_master=1
check_repl_delay=0

[server4]
hostname=172.25.36.4
port=3306 
no_master=1

4:要求不仅是server(MHA)要实现和server2(master)server3,server4(slave)实现免密连接,server2,srever3,server

4之间也要是、实现相互的免密连接

[root@server5 ~]# cd .ssh/
[root@server5 .ssh]# ls
id_rsa  id_rsa.pub  known_hosts
[root@server5 .ssh]# cd
[root@server5 ~]# scp -r .ssh/ server2:
[root@server5 ~]# scp -r .ssh/ server3:
[root@server5 ~]# scp -r .ssh/ server4:

5:检查是否通过:

[root@server5 ~]# masterha_check_ssh --conf=/etc/masterha/app1.conf ##需要看到最后为successfully

Tue Feb 26 01:18:35 2019 - [info] All SSH connection tests passed successfully.

[root@server5 masterha]#  masterha_check_repl --conf=/etc/masterha/app1.conf   ##最后显示为ok

MySQL Replication Health is OK.

 

6:server2:master授权

[root@server2 ~]# mysql -p              ##master授权
mysql> grant all on *.* to root@'%' identified by 'Yz123456@';

7:server3,server4:(server3,server4都是server2的slave)

[root@server3 ~]# mysql -p    
mysql> set GLOBAL read_only=1;
[root@server4 ~]# mysql -p    
mysql> set GLOBAL read_only=1;

 

8:检测 进行主从切换实验:

一:关闭之前之前的master
1:先关闭之前的master(server2)
2:[root@server5 masterha]#  masterha_master_switch --conf=/etc/masterha/app1.conf --master_state=dead  --dead_master_host=172.25.36.2 --dead_master_port=3306 --new_master_host=172.25.36.3 --new_master_port=3306
3:在server2上:
mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)

mysql> CHANGE MASTER TO MASTER_HOST='172.25.36.3', MASTER_PORT=3306, MASTER_AUTO_POSITION=1, MASTER_USER='repl', MASTER_PASSWORD='Yz123456@';
Query OK, 0 rows affected, 2 warnings (0.02 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> show status slave\G;


二:热部署,不关闭之前之前的master
1:删除:
[root@server5 masterha]# ls
app1.conf  app1.failover.complete
[root@server5 masterha]# rm -f app1.failover.complete 
[root@server5 masterha]# ls
app1.conf
[root@server5 masterha]# masterha_master_switch --conf=/etc/masterha/app1.conf --master_state=alive --new_master_host=172.25.36.2 --new_master_port=3306 --orig_master_is_new_slave   ##此时切换到server2上去了,之前在server3上

三:自动切换master
1:[root@server5 masterha]# nohup masterha_manager --conf=/etc/masterha/app1.conf &> /dev/null &
[1] 13856
2:关闭之前之前的master
[root@server2 ~]# ps ax | grep mysql
 2696 ?        Sl     0:01 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
 2750 pts/0    S+     0:00 grep --color=auto mysql

一会之后:
[root@server5 masterha]# 
[root@server5 masterha]# 
[1]+  Done                    nohup masterha_manager --conf=/etc/masterha/app1.conf &>/dev/null


[root@server2 ~]# kill -9 2696
[root@server2 ~]# ps ax | grep mysql
 2774 ?        Sl     0:00 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
 2811 pts/0    S+     0:00 grep --color=auto mysql
[root@server2 ~]# systemctl stop mysqld

此时发现master在server3上:
打开server2,mysqld服务;
mysql>  CHANGE MASTER TO MASTER_HOST='172.25.36.3',MASTER_PORT=3306, MASTER_AUTO_POSITION=1,MASTER_USER='repl',MASTER_PASSWORD='Yz123456@';
Query OK, 0 rows affected, 2 warnings (0.02 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;

9:vip

vip

[root@server5 bin]# vim master_ip_failover 
my $vip = '172.25.36.100/24';
my $key = '1';
my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";

[root@server5 bin]# vim master_ip_online_change 
my $vip = '172.25.36.100/24';  # Virtual IP  
my $key = "1";
my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";
my $exit_code = 0;


masters上:
[root@server3 ~]# ip addr add 172.25.36.100/24 dev eth0


[root@server5 bin]# masterha_master_switch --conf=/etc/masterha/app1.conf --master_state=alive --new_master_host=172.25.36.2 --new_master_port=3306 --orig_master_is_new_slave

此时vip就跑到server2上

此时原远程连接,看到的就是server2上:
[root@foundation36 Desktop]# mysql -h 172.25.36.100 -u proxy -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 34
Server version: 5.7.24-log MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| westos             |
+--------------------+
2 rows in set (0.01 sec)

MySQL [(none)]> 
MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| westos             |
+--------------------+
2 rows in set (0.00 sec)

MySQL [(none)]> use westos;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MySQL [westos]> select * from usertb;
MySQL [westos]> show tables;
+------------------+
| Tables_in_westos |
+------------------+
| linux            |
+------------------+
1 row in set (0.00 sec)

MySQL [westos]> desc linux;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| username | varchar(10) | NO   |     | NULL    |       |
| password | varchar(20) | NO   |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

MySQL [westos]> select * from linux;  ##此时都是在server3上看到的
+----------+----------+
| username | password |
+----------+----------+
| yz       | 123      |
| yy       | 666      |
+----------+----------+

[root@server5 bin]# nohup masterha_manager --conf=/etc/masterha/app1.conf &> /dev/null &             ##将master换到server2上
[1] 14052
[root@server5 bin]# 
[1]+  Exit 1                  nohup masterha_manager --conf=/etc/masterha/app1.conf &>/dev/null

关闭server2的mysqld服务

MySQL [westos]> select * from linux;  
+----------+----------+
| username | password |
+----------+----------+
| yz       | 123      |
| yy       | 666      |
+----------+----------+


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/yinzhen_boke_0321/article/details/88119629