中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何部署Docker+Consul+registrator架構實現服務發現

發布時間:2020-06-18 17:24:24 來源:億速云 閱讀:217 作者:元一 欄目:云計算

假設我們寫的代碼會調用 REST API 或者 Thrift API 的服務。為了完成一次請求,代碼需要知道服務實例的網絡位置(IP 地址和端口)。

運行在物理硬件上的傳統應用中,服務實例的網絡位置是相對固定的,代碼能從一個偶爾更新的配置文件中讀取網絡位置。

對于基于云端的、現代化的微服務應用而言,這卻是一大難題。將容器應用部署到集群時,其服務地址是由集群系統動態分配的。那么,當我們需要訪問這個服務時,如何確定它的地址呢?這時就需要服務發現(Service Discovery)了。

Docker+Consul+registrator實現服務發現
實驗環境
Docker01    192.168.2.10
Docker02    192.168.2.20
Docker03    192.168.2.30
關閉防火墻和selinux。consul_1.5.1_linux_amd64.zip
[root@docker01 ~]# unzip consul_1.5.1_linux_amd64.zip
[root@docker01 ~]# mv consul /usr/local/bin/
[root@docker01 ~]# chmod +x /usr/local/bin/consul
[root@docker01 ~]# consul --help    ##確認命令可用
1)在docker01上啟動consul服務
//啟動consul
[root@docker01 ~]# consul agent -server -bootstrap \

-ui -data-dir=/var/lib/consul-data \
-bind=192.168.2.10 \
-client=0.0.0.0 \
-node=master
后臺運行
[root@docker01 ~]# nohup consul agent -server -bootstrap -ui -data-dir=/var/lib/consul-data -bind=192.168.2.10 -client=0.0.0.0 -node=master &
[1] 17633
[root@docker01 ~]# nohup: 忽略輸入并把輸出追加到"nohup.out
PS://-bootstrap:加入這個選項時,一般都在server單節點的時候用,自選舉為leader。
-ui:開啟內部的web頁面      -data-dir:key/volum數據存儲位置
-bind:指定開啟服務的IP
-client:指定訪問的客戶端    
-node:指定集群內通信使用的名稱。默認是主機名
PS:開啟的端口
8300    集群節點
8301    集群內部的訪問
8302    跨數據中心的通信
8500    web ui 界面
8600    使用dns協議查看節點信息的端口
//查看consul的信息
[root@docker01 ~]# consul info
leader_addr = 192.168.2.10:8300
//查看集群內成員的信息
[root@docker01 ~]# consul members
Node   Address           Status  Type   Build  Protocol  DC   Segment
master  192.168.2.10:8301  alive   server  1.5.1  2         dc1  <all>
2)docker02、docker03,加入consul集群
這里我們采用容器的方式去運行consul服務。myprogrium-consul.tar
docker load < myprogrium-consul.tar  
報錯重啟docker:
Systemctl restart docker
[root@docker02 ~]# docker run -d --name consul -p 8301:8301 -p 8301:8301/udp -p 8500:8500 -p 8600:8600/udp --restart always progrium/consul:latest -join 192.168.2.10 -advertise 192.168.2.20 -client 0.0.0.0 -node=node01
[root@docker03 ~]# docker run -d --name consul -p 8301:8301 -p 8301:8301/udp -p 8500:8500 -p 8600:8600/udp --restart always progrium/consul:latest -join 192.168.2.10 -advertise 192.168.2.30 -client 0.0.0.0 -node=node02
[root@docker01 ~]# consul members       ##可查詢到3臺主機
如何部署Docker+Consul+registrator架構實現服務發現

瀏覽器訪問本機的8500端口
如何部署Docker+Consul+registrator架構實現服務發現

3)下載部署consul-template
consul-template_0.19.5_linux_amd64.zip  
[root@docker01 ~]# unzip consul-template_0.19.5_linux_amd64.zip
[root@docker01 ~]# mv consul-template /usr/local/bin/
[root@docker01 ~]# chmod +x /usr/local/bin/consul-template
4)docker02、docker03上部署registrator服務
registrator是一個能自動發現docker container提供的服務,并在后端服務注冊中心注冊服務或取消服務的工具,后端注冊中心支持conusl、etcd、skydns2、zookeeper等。
myregistrator.tar  
[root@docker02 ~]# docker load < myregistrator.tar
[root@docker02 ~]# docker run -d \

--name registrator \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart always \
gliderlabs/registrator \
consul://192.168.2.20:8500
[root@docker03 ~]# docker load < myregistrator.tar
[root@docker03 ~]# docker run -d \
--name registrator \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart always \
gliderlabs/registrator \
consul://192.168.2.30:8500
Docker2上創建一個nginx容器
[root@docker02 ~]# docker run -d -P --name test nginx
驗證conusl上的nginx服務
如何部署Docker+Consul+registrator架構實現服務發現

5)docker01部署一個ngixn服務
[root@docker01 ~]# yum -y install gcc openssl openssl-devel zlib zlib-devel pcre pcre-devel
[root@docker01 ~]# useradd -M -s /sbin/nologin nginx
[root@docker01 ~]# tar zxf nginx-1.14.0.tar.gz
[root@docker01 ~]# cd nginx-1.14.0/
nginx-1.14.0.tar.gz  
[root@docker01 nginx-1.14.0]# ./configure --user=nginx --group=nginx \

--with-http_stub_status_module --with-http_realip_module --with-pcre --with-http_ssl_module
[root@docker01 nginx-1.14.0]# make && make install
[root@docker01 nginx-1.14.0]# ln -s /usr/local/nginx/sbin/* /usr/local/bin/
[root@docker01 nginx-1.14.0]# nginx -t
[root@docker01 nginx-1.14.0]# nginx
PS:這里nginx作為反向代理,代理后端docker02、docker03上nginx的容器服務,所以我們先去docker02、docker03上部署一些服務,為了方便等會回看到負載的效果,所以,我們運行完成容器之后,做一個主界面內容的區分
Docker02:web01 web02
[root@docker02 ~]# docker run -itd --name web01 -P nginx:latest
[root@docker02 ~]# docker exec -it web01 /bin/bash
root@b47619f3f7ae:/# echo The web container in docker02-web01 > /usr/share/nginx/html/index.html
[root@docker02 ~]# docker run -itd --name web02 -P nginx:latest
[root@docker02 ~]# docker exec -it web02 /bin/bash
root@89cc41040e33:/# echo The web container in docker02-web02 > /usr/share/nginx/html/index.html
Docker03:web03 web04
[root@docker03 ~]# docker run -itd --name web03 -P nginx:latest
[root@docker03 ~]# docker exec -it web03 /bin/bash
root@3f0d20853b0b:/# echo The web container in docker03-web03 > /usr/share/nginx/html/index.html
[root@docker03 ~]# docker run -itd --name web04 -P nginx:latest
[root@docker03 ~]# docker exec -it web04 /bin/bash
root@79168d0aa77f:/# echo The web container in docker03-web04 > /usr/share/nginx/html/index.html
更改nginx服務的配置文件
[root@docker01 ~]# cd /usr/local/nginx/
[root@docker01 nginx]# mkdir consul
[root@docker01 nginx]# cd consul/
[root@docker01 consul]# vim nginx.ctmpl
upstream http_backend {
{{range service "nginx"}}
server {{ .Address }}:{{ .Port }};
{{ end }}
}

server {
listen 8000;
server_name localhost;
location / {
proxy_pass http://http_backend;
}
}
[root@docker01 nginx]# cd ../conf/
[root@docker01 conf]# vim nginx.conf

include /usr/local/nginx/consul/*.conf;
//是nginx的主配置文件能夠識別到新的
[root@docker01 conf]# consul-template -consul-addr 192.168.2.10:8500 -template "/usr/local/nginx/consul/nginx.ctmpl:/usr/local/nginx/consul/vhost.conf:/usr/local/bin/nginx -s reload"
后臺運行
[root@docker01 conf]# nohup consul-template -consul-addr 192.168.2.10:8500 -template "/usr/local/nginx/consul/nginx.ctmpl:/usr/local/nginx/consul/vhost.conf:/usr/local/bin/nginx -s reload" &
[root@docker01 conf]# nohup: 忽略輸入并把輸出追加到"nohup.out"
[root@docker01 consul]# pwd
/usr/local/nginx/consul
[root@docker01 consul]# ls      ##生成一個vhost.conf文件
nginx.ctmpl  vhost.conf
[root@docker01 consul]# cat vhost.conf
如何部署Docker+Consul+registrator架構實現服務發現

查看8000端口是否起來
[root@docker01 consul]# ss -lnt
沒起來,重啟nginx
[root@docker01 consul]# nginx -s reload
訪問本機的8000端口
[root@docker01 ~]# curl 127.0.0.1:8000
如何部署Docker+Consul+registrator架構實現服務發現
當然:這時不管后端是新添加nginx的web容器,或是刪除,新生產的配置文件都會實時的更新,這是我們在運行consul-template這條命令添加的模板。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

SHOW| 简阳市| 鄂伦春自治旗| 仪征市| 德化县| 呼伦贝尔市| 浑源县| 德昌县| 沛县| 金沙县| 琼中| 博白县| 乌兰浩特市| 正安县| 班戈县| 高台县| 烟台市| 共和县| 花莲市| 霍邱县| 清新县| 班戈县| 清河县| 滦南县| 阿尔山市| 永泰县| 华容县| 泰安市| 会同县| 雅江县| 毕节市| 扬州市| 黔东| 保康县| 收藏| 筠连县| 古交市| 同德县| 甘南县| 湖南省| 江孜县|