目录
一、环境
二、consul服务器
三、registrator服务器
四、consul-template
consul服务器 192.168.246.10 运行consul服务、nginx服务、consul-template守护进程
registrator服务器 192.168.246.11 运行registrator容器、运行nginx容器
1、建立consul服务
mkdir /opt/consul
cp /opt/consul_0.9.2_linux_amd64.zip /opt/consul
cd /opt/consul
unzip consul_0.9.2_linux_amd64.zip
mv consul /usr/local/bin/
2、设置代理,在后台启动 consul 服务端
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.246.10 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &
netstat -natp | grep consul #启动consul后默认会监听5个端口:
#8300:replication、leader farwarding的端口
#8301:lan cossip的端口
#8302:wan gossip的端口
#8500:web ui界面的端口
#8600:使用dns协议查看节点信息的端口
3、查看集群信息
3.1、查看members状态
consul members
3.2、查看集群状态
consul operator raft list-peers
4、通过 http api 获取集群信息
curl 127.0.0.1:8500/v1/status/peers #查看集群server成员
curl 127.0.0.1:8500/v1/status/leader #集群 server-leader
curl 127.0.0.1:8500/v1/catalog/services #注册的所有服务
curl 127.0.0.1:8500/v1/catalog/nginx #查看 nginx 服务信息
curl 127.0.0.1:8500/v1/catalog/nodes #集群节点详细信息
1、安装 Gliderlabs/Registrator
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
--ip=192.168.246.11 \
consul://192.168.246.10: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
这边 test04最后没有那个httpd,多打了
3、验证 http 和 nginx 服务是否注册到 consul
浏览器中,输入 http://192.168.246.10:8500,在 Web 页面中“单击 NODES”,然后单击“consurl-server01”,会出现 5 个服务。
3.1、在consul服务器使用curl测试连接服务器
curl 127.0.0.1:8500/v1/catalog/services
1、准备 template nginx 模板文件,在consul服务器上操作
vim /opt/consul/nginx.ctmpl
#定义nginx upstream一个简单模板
upstream http_backend {
{{range service "nginx"}}
server {{.Address}}:{{.Port}};
{{end}}
}
#定义一个server,监听8000端口,反向代理到upstream
server {
listen 8000;
server_name localhost 192.168.246.10;
access_log /var/log/nginx/kgc.com-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;
}
}
2、编译安装nginx
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
useradd -M -s /sbin/nologin nginx
tar zxvf nginx-1.22.0.tar.gz -C /opt/
cd /opt/nginx-1.22.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make -j && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
3、配置 nginx
vim /usr/local/nginx/conf/nginx.conf
......
http {
include mime.types;
include vhost/*.conf; #添加虚拟主机目录
default_type application/octet-stream;
......
创建虚拟主机目录
mkdir /usr/local/nginx/conf/vhost
创建日志文件目录
mkdir /var/log/nginx
启动nginx
nginx
4、配置并启动 template
unzip consul-template_0.19.3_linux_amd64.zip -d /opt/
cd /opt/
mv consul-template /usr/local/bin/
在前台启动 template 服务,启动后不要按 ctrl+c 中止 consul-template 进程。
consul-template --consul-addr 192.168.246.10:8500 \
--template "/opt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/kgc.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info
重新再开一个窗口,查看生成配置文件
cat /usr/local/nginx/conf/vhost/kgc.conf
5、访问 template-nginx
docker ps -a
docker exec -it 8018c1586b68 bash
echo "this is test1 web" > /usr/share/nginx/html/index.html
docker exec -it 26c48d24b8cd bash
echo "this is test2 web" > /usr/share/nginx/html/index.html
浏览器访问:http://192.168.246.10:8000/,并不断刷新。
6. 增加一个 nginx 容器节点
6.1、增加一个 nginx 容器节点,测试服务发现及配置更新功能。
docker run -itd -p:85:80 --name test-06 -h test06 nginx
观察 template 服务,会从模板更新/usr/local/nginx/conf/vhost/kgc.conf 文件内容,并且重载 nginx 服务。
6.2、查看/usr/local/nginx/conf/vhost/kgc.conf 文件内容