consul+mysql高可用部署

1.集群规划

IP类型机房说明
10.242.178.130consul server新港Consul v1.10.2
10.242.178.131consul server新港Consul v1.10.2
10.242.178.129consul server新港Consul v1.10.2
10.238.199.17mysql+consul client新港mysql 5.7.19-17
10.238.199.18mysql+consul client新港mysql 5.7.19-17

2.安装部署

2.1.consul

consul安装部署参考"consul安装部署.md"

2.2.mysql

mysql安装部署参考mysqlrds安装部署手册

3.服务注册

3.1.主从关系

IP主从
10.238.199.17
10.238.199.18

3.2.主库服务注册

10.238.199.17 /opt/consul/etc/client.json

{
"data_dir": "/opt/consul/data",
"enable_script_checks": true,
"bind_addr": "10.238.199.17",
"client_addr": "0.0.0.0",
"retry_join": ["10.242.178.129","10.242.178.130","10.242.178.131"],
"retry_interval": "5s",
"rejoin_after_leave": true,
"start_join": ["10.242.178.129","10.242.178.130","10.242.178.131"],
"node_name": "10.238.199.17",
"datacenter": "xingang",
"primary_datacenter":"xingang",
"encrypt": "PwGyXsuuc6w0Jx6noxi6PwrN6GeH1HHYBpZ4E77mEwk=",
"log_file":"/opt/consul/log/",
"log_rotate_duration":"24h",
"log_rotate_bytes":10000000,
"log_rotate_max_files":100,
"encrypt_verify_incoming": true,
"encrypt_verify_outgoing": true,
"enable_local_script_checks":true,
"acl":{
"tokens": {
      "default":"7a8ea281-c9a2-b559-e3df-578d46752f70"
    }
}
}

10.238.199.17 /opt/consul/etc/services.json

{
"services": [
    {
        "name": "mysqlrw",
        "id": "10.238.199.17_rw",
        "address": "10.238.199.17",
        "port": 3306, 
        "check": { 
            "id":"10.238.199.17_rw_ck",
            "name":"check write domain",
            "tcp":"10.238.199.17:3306",
            "interval": "5s",
            "timeout": "1s"
        }   
    },
    {
        "name": "mysqlro",
        "id": "10.238.199.17_ro",
        "address": "10.238.199.17",
        "port": 3306, 
        "check": { 
            "id":"10.238.199.17_ro_ck",
            "name":"check readonly domain",
            "args":["/bin/bash","/opt/consul/bin/check.sh"],
            "interval": "5s",
            "timeout": "1s"
        }   
    }
    
]
}

10.238.199.17 /opt/consul/bin/check.sh

探测只读域名A记录是否除自己外有无其它A记录且本地3306端口正常,是:返回0(生效自己) 否:返回非0(不生效自己)

rs=`dig +nocmd mysqlro.service.sndbxingang A @10.242.178.129 +noall +answer +time=1 +tries=1|grep mysqlro|grep -v 10.238.199.17|wc -l`
rs1=`netstat -anp|grep 3306|grep LISTEN|wc -l`
if [ $rs == '0' ] && [ $rs1 == '1' ]
then
exit 0
fi
exit 10

3.3.从库服务注册

10.238.199.18 /opt/consul/etc/client.json

{
"data_dir": "/opt/consul/data",
"enable_script_checks": true,
"bind_addr": "10.238.199.18",
"client_addr": "0.0.0.0",
"retry_join": ["10.242.178.129","10.242.178.130","10.242.178.131"],
"retry_interval": "5s",
"rejoin_after_leave": true,
"start_join": ["10.242.178.129","10.242.178.130","10.242.178.131"],
"node_name": "10.238.199.18",
"datacenter": "xingang",
"primary_datacenter":"xingang",
"encrypt": "PwGyXsuuc6w0Jx6noxi6PwrN6GeH1HHYBpZ4E77mEwk=",
"log_file":"/opt/consul/log/",
"log_rotate_duration":"24h",
"log_rotate_bytes":10000000,
"log_rotate_max_files":100,
"encrypt_verify_incoming": true,
"encrypt_verify_outgoing": true,
"enable_local_script_checks":true,
"acl":{
"tokens": {
      "default":"7a8ea281-c9a2-b559-e3df-578d46752f70"
    }
}
}

10.238.199.18 /opt/consul/etc/services.json

{
"services": [
    {
        "name": "mysqlro",
        "id": "10.238.199.18_ro",
        "address": "10.238.199.18",
        "port": 3306, 
        "check": { 
            "id":"10.238.199.18_ro_ck",
            "name":"check readonly domain",
            "tcp":"10.238.199.18:3306",
            "interval": "5s",
            "timeout": "1s"
        }   
    }
    
]
}

3.4.域名测试

读写域名

[root@sndspgdpredb352 consul]# dig +nocmd  mysqlrw.service.xingang.sndbxingang @10.242.178.132 +noall +answer
mysqlrw.service.xingang.sndbxingang. 0 IN A 10.238.199.17

只读域名

[root@sndspgdpredb352 consul]# dig +nocmd  mysqlro.service.xingang.sndbxingang @10.242.178.131 +noall +answer
mysqlro.service.xingang.sndbxingang. 0 IN A 10.238.199.18

4.在线切换

1.停止主库consul client --读写域名失效

[root@sndspgdpredb353 ~]# ps -ef|grep -i consul
root     29264     1  0 11:25 ?        00:00:30 bin/consul agent -config-dir=etc/
root     29365 27700  0 14:55 pts/0    00:00:00 grep -i consul
[root@sndspgdpredb353 ~]# kill -9 29264
[root@sndspgdpredb353 ~]# dig +nocmd  mysqlrw.service.xingang.sndbxingang @10.242.178.131 +noall +answer

2.mha切换主从 --使用rds脚本模拟mha切换

[root@sndspgdpredb353 ~]# mysql_ha_online_switch -n

3.修改新主/opt/consul/etc/services.json文件并reload --读写只读域名指向新主

[root@sndspgdpredb352 consul]# cat /opt/consul/etc/services.json 
{
"services": [
    {
        "name": "mysqlrw",
        "id": "10.238.199.18_rw",
        "address": "10.238.199.18",
        "port": 3306, 
        "check": { 
            "id":"10.238.199.18_rw_ck",
            "name":"check write domain",
            "tcp":"10.238.199.18:3306",
            "interval": "5s",
            "timeout": "1s"
        }   
    },
    {
        "name": "mysqlro",
        "id": "10.238.199.18_ro",
        "address": "10.238.199.18",
        "port": 3306, 
        "check": { 
            "id":"10.238.199.18_ro_ck",
            "name":"check readonly domain",
            "args":["/bin/bash","/opt/consul/bin/check.sh"],
            "interval": "5s",
            "timeout": "1s"
        }   
    }
    
]
}
[root@sndspgdpredb352 consul]# bin/consul reload
[root@sndspgdpredb352 consul]# dig +nocmd  mysqlrw.service.xingang.sndbxingang @10.242.178.131 +noall +answer
mysqlrw.service.xingang.sndbxingang. 0 IN A 10.238.199.18
[root@sndspgdpredb352 consul]# dig +nocmd  mysqlro.service.xingang.sndbxingang @10.242.178.131 +noall +answer
mysqlro.service.xingang.sndbxingang. 0 IN A 10.238.199.18

4.修改老主/opt/consul/etc/services.json文件并启动client --只读域名指向老主

[root@sndspgdpredb353 consul]# cat  /opt/consul/etc/services.json 
{
"services": [
    {
        "name": "mysqlro",
        "id": "10.238.199.17_ro",
        "address": "10.238.199.17",
        "port": 3306, 
        "check": { 
            "id":"10.238.199.17_ro_ck",
            "name":"check readonly domain",
            "tcp":"10.238.199.17:3306",
            "interval": "5s",
            "timeout": "1s"
        }   
    }
    
]
}
[root@sndspgdpredb353 consul]# nohup bin/consul agent --config-dir=etc/ >/dev/null &
[1] 5708
nohup: ignoring input and redirecting stderr to stdout
[root@sndspgdpredb353 consul]# dig +nocmd  mysqlro.service.xingang.sndbxingang @10.242.178.131 +noall +answer
mysqlro.service.xingang.sndbxingang. 0 IN A 10.238.199.17

5.故障切换

5.1.从库宕机

从库:10.238.199.17 --宕机场景包括:1.数据库进程停止 2.服务器宕机(consul client失联)

  • 数据库进程停止 --只读域名A记录自动切换至主库

[root@sndspgdpredb353 consul]# dig +nocmd  mysqlro.service.xingang.sndbxingang @10.242.178.131 +noall +answer
mysqlro.service.xingang.sndbxingang. 0 IN A 10.238.199.18
  • 数据库进程启动 --只读域名A记录自动切换至从库

[root@sndspgdpredb353 consul]# dig +nocmd  mysqlro.service.xingang.sndbxingang @10.242.178.131 +noall +answer
mysqlro.service.xingang.sndbxingang. 0 IN A 10.238.199.17
  • consul client进程停止 --只读域名A记录自动切换至主库

[root@sndspgdpredb353 consul]# dig +nocmd  mysqlro.service.xingang.sndbxingang @10.242.178.131 +noall +answer
mysqlro.service.xingang.sndbxingang. 0 IN A 10.238.199.18
  • consul client进程启动 --只读域名A记录自动切换至从库

[root@sndspgdpredb353 consul]# dig +nocmd  mysqlro.service.xingang.sndbxingang @10.242.178.131 +noall +answer
mysqlro.service.xingang.sndbxingang. 0 IN A 10.238.199.17

5.2.主库宕机

主库:10.238.199.18

1.mha切换10.238.199.17为新主 ---使用rds脚本模拟mha切换

[root@sndspgdpredb353 ~]# mysql_ha_failover

2.修改新主/opt/consul/etc/services.json文件并reload --读写只读域名指向新主

[root@sndspgdpredb353 consul]# cat /opt/consul/etc/services.json 
{
"services": [
    {
        "name": "mysqlrw",
        "id": "10.238.199.17_rw",
        "address": "10.238.199.17",
        "port": 3306, 
        "check": { 
            "id":"10.238.199.17_rw_ck",
            "name":"check write domain",
            "tcp":"10.238.199.17:3306",
            "interval": "5s",
            "timeout": "1s"
        }   
    },
    {
        "name": "mysqlro",
        "id": "10.238.199.17_ro",
        "address": "10.238.199.17",
        "port": 3306, 
        "check": { 
            "id":"10.238.199.17_ro_ck",
            "name":"check readonly domain",
            "args":["/bin/bash","/opt/consul/bin/check.sh"],
            "interval": "5s",
            "timeout": "1s"
        }   
    }
    
]
}
[root@sndspgdpredb353 consul]# bin/consul reload
[root@sndspgdpredb353 consul]# dig +nocmd  mysqlro.service.xingang.sndbxingang @10.242.178.131 +noall +answer
mysqlro.service.xingang.sndbxingang. 0 IN A 10.238.199.17
[root@sndspgdpredb353 consul]# dig +nocmd  mysqlrw.service.xingang.sndbxingang @10.242.178.131 +noall +answer
mysqlrw.service.xingang.sndbxingang. 0 IN A 10.238.199.17

3.老主恢复后修改/opt/consul/etc/services.json并启动client(复制状态恢复前确保consul进程停止,防止读写域名注册) --只读域名指向老主

[root@sndspgdpredb352 consul]# cat etc/services.json 
{
"services": [
    {
        "name": "mysqlro",
        "id": "10.238.199.18_ro",
        "address": "10.238.199.18",
        "port": 3306, 
        "check": { 
            "id":"10.238.199.18_ro_ck",
            "name":"check readonly domain",
            "tcp":"10.238.199.18:3306",
            "interval": "5s",
            "timeout": "1s"
        }   
    }
    
]
}
[root@sndspgdpredb352 consul]# bin/consul reload
Error reloading: Put "http://127.0.0.1:8500/v1/agent/reload": dial tcp 127.0.0.1:8500: connect: connection refused
[root@sndspgdpredb352 consul]# nohup bin/consul agent --config-dir=etc/ >/dev/null &
[1] 10513
nohup: ignoring input and redirecting stderr to stdout
[root@sndspgdpredb352 consul]# dig +nocmd  mysqlrw.service.xingang.sndbxingang @10.242.178.131 +noall +answer
mysqlrw.service.xingang.sndbxingang. 0 IN A 10.238.199.17
[root@sndspgdpredb352 consul]# dig +nocmd  mysqlro.service.xingang.sndbxingang @10.242.178.131 +noall +answer
mysqlro.service.xingang.sndbxingang. 0 IN A 10.238.199.18

附录


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值