實驗前準(zhǔn)備
Consul服務(wù)器:192.168.188.17,consul服務(wù),nginx服務(wù),consul-template守護(hù)進(jìn)程
Registrator服務(wù)器:192.168.188.11,registrator容器,nginx容器
Consul部署
建立consul服務(wù)器
mkdir /opt/consul
cp consul_0.9.2_linux_amd64.zip /opt/consul
cd /opt/consul
unzip consul_0.9.2_linux_amd64.zip
mv consul /usr/local/bin/
設(shè)置代理
在后臺啟動consul服務(wù)端
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.10.23 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &
參數(shù)解釋
-server:以server身份啟動。默認(rèn)是client。
-bootstrap:用來控制一個server是否在bootstrap模式,在一個數(shù)據(jù)中心中只能有一個server處于bootstrap模式,當(dāng)一個server處于 bootstrap模式時,可以自己選舉為 server-leader。
-bootstrap-expect=2:集群要求的最少server數(shù)量,當(dāng)?shù)陀谶@個數(shù)量,集群即失效。
-ui:指定開啟 UI 界面,這樣可以通過 http://localhost:8500/ui 這樣的地址訪問 consul 自帶的 web UI 界面。
-data-dir :指定數(shù)據(jù)存儲目錄。
-bind:指定用來在集群內(nèi)部的通訊地址,集群內(nèi)的所有節(jié)點(diǎn)到此地址都必須是可達(dá)的,默認(rèn)是0.0.0.0。
-client:指定 consul 綁定在哪個 client 地址上,這個地址提供 HTTP、DNS、RPC 等服務(wù),默認(rèn)是 127.0.0.1。
-node:節(jié)點(diǎn)在集群中的名稱,在一個集群中必須是唯一的,默認(rèn)是該節(jié)點(diǎn)的主機(jī)名。
-datacenter:指定數(shù)據(jù)中心名稱,默認(rèn)是dc1。
查看端口
netstat -anpt | grep consul
端口解釋
啟動consul后默認(rèn)會監(jiān)聽5個端口:
8300:replication、leader farwarding的端口
8301:lan cossip的端口
8302:wan gossip的端口
8500:web ui界面的端口
8600:使用dns協(xié)議查看節(jié)點(diǎn)信息的端口
查看集群信息
查看members狀態(tài)
consul members
查看集群狀態(tài)
consul operator raft list-peers
consul info | grep leader
通過http api獲取集群信息
curl 127.0.0.1:8500/v1/status/peers #查看集群server成員
curl 127.0.0.1:8500/v1/status/leader #集群 server-leader
curl 127.0.0.1:8500/v1/catalog/services #注冊的所有服務(wù)
curl 127.0.0.1:8500/v1/catalog/nginx #查看 nginx 服務(wù)信息
curl 127.0.0.1:8500/v1/catalog/nodes #集群節(jié)點(diǎn)詳細(xì)信息
Registrator服務(wù)器
容器服務(wù)自動加入Nginx集群
安裝Gliderlabs/Registrator
Gliderlabs/Registrator 可檢查容器運(yùn)行狀態(tài)自動注冊,還可注銷 docker 容器的服務(wù)到服務(wù)配置中心,目前支持 Consul、Etcd 和 SkyDNS2
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
--ip=192.168.188.11 \
consul://192.168.188.17:8500
參數(shù)解釋
–net=host:把運(yùn)行的docker容器設(shè)定為host網(wǎng)絡(luò)模式。
-v /var/run/docker.sock:/tmp/docker.sock :把宿主機(jī)的Docker守護(hù)進(jìn)程(Docker daemon)默認(rèn)監(jiān)聽的Unix域套接字掛載到容器中。
–restart=always:設(shè)置在容器退出時總是重啟容器。
–ip:剛才把network指定了host模式,所以我們指定ip為宿主機(jī)的ip。
consul:指定consul服務(wù)器的IP和端口
測試服務(wù)發(fā)現(xiàn)功能
在registrator服務(wù)器上創(chuàng)建
docker run -itd -p:83:80 --name test-01 -h test01 nginx
docker run -itd -p:84:80 --name test-02 -h test02 nginx
docker run -itd -p:88:80 --name test-03 -h test03 httpd
docker run -itd -p:89:80 --name test-04 -h test04 httpd
-h:設(shè)置容器主機(jī)名
驗證http和nginx服務(wù)是否注冊到consul,在瀏覽器中輸入http://192.168.188.17:8500
部署consul-template
Consul-Template是一個守護(hù)進(jìn)程,用于實時查詢Consul集群信息,并更新文件系統(tǒng)上任意數(shù)量的指定模板,生成配置文件。更新完成以后,可以選擇運(yùn)行 shell 命令執(zhí)行更新操作
準(zhǔn)備template nginx模板文件
在consul服務(wù)器上操作
vim /opt/consul/nginx.ctmpl
#定義一個nginx upstream簡單模板
upstream http_backend {
{{range service "nginx"}}
server {{.Address}}:{{.Port}};
{{end}}
}
#定義一個server,監(jiān)聽端口8000,反向代理到upstream
server {
listen 8000;
server_name localhost 192.168.188.17;
access_log /var/log/nginx/dzd.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;
}
}
編譯安裝nginx
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
useradd -M -s /sbin/nologin nginx
tar zxvf nginx-1.12.0.tar.gz -C /opt/
cd /opt/nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make -j && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
配置nginx
vim /usr/local/nginx/conf/nginx.conf
添加虛擬主機(jī)目錄
創(chuàng)建虛擬主機(jī)目錄
mkdir /usr/local/nginx/conf/vhost
創(chuàng)建日志文件目錄
mkdir /var/log/nginx
啟動nginx
Nginx
配置并啟動template
unzip consul-template_0.19.3_linux_amd64.zip -d /opt/
cd /opt/
mv consul-template /usr/local/bin/
前臺啟動template服務(wù),注意啟動后不要中止進(jìn)程(ctrl+c)
consul-template --consul-addr 192.168.188.17:8500 \
--template "/opt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/dzd.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info
再開一個終端查看生成配置文件
vim /usr/local/nginx/conf/vhost/dzd.conf
訪問template-nginx
在Registrator服務(wù)器上
docker ps -a
docker exec -it test-01 bash
echo “this is test1 web” > /usr/share/nginx/html/index.html
exit
docker exec -it test-02 bash
echo “this is test2 web” > /usr/share/nginx/html/index.html
exit
瀏覽器訪問http://192.168.188.17:8000,多次刷新
增加nginx容器節(jié)點(diǎn)
新建一個容器(registrator服務(wù)器上)
docker run -itd -p:85:80 --name test-05 -h test05 nginx
如果上面的template服務(wù)沒關(guān),就可以看到更新內(nèi)容
查看生成配置文件(consul服務(wù)器上)
vim /usr/local/nginx/conf/vhost/dzd.conf
回瀏覽器刷新,能看到新增的節(jié)點(diǎn)上的內(nèi)容
沒寫頁面,所以展示的就是nginx默認(rèn)頁面
consul多節(jié)點(diǎn)
添加一臺已有docker環(huán)境的服務(wù)器192.168.188.16加入到現(xiàn)在的集群中文章來源:http://www.zghlxwxcb.cn/news/detail-803223.html
consul agent \
-server \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.188.16 \
-client=0.0.0.0 \
-node=consul-server02 \
-enable-script-checks=true \
-datacenter=dc1 \
-join 192.168.188.17 &> /var/log/consul.log &
參數(shù)解釋
-enable-script-checks=true:設(shè)置檢查服務(wù)為可用
-datacenter: 數(shù)據(jù)中心名稱
-join:加入到已有的集群中
可以用consul numbers或者consul operator raft list-peers查看集群信息文章來源地址http://www.zghlxwxcb.cn/news/detail-803223.html
到了這里,關(guān)于Docker consul、容器服務(wù)更新與發(fā)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!