mysql进阶(三)MHA高可用集群

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
简介:
1 、MHA目前在MySQL高可用方面是一个相对成熟的解决方案,是MySQL高可用环境下故障切换和主从提升的高可用软件
2 、MHA能在短时间内完成故障切换,并且在最大程度上保证数据的一致性,以达到真正意义上的高可用
3 、MHA基于mysql协议,通过mysql主从或主主进行复制
4 、MHA官网:https: / / code.google.com / p / mysql - master - ha /
 
软件由两部分组成:MHA Manager(关理节点)和MHA Node(数据节点)
1 、MHA Manager可以单独部署在一台独立的机器上管理多个master - slave集群,也可以部署在一台slave节点上
2 、MHA Node运行在每台MySQL服务器上
3 、MHA_Manager会定时探测集群中的master节点,当master出现故障时,
    它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master
4 、MHA配合半同步复制使用可以最大限度的保证数据安全性
 
工作原理:
1 、从宕机崩溃的master保存二进制日志事件(binlog events)
2 、识别含有最新更新的slave
3 、应用差异的中继日志(relay log)到其他的slave
4 、应用从master保存的二进制日志事件(binlog events)
5 、提升一个slave为新的master
6 、使其他的slave连接新的master进行复制
 
MHA工具:
Manager工具包:
masterha_check_ssh             #检查MHA的SSH配置状况,MHA强烈依赖ssh秘钥验证
masterha_check_repl       #检查MySQL复制状况
masterha_manager        #MHA主程序
masterha_check_status      #检测当前MHA运行状态
masterha_master_monitor     #检测master是否宕机
masterha_master_switch     #手动控制故障转移
masterha_conf_host       #添加或删除配置的server信息
masterha_stop              #MHA关闭工具
 
Node工具包:
save_binary_logs        #保存和复制master的二进制日志
apply_diff_relay_logs      #识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog       #去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
purge_relay_logs        #清除中继日志(不会阻塞SQL线程)
 
 
 
实验环境:
角色          ip地址        
MHA_manager      192.168 . 0.70
Master          192.168 . 0.40
Slave           192.168 . 0.60
Slave           192.168 . 0.10
 
 
 
安装MHA:
1 、配置elpe和baseyum源
2 、yum  - y localinstall mha4mysql - manager - 0.55 - 0.el6 .noarch.rpm mha4mysql - node - 0.54 - 0.el6 .noarch.rpm
#非管理节点不用安装mha4mysql-manager-0.55-0.el6.noarch.rpm
3 、配置ssh秘钥验证
ssh - keygen                     #生成秘钥,一直回车就行
cat id_rsa.pub >> authorized_keys   #将authorized_keys  id_rsa  id_rsa.pub 拷贝到所有节点的~/.ssh目录下
注意:不能禁止password登陆,否则会出现错误  
 
 
配置mysql主从(建议使用mysql5. 5 版本以上):
master配置:
vim  / etc / my.cnf             #修改配置文件,添加如下内容
[mysqld]                     #找到mysqld配置段
log - bin = mysql - bin            #开启二进制日志
relay - log = relay - bin      #开启中继日志
binlog_format = mixed      #使用混合模式的二进制日志
server - id =  1            #全局唯一的server-id
innodb - file - per - table = 1      #使用单独表空间文件
default - storage - engine = InnoDB     #使用InnoDB存储引擎
autocommit = 0               #关闭事务自动提交
skip - name - resolve = 1        #关闭主机名反解
relay - log - purge = 0            #不允许自动清理中继日志,因为MHA会依靠中继日志恢复数据
 
service mysqld restart         #重启mysql
mysql> SHOW MASTER STATUS;         #查看当前二进制日志位置
+ - - - - - - - - - - - - - - - - - - + - - - - - - - - - - +
File            | Position|
+ - - - - - - - - - - - - - - - - - - + - - - - - - - - - - +
|mysql - bin . 000004  |   360   |         #记住当前值
+ - - - - - - - - - - - - - - - - - - + - - - - - - - - - - +
mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON  * . *  TO  'mha' @ '192.168.0.%'  IDENTIFIED BY  'mha' ;
mysql> GRANT  ALL  ON  * . *  TO  'mymha' @ '192.168.0.%'  IDENTIFIED BY  'mymha' #创建MHA监控用户
mysql> FLUSH PRIVILEGES;
 
 
slave配置:
vim  / etc / my.cnf         #修改配置文件,添加如下内容
[mysqld]             #找到mysqld配置段
log - bin = mysql - bin        #开启二进制日志
relay - log = relay - bin      #开启中继日志
binlog_format = mixed      #使用混合模式的二进制日志
server - id =  2            #全局唯一的server-id
innodb - file - per - table = 1      #使用单独表空间文件
default - storage - engine = InnoDB    #使用InnoDB存储引擎
autocommit = 0             #关闭事务自动提交
skip - name - resolve = 1      #关闭主机名反解
read - only = 1          #只读,对root用户无效(slave节点必须设置)
relay - log - purge = 0        #不允许自动清理中继日志,因为MHA会依靠中继日志恢复数据
 
mysql> CHANGE MASTER TO MASTER_HOST = '192.168.0.10' ,MASTER_USER = 'mha' ,MASTER_PASSWORD = 'mha' ,
      MASTER_LOG_FILE = 'mysql-bin.000004' ,MASTER_LOG_POS = 360 ,MASTER_PORT = 3306 #指定主服务器
mysql> START SLAVE;             #启动复制线程
mysql> SHOW SLAVE STATUS\G;        #查看从服务器状态
Slave_IO_Running: Yes           #必须都为yes
Slave_SQL_Running: Yes
mysql> SELECT USER,PASSWORD,HOST FROM mysql.user;     #查看mha是否同步成功
 
 
MHA配置:
     mkdir  / etc / mha
     mkdir  / var / log / mha_app1
 
vim  / etc / mha / app1.cnf     
[server default]                #MHA工作属性定义(配置时不能有注释)
manager_workdir = / masterha / app1           #MHA的工作目录
manager_log = / var / log / mha_app1 / manager.log     #MHA的日志文件
password = mymha                  #设置MHA监控用户的密码
user = mymha                    #设置监控用户
ping_interval = 1                 #设置监控主库,健康检查时间
remote_workdir = / masterha / app1       #设置远端mysql在发生切换时binlog的保存位置
repl_password = mha            #设置复制用户的密码
repl_user = mha              #设置复制环境中的复制用户名
ssh_user = root             #设置ssh的登录用户名
master_binlog_dir = / usr / local / mysql / data /  #二进制日志文件存放路径 
 
可选参数,脚本都需要自己写:
shutdown_script = / masterha / scripts / shutdown.sh   #故障发生后关闭故障主机脚本(用于防止脑裂)
master_ip_failover_script = / masterha / scripts / automatic.sh  #设置自动故障转移时执行的脚本  
master_ip_online_change_script = / masterha / scripts / manual.sh  #设置手动故障转移时执行的脚本
report_script = / masterha / scripts / twili.py          #设置发生切换后发送的报警脚本
 
 
[server1]                      
hostname = 192.168 . 0.40          
port = 3306                      
 
[server2]                #节点设置
hostname = 192.168 . 0.60        #主机地址
port = 3306            #端口
check_repl_delay = 0          #用防止master故障时,切换时slave有延迟
candidate_master = 1 
#设置为候选master,如果没有设置则在slave中选择数据最新的成为master,如果设置了建议最好指向半同步节点
 
[server3]                      
hostname = 192.168 . 0.10          
port = 3306
 
 
MHA使用:
chmod  600  / etc / mha / app1.cnf        #设置为只有root用户对此文件有权限
masterha_check_ssh  - - conf = / etc / mha / app1.cnf     #检查ssh秘钥认证是否成功
- - conf:指定配置文件
 
masterha_check_repl  - - conf = / etc / mha / app1.cnf        #检查mysql复制环境成功
masterha_check_status  - - conf = / etc / mha / app1.cnf      #检查MHA运行状态
masterha_manager  - - conf = / etc / mha / app1.cnf       #启动MHA

本文转自  红尘世间  51CTO博客,原文链接:http://blog.51cto.com/hongchen99/1946716

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
存储 关系型数据库 MySQL
Mysql高可用|索引|事务 | 调优
Mysql高可用|索引|事务 | 调优
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL进阶之路丨第十四篇】一文带你精通MySQL重复数据及SQL注入
【MySQL进阶之路丨第十四篇】一文带你精通MySQL重复数据及SQL注入
48 0
|
2月前
|
存储 关系型数据库 MySQL
【MySQL进阶之路丨第十三篇】一文带你精通MySQL之ALTER命令及序列使用
【MySQL进阶之路丨第十三篇】一文带你精通MySQL之ALTER命令及序列使用
40 0
|
2月前
|
机器学习/深度学习 SQL 关系型数据库
【MySQL进阶之路丨第十一篇】一文带你精通MySQL NULL值处理、正则表达式
【MySQL进阶之路丨第十一篇】一文带你精通MySQL NULL值处理、正则表达式
34 0
|
3月前
|
SQL 容灾 关系型数据库
rds容灾与高可用
rds容灾与高可用
28 4
|
3月前
|
关系型数据库 MySQL
电子好书发您分享《MySQL MGR 8.0高可用实战》
电子好书发您分享《MySQL MGR 8.0高可用实战》 电子好书发您分享《MySQL MGR 8.0高可用实战》
90 1
|
3月前
|
关系型数据库 MySQL 数据库
深入MySQL数据库进阶实战:性能优化、高可用性与安全性
深入MySQL数据库进阶实战:性能优化、高可用性与安全性
136 0
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL进阶之路丨第十五篇】一文带你精通MySQL数据的导入与导出
【MySQL进阶之路丨第十五篇】一文带你精通MySQL数据的导入与导出
51 0
【MySQL进阶之路丨第十五篇】一文带你精通MySQL数据的导入与导出
|
1月前
|
SQL 存储 运维
MySQL高可用性:主从复制和集群
MySQL高可用性:主从复制和集群
36 0
|
2天前
|
SQL 存储 关系型数据库
MySQL Cluster集群安装及使用
MySQL Cluster集群安装及使用