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

溫馨提示×

溫馨提示×

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

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

Consul+Registrator+Docker實現服務發現(nginx反向代理)

發布時間:2020-07-20 13:36:32 來源:網絡 閱讀:4958 作者:wx5b9c94b17c62a 欄目:云計算

環境準備:

consul:高可用,分布式的服務發現的工具

master主機—docker01:172.16.1.30
node01主機—docker02:172.16.1.31
node02主機—docker03:172.16.1.32

注意:因為是測試環境,所以暫時關閉防火墻,禁用selinux,如果是對外網發布的服務器,是不可以關閉防火墻,可以設置iptables規則。

項目操作:

(1)docker01上部署consul:
下載或上傳consul_1.5.1_linux_amd64軟件包:

[root@sqm-docker01 ~]# unzip consul_1.5.1_linux_amd64.zip  #使用unzip工具進行一個解壓 
[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本機的ip地址
> -client=0.0.0.0 \
> -node=master

參數解釋:
-server:添加一個服務
-bootstrap:一般在server單節點的時候使用,自選舉為leader。
-data-dir:指定數據存放的目錄
-ui:開啟內部的web界面
-bind:指定開啟服務的ip
-client:指定服務的客戶端
-node:在集群內部通信使用的名稱,默認是主機名。

####保持后臺運行consul服務:
[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 &

Consul+Registrator+Docker實現服務發現(nginx反向代理)
執行后臺運行后,會在當前目錄下生成一個文件,生成所有的集群信息都會保存在這個文件內:
Consul+Registrator+Docker實現服務發現(nginx反向代理)
##查看服務端口是否運行:
Consul+Registrator+Docker實現服務發現(nginx反向代理)

8300: 集群節點(對外公布的)
8301: 集群內部訪問
8302: 跨數據中心之間的通信
8500: http--UI
8600: dns

##查看consul信息:
[root@sqm-docker01 ~]# consul info
Consul+Registrator+Docker實現服務發現(nginx反向代理)

說明:consul信息中多為一些算法,這些算法保證數據的同步,以及加上-bootstrap自選舉為leader,也是通過這些算法來實現的。

##查看集群內部信息:
[root@sqm-docker01 ~]# consul members
Consul+Registrator+Docker實現服務發現(nginx反向代理)

登陸訪問web界面:http://172.16.1.30:8500
Consul+Registrator+Docker實現服務發現(nginx反向代理)

(2)docker02上操作:

部署consul服務:
下載progrium/consul鏡像:
[root@sqm-docker02 ~]# docker pull myprogrium-consul
Consul+Registrator+Docker實現服務發現(nginx反向代理)

##創建一個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的主機地址
-advertise:通告的是本機(docker02)的地址,
-client:表示所以主機訪問該節點
-node:自定義節點名稱為node01

確保容器已正常運行:
Consul+Registrator+Docker實現服務發現(nginx反向代理)

在網頁上查看該節點是否加入:
Consul+Registrator+Docker實現服務發現(nginx反向代理)

(3)在docker03上操作:
同樣的下載progrium/consul鏡像:
[root@sqm-docker02 ~]# docker pull myprogrium-consul
運行容器并加入集群:
[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地址,節點名稱為node02

Consul+Registrator+Docker實現服務發現(nginx反向代理)

加入集群后,在docker01上查看集群信息:

[root@sqm-docker01 ~]# consul members

Consul+Registrator+Docker實現服務發現(nginx反向代理)

瀏覽web界面查看:
Consul+Registrator+Docker實現服務發現(nginx反向代理)
確保node1和node2都已經加入到了集群中

(4)在docker01上安裝consul-template:
該軟件包可以在github上進行下載,下載路徑(可自定義選擇版本):https://releases.hashicorp.com/consul-template/

下載后解壓,并給予執行權限:

[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

暫時先安裝完,不做其他操作。

(5)部署registrator:

主要用來收集容器運行服務的信息,并且發送給consul。
自動發現docker container提供的服務,并且在后端服務注冊中心(數據中心)注冊服務。
常見的數據中心有:consul,etcd,zookeeper,相關的技術可以查找相關的技術文檔。

在docker02和docker03上部署registrator:

注意:#兩臺都要部署

docker02:
我導入了一個本地下載好的鏡像(在pull進行拉取):
[root@sqm-docker02 ~]# docker load --input myregistrator.tar

運行一個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

以上命令的作用是把收集過來容器的信息給本機的8500端口來顯示

訪問web網頁查看是否收集到容器的信息:
url:http://172.16.1.30:8500/
Consul+Registrator+Docker實現服務發現(nginx反向代理)

現在在docker02上運行一個ngnx服務,測試是否能夠發現:
[root@sqm-docker02 ~]# docker run -d -P --name test nginx

Consul+Registrator+Docker實現服務發現(nginx反向代理)

docker03:
執行在docker02同樣的操作,查看是否能夠發現服務:

下載鏡像并創建容器:
[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

運行nginx服務:
[root@sqm-docker03 ~]# docker run -d --name test2 -P nginx

確保容器正常運行:
Consul+Registrator+Docker實現服務發現(nginx反向代理)

web網頁進行查看:

Consul+Registrator+Docker實現服務發現(nginx反向代理)

確保也能夠收集到node2上的nginx容器信息。

(6)在docker01上部署nginx,提供反向代理:
1)安裝nginx:

安裝依賴:
[root@sqm-docker01 ~]# yum -y install gcc pcre pcre-devel openssl openssl-devel zlib zlib-devel
創建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/
Consul+Registrator+Docker實現服務發現(nginx反向代理)
啟動nginx:
[root@sqm-docker01 ~]# nginx
Consul+Registrator+Docker實現服務發現(nginx反向代理)

2)現在就開始部署剛才安裝完的consul-template插件了

consul-template的作用:把收集到的信息(把registrator收集到容器的信息)寫入template模板中,并且最終寫入nginx的配置文件中,通過該模板來實現自動化。

##編寫consul-template網頁:

[root@sqm-docker01 ~]# cd /usr/local/nginx/
[root@sqm-docker01 nginx]# mkdir consul  #在nginx目錄下創建存放template網頁的目錄
[root@sqm-docker01 nginx]# cd consul/
[root@sqm-docker01 consul]# vim nginx.ctmpl

內容如下(以go語言實現):

upstream  http_backend {
  {{range service  "nginx"}}
  server {{.Address}}:{{.Port}};
  {{ end }}
}

server {
  listen 8000;   #監聽端口可以自定義,只要不與自己的80端口沖突即可
  server_name localhost;
  location / {
  proxy_pass http://http_backend;
 }
}

##修改nginx配置文件:
[root@sqm-docker01 consul]# vim /usr/local/nginx/conf/nginx.conf
Consul+Registrator+Docker實現服務發現(nginx反向代理)

//根據剛才的模板生成一個.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"

注意:執行命令回車后將會卡在終端,所以接下來我們另開一個終端查看。
也可以將其設置為后臺運行:(加上nohup和&參數):
[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" &

Consul+Registrator+Docker實現服務發現(nginx反向代理)

Consul+Registrator+Docker實現服務發現(nginx反向代理)

##能看到vhost文件中有node01和node02的地址及端口號,說明nginx代理成功。

(7)實現服務自動發現:

為了驗證實現服務發現,在docker02和docker03上創建容器:(基于nginx服務運行)
操作命令如下:
docker02:

mkdir html
echo docker02_web01 > html/index.conf
docker run -itd --name web01 -v /root/html:/usr/share/nginx/html -P nginx

為了更直觀的看到,我們運行第二個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:(同樣的創建兩個容器):

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

最后驗證自動發現的nginx頁面:

訪問的是代理nginx服務器的地址跟上自定義的訪問端口8000
URL:http://172.16.1.30:8000/

第一次訪問的頁面是代理服務器自身的nginx頁面:

Consul+Registrator+Docker實現服務發現(nginx反向代理)

第二次訪問到的是docker02上的第一個nginx頁面:
Consul+Registrator+Docker實現服務發現(nginx反向代理)

第三次訪問到的是docker02上的第二個nginx頁面:
Consul+Registrator+Docker實現服務發現(nginx反向代理)
docker03上的nginx1頁面:
Consul+Registrator+Docker實現服務發現(nginx反向代理)
docker03上的nignx2頁面:
Consul+Registrator+Docker實現服務發現(nginx反向代理)

至此在Docker上部署集群,實現服務的一個自動發現,已經搭建并測試完畢。。。。。

———————— 本文至此結束,感謝閱讀 ————————

向AI問一下細節

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

AI

通辽市| 柳林县| 汉川市| 宜兰县| 山阴县| 正安县| 遂宁市| 西林县| 会理县| 南靖县| 抚顺县| 徐水县| 黎平县| 绍兴县| 嘉黎县| 苏尼特右旗| 镇巴县| 杭州市| 平南县| 松原市| 芦山县| 崇文区| 砀山县| 潜江市| 中方县| 云阳县| 子洲县| 北流市| 响水县| 海城市| 安远县| 亚东县| 民县| 公主岭市| 德庆县| 杭州市| 库尔勒市| 盐亭县| 武冈市| 乐平市| 淮北市|