consul:高可用,分布式的服務(wù)發(fā)現(xiàn)的工具
公司主營業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)公司推出紅河免費(fèi)做網(wǎng)站回饋大家。
master主機(jī)—docker01:172.16.1.30
node01主機(jī)—docker02:172.16.1.31
node02主機(jī)—docker03:172.16.1.32
注意:因?yàn)槭菧y試環(huán)境,所以暫時(shí)關(guān)閉防火墻,禁用selinux,如果是對外網(wǎng)發(fā)布的服務(wù)器,是不可以關(guān)閉防火墻,可以設(shè)置iptables規(guī)則。
(1)docker01上部署consul:
下載或上傳consul_1.5.1_linux_amd64軟件包:
[root@sqm-docker01 ~]# unzip consul_1.5.1_linux_amd64.zip #使用unzip工具進(jìn)行一個(gè)解壓
[root@sqm-docker01 ~]# mv consul /usr/local/bin/
[root@sqm-docker01 ~]# chmod +x /usr/local/bin/consul
[root@sqm-docker01 ~]# consul agent -server -bootstrap -ui -data-dir=/var/lib/consul-data \
> -bind=172.16.1.30 \ #docker01本機(jī)的ip地址
> -client=0.0.0.0 \
> -node=master
參數(shù)解釋:
-server:添加一個(gè)服務(wù)
-bootstrap:一般在server單節(jié)點(diǎn)的時(shí)候使用,自選舉為leader。
-data-dir:指定數(shù)據(jù)存放的目錄
-ui:開啟內(nèi)部的web界面
-bind:指定開啟服務(wù)的ip
-client:指定服務(wù)的客戶端
-node:在集群內(nèi)部通信使用的名稱,默認(rèn)是主機(jī)名。
####保持后臺運(yùn)行consul服務(wù):[root@sqm-docker01 ~]# nohup consul agent -server -bootstrap -ui -data-dir=/var/lib/consul-data -bind=172.16.1.30 -client=0.0.0.0 -node=master &
執(zhí)行后臺運(yùn)行后,會(huì)在當(dāng)前目錄下生成一個(gè)文件,生成所有的集群信息都會(huì)保存在這個(gè)文件內(nèi):
##查看服務(wù)端口是否運(yùn)行:
8300: 集群節(jié)點(diǎn)(對外公布的)
8301: 集群內(nèi)部訪問
8302: 跨數(shù)據(jù)中心之間的通信
8500: http--UI
8600: DNS
##查看consul信息:[root@sqm-docker01 ~]# consul info
說明:consul信息中多為一些算法,這些算法保證數(shù)據(jù)的同步,以及加上-bootstrap自選舉為leader,也是通過這些算法來實(shí)現(xiàn)的。
##查看集群內(nèi)部信息:[root@sqm-docker01 ~]# consul members
登陸訪問web界面:http://172.16.1.30:8500
(2)docker02上操作:
部署consul服務(wù):
下載progrium/consul鏡像:[root@sqm-docker02 ~]# docker pull myprogrium-consul
##創(chuàng)建一個(gè)consul容器,并且加入consul集群中:[root@sqm-docker02 ~]# docker run -d --name consul -p 8301:8301 -p 8301:8301/udp -p 8500:8500 -p 8600:8600 -p 8600:8600/udp --restart=always progrium/consul -join 172.16.1.30 -advertise 172.16.1.31 -client 0.0.0.0 -node=node01
解釋:
-join:加入的是docker01的集群,所以指定的是docker01的主機(jī)地址
-advertise:通告的是本機(jī)(docker02)的地址,
-client:表示所以主機(jī)訪問該節(jié)點(diǎn)
-node:自定義節(jié)點(diǎn)名稱為node01
確保容器已正常運(yùn)行:
在網(wǎng)頁上查看該節(jié)點(diǎn)是否加入:
(3)在docker03上操作:
同樣的下載progrium/consul鏡像:[root@sqm-docker02 ~]# docker pull myprogrium-consul
運(yùn)行容器并加入集群:[root@sqm-docker03 ~]# docker run -d --name consul -p 8301:8301 -p 8301:8301/udp -p 8500:8500 -p 8600:8600 -p 8600:8600/udp --restart=always progrium/consul -join 172.16.1.30 -advertise 172.16.1.32 -client 0.0.0.0 -node=node02
#注意需要通告的是自身的ip地址,節(jié)點(diǎn)名稱為node02
加入集群后,在docker01上查看集群信息:
[root@sqm-docker01 ~]# consul members
瀏覽web界面查看:
確保node1和node2都已經(jīng)加入到了集群中
(4)在docker01上安裝consul-template:
該軟件包可以在github上進(jìn)行下載,下載路徑(可自定義選擇版本):https://releases.hashicorp.com/consul-template/
下載后解壓,并給予執(zhí)行權(quán)限:
[root@sqm-docker01 ~]# unzip consul-template_0.19.5_linux_amd64.zip
Archive: consul-template_0.19.5_linux_amd64.zip
inflating: consul-template
[root@sqm-docker01 ~]# mv consul-template /usr/local/bin/
[root@sqm-docker01 ~]# chmod +x /usr/local/bin/consul-template
暫時(shí)先安裝完,不做其他操作。
(5)部署registrator:
主要用來收集容器運(yùn)行服務(wù)的信息,并且發(fā)送給consul。
自動(dòng)發(fā)現(xiàn)docker container提供的服務(wù),并且在后端服務(wù)注冊中心(數(shù)據(jù)中心)注冊服務(wù)。
常見的數(shù)據(jù)中心有:consul,etcd,zookeeper,相關(guān)的技術(shù)可以查找相關(guān)的技術(shù)文檔。
注意:#兩臺都要部署
docker02:
我導(dǎo)入了一個(gè)本地下載好的鏡像(在pull進(jìn)行拉?。?br/>[root@sqm-docker02 ~]# docker load --input myregistrator.tar
運(yùn)行一個(gè)registrator容器:[root@sqm-docker02 ~]# docker run -d --name registrator -v /var/run/docker.sock:/tmp/docker.sock --restart=always gliderlabs/registrator consul://172.16.1.31:8500
以上命令的作用是把收集過來容器的信息給本機(jī)的8500端口來顯示
訪問web網(wǎng)頁查看是否收集到容器的信息:
url:http://172.16.1.30:8500/
現(xiàn)在在docker02上運(yùn)行一個(gè)ngnx服務(wù),測試是否能夠發(fā)現(xiàn):[root@sqm-docker02 ~]# docker run -d -P --name test nginx
docker03:
執(zhí)行在docker02同樣的操作,查看是否能夠發(fā)現(xiàn)服務(wù):
下載鏡像并創(chuàng)建容器:
[root@sqm-docker03 ~]# docker run -d --name registrator -v /var/run/docker.sock:/tmp/docker.sock --restart=always gliderlabs/registrator consul://172.16.1.32:8500
運(yùn)行nginx服務(wù):[root@sqm-docker03 ~]# docker run -d --name test2 -P nginx
確保容器正常運(yùn)行:
web網(wǎng)頁進(jìn)行查看:
確保也能夠收集到node2上的nginx容器信息。
(6)在docker01上部署nginx,提供反向代理:
1)安裝nginx:
安裝依賴:[root@sqm-docker01 ~]# yum -y install gcc pcre pcre-devel openssl openssl-devel zlib zlib-devel
創(chuàng)建nginx用戶[root@sqm-docker01 ~]# useradd -M -s /usr/sbin/nologin nginx
編譯安裝:
[root@sqm-docker01 ~]# tar zxf nginx-1.14.0.tar.gz -C /usr/src/
[root@sqm-docker01 ~]# cd /usr/src/nginx-1.14.0/
[root@sqm-docker01 nginx-1.14.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_realip_module --with-pcre --with-http_ssl_module && make && make install
軟鏈接:[root@sqm-docker01 ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
啟動(dòng)nginx:[root@sqm-docker01 ~]# nginx
2)現(xiàn)在就開始部署剛才安裝完的consul-template插件了
consul-template的作用:把收集到的信息(把registrator收集到容器的信息)寫入template模板中,并且最終寫入nginx的配置文件中,通過該模板來實(shí)現(xiàn)自動(dòng)化。
##編寫consul-template網(wǎng)頁:
[root@sqm-docker01 ~]# cd /usr/local/nginx/
[root@sqm-docker01 nginx]# mkdir consul #在nginx目錄下創(chuàng)建存放template網(wǎng)頁的目錄
[root@sqm-docker01 nginx]# cd consul/
[root@sqm-docker01 consul]# vim nginx.ctmpl
內(nèi)容如下(以go語言實(shí)現(xiàn)):
upstream http_backend {
{{range service "nginx"}}
server {{.Address}}:{{.Port}};
{{ end }}
}
server {
listen 8000; #監(jiān)聽端口可以自定義,只要不與自己的80端口沖突即可
server_name localhost;
location / {
proxy_pass http://http_backend;
}
}
##修改nginx配置文件:[root@sqm-docker01 consul]# vim /usr/local/nginx/conf/nginx.conf
//根據(jù)剛才的模板生成一個(gè).conf文件:
[root@sqm-docker01 consul]# consul-template -consul-addr 172.16.1.30:8500 -template "/usr/local/nginx/consul/nginx.ctmpl:/usr/local/nginx/consul/vhost.conf:/usr/local/sbin/nginx -s reload"
注意:執(zhí)行命令回車后將會(huì)卡在終端,所以接下來我們另開一個(gè)終端查看。
也可以將其設(shè)置為后臺運(yùn)行:(加上nohup和&參數(shù)):[root@sqm-docker01 consul]# nohup consul-template -consul-addr 172.16.1.30:8500 -template "/usr/local/nginx/consul/nginx.ctmpl:/usr/local/nginx/consul/vhost.conf:/usr/local/sbin/nginx -s reload" &
##能看到vhost文件中有node01和node02的地址及端口號,說明nginx代理成功。
(7)實(shí)現(xiàn)服務(wù)自動(dòng)發(fā)現(xiàn):
為了驗(yàn)證實(shí)現(xiàn)服務(wù)發(fā)現(xiàn),在docker02和docker03上創(chuàng)建容器:(基于nginx服務(wù)運(yùn)行)
操作命令如下:
docker02:
mkdir html
echo docker02_web01 > html/index.conf
docker run -itd --name web01 -v /root/html:/usr/share/nginx/html -P nginx
為了更直觀的看到,我們運(yùn)行第二個(gè)nginx容器:
docker run -itd --name web02 -P nginx:latest
docker exec -it web02 /bin/bash
echo docker02_web02 > /usr/share/nginx/html/index.html
docker03:(同樣的創(chuàng)建兩個(gè)容器):
docker run -itd --name web03 -P nginx:latest
docker exec -it web03 /bin/bash
echo docker03-web01 > /usr/share/nginx/html/index.html
docker run -itd --name web04 -P nginx:latest
docker exec -it web04 /bin/bash
echo docker03-web02 > /usr/share/nginx/html/index.htm
最后驗(yàn)證自動(dòng)發(fā)現(xiàn)的nginx頁面:
訪問的是代理nginx服務(wù)器的地址跟上自定義的訪問端口8000
URL:http://172.16.1.30:8000/
第一次訪問的頁面是代理服務(wù)器自身的nginx頁面:
第二次訪問到的是docker02上的第一個(gè)nginx頁面:
第三次訪問到的是docker02上的第二個(gè)nginx頁面:
docker03上的nginx1頁面:
docker03上的nignx2頁面:
至此在Docker上部署集群,實(shí)現(xiàn)服務(wù)的一個(gè)自動(dòng)發(fā)現(xiàn),已經(jīng)搭建并測試完畢。。。。。
———————— 本文至此結(jié)束,感謝閱讀 ————————
當(dāng)前文章:Consul+Registrator+Docker實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)(nginx反向代理)
文章鏈接:http://m.rwnh.cn/article6/jipiog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、軟件開發(fā)、網(wǎng)站維護(hù)、網(wǎng)站設(shè)計(jì)、用戶體驗(yàn)、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)