附图一张
环境:
- CentOS Linux release 7.5.1804 (Core)
关闭防火墙和selinux
4台服务器
服务器角色 | IP | 节点 | 职责 |
---|---|---|---|
manager | 192.168.153.179 | node1 | 监控管理 |
master | 192.168.153.178 | node2 | 主master |
slave1 | 192.168.153.177 | node3 | 从slave |
slave2 | 192.168.153.176 | node4 | 从slave |
安装:
- node1安装
[root@localhost ~]# yum -y install mariadb mariadb-server epel-release
[root@localhost ~]# yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm mha4mysql-manager-0.56-0.el6.noarch.rpm
- node2安装
[root@localhost ~]# yum -y install mariadb mariadb-server epel-release
[root@localhost ~]# yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm
- node3安装
[root@localhost ~]# yum -y install mariadb mariadb-server epel-release
[root@localhost ~]# yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm
- node4安装
[root@localhost ~]# yum -y install mariadb mariadb-server epel-release
[root@localhost ~]# yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm
修改主机名和hosts文件
- node1
[root@localhost ~]# hostname node1
- node2
[root@localhost ~]# hostname node2
- node3
[root@localhost ~]# hostname node3
- node4
[root@localhost ~]# hostname node4
/etc/hosts 文件一模一样
192.168.153.179 node1
192.168.153.178 node2
192.168.153.177 node3
192.168.153.176 node4
ssh 互通环境
- node1
[root@node1 ~]# ssh-keygen -t rsa
[root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node1
- node2
[root@node2 ~]# ssh-keygen -t rsa
[root@node2 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node1
- node3
[root@node2 ~]# ssh-keygen -t rsa
[root@node2 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node1
- node4
[root@node2 ~]# ssh-keygen -t rsa
[root@node2 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node1
- node1
将此文件传输给另外三台
[root@node1 ~]# scp .ssh/authorized_keys root@node2:.ssh/
[root@node1 ~]# scp .ssh/authorized_keys root@node3:.ssh/
[root@node1 ~]# scp .ssh/authorized_keys root@node4:.ssh/
依次测试登录
[root@node1 ~]# ssh node2
Last login: Fri Nov 13 16:04:12 2020 from 192.168.153.179
[root@node2 ~]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.153.178 netmask 255.255.255.0 broadcast 192.168.153.255
inet6 fe80::442e:d7a9:e81a:69e4 prefixlen 64 scopeid 0x20<link>
inet6 fe80::2796:279a:9ced:cf95 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:98:41:36 txqueuelen 1000 (Ethernet)
RX packets 24682 bytes 33881023 (32.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 7180 bytes 567451 (554.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
初始主节点 master 的配置
- node2
[root@node2 ~]# vim /etc/my.cnf
server-id = 1
log-bin = master-log
relay-log = relay-log
skip_name_resolve
[root@node2 ~]# systemctl start mariadb
所有 slave 节点依赖的配置
- node3 4
node3 和 node4 配置文件唯一不同就是server-id
[root@node3 ~]# vim /etc/my.cnf
server-id = 2
relay-log = relay-log
log-bin = master-log
read_only = ON
relay_log_purge = 0
skip_name_resolve
log_slave_updates = 1
[root@node3 ~]# systemctl restart mariadb
配置一主多从复制架构
- node2
授权用户给从库
MariaDB [(none)]> grant replication slave on *.* to slave@'192.168.153.%' identified by '123';
此用户为之后我们的Manager管理master所需
MariaDB [(none)]> grant all on *.* to mha@'192.168.153.%' identified by '123';
- node3 4
MariaDB [(none)]> change master to master_host='192.168.153.178',master_user='slave',master_password='123',master_log_file='master-log.000003',master_log_pos=529;Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.00 sec)
- node3 4 授权创建一个用户
此用户为我们的Manager管理slave所需
MariaDB [(none)]> grant all on *.* to slave@'192.168.153.%' identified by '123';
初始化 MHA
- node1
定义 MHA 管理配置文件
[root@node2 ~]# mkdir /etc/mha_master
[root@node2 ~]# vim /etc/mha_master/mha.cnf
[server default]
user=mha
password=123
manager_workdir=/etc/mha_master/app1
manager_log=/etc/mha_master/manager.log
remote_workdir=/mydata/mha_master/app1
ssh_user=root
repl_user=slave
repl_password=123
ping_interval=1
[server1]
hostname=192.168.153.178
ssh_port=22
candidate_master=1
[server2]
hostname=192.168.153.177
ssh_port=22
candidate_master=1
[server3]
hostname=192.168.153.176
ssh_port=22
candidate_master=1
对四个节点进行检测
- node1
检查管理的MySQL复制集群的连接配置参数是否OK
启动 MHA
- node1
[root@node1 ~]# nohup masterha_manager -conf=/etc/mha_master/mha.cnf &> /etc/mha_master/manager.log &
[1] 22226
[root@node1 ~]# masterha_check_status -conf=/etc/mha_master/mha.cnf
mha (pid:22226) is running(0:PING_OK), master:192.168.153.178
测试 MHA 故障转移
- node2(master)
[root@node2 ~]# yum -y install psmisc
[root@node2 ~]# killall -9 mysqld mysqld_safe
[root@node2 ~]# rm -rf /var/lib/mysql/
aria_log.00000001 ibdata1 ib_logfile1 master-log.000002 master-log.index mysql.sock test/
aria_log_control ib_logfile0 master-log.000001 master-log.000003 mysql/ performance_schema/
[root@node2 ~]# rm -rf /var/lib/mysql/*
在 manger 节点查看日志
- node1
注意,故障转移完成后, manager将会自动停止
- 176节点