consul安装部署

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.243.204.103consul client新港Consul v1.10.2

2.安装部署

2.1.文件系统规划

  • consul server

    lvcreate -n consullv datavg -L 1G
    mkdir /consul
    mkfs.ext3 /dev/datavg/consullv 
    echo "/dev/datavg/consullv /consul ext3 defaults,noatime,nodiratime 0 0" >>/etc/fstab
    mount -a
    mkdir /consul/data
    mkdir /consul/etc
    mkdir /consul/bin
    mkdir /consul/log
  • consul client

    mkdir -p /opt/consul/data
    mkdir -p /opt/consul/etc
    mkdir -p /opt/consul/bin
    mkdir -p /opt/consul/log

2.2.软件部署

将consul直接复制至/consul/bin(server)和/opt/consul/bin(client)下即可

rsync -e "sudo ssh" consul 10.242.178.130:/consul/bin/
rsync -e "sudo ssh" consul 10.242.178.131:/consul/bin/
rsync -e "sudo ssh" consul 10.242.178.129:/consul/bin/
rsync -e "sudo ssh" consul 10.243.204.103:/opt/consul/bin/

2.3.配置文件

  • server 10.242.178.130 /consul/etc/server.json 首次启动需注册tokens.default并bootstrap_expect设置为1

{
"data_dir": "/consul/data",
"datacenter": "xingang",
"primary_datacenter":"xingang",
"log_level": "INFO",
"server": true,
"bootstrap_expect": 3,
"bind_addr": "10.242.178.130",
"client_addr": "0.0.0.0",
"recursors":["10.237.255.253"],
"start_join": ["10.242.178.129","10.242.178.130","10.242.178.131"],
"retry_join": ["10.242.178.129","10.242.178.130","10.242.178.131"],
"node_name": "dnsservernode1",
"encrypt": "PwGyXsuuc6w0Jx6noxi6PwrN6GeH1HHYBpZ4E77mEwk=",
"log_file":"/consul/log/",
"log_rotate_duration":"24h",
"log_rotate_bytes":10000000,
"log_rotate_max_files":100,
"domain": "sndb",
"ports": {
    "dns": 53
         },
"acl": {
    "enabled": true,          
    "default_policy": "deny",
    "enable_token_persistence":true,
    "tokens":{
    "master":"a5f21285-42de-f589-eded-ffc5443bca00",
    "default":"7a8ea281-c9a2-b559-e3df-578d46752f70"
             }
       },
"ui_config": {
    "enabled": true
             }
}

  • server 10.242.178.131 /consul/etc/server.json

{
"data_dir": "/consul/data",
"datacenter": "xingang",
"primary_datacenter":"xingang",
"log_level": "INFO",
"server": true,
"bootstrap_expect": 3,
"bind_addr": "10.242.178.131",
"client_addr": "0.0.0.0",
"recursors":["10.237.255.253"],
"start_join": ["10.242.178.129","10.242.178.130","10.242.178.131"],
"retry_join": ["10.242.178.129","10.242.178.130","10.242.178.131"],
"node_name": "dnsservernode2",
"encrypt": "PwGyXsuuc6w0Jx6noxi6PwrN6GeH1HHYBpZ4E77mEwk=",
"log_file":"/consul/log/",
"log_rotate_duration":"24h",
"log_rotate_bytes":10000000,
"log_rotate_max_files":100,
"domain": "sndb",
"ports": {
    "dns": 53
         },
"acl": {
    "enabled": true,          
    "default_policy": "deny",
    "enable_token_persistence":true,
    "tokens":{
    "master":"a5f21285-42de-f589-eded-ffc5443bca00",
    "default":"7a8ea281-c9a2-b559-e3df-578d46752f70"
             }
       },
"ui_config": {
    "enabled": true
             }
}

  • server 10.242.178.129 /consul/etc/server.json

{
"data_dir": "/consul/data",
"datacenter": "xingang",
"primary_datacenter":"xingang",
"log_level": "INFO",
"server": true,
"bootstrap_expect": 3,
"bind_addr": "10.242.178.129",
"client_addr": "0.0.0.0",
"recursors":["10.237.255.253"],
"start_join": ["10.242.178.129","10.242.178.130","10.242.178.131"],
"retry_join": ["10.242.178.129","10.242.178.130","10.242.178.131"],
"node_name": "dnsservernode3",
"encrypt": "PwGyXsuuc6w0Jx6noxi6PwrN6GeH1HHYBpZ4E77mEwk=",
"log_file":"/consul/log/",
"log_rotate_duration":"24h",
"log_rotate_bytes":10000000,
"log_rotate_max_files":100,
"domain": "sndb",
"ports": {
    "dns": 53
         },
"acl": {
    "enabled": true,          
    "default_policy": "deny",
    "enable_token_persistence":true,
    "tokens":{
    "master":"a5f21285-42de-f589-eded-ffc5443bca00",
    "default":"7a8ea281-c9a2-b559-e3df-578d46752f70"
             }
       },
"ui_config": {
    "enabled": true
             }
}
  • client 10.243.204.103 /opt/consul/etc/client.json

{
"data_dir": "/opt/consul/data",
"enable_script_checks": true,
"bind_addr": "10.243.204.103",
"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.243.204.103",
"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"
    }
}
}

2.5.启动集群

  • server

cd /consul
nohup  bin/consul agent -config-dir=etc/ &
  • client

cd /opt/consul
nohup  bin/consul agent -config-dir=etc/ &

2.6.状态检查

[root@lobapredb128 consul]# export CONSUL_HTTP_TOKEN=a5f21285-42de-f589-eded-ffc5443bca00
[root@lobapredb128 consul]# bin/consul operator raft list-peers
Node            ID                                 Address              State     Voter  RaftProtocol
dnsservernode1  c30c7352-ca26-938d-9527-cb934802a94c  10.242.178.130:8300  leader    true   3
dnsservernode2  0aff7e86-6ef3-63e9-6198-41046206b371  10.242.178.131:8300  follower  true   3
dnsservernode3  f5ff7588-6737-de5a-4f06-eb2bcbb691a4  10.242.178.129:8300  follower  true   3
[root@lobapredb128 consul]# bin/consul members
Node            Address              Status  Type    Build   Protocol  DC       Segment
dnsservernode1  10.242.178.130:8301  alive   server  1.10.2  2         xingang  <all>
dnsservernode2  10.242.178.131:8301  alive   server  1.10.2  2         xingang  <all>
dnsservernode3  10.242.178.129:8301  alive   server  1.10.2  2         xingang  <all>
10.243.204.103  10.243.204.103:8301  alive   client  1.10.2  2         xingang  <default>

2.7.域名测试

[root@lobapredb128 ~]# dig consul.service.sndb @10.242.178.131
​
​
consul.service.sndb.    0   IN  A   10.242.178.131
consul.service.sndb.    0   IN  A   10.242.178.129
consul.service.sndb.    0   IN  A   10.242.178.130
​
[root@lobapredb128 ~]# dig consul.service.sndb @10.242.178.130
​
consul.service.sndb.    0   IN  A   10.242.178.131
consul.service.sndb.    0   IN  A   10.242.178.129
consul.service.sndb.    0   IN  A   10.242.178.130
​
​
[root@lobapredb128 ~]# dig consul.service.sndb @10.242.178.129
​
consul.service.sndb.    0   IN  A   10.242.178.131
consul.service.sndb.    0   IN  A   10.242.178.130
consul.service.sndb.    0   IN  A   10.242.178.129
​

3.服务注册

3.1.配置文件

  • client 10.243.204.103 /opt/consul/etc/service.json

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

3.2.生效配置

  • client 10.243.204.103

[root@lobapredb162 ~]# /opt/consul/bin/consul reload
Configuration reload triggered

3.3.域名测试

  • client 10.243.204.103

[root@lobapredb162 ~]# dig mysqlro.service.sndb @10.242.178.131 
​
mysqlro.service.sndb.   0   IN  A   10.243.204.103
​
​
[root@lobapredb162 ~]# dig mysqlro.service.sndb @10.242.178.130
​
mysqlro.service.sndb.   0   IN  A   10.243.204.103
​
​
[root@lobapredb162 ~]# dig mysqlro.service.sndb @10.242.178.129
​
mysqlro.service.sndb.   0   IN  A   10.243.204.103
​

4.集群高可用测试

4.1.leader节点宕机

  • 10.242.178.130

kill server端consul进程

[root@lobapredb128 consul]# bin/consul operator raft list-peers
Node            ID                                 Address              State     Voter  RaftProtocol
dnsservernode1  c30c7352-ca26-938d-9527-cb934802a94c  10.242.178.130:8300  leader    true   3
dnsservernode2  0aff7e86-6ef3-63e9-6198-41046206b371  10.242.178.131:8300  follower  true   3
dnsservernode3  f5ff7588-6737-de5a-4f06-eb2bcbb691a4  10.242.178.129:8300  follower  true   3
[root@lobapredb128 consul]# ps -ef|grep -i consul
root     15902     1  1 11:57 ?        00:03:49 bin/consul agent -config-dir=etc/
root     20595 20016  0 16:25 pts/0    00:00:00 grep -i consul
[root@lobapredb128 consul]# kill -9 15902
[root@lobapredb128 consul]# bin/consul operator raft list-peers
Error getting peers: Failed to retrieve raft configuration: Get "http://127.0.0.1:8500/v1/operator/raft/configuration": dial tcp 127.0.0.1:8500: connect: connection refused
  • 10.242.178.129 leader宕机后10s切换为新leader

重新选举后测试域名consul.service.sndb和mysqlro.service.sndb

[root@lobapredb127 consul]#  export CONSUL_HTTP_TOKEN=a5f21285-42de-f589-eded-ffc5443bca00
[root@lobapredb127 consul]# bin/consul operator raft list-peers
Node            ID                                 Address              State     Voter  RaftProtocol
dnsservernode2  0aff7e86-6ef3-63e9-6198-41046206b371  10.242.178.131:8300  follower  true   3
dnsservernode3  f5ff7588-6737-de5a-4f06-eb2bcbb691a4  10.242.178.129:8300  leader    true   3
[root@lobapredb126 ~]# dig consul.service.sndb @10.242.178.129
​
consul.service.sndb.    0   IN  A   10.242.178.131
consul.service.sndb.    0   IN  A   10.242.178.129
​
​
[root@lobapredb126 ~]# dig consul.service.sndb @10.242.178.131
​
consul.service.sndb.    0   IN  A   10.242.178.131
consul.service.sndb.    0   IN  A   10.242.178.129
​
​
[root@lobapredb126 ~]# dig mysqlro.service.sndb @10.242.178.131
​
mysqlro.service.sndb.   0   IN  A   10.243.204.103
​
​
[root@lobapredb126 ~]# dig mysqlro.service.sndb @10.242.178.129
​
​
mysqlro.service.sndb.   0   IN  A   10.243.204.103
​
  • 10.242.178.130

恢复原leader节点后进行域名测试

[root@lobapredb128 consul]# bin/consul operator raft list-peers
Node            ID                                    Address              State     Voter  RaftProtocol
dnsservernode2  0aff7e86-6ef3-63e9-6198-41046206b371  10.242.178.131:8300  follower  true   3
dnsservernode3  f5ff7588-6737-de5a-4f06-eb2bcbb691a4  10.242.178.129:8300  leader    true   3
dnsservernode1  c30c7352-ca26-938d-9527-cb934802a94c  10.242.178.130:8300  follower  true   3
[root@lobapredb128 consul]# dig consul.service.sndb @10.242.178.130
​
consul.service.sndb.    0   IN  A   10.242.178.130
consul.service.sndb.    0   IN  A   10.242.178.129
consul.service.sndb.    0   IN  A   10.242.178.131
​
[root@lobapredb128 consul]# dig mysqlro.service.sndb @10.242.178.130
​
mysqlro.service.sndb.   0   IN  A   10.243.204.103
​

4.2.follower节点宕机

  • 10.242.178.131

[root@lobapredb127 consul]# ps -ef|grep -i consul
root      4316     1  1 17:34 pts/0    00:00:02 bin/consul agent -config-dir=etc/
root      5148  3923  0 17:37 pts/0    00:00:00 grep -i consul
[root@lobapredb127 consul]# kill -9 4316
​
  • 10.242.178.130

[root@lobapredb128 consul]# bin/consul operator raft list-peers
Node            ID                                    Address              State     Voter  RaftProtocol
dnsservernode3  f5ff7588-6737-de5a-4f06-eb2bcbb691a4  10.242.178.129:8300  follower  true   3
dnsservernode1  c30c7352-ca26-938d-9527-cb934802a94c  10.242.178.130:8300  leader    true   3
[root@lobapredb128 consul]# dig consul.service.sndb @10.242.178.129
​
consul.service.sndb.    0   IN  A   10.242.178.130
consul.service.sndb.    0   IN  A   10.242.178.129
​
​
[root@lobapredb128 consul]# dig consul.service.sndb @10.242.178.130
​
consul.service.sndb.    0   IN  A   10.242.178.130
consul.service.sndb.    0   IN  A   10.242.178.129
​
[root@lobapredb128 consul]# dig mysqlro.service.sndb @10.242.178.129
​
mysqlro.service.sndb.   0   IN  A   10.243.204.103
​
​
[root@lobapredb128 consul]# dig mysqlro.service.sndb @10.242.178.130
​
mysqlro.service.sndb.   0   IN  A   10.243.204.103
​

4.3.超半数节点宕机

集群当前状态

[root@lobapredb128 consul]# bin/consul operator raft list-peers
Node            ID                                 Address              State     Voter  RaftProtocol
dnsservernode3  f5ff7588-6737-de5a-4f06-eb2bcbb691a4  10.242.178.129:8300  follower  true   3
dnsservernode1  c30c7352-ca26-938d-9527-cb934802a94c  10.242.178.130:8300  leader    true   3
dnsservernode2  0aff7e86-6ef3-63e9-6198-41046206b371  10.242.178.131:8300  follower  true   3

停止两台follower节点 后集群状态,集群无法完成选举

[root@lobapredb128 consul]# bin/consul operator raft list-peers
Error getting peers: Failed to retrieve raft configuration: Unexpected response code: 500 (No cluster leader)
[root@lobapredb128 consul]# bin/consul members
Node            Address              Status  Type    Build   Protocol  DC       Segment
dnsservernode1  10.242.178.130:8301  alive   server  1.10.2  2         xingang  <all>
dnsservernode2  10.242.178.131:8301  left    server  1.10.2  2         xingang  <all>
dnsservernode3  10.242.178.129:8301  failed  server  1.10.2  2         xingang  <all>
10.243.204.103  10.243.204.103:8301  alive   client  1.10.2  2         xingang  <default>

域名测试,域名解析正常,但因无leader节点,集群服务注册/探测等功能失效,生效域名为集群失效前状态

[root@lobapredb128 consul]# dig consul.service.sndb @10.242.178.130
​
consul.service.sndb.    0   IN  A   10.242.178.130
consul.service.sndb.    0   IN  A   10.242.178.129
​
​
[root@lobapredb128 consul]# dig mysqlro.service.sndb @10.242.178.130
​
mysqlro.service.sndb.   0   IN  A   10.243.204.103
​

4.4.高可用测试总结

3节点集群下高可用测试

测试场景DNS解析服务注册服务探测说明
leader节点宕机正常正常正常选举期间服务注册和探测不可用,DNS解析正常,选举时间13s
follower节点宕机正常正常正常单台follower节点宕机无影响
超半数节点宕机正常不可用不可用服务状态为集群状态正常情况下最终状态

5.访问控制

5.1.policy

初始策略,所有node和service均可向server注册

node_prefix "" {
  policy="write"
  }
service_prefix "" {
  policy="write"
  }

5.2.token

client使用基于policy生成的token与server端通信:7a8ea281-c9a2-b559-e3df-578d46752f70

{
"data_dir": "/opt/consul/data",
"enable_script_checks": true,
"bind_addr": "10.243.204.103",
"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.243.204.103",
"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"
    }
}
}

5.3.隔离节点

  • 集群状态及域名探测

[root@lobapredb128 consul]# dig mysqlro.service.sndbxingang @10.242.178.130
​
mysqlro.service.sndbxingang. 0  IN  A   10.243.204.103
mysqlro.service.sndbxingang. 0  IN  A   10.243.204.104
[root@lobapredb128 consul]# bin/consul members
Node            Address              Status  Type    Build   Protocol  DC       Segment
dnsservernode1  10.242.178.130:8301  alive   server  1.10.2  2         xingang  <all>
dnsservernode2  10.242.178.131:8301  alive   server  1.10.2  2         xingang  <all>
dnsservernode3  10.242.178.129:8301  alive   server  1.10.2  2         xingang  <all>
10.243.204.103  10.243.204.103:8301  alive   client  1.10.2  2         xingang  <default>
10.243.204.104  10.243.204.104:8301  alive   client  1.10.2  2         xingang  <default>
  • 更新policy

[root@lobapredb128 consul]# export CONSUL_HTTP_TOKEN=a5f21285-42de-f589-eded-ffc5443bca00
[root@lobapredb128 consul]# bin/consul acl policy read -name client -meta
ID:           ab253c6d-7b8e-37f5-ac98-5be3ad7dd797
Name:         client
Description:  
Datacenters:  
Hash:         7bcf1a65681e133eb14e11d05ec5658ffd24281f305f7bea0709dd98b5b784ab
Create Index: 11
Modify Index: 23246
Rules:
node_prefix "" {  policy="write"  }service_prefix "" {  policy="write"  }
[root@lobapredb128 consul]# bin/consul acl policy update -name client -rules 'node "10.243.204.103"{policy="deny"}node_prefix "" {  policy="write"  }service_prefix "" {  policy="write"  }'
ID:           ab253c6d-7b8e-37f5-ac98-5be3ad7dd797
Name:         client
Description:  
Datacenters:  
Rules:
node "10.243.204.103"{policy="deny"}node_prefix "" {  policy="write"  }service_prefix "" {  policy="write"  }
[root@lobapredb128 consul]# dig mysqlro.service.sndbxingang @10.242.178.130
​
mysqlro.service.sndbxingang. 0  IN  A   10.243.204.104
​
​

5.4.解除隔离

[root@lobapredb128 consul]# bin/consul acl policy update -name client -rules 'node_prefix "" {  policy="write"  }service_prefix "" {  policy="write"  }'
ID:           ab253c6d-7b8e-37f5-ac98-5be3ad7dd797
Name:         client
Description:  
Datacenters:  
Rules:
node_prefix "" {  policy="write"  }service_prefix "" {  policy="write"  }
[root@lobapredb128 consul]# dig mysqlro.service.sndbxingang @10.242.178.130
​
mysqlro.service.sndbxingang. 0  IN  A   10.243.204.103
mysqlro.service.sndbxingang. 0  IN  A   10.243.204.104
​

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值