1. 程式人生 > >consul 1.0 server cluster集群配置全解密

consul 1.0 server cluster集群配置全解密

安裝 consul consul

一、背景故事:上周四聽了美的MySQL數據庫利用consul實現高可用,還有redis 集群模式,讓我對consul產生了濃厚的興趣,特花了三四天的時間研究consul集群,consul的特點是什麽呢?

1、 使用 Raft 算法來保證一致性, 比復雜的 Paxos 算法更直接. 相比較而言, zookeeper 采用的是Paxos, 而 etcd 使用的則是 Raft.

2、支持多數據中心,內外網的服務采用不同的端口進行監聽。 多數據中心集群可以避免單數據中心的單點故障,而其部署則需要考慮網絡延遲, 分片等情況等. zookeeper和 etcd 均不提供多數據中心功能的支持. 滿足多數據中心架構

3、支持健康檢查. etcd 不提供此功能.

4、支持 http 和 dns 協議接口. zookeeper 的集成較為復雜,etcd 只支持 http 協議. 有DNS功能,支持REST API

5、官方提供web管理界面, etcd 無此功能.

6、部署簡單,運維友好,無依賴,go的二進制程序copy過來就能用了,一個程序搞定,可以結合ansible來推送。

廢話不多說直接上部署教程

二、consul cluster go環境設置

官網地址:https://www.consul.io/

1.0版本的consul 需go1.9版本及以上

安裝golang1.4
cd /root
wget https://storage.googleapis.com/golang/go1.4-bootstrap-20170531.tar.gz  
tar -xf go1.4-bootstrap-20170531.tar.gz  
cd go/src  
./make.bash  
  
成功後信息  
Installed Go for linux/amd64 in /home/test/go  
Installed commands in /home/test/go/bin  
cd  /root  
mv go go1.4  

安裝golang1.9
wget https://storage.googleapis.com/golang/go1.9.src.tar.gz  
tar -xf go1.9.src.tar.gz  
cd go/src  
./all.bash  
 
cd /root 
mv go /usr/local/go1.9  
vim /etc/profile  
source /etc/profile  
export PATH=$PATH:/usr/local/go1.9/bin  
go version

三、consul cluster 集群部署

假設我們要創建3個節點的集群,IP為:
創建consul配置文件consul節點默認的名字就是本機的hostname,所以盡量起一個含義清晰的名字。
當然也可以在配置文件中使用node指定
mha120: 192.168.56.120
tomcat102: 192.168.56.121
tomcat103: 192.168.56.122
unzip consul_1.0.0_linux_amd64.zip
cp consul  /usr/local/bin
which consul
/usr/local/bin/consul
mkdir -p /etc/consul
mkdir /data/consul/data -p
三個服務器都做以上操作
在120上創建配置文件
cat >/etc/consul/consul_config.json <<EOF
{
    "advertise_addr": "192.168.56.120",
    "bind_addr": "192.168.56.120",
    "domain": "consul",
    "bootstrap_expect": 3,
    "server": true,
    "datacenter": "consul-cluster",
    "data_dir": "/data/consul/data",
    "enable_syslog": true,
    "performance": {
      "raft_multiplier": 1
    },
    "dns_config": {
        "allow_stale": true,
        "max_stale": "15s"
    },
    "retry_join": [
        "192.168.56.121",
        "192.168.56.122"
    ],
    "retry_interval": "10s",
    "skip_leave_on_interrupt": true,
    "leave_on_terminate": false,
    "ports": {
        "dns": 53,
        "http": 80
    },
    "recursors": [
        "114.114.114.114"
    ],
    "rejoin_after_leave": true,
    "addresses": {
        "http": "0.0.0.0",
        "dns": "0.0.0.0"
    }
}
EOF

chown -R  consul:consul  /data/consul/data
=========================================================================================
                    192.168.56.121 配置文件
=========================================================================================
cat >/etc/consul/consul_config.json <<EOF
{
    "advertise_addr": "192.168.56.121",
    "bind_addr": "192.168.56.121",
    "domain": "consul",
    "bootstrap_expect": 3,
    "server": true,
    "datacenter": "consul-cluster",
    "data_dir": "/data/consul/data",
    "enable_syslog": true,
    "performance": {
      "raft_multiplier": 1
    },
    "dns_config": {
        "allow_stale": true,
        "max_stale": "15s"
    },
    "retry_join": [
        "192.168.56.120",
        "192.168.56.122"
    ],
    "retry_interval": "10s",
    "skip_leave_on_interrupt": true,
    "leave_on_terminate": false,
    "ports": {
        "dns": 53,
        "http": 80
    },
    "recursors": [
        "114.114.114.114"
    ],
    "rejoin_after_leave": true,
    "addresses": {
        "http": "0.0.0.0",
        "dns": "0.0.0.0"
    }
}
EOF
==============================================================================
                         192.168.56.122 配置文件
===============================================================================
cat >/etc/consul/consul_config.json <<EOF
{
    "advertise_addr": "192.168.56.122",
    "bind_addr": "192.168.56.122",
    "domain": "consul",
    "bootstrap_expect": 3,
    "server": true,
    "datacenter": "consul-cluster",
    "data_dir": "/data/consul/data",
    "enable_syslog": true,
    "performance": {
      "raft_multiplier": 1
    },
    "dns_config": {
        "allow_stale": true,
        "max_stale": "15s"
    },
    "retry_join": [
        "192.168.56.120",
        "192.168.56.121"
    ],
    "retry_interval": "10s",
    "skip_leave_on_interrupt": true,
    "leave_on_terminate": false,
    "ports": {
        "dns": 53,
        "http": 80
    },
    "recursors": [
        "114.114.114.114"
    ],
    "rejoin_after_leave": true,
    "addresses": {
        "http": "0.0.0.0",
        "dns": "0.0.0.0"
    }
}
EOF
分別在120-122服務器執行
nohup /usr/local/bin/consul agent   -config-dir=/etc/consul/consul_config.json  -rejoin &
查看節點成員
root@mha120:~$ consul members -http-addr=127.0.0.1:80
Node       Address              Status  Type    Build  Protocol  DC              Segment
mha120     192.168.56.120:8301  alive   server  1.0.0  2         consul-cluster  <all>
tomcat102  192.168.56.121:8301  alive   server  1.0.0  2         consul-cluster  <all>
tomcat103  192.168.56.122:8301  alive   server  1.0.0  2         consul-cluster  <all>
1、解析域名
root@mha120:~$dig @192.168.56.120 -p 53 tomcat103.node.consul

技術分享












2、查看主服務
http://192.168.56.120/v1/status/leader

技術分享

3、域名解析服務的一致性檢測接口
http://192.168.56.120/v1/catalog/nodes

技術分享

4、配置客戶端集群域名解析服務
在192.168.56.0/32網段的任一ip設置
echo ‘nameserver 192.168.56.121‘ >>/etc/resolv.conf

技術分享

4、測試解析
ping tomcat103.node.consul
ping mha120.node.consul

技術分享

至此consul cluster三節點集群搭建完成。


本文出自 “linux-letian” 博客,轉載請與作者聯系!

consul 1.0 server cluster集群配置全解密