Giter Club home page Giter Club logo

haipmgr's Introduction

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

haipmgr's People

Contributors

gaopengcarl avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.