Mysql 5.7 MHA 高可用部署
导读:为节省软件授权成本,故决定将非核心的oracle业务转型至开源化的Mysql中。因业务使用Oracle Rac架构无感知故障转移已熟悉,要求Mysql也需满足无感知的故障转移效果。经团队评估决定使用Mysql Mha高可用架构来完成故障转移功能(虽然有30s左右的延迟,但足已满足非核心系统的要求)。
1.Mysql MHA高可用部署
1.1 主从复制与Manager/Node服务器规划
|
1
2
3
4
5
6 |
主库: 192.168
.
56.101
node 从库: 192.168
.
56.102
node192.168
.
56.103
node manager192.168
.
56.104
vip |
1.2 准备环境(略。1主2从基于GTID的部署)
1.3 配置关键程序软连接
|
1
2
3 |
# 使用软连接解决mha源代码中绝对路径的问题ln -s /data/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlogln -s /data/mysql/bin/mysql /usr/bin/mysql |
1.4 配置各节点互信
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 |
Mysqldb01:rm -rf /root/.ssh ssh-keygencd /root/.ssh mv id_rsa.pub authorized_keysscp -r /root/.ssh
192.168
.
56.102
:/root scp -r /root/.ssh
192.168
.
56.103
:/root 各节点验证Mysqldb01:ssh
192.168
.
56.101
datessh
192.168
.
56.102
datessh
192.168
.
56.103
dateMysqldb02:ssh
192.168
.
56.101
datessh
192.168
.
56.102
datessh
192.168
.
56.103
dateMysqldb03:ssh
192.168
.
56.101
datessh
192.168
.
56.102
datessh
192.168
.
56.103
date |
1.5 安装软件
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14 |
# 下载mha软件mha官网:https:
//code.google.com/archive/p/mysql-master-ha/# 从github下载软件地址(推荐
)manager软件:https:
//github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.centos.noarch.rpmnode软件:https:
//github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.centos.noarch.rpm# 所有节点安装Node软件依赖包yum install perl-DBD-MySQL -yrpm -ivh mha4mysql-manager-
0.58
-
0
.el7.centos.noarch.rpm# Manager软件安装(Mysqldb03)# Manager软件需要以下依赖包,需要自行下载yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiResrpm -ivh mha4mysql-node-
0.58
-
0
.el7.centos.noarch.rpm# Mysqldb01主库中创建mha需要的用户grant all privileges on *.* to mha@
'192.168.56.%'
identified by
'mha'
; |
1.6 配置文件准备(Mysqldb03)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 |
# 创建mha配置文件和日志文件目录mkdir -p /data/mhachown mysql:mysql /data/mha/ -Rmkdir -p /data/mha/app1/logchown mysql:mysql /data/mha/app1/log -R# 编辑mha配置文件(Mysqldb03)vi /data/mha/mha.conf [server
default
]manager_log=/data/mha/app1/log/managermanager_workdir=/data/mha/app1/logmaster_binlog_dir=/data/binlog# vip failover scriptsmaster_ip_failover_script=/usr/local/bin/master_ip_failover password=mhaping_interval=
2repl_password=oraclerepl_user=repl01ssh_user=rootuser=mha[server1]hostname=
192.168
.
56.101port=
3306[server2]hostname=
192.168
.
56.102port=
3306[server3]hostname=
192.168
.
56.103port=
3306 |
1.7 互信与复制(1主2从)状态检查
|
1
2 |
masterha_check_ssh --conf=/data/mha/mha.confmasterha_check_repl --conf=/data/mha/mha.conf |
1.8 开启MHA(Mysqldb03)
|
1 |
nohup masterha_manager --conf=/data/mha/mha.conf --remove_dead_master_conf --ignore_last_failover < /dev/
null
> /data/mha/app1/log/manager.log
2
>&
1
& |
1.9 Mysql MHA状态检查
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 |
# 自动获取MHA状态和主库IP[root@mysqldb03 opt]# masterha_check_status -conf=/data/mha/mha.conf mha (pid:
24100
)
is
running(
0
:PING_OK), master:
192.168
.
56.101# 查看
3
个节点server_id[root@mysqldb03 mha]# mysql -umha -pmha -h
192.168
.
56.101
-e
"show variables like 'server_id'"mysql: [Warning] Using a password on the command line
interface
can be insecure.+---------------+-------+| Variable_name | Value |+---------------+-------+| server_id |
101
|+---------------+-------+[root@mysqldb03 mha]# mysql -umha -pmha -h
192.168
.
56.102
-e
"show variables like 'server_id'"mysql: [Warning] Using a password on the command line
interface
can be insecure.+---------------+-------+| Variable_name | Value |+---------------+-------+| server_id |
102
|+---------------+-------+[root@mysqldb03 mha]# mysql -umha -pmha -h
192.168
.
56.103
-e
"show variables like 'server_id'"mysql: [Warning] Using a password on the command line
interface
can be insecure.+---------------+-------+| Variable_name | Value |+---------------+-------+| server_id |
103
| |
1.10 配置MHA 的vip功能
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 |
## Mysql Vip故障转移脚本master_ip_failover修改vi /usr/local/bin/master_ip_failover# 修改以下内容,其中vip就是你要使用的vip,其中enp0s8就是vip的物理网卡,所有节点中物理网卡的enp0s8名字要相同my $vip =
'192.168.56.104/24'
;my $key =
'1'
;my $ssh_start_vip =
"/sbin/ifconfig enp0s8:$key $vip"
;my $ssh_stop_vip =
"/sbin/ifconfig enp0s8:$key down"
;# 若是脚本中有空格可使用以下命令进行转换[root@mysqldb03 opt]# dos2unix master_ip_failover.txt dos2unix: converting file master_ip_failover.txt to Unix format ...[root@mysqldb03 opt]# chmod +x master_ip_failover.txt [root@mysqldb03 opt]# mv master_ip_failover.txt master_ip_failover[root@mysqldb03 opt]# mv master_ip_failover /usr/local/bin/## Manager配置文件修改:vi /data/mha/mha.confmaster_ip_failover_script=/usr/local/bin/master_ip_failover## 主库首次使用vip需要手工开启VIP地址# 手工在主库上绑定vip,注意一定要和配置文件中的enp0s8一致,我的是enp0s8:
1
(
1
是key指定的值)ifconfig enp0s8:
1
192.168
.
56.104
/
24## 重启mhamasterha_stop --conf=/data/mha/mha.confnohup masterha_manager --conf=/data/mha/mha.conf --remove_dead_master_conf --ignore_last_failover < /dev/
null
> /data/mha/app1/log/manager.log
2
>&
1
& |
1.11 Mysql MHA故障模拟与VIP偏移功能验证
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 |
## Manager节点监控# 停库前[root@mysqldb03 ~]# mysql -umha -pmha -h
192.168
.
56.104
-e
"show variables like 'server_id'"mysql: [Warning] Using a password on the command line
interface
can be insecure.+---------------+-------+| Variable_name | Value |+---------------+-------+| server_id |
101
|+---------------+-------+# 停主库Mysqldb01: /etc/init.d/mysqld stop# 停库后,且从库切换主库[root@mysqldb03 mha]# mysql -umha -pmha -h
192.168
.
56.104
-e
"show variables like 'server_id'"mysql: [Warning] Using a password on the command line
interface
can be insecure.+---------------+-------+| Variable_name | Value |+---------------+-------+| server_id |
102
|+---------------+-------+## Mysql Mha架构中VIP
192.168
.
56.104
始终不变,但主库已从server_id=
101
切换至server_id=
102
(模拟server_id=
101
宕机)。 |
1.12 Mysql MHA 故障后修复步骤
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 |
# 修复主库[root@Mysqldb01 ~]# /etc/init.d/mysqld start# 恢复主从结构CHANGE MASTER TO MASTER_HOST=
'192.168.56.102'
,MASTER_PORT=
3306
, MASTER_AUTO_POSITION=
1
, MASTER_USER=
'repl01'
, MASTER_PASSWORD=
'oracle'
;start slave ;# 修改mha的配置文件[server1]hostname=
192.168
.
56.101port=
3306# 启动MHAnohup masterha_manager --conf=/data/mha/mha.conf --remove_dead_master_conf --ignore_last_failover < /dev/
null
> /data/mha/app1/log/manager.log
2
>&
1
& |
参考:《Oldguo-标杆班级-MySQL-lesson10-MHA高可用技术》