文章目錄
- 一、consul概述
- 架構術語
- Consul的使用場景
- 二、consul環境搭建
- 1.server(192.168.220.110)部署
- 2.client部署(192.168.220.120)
- 3.配置template模板自動更新
- 4.測驗訪問代理服務器以及多節點
一、consul概述
Consul 是一個復雜的系統,它是HashiCorp公司的一個用于實作分布式系統的服務發現于配置工具,Consul內置了服務注冊與發現框架、分布一致性協議實作、健康檢查、Key/Value存盤、多資料中心方案,同時,Consul具有功能完善,部署簡單,使用方便等特點
架構術語
- Agent:Agent是長期運行在每個consul集群成員節點上守護行程,通過命令consul agent啟 動,Agent有client和server兩種模式,由于每個節點都必須運行agent,所有節點要么是client要 么是server,所有的Agent都可以呼叫DNS或HTTPAPI,并負責檢查和維護服務同步
- client:運行client模式的Agent,將所有的RPCs轉發到Server,Client是相對無狀態的, Client唯一所做的是在后臺參與LAN gossip pool,只消耗少量的資源,少量的網路帶寬,
- Server:運行Server模式的Agent,參與Raft quorum,維護集群的狀態,回應RPC查詢,與 其他資料中心互動WAN gossip,轉發查詢到Leader或遠程資料中心
- datacenter:資料中心,定義為:網路環境是私有,低延遲,高帶寬的,排除和公網的通 信,但有一些細節需要注意,比如在AWS的EC2,多個可用性區域是否被認為組成了單一的資料 中心?而資料中心的定義不包括基于公共互聯網環境,但是對于我們使用者而言,在同一個EC2 的多個可用性區域會被認為是一個的資料中心
- Consensus :consensus,意味著leader election協議,以及事務的順序,由于這些事務是基 于一個有限狀態機,consensus的定義意味著復制狀態機的一致性,
- Gossip :consul是建立在Serf(去中心化服務發現和編排)之上,提供了完成的Gossip協議(下文會簡單介紹此協議),用于成員維護故障檢測、事件廣播,
gossip是基于UDP協議實作隨機的節點到節點的通信,主要是在UDP, - LAN Gossip:指的是LAN gossip pool,包含位于同一個局域網或者資料中心的節點,
- WAN Gossip:指的是WANgossip pool,只包含server節點,這些server主要分布在不同的數 據中心或者通信是基于互聯網或廣域網的,
- RPC:遠程程序呼叫,是允許client請求服務器的請求/回應機制,

Consul的使用場景
Consul的應用場景包括服務發現、服務隔離、服務配置
比如:docker實體的注冊與配置共享、coreos實體的注冊與配置共享、vitess集群、SaaS應用的配置共享、Consul與confd服務集成,動態生成nginx和haproxy組態檔或者Consul結合nginx構建高可用可擴展的Web服務,
二、consul環境搭建
1.server(192.168.220.110)部署
[root@localhost ~] # mkdir consul
[root@localhost ~] # cd consul/
[root@localhost ~/consul] # rz -E
rz waiting to receive. ## 這里將安裝包拖入consul目錄下
[root@localhost ~/consul] # ls
consul_0.9.2_linux_amd64.zip
[root@localhost ~/consul] # unzip consul_0.9.2_linux_amd64.zip
Archive: consul_0.9.2_linux_amd64.zip
inflating: consul
[root@localhost ~/consul] # ls
consul consul_0.9.2_linux_amd64.zip
[root@localhost ~/consul] # mv consul /usr/bin
[root@localhost ~/consul] # consul agent \
> -server \
> -bootstrap \
> -ui \
> -data-dir=/var/lib/consul-data \
> -bind=192.168.220.110 \
> -client=0.0.0.0 \
> -nade=consul-server01 &> /var/log/consul.log &
[1] 75549
[root@localhost ~/consul] # consul members
Node Address Status Type Build Protocol DC
consul-server01 192.168.220.110:8301 alive server 0.9.2 2 dc1
[root@localhost ~/consul] # consul info | grep leader
leader = true
leader_addr = 192.168.220.110:8300

curl 127.0.0.1:8500/v1/status/peers //查看集群server成員
curl 127.0.0.1:8500/v1/status/leader //集群Raf leader
curl 127.0.0.1:8500/v1/catalog/services //注冊的所有服務
curl 127.0.0.1:8500/v1/catalog/nginx //查看nginx服務資訊
curl 127.0.0.1:8500/v1/catalog/nodes //集群節點詳細資訊

netstat -natp |grep consul
這5個埠的作用:
8300:集群內資料的讀寫和復制
8301:單個資料中心gossip協議通訊
8302:跨資料中心gossip協議通訊
8500:提供獲取服務串列、注冊服務、注銷服務等HTTP介面;提供UI服務
8600:采用DNS協議提供服務發現功能

2.client部署(192.168.220.120)
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
-ip=192.168.220.120 \
consul://192.168.220.110:8500
[root@ppp ~] # docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gliderlabs/registrator latest 3b59190c6c80 4 years ago 23.8MB
[root@ppp ~] # docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
39c380b4b512 gliderlabs/registrator:latest "/bin/registrator -i…" 22 seconds ago Up 21 seconds registrator
systemctl restart docker
docker run -itd -p:81:80 --name pyy01 -h pyy01 nginx
docker run -itd -p:82:80 --name pyy02 -h pyy02 nginx
docker run -itd -p:83:80 --name pyy03 -h pyy03 httpd
docker run -itd -p:84:80 --name pyy04 -h pyy04 httpd

此時訪問瀏覽器
http://192.168.220.110:8500


3.配置template模板自動更新
- Consul-Template是一個守護行程,用于實時查詢Consul集群資訊,并更新檔案系統上任意數量的指定模板,生成組態檔,更新完成以后,可以查詢Consul中的服務目錄,Key、Key-values等,
server 192.168.220.110
vim nginx.ctmpl
upstream http_backend {
{{range service "nginx"}}
server {{.Address}}:{{.Port}};
{{end}}
}
server {
listen 100;
server_name localhost 192.168.220.110;
access_log /var/log/nginx/pyy.com-access.log;
index index.html index.php;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Client-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://http_backend;
}
}

yum -y install gcc pcre-devel zlib-devel
這里將Nginx安裝包拖入終端
tar zxvf nginx-1.12.0.tar.gz -C /opt
cd /opt/nginx-1.12.0/
./configure --prefix=/usr/local/nginx
make && make install
vim /usr/local/nginx/conf/nginx.conf
##19行插入 include vhost/*.conf;

cd /usr/local/nginx/conf/
mkdir vhost
mkdir /var/log/nginx
/usr/local/nginx/sbin/nginx
cd /opt
拖入安裝包 consul-template_0.19.3_linux_amd64.zip
unzip consul-template_0.19.3_linux_amd64.zip
mv consul-template /usr/bin
consul-template -consul-addr 192.168.220.110:8500 -template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/pyy.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info
cat /usr/local/nginx/conf/vhost/pyy.conf



4.測驗訪問代理服務器以及多節點
瀏覽器查詢192.168.220.110
http://192.168.220.110
docker logs -f pyy01


consul多節點
###添加一臺有docker環境的服務器192.168.220.130加入已有的集群
consul agent \
-server \
--bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.220.130 \
-client=0.0.0.0 \
-node=consul-server02 \
-enable-script-checks=true \
-datacenter=dc1 \
-join 192.168.220.130 &> /var/log/consul.log &
###############################################
--enable-script-ckecks=true:設定檢查服務為可用
-datacenter:資料中心名稱
-join:加入到已有的集群中
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/273696.html
標籤:其他
