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