Docker--consule-Nginx群集负载均衡&harbor

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker--consule-Nginx群集负载均衡&harbor相关的知识,希望对你有一定的参考价值。

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;
  }
}

以上是关于Docker--consule-Nginx群集负载均衡&harbor的主要内容,如果未能解决你的问题,请参考以下文章

LVS负载均衡群集架构:NET模式群集部署

LVS负载均衡群集(NAT)

群集 之 LVS负载均衡(NAT模式)

LVS负载均衡群集部署之——NAT模式的介绍及搭建步骤

LVS负载均衡群集——群集介绍+nat模式

LVS负载均衡群集——群集介绍+nat模式