Consul+Nginx部署高可用
1. Consul Server
創建consul server虛擬主機
docker-machine create consul
出現如下內容即創建成功
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
創建工作目錄consul
mkdir -p ~/workspace/consul && cd ~/workspace/consul
創建docker-compose.yml
version: "3"
services:
consul:
image: consul:latest
ports:
- 8500:8500
command: agent -server -bootstrap -ui -client=0.0.0.0 -node=server01
切換環境到consul
eval $(docker-machine env consul)
執行docker-compose.yml
docker-compose up -d
查看虛擬主機IP
docker-machine ip consul
# output 192.168.99.103
通過IP在瀏覽器訪問8500端口,即可看到Consul的UI界面

2. Nginx + Consul Template
創建反向代理虛擬主機
docker-machine create reverseproxy
出現以下內容代表創建成功
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;
}
}
Go語言組件學習示例開源庫,歡迎star
https://github.com/EnochZg/golang-examples

浙公網安備 33010602011771號