Consul&Nginx&Registrator&ConsulTemplate部署高可用负载均衡

1. Consul Server

建立consul server虚拟主机node

docker-machine create consul
复制代码

出现以下内容即建立成功nginx

Running pre-create checks...
Creating machine...
(consul) Copying /Users/enoch/.docker/machine/cache/boot2docker.iso to /Users/enoch/.docker/machine/machines/consul/boot2docker.iso...
(consul) Creating VirtualBox VM...
(consul) Creating SSH key...
(consul) Starting the VM...
(consul) Check network to re-create if needed...
(consul) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env consul
复制代码

建立工做目录consulweb

mkdir -p ~/workspace/consul && cd ~/workspace/consul
复制代码

建立docker-compose.ymldocker

version: "3"

services:
 consul:
 image: consul:latest
 ports:
 - 8500:8500
 command: agent -server -bootstrap -ui -client=0.0.0.0 -node=server01
复制代码

切换环境到consulbootstrap

eval $(docker-machine env consul)
复制代码

执行docker-compose.yml浏览器

docker-compose up -d
复制代码

查看虚拟主机IPbash

docker-machine ip consul
# output 192.168.99.103
复制代码

经过IP在浏览器访问8500端口,便可看到Consul的UI界面ui

2. Nginx + Consul Template

建立反向代理虚拟主机this

docker-machine create reverseproxy
复制代码

出现如下内容表明建立成功spa

Running pre-create checks...
Creating machine...
(reverseproxy) Copying /Users/enoch/.docker/machine/cache/boot2docker.iso to /Users/enoch/.docker/machine/machines/reverseproxy/boot2docker.iso...
(reverseproxy) Creating VirtualBox VM...
(reverseproxy) Creating SSH key...
(reverseproxy) Starting the VM...
(reverseproxy) Check network to re-create if needed...
(reverseproxy) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env reverseproxy
复制代码

切换当前环境到虚拟主机

eval $(docker-machine env reverseproxy)
复制代码

建立工做目录reverseproxy

mkdir -p ~/workspace/reverseproxy && cd ~/workspace/reverseproxy
复制代码

建立docker-compose.yml

version: "3"

services:
 nginx:
 image: nginx:latest
 ports:
 - 8081:80
 volumes:
 - ./nginx.conf:/etc/nginx/nginx.conf
 - ./conf.d:/etc/nginx/conf.d

 consul-template:
 image: hashicorp/consul-template:alpine
 volumes:
 - ./conf.d:/etc/nginx/conf.d
 command: consul-template --consul-addr 192.168.99.103:8500 --template "/etc/nginx/conf.d/nginx.ctmpl:/etc/nginx/conf.d/vhost.conf" --log-level=info
复制代码

把容器跑起来

docker-compose up -d
复制代码

查看IP

docker-machine ip reverseproxy
# output 192.168.99.102
复制代码

浏览器访问reverseproxy的8081端口,出现以下内容表明启动成功

3. Webserver搭建

建立虚拟主机webserver1

docker-machine create webserver1
eval $(docker-machine env webserver1)
mkdir webserver1 & cd webserver1
复制代码

建立docker—compose.yml

version: "3"

services:

 nginx1:
 image: nginx:latest
 ports:
 - 81:80

 nginx2:
 image: nginx:latest
 ports:
 - 82:80

 registrator:
 image: shaharil/registrator:latest
 volumes:
 - /var/run/docker.sock:/tmp/docker.sock
 command: consul://192.168.99.103:8500
复制代码

跑起来

docker-compose up -d
复制代码

打开reverseproxy/conf.d/vhost.conf能够看到webserver启动的nginxIP地址都被加了进去

upstream http_backend {
    
    server 172.18.0.2:81;
    
    server 172.18.0.3:82;
    
}

server {
    listen 8000;
    server_name localhost;
    location / {
        proxy_pass http://http_backend;
    }
}
复制代码

作个试验,如今将其中一台nginx容器关闭

eval $(docker-machine env webserver1)
docker stop webserver1_nginx2_1
复制代码

此时能够看到vhost.conf中的IP被去掉了

upstream http_backend {
    
    server 172.18.0.2:81;
    
}

server {
    listen 8000;
    server_name localhost;
    location / {
        proxy_pass http://http_backend;
    }
}
复制代码

再将nginx容器打开,该容器的IP地址随之也会被加进去

docker start webserver1_nginx2_1

//如下是文件内容
upstream http_backend {
    
    server 172.18.0.2:81;
    
}

server {
    listen 8000;
    server_name localhost;
    location / {
        proxy_pass http://http_backend;
    }
}
复制代码
相关文章
相关标签/搜索