弊端:
没有vip,需要代理或者转发。
源码复杂,并且谨慎有余灵活不足,不能满足客户特殊的集群需求。

下文示例中:管理端windoes的ip是1.1.1.1;两个docker的宿主机IP是1.1.1.2和1.1.1.3; 其中1.1.1.2上运行gbase001容器, 其中1.1.1.2上运行gbase002容器。
docker load < gbase_v2.tar
docker run -p 16060:6060 -p 19088:19088 -p 9088:9088 --name gbase001 -itd gbase:v2 su - gbasedbt -c "/home/gbase/start.sh ; /bin/bash "
docker run -p 26060:6060 -p 29088:29088 -p 9088:9088 --name gbase002 -itd gbase:v2 su - gbasedbt -c "/home/gbase/start.sh ; /bin/bash "
docker exec -it gbase001 /bin/bash
docker exec -it gbase002 /bin/bash
su - gbasedbt
rm -fr /home/gbase/sysInfo/WeiShell/
mkdir -p /home/gbase/sysInfo/WeiShell/
sh g01.init.instance.name.sh gbase001 1.1.1.2
sh g01.init.instance.name.sh gbase002 1.1.1.3
. .bash_profile
#1.1.1.2上:
cat > /opt/gbase/etc/sqlhosts << EOF
gbase001 onsoctcp 0.0.0.0 19088
gbase002 onsoctcp 1.1.1.3 29088
gbase onsoctcp 0.0.0.0 9088
EOF
#1.1.1.3上:
cat > /opt/gbase/etc/sqlhosts << EOF
gbase001 onsoctcp 1.1.1.2 19088
gbase002 onsoctcp 0.0.0.0 29088
gbase onsoctcp 0.0.0.0 9088
EOF
sed -i 's/^DBSERVERALIASES.*/DBSERVERALIASES gbase/' /opt/gbase/etc/$ONCONFIG
# sed -i 's/FULL_DISK_INIT 0/FULL_DISK_INIT 1/' $GBASEDBTDIR/etc/$ONCONFIG
chmod 777 0b
ontape -p -t 0b
#gbase001主
onmode -m
onmode -d add RSS gbase002
#gbase002备
onmode -d RSS gbase001
#查看结果
onstat -g cluster
#宿主机上传 WeiDbManager
#宿主机上传 pingtest.sh
#宿主机上传 GetNodeInfo.sh
mkdir -p /opt/gbase/sysInfo/WeiShell/
cd /opt/gbase/sysInfo/WeiShell/
rm -fr /opt/gbase/sysInfo/WeiShell/*
rm WeiDbManager -f
rz
#宿主机复制文件到Docker里面
chmod 755 /opt/gbase/sysInfo/WeiShell/WeiDbManager
chmod 755 /opt/gbase/sysInfo/WeiShell/pingtest.sh
chmod 755 /opt/gbase/sysInfo/WeiShell/GetNodeInfo.sh
cd /opt/gbase/sysInfo/WeiShell/
docker cp WeiDbManager gbase001:/home/gbase/sysInfo/WeiShell/
docker cp WeiDbManager gbase002:/home/gbase/sysInfo/WeiShell/
docker cp pingtest.sh gbase001:/home/gbase/sysInfo/WeiShell/
docker cp pingtest.sh gbase002:/home/gbase/sysInfo/WeiShell/
docker cp GetNodeInfo.sh gbase001:/home/gbase/sysInfo/WeiShell/
docker cp GetNodeInfo.sh gbase002:/home/gbase/sysInfo/WeiShell/
#容器里面
cat > ~/start.sh << EOF
#!/bin/bash
echo "---start---"
nohup /home/gbase/sysInfo/WeiShell/WeiDbManager &
nohup /home/gbase/sysInfo/WeiShell/pingtest.sh 1.1.1.1 &
EOF
#宿主机上传: WeiOsManager ,并用root用户运行即可。
mkdir -p /opt/gbase/sysInfo/WeiShell/
cd /opt/gbase/sysInfo/WeiShell/
rz
#宿主机上传:用root用户运行即可。
chmod 755 /opt/gbase/sysInfo/WeiShell/WeiOsManager
nohup /opt/gbase/sysInfo/WeiShell/WeiOsManager &
或
chmod 755 /opt/gbase/sysInfo/WeiShell/WeiOsManager
nohup /opt/gbase/sysInfo/WeiShell/WeiOsManager -l 1.1.1.3 &
docker stop gbase001
docker stop gbase002
docker start gbase001
docker start gbase002
#1.1.1.2上绑定IP
ip addr add 1.1.1.6/24 dev ens33
ip a |grep 1.1.1.
docker exec -it gbase001 /bin/bash
su - gbasedbt
oninit -v
至此,自切换集群 DB-SERVER端境搭建完成。包含程序: WeiOsManager 和 WeiDbManager 。
准备一台到DB服务器网络通的Windows主机,这里配置IP为1.1.1.1。
上传WeiCM.exe执行程序到Windows主机。
在Winddows机器上运行WeiCM.exe程序即可。
程序会检测数据库集群状态,并完成集群故障切换,集群节点自动修复,集群VIP切换。
极端情况下如果有双主情况出现,请决策者取舍:
02:39:14 DR_ERR set to -5
02:39:14 Assert Failed: DR: Log Record Apply Thread Exited Abnormally. Internal Error.
A restart of the database server shall be required to correct
this problem.
02:39:14 GBase Database Server Version 12.10.FC4G1AEE
02:39:14 Who: Session(19, gbasedbt@, 0, 0x45df7fa8)
Thread(44, RSS_apply, 45db9228, 1)
File: hdr/hdrApply.c Line: 580
02:39:14 Results: Database Server must abort
02:39:14 Action: Reinitialize shared memory
02:39:14 stack trace for pid 82 written to /opt/gbase/tmp/af.41456d2
本程序功能:
1、集群中只要有一个节点活着,业务就不会中断。
2、对于故障的节点,只要外部条件修复了,会自动加入新集群。
3、提供故障切换和Vip漂移功能。
友情提示:
1、如果想手动配置集群,比如:想手动决定主节点归属,想从备份恢复从节点。时,请先停止本集群,待你配置完成后,再启动本程序让它帮助你管理和维护集群服务。
测试结果:
1、停数据库库,可以故障切换业务正常。
2、停容器,可以故障切换业务正常。
3、断宿主机网络,可以故障切换业务正常。
本程序更像一个外挂程序,从数据库运维工程的角度出发,解决了一些实际生成需求。