Docker--consule-Nginx羣集負載均衡&harbor
Docker--consule-Nginx羣集負載均衡&harbor
#Consule 部署
服務器: 192.168.100.200 主機名docker01 consule服務節點 Docker-ce,Compose,Consul-template
服務器: 192.168.100.190 主機名docker02 web 服務節點 Docker-ce,registrator
#------------------------------Consule 服務器
1.部署Docker-Compose環境
yum install -y docker-ce
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose '//在Linux上咱們能夠從GitHub上下載它的二進制包來使用,此命令是下載Docker Compose的當前穩定版本'
chmod +x /usr/local/bin/docker-compose
docker-compose -v
#或者上傳文件
cp -p docker-compose /usr/local/bin
#//就是一個工具,直接添加到/usr/local/bin/ 當成工具來用
2.部署consul
mkdir /root/consul
cp consul_0.9.2_linux_amd64.zip /root/consul
cd /root/consul
unzip consul_0.9.2_linux_amd64.zip
mv consul /usr/bin
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.100.200 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &
//查看羣集狀態
consul members
consul info | grep leader
//經過httpd api 獲取羣集信息
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/catlog/nginx "查看nginx服務信息"
------------------------Web容器服務經過registrator自動加入羣集------------
0.docker-ce環境
1.web節點安裝registrator
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
-ip=192.168.100.190 \ "指的是web節點服務器地址"
consul://192.168.100.200:8500 "指的是consul服務器地址"
//瀏覽器訪問
192.168.100.200:8500
2.測試服務發現功能是否正常
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
3. 驗證httpd 和nginx 服務器是否註冊到consul
輸入 http://192.168.100.200:9500 點擊nodes 點擊 consul-server01 會出現5個服務
//在consul服務器上查看服務
[root@docker01 ~]# curl 127.0.0.1:8500/v1/catalog/services
{"consul":[],"httpd":[],"nginx":[]}[root@docker01 ~]#
#--------------------------------Consule 服務器
4.consul服務器安裝consul-template
unzip consul-template_0.19.3_linux_amd64.zip
cp consul-template /usr/local/bin
5.準備template nginx 模板文件
//在consul上操做
vim /root/consul/nginx.ctmpl
upstream http_backend {
{{range service "nginx"}}
server {{.Address}}:{{.Port}};
{{end}}
}
server {
listen 83;
server_name localhost 192.168.100.200;
access_log /var/log/nginx/tang.cn-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;
}
}
6. 編譯安裝nginx
yum install gcc pcre-devel zlib-devel -y
tar zxvf nginx-1.12.0.tar.gz -C /opt
[root@docker01 consul]# cd /opt
[root@docker01 opt]# ls
containerd nginx-1.12.0 rh
[root@docker01 opt]# cd nginx-1.12.0/
[root@docker01 nginx-1.12.0]# ls
auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src
[root@docker01 nginx-1.12.0]# ./configure --prefix=/usr/local/nginx
[root@docker01 nginx-1.12.0]# make && make install
7. 配置nginx
[root@docker01 nginx-1.12.0]# vim /usr/local/nginx/conf/nginx.conf
http {
include mime.types;
include vhost/*.conf; "添加子配置文件"
default_type application/octet-stream;
......
}
//建立虛擬主機目錄
[root@docker01 nginx-1.12.0]# mkdir /usr/local/nginx/conf/vhost
//建立日誌文件目錄
[root@docker01 nginx-1.12.0]# mkdir /var/log/nginx
//啓動nginx
[root@docker01 nginx-1.12.0]# /usr/local/nginx/sbin/nginx
8.配置並啓動template
//上傳consul-template_0.19.3_linux_amd64.zip
root@docker01 /]# cp consul-template_0.19.3_linux_amd64.zip /root
[root@docker01 /]# unzip consul-template_0.19.3_linux_amd64.zip
[root@docker01 /]# mv consul-template /usr/bin/
[root@docker01 /]# consul-template -consul-addr 192.168.100.200:8500 \
-template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/tang.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info "啓動並利用模板生成ngonx的子配置文件"
[root@docker01 ~]# netstat -ntap |grep 83
tcp 0 0 0.0.0.0:83 0.0.0.0:* LISTEN 94743/nginx
//另外打開一個終端查看生成配置文件
[root@docker01 vhost]# vim tang.conf
upstream http_backend {
server 192.168.100.190:83;
server 192.168.100.190:84;
}
server {
listen 83;
server_name localhost 192.168.100.200;
access_log /var/log/nginx/tang.cn-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;
}
}
9. 增長一個nginx容器節點,測試服務發現及配置更新功能
//在registrator 服務端添加容器,註冊
docker run -itd -p:85:80 --name test-05 -h test05 nginx
//在consul服務端監控會有自動更新
2020/09/23 10:36:54.609791 [INFO] (runner) initiating run
2020/09/23 10:36:54.611630 [INFO] (runner) rendered "/root/consul/nginx.ctmpl" => "/usr/local/nginx/conf/vhost/tang.conf"
2020/09/23 10:36:54.611654 [INFO] (runner) executing command "/usr/local/nginx/sbin/nginx -s reload" from "/root/consul/nginx.ctmpl" => "/usr/local/nginx/conf/vhost/tang.conf"
2020/09/23 10:36:54.611685 [INFO] (child) spawning: /usr/local/nginx/sbin/nginx -s reload
//查看三臺Nginx 日誌,請求正常輪詢到各個容器節點
docker logs -f test-01
docker logs -f test-02
docker logs -f test-05
[root@docker01 vhost]# cat tang.conf //查看自動生成的子配置文件
upstream http_backend {
server 192.168.100.190:83; "反向代理後端節點"
server 192.168.100.190:84;
server 192.168.100.190:85;
}
server {
listen 83;
server_name localhost 192.168.100.200; "nginx反向代理服務器地址"
access_log /var/log/nginx/tang.cn-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_pass http://http_backend;
}
}
#---------------------拓展基於兩個upstream輪詢nginx和httpd----------------------
[root@docker vhost]# vim /root/consul/nginx.ctmpl
upstream http_backend {
{{range service "nginx"}}
server {{.Address}}:{{.Port}};
{{end}}
}
upstream http_httpd {
{{range service "httpd"}}
server {{.Address}}:{{.Port}};
{{end}}
}
server {
listen 1111;
server_name localhost 192.168.179.121;
access_log /var/log/nginx/cllt.cn-access.log;
upstream http_backend {
{{range service "nginx"}}
server {{.Address}}:{{.Port}};
{{end}}
}
upstream http_httpd {
{{range service "httpd"}}
server {{.Address}}:{{.Port}};
{{end}}
}
server {
listen 1111;
server_name localhost 192.168.179.121;
access_log /var/log/nginx/cllt.cn-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;
}
}
server {
listen 2222;
server_name localhost 192.168.179.121;
access_log /var/log/httpd/cllt.cn-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_httpd;
}
}