mysql MHA高可用配置:

MHA运行过程:

(1)从宕机崩溃的master保存二进制日志事件(binlog events);
(2)识别含有最新更新的slave;
(3)应用差异的中继日志(relay log)到其他的slave;
(4)应用从master保存的二进制日志事件(binlog events);
(5)提升一个slave为新的master;
(6)使其他的slave连接新的master进行复制;

环境:rhel6.5

Server2: 172.25.5.2 manager
Server3:172.25.5.3 master
Server4:172.25.5.4 slave
Server5:172.25.5.5 Candicate slave

其中master对外提供写服务,备选master(实际的slave,主机名server4)提供读服务,另一个slave也提供相关的读服务,一旦master宕机,将会把备选master提升为新的master,slave指向新的master。

搭建过程:

server3,server4,server5:(安装mysql并配置)
这里写图片描述
然后配置/etc/my.cnf

server-id=3     #server?,ip就是?log-bin = mysql-bin     #server5最后一个可以不写这一项,写上也没事。
gtid_mode=ON
enforce-gtid-consistency=true

然后初始化数据库,
mysql_secure_installation的默认root密码在日志文件里:
查看命令: grep password /var/log/mysqld.log

/etc/init.dmysqld start
mysql_secure_installation

server3:master节点:

grant replication slave on *.* to repl@'172.25.5.%' identified by 'sH+101010';

grant all on *.* to root@'172.25.5.%' identified by 'sH+101010';
这个后面有错误,要授权,我直接把授权在这写上了。

server4,server5 配置:

change master to master_host='172.25.5.3', master_user='repl', master_password='sH+101010', master_auto_position=1

start slave;
show slave status\G;

两个yes就OK。
这里写图片描述

MHA集群:
所有server安装:(安装以来包)

[root@server2 MHA]# cd perl/
[root@server2 perl]# ll
total 340
-rwxr-xr-x 1 root root 23416 Aug  9 10:13 perl-Config-Tiny-2.12-7.1.el6.noarch.rpm
-rwxr-xr-x 1 root root 16308 Aug  9 10:13 perl-Email-Date-Format-1.002-5.el6.noarch.rpm
-rwxr-xr-x 1 root root 72328 Aug  9 10:13 perl-Log-Dispatch-2.27-1.el6.noarch.rpm
-rwxr-xr-x 1 root root 55224 Aug  9 10:13 perl-Mail-Sender-0.8.16-3.el6.noarch.rpm
-rwxr-xr-x 1 root root 28448 Aug  9 10:13 perl-Mail-Sendmail-0.79-12.el6.noarch.rpm
-rwxr-xr-x 1 root root 83864 Aug  9 10:13 perl-MIME-Lite-3.027-2.el6.noarch.rpm
-rwxr-xr-x 1 root root 32976 Aug  9 10:13 perl-MIME-Types-1.28-2.el6.noarch.rpm
-rwxr-xr-x 1 root root 21740 Aug  9 10:13 perl-Parallel-ForkManager-0.7.9-1.el6.noarch.rpm
[root@server2 perl]# yum install * -y

所有server安装node包,

[root@server2 MHA]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm

manager server 安装manager包:

[root@server2 MHA]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm
[root@server2 MHA]# yum install mha4mysql-manager-0.56-0.el6.noarch.rpm

包就安装完了:

配置:


ssh免密配置:

哇,ssh大家都会,略。。。(任意节点链接任意节点都是免密的)


MHA manager配置:

  • 新建/etc/masterha/ 目录
  • vim /etc/masterha/app.cnf
[server default]
manager_workdir=/etc/masterha ##设置manager的工作目录
manager_log=/etc/masterha/mha.log ##设置manager的日志存放位置
master_binlog_dir=/var/lib/mysql
#master_ip_failover_script=/etc/masterha/master_ip_failover 先注释这个。
master_ip_online_change_script=/etc/masterha/master_ip_online_change
password=sH+101010
user=root
ping_interval=1
remote_workdir=/tmp
repl_password=sH+101010
repl_user=repl
ssh_user=root

[server1]
hostname=172.25.5.3
port=3306
[server2]
hostname=172.25.5.4
port=3306
candidate_master=1
check_repl_delay=0

[server3]
hostname=172.25.5.5
port=3306
#no_master=1

mysql配置:

slave节点配置

server4和server5配置relay log的清除方式和slave配置只读,但不要写入配置文件,因为master机down掉后可能随时会升级成master,

mysql> show global variables like 're%';
+---------------------------+----------------------------------------+
| Variable_name             | Value                                  |
+---------------------------+----------------------------------------+
| read_buffer_size          | 131072                                 |
| read_only                 | OFF                                    |
| read_rnd_buffer_size      | 262144                                 |
| relay_log                 |                                        |
| relay_log_basename        | /var/lib/mysql/server4-relay-bin       |
| relay_log_index           | /var/lib/mysql/server4-relay-bin.index |
| relay_log_info_file       | relay-log.info                         |
| relay_log_info_repository | FILE                                   |
| relay_log_purge           | ON                                     |
| relay_log_recovery        | OFF                                    |
| relay_log_space_limit     | 0                                      |
| report_host               |                                        |
| report_password           |                                        |
| report_port               | 3306                                   |
| report_user               |                                        |
| require_secure_transport  | OFF                                    |
+---------------------------+----------------------------------------+
16 rows in set (0.01 sec)

mysql> set global relay_log_purge=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global read_only=on;
Query OK, 0 rows affected (0.32 sec)

mysql> show global variables like 're%';
+---------------------------+----------------------------------------+
| Variable_name             | Value                                  |
+---------------------------+----------------------------------------+
| read_buffer_size          | 131072                                 |
| read_only                 | ON                                     |
| read_rnd_buffer_size      | 262144                                 |
| relay_log                 |                                        |
| relay_log_basename        | /var/lib/mysql/server4-relay-bin       |
| relay_log_index           | /var/lib/mysql/server4-relay-bin.index |
| relay_log_info_file       | relay-log.info                         |
| relay_log_info_repository | FILE                                   |
| relay_log_purge           | OFF                                    |
| relay_log_recovery        | OFF                                    |
| relay_log_space_limit     | 0                                      |
| report_host               |                                        |
| report_password           |                                        |
| report_port               | 3306                                   |
| report_user               |                                        |
| require_secure_transport  | OFF                                    |
+---------------------------+----------------------------------------+
16 rows in set (0.00 sec)

mysql> 

检测ssh配置

[root@server2 masterha]# masterha_check_ssh --conf=/etc/masterha/app.cnf
Thu Aug  9 14:06:27 2018 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Thu Aug  9 14:06:27 2018 - [info] Reading application default configuration from /etc/masterha/app.cnf..
Thu Aug  9 14:06:27 2018 - [info] Reading server configuration from /etc/masterha/app.cnf..
Thu Aug  9 14:06:27 2018 - [info] Starting SSH connection tests..
Thu Aug  9 14:06:28 2018 - [debug] 
Thu Aug  9 14:06:27 2018 - [debug]  Connecting via SSH from root@172.25.5.3(172.25.5.3:22) to root@172.25.5.4(172.25.5.4:22)..
Thu Aug  9 14:06:28 2018 - [debug]   ok.
Thu Aug  9 14:06:28 2018 - [debug]  Connecting via SSH from root@172.25.5.3(172.25.5.3:22) to root@172.25.5.5(172.25.5.5:22)..
Thu Aug  9 14:06:28 2018 - [debug]   ok.
Thu Aug  9 14:06:28 2018 - [debug] 
Thu Aug  9 14:06:28 2018 - [debug]  Connecting via SSH from root@172.25.5.4(172.25.5.4:22) to root@172.25.5.3(172.25.5.3:22)..
Thu Aug  9 14:06:28 2018 - [debug]   ok.
Thu Aug  9 14:06:28 2018 - [debug]  Connecting via SSH from root@172.25.5.4(172.25.5.4:22) to root@172.25.5.5(172.25.5.5:22)..
Thu Aug  9 14:06:28 2018 - [debug]   ok.
Thu Aug  9 14:06:29 2018 - [debug] 
Thu Aug  9 14:06:28 2018 - [debug]  Connecting via SSH from root@172.25.5.5(172.25.5.5:22) to root@172.25.5.3(172.25.5.3:22)..
Thu Aug  9 14:06:29 2018 - [debug]   ok.
Thu Aug  9 14:06:29 2018 - [debug]  Connecting via SSH from root@172.25.5.5(172.25.5.5:22) to root@172.25.5.4(172.25.5.4:22)..
Thu Aug  9 14:06:29 2018 - [debug]   ok.
Thu Aug  9 14:06:29 2018 - [info] All SSH connection tests passed successfully.

检测repl环境

这里可能出现授权的错误,修改方法就是刚上面的root用户授权,再贴一个。

grant all on *.* to root@'172.25.5.%' identified by 'sH+101010'; #好像备用节点也要执行的。
[root@server2 masterha]# masterha_check_repl --conf=/etc/masterha/app.cnf 
Thu Aug  9 16:54:58 2018 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Thu Aug  9 16:54:58 2018 - [info] Reading application default configuration from /etc/masterha/app.cnf..
Thu Aug  9 16:54:58 2018 - [info] Reading server configuration from /etc/masterha/app.cnf..
Thu Aug  9 16:54:58 2018 - [info] MHA::MasterMonitor version 0.56.
Thu Aug  9 16:54:59 2018 - [info] GTID failover mode = 1
Thu Aug  9 16:54:59 2018 - [info] Dead Servers:
Thu Aug  9 16:54:59 2018 - [info] Alive Servers:
Thu Aug  9 16:54:59 2018 - [info]   172.25.5.3(172.25.5.3:3306)
Thu Aug  9 16:54:59 2018 - [info]   172.25.5.4(172.25.5.4:3306)
Thu Aug  9 16:54:59 2018 - [info]   172.25.5.5(172.25.5.5:3306)
Thu Aug  9 16:54:59 2018 - [info] Alive Slaves:
Thu Aug  9 16:54:59 2018 - [info]   172.25.5.4(172.25.5.4:3306)  Version=5.7.17-log (oldest major version between slaves) log-bin:enabled
Thu Aug  9 16:54:59 2018 - [info]     GTID ON
Thu Aug  9 16:54:59 2018 - [info]     Replicating from 172.25.5.3(172.25.5.3:3306)
Thu Aug  9 16:54:59 2018 - [info]     Primary candidate for the new Master (candidate_master is set)
Thu Aug  9 16:54:59 2018 - [info]   172.25.5.5(172.25.5.5:3306)  Version=5.7.17 (oldest major version between slaves) log-bin:disabled
Thu Aug  9 16:54:59 2018 - [info]     GTID ON
Thu Aug  9 16:54:59 2018 - [info]     Replicating from 172.25.5.3(172.25.5.3:3306)
Thu Aug  9 16:54:59 2018 - [info] Current Alive Master: 172.25.5.3(172.25.5.3:3306)
Thu Aug  9 16:54:59 2018 - [info] Checking slave configurations..
Thu Aug  9 16:54:59 2018 - [warning]  log-bin is not set on slave 172.25.5.5(172.25.5.5:3306). This host cannot be a master.
Thu Aug  9 16:54:59 2018 - [info] Checking replication filtering settings..
Thu Aug  9 16:54:59 2018 - [info]  binlog_do_db= , binlog_ignore_db= 
Thu Aug  9 16:54:59 2018 - [info]  Replication filtering check ok.
Thu Aug  9 16:54:59 2018 - [info] GTID (with auto-pos) is supported. Skipping all SSH and Node package checking.
Thu Aug  9 16:54:59 2018 - [info] Checking SSH publickey authentication settings on the current master..
Thu Aug  9 16:54:59 2018 - [info] HealthCheck: SSH to 172.25.5.3 is reachable.
Thu Aug  9 16:54:59 2018 - [info] 
172.25.5.3(172.25.5.3:3306) (current master)
 +--172.25.5.4(172.25.5.4:3306)
 +--172.25.5.5(172.25.5.5:3306)

Thu Aug  9 16:54:59 2018 - [info] Checking replication health on 172.25.5.4..
Thu Aug  9 16:54:59 2018 - [info]  ok.
Thu Aug  9 16:54:59 2018 - [info] Checking replication health on 172.25.5.5..
Thu Aug  9 16:54:59 2018 - [info]  ok.
Thu Aug  9 16:54:59 2018 - [warning] master_ip_failover_script is not defined.
Thu Aug  9 16:54:59 2018 - [warning] shutdown_script is not defined.
Thu Aug  9 16:54:59 2018 - [info] Got exit code 0 (Not master dead).

MySQL Replication Health is OK.
[root@server2 masterha]# 

没错误了,基本就OK了。

四、测试

1、手动切换。

热切换:
masterha_master_switch --conf=/etc/masterha/app.cnf --master_state=alive --new_master_host=172.25.5.4 --new_master_port=3306 --orig_master_is_new_slave
冷切换:
masterha_master_switch --conf=/etc/masterha/app.cnf --master_state=dead --dead_master_host=172.25.5.3 --dead_master_port=3306 --new_master_host=172.25.5.4 --new_master_port=3306 --ignore_last_failover

这里写图片描述

这里写图片描述

这里写图片描述

2、自动切换:

[root@server2 masterha]# nohup masterha_manager --conf=/etc/masterha/app.cnf   --ignore_last_failover 2>&1 &
[1] 1740
[root@server2 masterha]# nohup: ignoring input and appending output to `nohup.out'

[root@server2 masterha]# ps ax

kill掉server4mysql服务:
这里写图片描述
监测到server4 dead,监控的反映。
这里写图片描述

这里写图片描述

自动切换成功。
这里写图片描述

vip设置

master_ip_online_change脚本
master_ip_failover脚本

/etc/masterha/app.cnf #添加脚本路径。
这里写图片描述

第一次手动给master添加vip:

[root@server3 mysql]# ip addr add 172.25.5.100/24 dev eth0
[root@server3 mysql]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:05:87:9a brd ff:ff:ff:ff:ff:ff
    inet 172.25.5.3/24 brd 172.25.5.255 scope global eth0
    inet 172.25.5.100/24 scope global secondary eth0
    inet6 fe80::5054:ff:fe05:879a/64 scope link 
       valid_lft forever preferred_lft forever

手动切换:

这里写图片描述
这里写图片描述
这里写图片描述

vip 以切换到server4上。

这里写图片描述

猜你喜欢

转载自blog.csdn.net/su_use/article/details/81533412