一 MHA高可用架构
架构
从架构上来说,MHA分为Node和Manager两部分
1)Node
我们知道,MHA是基于MySQL Replication环境的,在该环境中,不管是Master角色,还是Slave角色,都统称为Node,是被MHA监控管理的对象节点。
Node服务器上需要安装MHA Node包。
2)Manager
Manager为MHA架构中的管理者,建议部署在一独立的服务器上,当然也可部署在某个Slave上,但该Slave永远不要被选择成为新的Master,否则故障切换后的MHA架构就失去了高可用性。
Manager服务器需要安装MHA Manager包,并完善一个主配置文件。
一个Manager可管理多套MySQL Replication环境。
二 MHA工作原理
。。。
二 mysql主从环境搭建
make_replication_sandbox --gtid /tmp/5.7.30
installing and starting master
installing slave 1
installing slave 2
starting slave 1
.. sandbox server started
starting slave 2
.... sandbox server started
initializing slave 1
initializing slave 2
replication directory installed in $HOME/sandboxes/rsandbox_5_7_30
我们进入到安装好的目录,检查主从状态
使用mysql-sandbox只需要这么简单一步,一个一主两从的mysql环境就搭建好了
三 MHA环境搭建
2.安装依赖
yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager -y
3.安装MHA node及manager
[root@sandbox tmp]# rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
准备中... ################################# [100%]
正在升级/安装...
1:mha4mysql-node-0.58-0.el7.centos ################################# [100%]
[root@sandbox tmp]# rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
准备中... ################################# [100%]
正在升级/安装...
1:mha4mysql-manager-0.58-0.el7.cent################################# [100%]
4.准备配置文件
配置全局配置文件(故障切换脚本不会写,会了补上)
[root@sandbox .ssh]# vim /etc/masterha_default.cnf
[server default]
user=mha
password=mha
ssh_user=root
repl_user=rsandbox
repl_password=rsandbox
#master_binlog_dir= /var/lib/mysql
#remote_workdir=/data/log/masterha
ping_interval=3
secondary_check_script=masterha_secondary_check -s 127.0.0.1
#master_ip_failover_script="/etc/mha/scripts/master_ip_failover"
#master_ip_online_change_script="/etc/mha/scripts/master_ip_online_change"
#report_script="/etc/mha/scripts/send_report"
配置主配置文件
[root@sandbox .ssh]# cat /etc/mha/
app1.cnf scripts/
[root@sandbox .ssh]# cat /etc/mha/app1.cnf
[server default]
manager_workdir=/var/log/mha/app1
manager_log=/var/log/mha/app1/manager.log
[server1]
hostname=127.0.0.1
port=22805
master_binlog_dir=/root/sandboxes/rsandbox_5_7_30/master/data
[server2]
hostname=127.0.0.1
port=22806
master_binlog_dir=/root/sandboxes/rsandbox_5_7_30/node1/data
[server3]
hostname=127.0.0.1
port=22807
master_binlog_dir=/root/sandboxes/rsandbox_5_7_30/node2/data
5.配置mysql软连接
ln -s /tmp/5.7.30/bin/mysql /usr/bin/mysql
ln -s /tmp/5.7.30/bin/mysqlbinlog /usr/bin/mysqlbinlog
6.用root用户登陆主库,创建MHA需要的用户
[root@sandbox ~]# mysql -uroot -pmsandbox -S /tmp/mysql_sandbox22805.sock
mysql> grant all privileges on *.* to 'mha'@'%' identified by 'mha';
Query OK, 0 rows affected, 1 warning (0.01 sec)
7.同主机下也要配置ssh互信,不然MHA检测不过
cp id_rsa.pub authorized_keys
8.ssh互信检查
masterha_check_ssh --conf=/etc/mha/app1.cnf
看到 All SSH connection tests passed successfully. 则字样检测通过
9.主从状态检查
masterha_check_repl --conf=/etc/mha/app1.cnf
127.0.0.1(127.0.0.1:22805) (current master)
+--127.0.0.1(127.0.0.1:22806)
+--127.0.0.1(127.0.0.1:22807)
Thu Aug 27 19:38:05 2020 - [info] Checking replication health on 127.0.0.1..
Thu Aug 27 19:38:05 2020 - [info] ok.
Thu Aug 27 19:38:05 2020 - [info] Checking replication health on 127.0.0.1..
Thu Aug 27 19:38:05 2020 - [info] ok.
Thu Aug 27 19:38:05 2020 - [warning] master_ip_failover_script is not defined.
Thu Aug 27 19:38:05 2020 - [warning] shutdown_script is not defined.
Thu Aug 27 19:38:05 2020 - [info] Got exit code 0 (Not master dead).
MySQL Replication Health is OK.
10.开启MHA
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover /var/log/mha/app1/manager.log 2>&1 &
11.查看MHA状态
[root@sandbox rsandbox_5_7_30]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:120310) is running(0:PING_OK), master:127.0.0.1
[root@sandbox .ssh]# tailf /var/log/mha/app1/manager.log
127.0.0.1(127.0.0.1:22805) (current master)
+--127.0.0.1(127.0.0.1:22806)
+--127.0.0.1(127.0.0.1:22807)
Thu Aug 27 19:06:38 2020 - [warning] master_ip_failover_script is not defined.
Thu Aug 27 19:06:38 2020 - [warning] shutdown_script is not defined.
Thu Aug 27 19:06:38 2020 - [info] Set master ping interval 3 seconds.
Thu Aug 27 19:06:38 2020 - [info] Set secondary check script: masterha_secondary_check -s 127.0.0.1
Thu Aug 27 19:06:38 2020 - [info] Starting ping health check on 127.0.0.1(127.0.0.1:22805)..
Thu Aug 27 19:06:38 2020 - [info] Ping(SELECT) succeeded, waiting until MySQL doesn't respond..
12.手工Kill掉主库22805端口的mysqld_safe和mysqld服务,但是不会自动切换,因为我没写脚本