consul異地多數據中心以及集群部署方案


consul異地多數據中心以及集群部署方案
目的
實現consul 異地多數據中心環境部署,使得一個數據中心的服務可以從另一個數據中心的consul獲取已注冊的服務地址

環境准備
兩台 linux服務器,外網可以互相連通,都需要開放服務器的8500,8300,8301(可選擇開放或者不開放),8302端口
為了簡化流程,我們每台服務器上只部署一個consul server ,不部署集群

端口 用途
8500 圖形界面
8300 不同server之間請求獲取數據
8301 局域網集群內部通信
8302 廣域網集群內部通信
部署過程
安裝consul
下載安裝包
在 opt 目錄下

mkdir consul

如果下載1.5.0 的版本

curl --silent --remote-name https://releases.hashicorp.com/consul/1.5.0/consul_1.5.0_linux_amd64.zip
curl --silent --remote-name https://releases.hashicorp.com/consul/1.5.0/consul_1.5.0_SHA256SUMS
curl --silent --remote-name https://releases.hashicorp.com/consul/1.5.0/consul_1.5.0_SHA256SUMS.sig

如果下載速度過慢,可以選擇在官網下載后,上傳到服務器
https://www.consul.io/downloads.html

下載 web-ui安裝包
下載圖形界面安裝包,並解壓

wget https://releases.hashicorp.com/consul/0.8.1/consul_0.8.1_web_ui.zip
mkdir -p /opt/consul/web
unzip consul_0.8.1_web_ui.zip -d /opt/consul/web/

安裝
只需要解壓下載下來的文件即可

unzip consul_1.5.0_linux_amd64.zip

我們會得到一個 consul 文件,將這個文件移動到 /usr/local/bin 目錄下

mv consul /usr/local/bin

運行配置
首先新建conf,data,run 文件夾,分別存放配置文件,數據,運行信息等
mkdir -p /opt/consul/conf
mkdir -p /opt/consul/data
mkdir -p /opt/consul/run

在conf文件夾下新建配置文件 consul會自動加載指定的conf文件夾下所有.json結尾的配置文件
cd conf
vim server.json

配置文件內容為:

{
"datacenter": "dc2",
"data_dir": "/opt/consul/data",
"log_level": "INFO",
"node_name": "consul-server02",
"server": true,
"bootstrap_expect": 1,
"bind_addr": "當前機器內網地址",
"advertise_addr": "當前機器外網地址",
"client_addr": "0.0.0.0",
"ui_dir": "/opt/consul/web",
"retry_join": ["當前機器外網地址","另一數據中心外網地址"],
"retry_interval": "30s",
"enable_debug": false,
"rejoin_after_leave": true,
"start_join": ["當前機器外網地址","另一數據中心外網地址"],
"enable_syslog": true,
"syslog_facility": "local0"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
在consul文件夾下新建,編寫啟動腳本 start.sh
vim start.sh

腳本文件內容為:

nohup consul agent -server -bootstrap -syslog
-ui-dir=/opt/consul/web
-data-dir=/opt/consul/data
-config-dir=/opt/consul/conf
-pid-file=/opt/consul/run/consul.pid
-disable-host-node-id & > ./nohup.out

分配可執行權限

chmod 751 start.sh

運行
執行 start.sh

./start.sh

然后訪問 機器外網地址:8500 的UI界面,可以看到如下界面

 

以上安裝部署過程在另一台服務器上執行相同操作,為了防止出現未知錯誤,建議保證兩台服務器的consul版本一致

配置多數據中心
兩台服務器各自安裝成功之后,需要將兩台服務器關聯起來,執行

consul join -wan xxx.xxx.xxx.xxx 后面為需要關聯服務器的地址

執行結果


兩台服務器分別執行之后,就已經關聯成功了,可以互相訪問對方的服務,可以通過以下命令來查看關聯成員

consul members -wan

結果,可以看到兩台機器的服務地址以及狀態


這個時候再訪問對應服務的UI界面,可以在右上角看到關聯的數據中心


我們通過切換不同的數據中心,就可以查看對應數據中心的已注冊的服務,相應的,也可以通過接口請求來獲取數據

http://xxx:8500/ui/#/dc2/services
http://xxx:8500/ui/#/dc1/services

 

額外: consul集群配置
大致安裝過程和多數據中心一致,區別在於

機器是內網的多台機器,無需開放 8302 端口
配置文件中 retry_join 和 start_join 數組配置為各個集群服務器的地址
advertise_addr 無需配置
bootstrap_expect 值改為集群服務器數量
保證數據中心名稱一致
使用 consul join xxx.xxx.xxx.xxx 來關聯各個服務
使用 consul members 查看集群
配置項說明和配置文件解釋
啟動命令

-server : 定義agent運行在server模式
-bootstrap-expect :在一個datacenter中期望提供的server節點數目,當該值提供的時候,consul一直等到達到指定sever數目的時候才會引導整個集群,該標記不能和bootstrap共用
-bind:該地址用來在集群內部的通訊,集群內的所有節點到地址都必須是可達的,默認是0.0.0.0
-node:節點在集群中的名稱,在一個集群中必須是唯一的,默認是該節點的主機名
-ui-dir: 提供存放web ui資源的路徑,該目錄必須是可讀的
-rejoin:使consul忽略先前的離開,在再次啟動后仍舊嘗試加入集群中。
-config-dir:配置文件目錄,里面所有以.json結尾的文件都會被加載
-client:consul服務偵聽地址,這個地址提供HTTP、DNS、RPC等服務,默認是127.0.0.1所以不對外提供服務,如果你要對外提供服務改成0.0.0.0
1
2
3
4
5
6
7
8
配置命令(運行時指定會覆蓋配置文件中對應命令)

-advertise:通知展現地址用來改變我們給集群中的其他節點展現的地址,一般情況下-bind地址就是展現地址
-bootstrap:用來控制一個server是否在bootstrap模式,在一個datacenter中只能有一個server處於bootstrap模式,當一個server處於bootstrap模式時,可以自己選舉為raft leader。
-bootstrap-expect:在一個datacenter中期望提供的server節點數目,當該值提供的時候,consul一直等到達到指定sever數目的時候才會引導整個集群,該標記不能和bootstrap公用
-bind:該地址用來在集群內部的通訊,集群內的所有節點到地址都必須是可達的,默認是0.0.0.0
-client:consul綁定在哪個client地址上,這個地址提供HTTP、DNS、RPC等服務,默認是127.0.0.1
-config-file:明確的指定要加載哪個配置文件
-config-dir:配置文件目錄,里面所有以.json結尾的文件都會被加載
-data-dir:提供一個目錄用來存放agent的狀態,所有的agent允許都需要該目錄,該目錄必須是穩定的,系統重啟后都繼續存在
-dc:該標記控制agent允許的datacenter的名稱,默認是dc1
-encrypt:指定secret key,使consul在通訊時進行加密,key可以通過consul keygen生成,同一個集群中的節點必須使用相同的key
-join:加入一個已經啟動的agent的ip地址,可以多次指定多個agent的地址。如果consul不能加入任何指定的地址中,則agent會啟動失敗,默認agent啟動時不會加入任何節點。
-retry-join:和join類似,但是允許你在第一次失敗后進行嘗試。
-retry-interval:兩次join之間的時間間隔,默認是30s
-retry-max:嘗試重復join的次數,默認是0,也就是無限次嘗試
-log-level:consul agent啟動后顯示的日志信息級別。默認是info,可選:trace、debug、info、warn、err。
-node:節點在集群中的名稱,在一個集群中必須是唯一的,默認是該節點的主機名
-protocol:consul使用的協議版本
-rejoin:使consul忽略先前的離開,在再次啟動后仍舊嘗試加入集群中。
-server:定義agent運行在server模式,每個集群至少有一個server,建議每個集群的server不要超過5個
-syslog:開啟系統日志功能,只在linux/osx上生效
-ui-dir:提供存放web ui資源的路徑,該目錄必須是可讀的
-pid-file:提供一個路徑來存放pid文件,可以使用該文件進行SIGINT/SIGHUP(關閉/更新)agent
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
配置文件相關屬性

acl_datacenter:只用於server,指定的datacenter的權威ACL信息,所有的servers和datacenter必須同意ACL datacenter
acl_default_policy:默認是allow
acl_down_policy:
acl_master_token:
acl_token:agent會使用這個token和consul server進行請求
acl_ttl:控制TTL的cache,默認是30s
addresses:一個嵌套對象,可以設置以下key:dns、http、rpc
advertise_addr:等同於-advertise
bootstrap:等同於-bootstrap
bootstrap_expect:等同於-bootstrap-expect
bind_addr:等同於-bind
ca_file:提供CA文件路徑,用來檢查客戶端或者服務端的鏈接
cert_file:必須和key_file一起
check_update_interval:
client_addr:等同於-client
datacenter:等同於-dc
data_dir:等同於-data-dir
disable_anonymous_signature:在進行更新檢查時禁止匿名簽名
disable_remote_exec:禁止支持遠程執行,設置為true,agent會忽視所有進入的遠程執行請求
disable_update_check:禁止自動檢查安全公告和新版本信息
dns_config:是一個嵌套對象,可以設置以下參數:allow_stale、max_stale、node_ttl 、service_ttl、enable_truncate
domain:默認情況下consul在進行DNS查詢時,查詢的是consul域,可以通過該參數進行修改
enable_debug:開啟debug模式
enable_syslog:等同於-syslog
encrypt:等同於-encrypt
key_file:提供私鑰的路徑
leave_on_terminate:默認是false,如果為true,當agent收到一個TERM信號的時候,它會發送leave信息到集群中的其他節點上。
log_level:等同於-log-level
node_name:等同於-node
ports:這是一個嵌套對象,可以設置以下key:dns(dns地址:8600)、http(http api地址:8500)、rpc(rpc:8400)、serf_lan(lan port:8301)、serf_wan(wan port:8302)、server(server rpc:8300)
protocol:等同於-protocol
recursor:
rejoin_after_leave:等同於-rejoin
retry_join:等同於-retry-join
retry_interval:等同於-retry-interval
server:等同於-server
server_name:會覆蓋TLS CA的node_name,可以用來確認CA name和hostname相匹配
skip_leave_on_interrupt:和leave_on_terminate比較類似,不過只影響當前句柄
start_join:一個字符數組提供的節點地址會在啟動時被加入
statsd_addr:
statsite_addr:
syslog_facility:當enable_syslog被提供后,該參數控制哪個級別的信息被發送,默認Local0
ui_dir:等同於-ui-dir
verify_incoming:默認false,如果為true,則所有進入鏈接都需要使用TLS,需要客戶端使用ca_file提供ca文件,只用於consul server端,因為client從來沒有進入的鏈接
verify_outgoing:默認false,如果為true,則所有出去鏈接都需要使用TLS,需要服務端使用ca_file提供ca文件,consul server和client都需要使用,因為兩者都有出去的鏈接
watches:watch一個詳細名單


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM