当前位置:   article > 正文

Orchestrator部署

Orchestrator部署

一、Orchestrator简介

Orchestrator是一款开源(go编写)的MySQL复制拓扑管理工具,支持MySQL主从复制拓扑关系的调整、主库故障自动切换(包括备库升级为主库和vip切换)、手动主从切换等功能。

提供Web界面展示MySQL集群的拓扑关系及状态,可以更改MySQL实例的部分配置信息,也提供命令行和api接口。

是一款与MHA类似的mysql主从管理工具,相比于MHA,orchestrator有web界面展示主从复制拓扑图,而且MHA

管理节点的单点问题,orchestrator也能通过raft协议避免(将orchestrator服务部署在所有mysql主从服务器上)

 

二、主机规划

ip

hostname

主从角色

占用端口

172.16.84.150/22

master1

3306,3000

172.16.84.151/22

master2

从1

3306,3000

172.16.84.152/22

slave

从2

3306,3000

三、搭建一主二从mysql集群

详见

https://www.yuque.com/sipc/database/gdv0ww#GCoOA

配置两个从节点同步时,执行如下:

change master to master_host='master1',master_port=3306,master_user='rpl_user',master_password='****',master_auto_position=1,MASTER_HEARTBEAT_PERIOD=2,MASTER_CONNECT_RETRY=1,MASTER_RETRY_COUNT=86400;

 

MASTER_RETRY_COUNT: 如果达到这个次数,一旦主库恢复,需要手动start slave,不会自动恢复

四、部署orchestrator集群

1、三台节点配置/etc/hosts和免密

cat /etc/hosts

172.16.84.150 master1

172.16.84.151 master2

172.16.84.152 slave

 

ssh-copy-id master1

ssh-copy-id master2

ssh-copy-id slave

 

2、安装orchestrator服务端

rpm -ivh jq-1.6-2.el7.x86_64.rpm

rpm -ivh oniguruma-6.8.2-1.el7.x86_64.rpm

rpm -ivh orchestrator-3.2.3-1.x86_64.rpm

 

CREATE USER 'orchestrator'@'172.16.%' IDENTIFIED BY '****';

GRANT SUPER, PROCESS, REPLICATION SLAVE, RELOAD ON *.* TO 'orchestrator'@'172.16.%';

GRANT SELECT ON mysql.slave_master_info TO 'orchestrator'@'172.16.%';

 

3、配置orchestrator文件

修改配置文件/usr/local/orchestrator/orchestrator-sqlite.conf.json:

"MySQLTopologyUser": "orchestrator",

"MySQLTopologyPassword": "****",

"SQLite3DataFile": "/usr/local/orchestrator/orchestrator.sqlite3",

"DefaultInstancePort": 3306,

"RecoverMasterClusterFilters": [

   "*"

 ],

"RecoverIntermediateMasterClusterFilters": [

   "*"

 ],

"PostFailoverProcesses": [

   "echo `date +'%Y-%m-%d %T'`,'(for all types) Recovered from {failureType} on {failureCluster}. Failed: {failedHost}:{failedPort}; Successor: {successorHost}:{successorPort}' >> /tmp/recovery.log",

   "/usr/local/orchestrator/orch_hook.sh {failureType} {failureClusterAlias} {failedHost} {successorHost} >> /tmp/orch.log"

 ],

添加raft配置到orchestrator-sqlite.conf.json,实现orchestrator高可用(RaftBind每台机器设为本机ip):

 "RaftEnabled":true,

 "RaftDataDir":"/usr/local/orchestrator",

"RaftBind":"172.16.84.151",

 "DefaultRaftPort":10008,

 "RaftNodes":[

   "172.16.84.150",

   "172.16.84.151",

   "172.16.84.152"

 ]

4、配置vip脚本

/usr/local/orchestrator/orch_hook.sh为启停vip的脚本路径,172.16.84.149为vip,标红的每台不同,内容如下

root@master1[/soft]# cat /usr/local/orchestrator/orch_hook.sh

#!/bin/bash

isitdead=$1

cluster=$2

oldmaster=$3

newmaster=$4

mysqluser="orchestrator"

export MYSQL_PWD="*****"

logfile="/var/log/orch_hook.log"

if [[ $isitdead == "DeadMaster" ]]; then

      array=( eth0 "172.16.84.149" root "172.16.84.150")

       interface=${array[0]}

       IP=${array[1]}

       user=${array[2]}

       if [ ! -z ${IP} ] ; then

               echo $(date)

               echo "Revocering from: $isitdead"

               echo "New master is: $newmaster"

               echo "/usr/local/orchestrator/orch_vip.sh -d 1 -n $newmaster -i ${interface} -I ${IP} -u ${user} -o $oldmaster" | tee $logfile

              /usr/local/orchestrator/orch_vip.sh -d 1 -n $newmaster -i ${interface} -I ${IP} -u ${user} -o $oldmaster

       else

               echo "Cluster does not exist!" | tee $logfile

       fi

elif [[ $isitdead == "DeadIntermediateMasterWithSingleSlaveFailingToConnect" ]]; then

      array=( eth0 "172.16.84.149" root "172.16.84.150")

       interface=${array[0]}

       IP=${array[3]}

       user=${array[2]}

       slavehost=`echo $5 | cut -d":" -f1`

       echo $(date)

       echo "Revocering from: $isitdead"

       echo "New intermediate master is: $slavehost"

       echo "/usr/local/orchestrator/orch_vip.sh -d 1 -n $slavehost -i ${interface} -I ${IP} -u ${user} -o $oldmaster" | tee $logfile

      /usr/local/orchestrator/orch_vip.sh -d 1 -n $slavehost -i ${interface} -I ${IP} -u ${user} -o $oldmaster

elif [[ $isitdead == "DeadIntermediateMaster" ]]; then

       array=( eth0 "172.16.84.149" root "172.16.84.150")

       interface=${array[0]}

       IP=${array[3]}

       user=${array[2]}

       slavehost=`echo $5 | sed -E "s/:[0-9]+//g" | sed -E "s/,/ /g"`

       showslave=`mysql -h$newmaster -u$mysqluser -sN -e "SHOW SLAVE HOSTS;" | awk '{print $2}'`

       newintermediatemaster=`echo $slavehost $showslave | tr ' ' '\n' | sort | uniq -d`

       echo $(date)

       echo "Revocering from: $isitdead"

       echo "New intermediate master is: $newintermediatemaster"

       echo "/usr/local/orchestrator/orch_vip.sh -d 1 -n $newintermediatemaster -i ${interface} -I ${IP} -u ${user} -o $oldmaster" | tee $logfile

      /usr/local/orchestrator/orch_vip.sh -d 1 -n $newintermediatemaster -i ${interface} -I ${IP} -u ${user} -o $oldmaster

fi

 

附上orch_vip.sh脚本

推荐阅读
相关标签