forked from gaopengcarl/HAIPMGR
-
Notifications
You must be signed in to change notification settings - Fork 0
/
readme.txt
175 lines (130 loc) · 6.57 KB
/
readme.txt
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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
PYTHON3适用
一、错误查看
如果对于出现异常先查看日志文件,日志文件在当前目录下HAIPMGR.log,如果出现vip的切换可以
cat HAIPMGR.log|grep -i warn
因为只有切换日志才作为了warning,其他大部分为INFO信息。
二、参数
使用只需要更改parameter.py下的参数字典就可以了,不能新加。
par_var = {"vip":"192.168.250.39","cluser_ip":{"192.168.250.33":"bond0","192.168.250.37":"bond0","192.168.250.38":"bond0"},\
"ip_gateway":"192.168.250.254","mysql_port":"4790","inter_port":"14790","passwd":"KRj$r748Lf","user":"haip_user",\
"platfrom":"linux","sleeptime":7,"install_path":"/opt/HAIPMGR/"}
"vip":需要启动的虚拟ip地址
"cluser_ip":这是一个字典,需要写好IP地址和网卡名字,绑定的虚拟IP会在这个网卡上
"ip_gateway":网关,需要填写正确的网关
"mysql_port":mysql的服务端口,绑定网卡的标志会用mysql的端口标示比如eth0:3316
"inter_port":MGR 内部通信端口
"passwd":mysql用户的密码
"user":mysql的用户,本用户必须要能够访问performance_schema下的表权限
"platfrom":填写"linux"即可,当前只能是"linux"
"sleeptime":循环检测的秒
"install_path":安装路径日志文件和状态文件将会生成在下面,必须以'/'结尾
上面参数必须认真填写,填写错误将不能正常运行。
三、生成的文件
/root/HAIPMGR[hostname].lock:文件锁,不要手动更改本文件
"install_path"/HAIPMGR_[mysql_port].log:日志文件
"install_path"/stat_[mysql_port]:状态文件用于监控是否发生了VIP切换 ,会设置为 0为关闭 2为启动,将会在20*sleeptime后重置为1
不要手动更改本文件
四、运行和关闭
本程序使用python3.6 需要用到模块psutil、pymysql
解压后修改参数文件
启动
nohup python3 HAIPMGR.py &
关闭程序直接kill即可没有影响
关闭的话不会影响虚拟ip,启动也不会影响现有的虚拟ip
五、限制
本脚本程序只能用于LINUX下MGR单主的情况且
本脚本程序只支持每个MGR实例分布在单台服务器上,且数据库端口和paxos 内部通信端口一致
的MGR上,线上一般都是这种情况。
六、安装
配置parameter.py文件参数
mkdir -p /opt/HAIPMGR/
解压
nohup python3 HAIPMGR.py & 运行即可
七、判断逻辑
因为单主模式MGR可以保证数据的一致性因此判断逻辑如下:
阶段1[stage1]:
通过初始化参数cluser_ip中的配置判断本节点是否在集群中
阶段2[stage2]:
检查是否能够连接上MYSQLD服务器进程,主要检查mysqld(已经取消端口检测)可以连接(密码错误算可以连接)
阶段3[stage3]
判断内部通信端口是否启动,检查本机是否在MGR中且为online,检查本节点是否是MGR的主节点
阶段4[stage4]
通过检查网关的方式,来避免网络隔离出现2个主节点启动两个VIP的情况
上面4个阶段将会返回
0 状态检查成功需要开启VIP
1 状态检查失败需要关闭VIP
阶段5[stage5]
根据上面4个阶段的返回值来判断是否启动和关闭VIP又有如下判断
如果需要启动
虚拟VIP是否在本地
如果在本地
则维持现状return 1
如果不在本地
如果还能ping通VIP则本次循环维持现状,等待下次循环检测 return 1
如果不能ping通VIP则做2次检查将阶段1到4再次检查一遍
如果检查失败 return1 维持现状
如果检查成功 return2 启动VIP
如果需要关闭
虚拟VIP是否在本地关闭
如果在本地
做二次检查阶段1到4再次检查一遍
如果检查失败 return1 维持现状
如果检查成功 return0 关闭VIP
如果不在本地
维持现状 return0
本阶段返回
0 关闭VIP
1 维持现状不启动也不关闭vip
2 启动VIP
阶段6[stage6]
根据阶段5的返回做相应的处理即可。
八、公司监控MGR
监控MGR成员通过SQL语句
select count(*) from replication_group_members where MEMBER_STATE='ONLINE'
如果不等于3报警
监控VIP切换通过查看
stat_[mysql_port]
文件监控值不等于1报警 ,监控周期为1分钟,脚本会在20*sleeptime后重置为1。
监控VIP进程
监控MYSQLD进程
九、相关测试
1、关闭服务器
insert into gptest(name) values('gaopeng57');
insert into gptest(name) values('gaopeng58');
insert into gptest(name) values('gaopeng59');
test1:(2003, "Can't connect to MySQL server on '192.168.99.189' (timed out)")
test1:(2003, "Can't connect to MySQL server on '192.168.99.189' (timed out)")
insert into gptest(name) values('gaopeng60');
insert into gptest(name) values('gaopeng61');
insert into gptest(name) values('gaopeng62');
insert into gptest(name) values('gaopeng63');
2、关闭数据库
insert into gptest(name) values('gaopeng23');
insert into gptest(name) values('gaopeng24');
insert into gptest(name) values('gaopeng25');
test1:(2003, "Can't connect to MySQL server on '192.168.99.189' ([WinError 10061] 由于目标计算机积极拒绝,无法连接。)")
....
test1:(2003, "Can't connect to MySQL server on '192.168.99.189' ([WinError 10061] 由于目标计算机积极拒绝,无法连接。)")
test1:(2003, "Can't connect to MySQL server on '192.168.99.189' (timed out)")
test1:(2003, "Can't connect to MySQL server on '192.168.99.189' (timed out)")
insert into gptest(name) values('gaopeng26');
insert into gptest(name) values('gaopeng27');
insert into gptest(name) values('gaopeng28');
insert into gptest(name) values('gaopeng29');
3、关闭MGR
insert into gptest(name) values('gaopeng29');
insert into gptest(name) values('gaopeng30');
insert into gptest(name) values('gaopeng31');
test1:(3100, "Error on observer while running replication hook 'before_commit'.")
insert into gptest(name) values('gaopeng31');
test1:(1290, 'The MySQL server is running with the --super-read-only option so it cannot execute this statement')
.....
insert into gptest(name) values('gaopeng31');
test1:(1290, 'The MySQL server is running with the --super-read-only option so it cannot execute this statement')
insert into gptest(name) values('gaopeng31');
test1:(1290, 'The MySQL server is running with the --super-read-only option so it cannot execute this statement')
test1:(2013, 'Lost connection to MySQL server during query ([WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。)')
insert into gptest(name) values('gaopeng31');
insert into gptest(name) values('gaopeng32');
insert into gptest(name) values('gaopeng33');
微信:gp_22389860