本文共 9048 字,大约阅读时间需要 30 分钟。
Consul 是一个支持多数据中心分布式高可用的 服务发现 和 配置共享 的服务软件,由 HashiCorp 公司用 Go 语言开发,基于 Mozilla Public License 2.0 的协议进行开源。
主要特性:consul的实例叫agent,agent有两种运行模式:server和client 。
官方建议每个Consul Cluster数据中心至少有3个或以上的运行在Server Mode的Agent,Client节点不限。端口 | 说明 |
---|---|
TCP/8300 | 8300 |
TCP/UDP/8301 | 8301端口用于单个数据中心所有节点之间的互相通信,即对LAN池信息的同步。它使得整个数据中心能够自动发现服务器地址,分布式检测节点故障,事件广播(如领导选举时间)。 |
TCP/UDP/8302 | 8302端口用于单个或多个数据中心之间的服务器节点的信息同步,即对WAN池信息的同步。它针对互联网的高延迟进行了优化,能够实现跨数据中心请求。 |
8500 | 8500端口基于HTTP协议,用于API接口或web UI访问 |
8600 | 8600端口作为DNS服务器,它使得我们可以通过节点名查询节点信息 |
主机 | 主机IP | 安装工具 |
---|---|---|
consul服务器 | 192.168.158.10 | Docker、Consul、Consul-template模板、nginx代理服务 |
容器服务器 | 192.168.158.20 | Docker、registrator、nginx容器 |
//先创建一个目录 mkdir /root/consulcd /root/consul
[root@server1 consul]# lsconsul-template_0.19.3_linux_amd64.zipconsul_0.9.2_linux_amd64.zip nginx-1.12.2.tar.gz
unzip consul_0.9.2_linux_amd64.zip//使 consul 命令可以在任何目录下识别 mv consul /usr/bin[root@server1 consul]# consul agent \-server \-bootstrap \-ui \-data-dir=/var/lib/consul-data \-bind=192.168.158.10 \-client=0.0.0.0 \-node=consul-server01 &> /var/log/consul.log &[1] 19458[root@server1 consul]# netstat -natp | grep 8500tcp6 0 0 :::8500 :::* LISTEN 19458/consul #consul服务已经启动
#查看群集信息[root@server1 consul]# consul membersNode Address Status Type Build Protocol DCconsul-server01 192.168.158.10:8301 alive server 0.9.2 2 dc1[root@server1 consul]# consul info | grep leader leader = true leader_addr = 192.168.158.10:8300
[root@localhost consul]# curl 127.0.0.1:8500/v1/status/peers ##查看群集server成员[root@localhost consul]# curl 127.0.0.1:8500/v1/status/leaders ##群集中 Raf leader[root@localhost consul]# curl 127.0.0.1:8500/v1/catalog/services ##注册的所有服务[root@localhost consul]# curl 127.0.0.1:8500/v1/catalog/nodes ##群集节点详细信息[root@localhost consul]# curl 127.0.0.1:8500/v1/catalog/nginx ##查看 nginx 服务信息
在容器服务器上安装 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.158.20 \ consul://192.168.158.10:8500
创建两个容器
docker run -dit -p:83:80 --name tom1 -h tom-01 nginxdocker run -dit -p:84:80 --name tom2 -h tom-02 nginx
验证nginx服务是否注册到consul
浏览器访问:192.168.158.10:8500
点击“NODES”----》“consurl-serve01”会出现刚刚创建的两个服务
Consul-Template是一个守护进程,用于实时查询Consul集群信息,并更新文件系统上系统上任意数量的指定模板,生成配置文件。更新完成后,可以选择允许shell命令执行更新,重新加载Nginx。Consul-Template可以查询Consul中的服务目录,Key、Key-Values等,这种抽象的功能和查询语言模板可以使Consul-Template特别适合动态的创建配置文件
在consul上操作
[root@server1 ~]# vi consul/nginx.ctmpl upstream http_backend { { { range service "nginx"}} server { { .Address}}:{ { .Port}}; { { end}}}server { listen 83; server_name localhost 192.168.158.10; access_log /var/log/nginx/tom.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-Fprwarded-For $proxy_add_x_forwarded_for; proxy_pass http://http_backend; } }
#安装环境[root@localhost ~]# yum install gcc gcc-c++ pcre pcre-devel zlib-devel -y[root@localhost ~]# cd /opt[root@localhost opt]# lscontainerd mei nginx-1.12.0.tar.gz rh#解压缩[root@localhost opt]# tar zxvf nginx-1.12.0.tar.gz cd nginx-1.12.0/[root@localhost nginx-1.12.0]# ./configure --prefix=/usr/local/nginx#编译及安装[root@localhost nginx-1.12.0]# make && make install#创建启动软连接ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
2.31:配置nginx#在http模板添加虚拟主机目录[root@localhost nginx-1.12.0]# vim /usr/local/nginx/conf/nginx.confhttp { include mime.types; include vhost/*.conf; #加虚拟主机目录' default_type application/octet-stream;
创建虚拟主机目录[root@server1 ~]# mkdir /usr/local/nginx/conf/vhost创建日志文件目录[root@server1 ~]# mkdir /var/log/nginx
[root@server1 ~]# /usr/local/nginx/sbin/nginx[root@server1 ~]# netstat -anpt |grep nginxtcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 22384/nginx: master
#进入consul解压缩包[root@localhost ~]# cd consul/[root@localhost consul]# lsconsul_0.9.2_linux_amd64.zip nginx.ctmplconsul-template_0.19.3_linux_amd64.zip[root@localhost consul]# unzip consul-template_0.19.3_linux_amd64.zip 复制到/bin目录下,方便直接使用[root@localhost consul]# mv consul-template /usr/local/bin/
consul-template -consul-addr 192.168.158.10:8500 -template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/tom.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info '//会进入监控状态'/root/consul/nginx.ctmpl:template 模板文件目录/usr/local/nginx/conf/vhost/tom.conf 文件生成的路径 【生成到vhost中】/usr/local/nginx/sbin/nginx -s reload 重载服务配置 log-level=info 日志级别
[root@client1 ~]# docker run -dit -p:121:80 --name tom121-h tom-121 nginx9cda804b7d1fae290aff4f4c47417ac43c7276e5f71ec45025a2028713145ec8自动添加负载
为了展示轮询处理请求,可以用logs命令,来查看三台nginx容器的容器日志,
都会显示来自同一IP地址的访问
#查看tom1同样没有访问日志[root@client1 ~]# docker logs -f tom1/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d//docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh/docker-entrypoint.sh: Configuration complete; ready for start up#查看tom2同样没有访问日志[root@client1 ~]# docker logs -f tom2/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d//docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh/docker-entrypoint.sh: Configuration complete; ready for start up
[root@client1 ~]# docker logs -f tom1192.168.158.10 - - [01/Dec/2020:02:52:02 +0000] "GET / HTTP/1.0" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36 Edg/87.0.664.47" "-"192.168.158.10 - - [01/Dec/2020:02:52:04 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36 Edg/87.0.664.47" "-"[root@client1 ~]# docker logs -f tom2192.168.158.10 - - [01/Dec/2020:02:53:50 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36 Edg/87.0.664.47" "-"192.168.158.10 - - [01/Dec/2020:02:53:50 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36 Edg/87.0.664.47" "-"[root@client1 ~]# docker logs -f tom4192.168.158.10 - - [01/Dec/2020:02:52:04 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36 Edg/87.0.664.47" "-"192.168.158.10 - - [01/Dec/2020:02:53:50 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36 Edg/87.0.664.47" "-"
[root@client1 ~]# docker run -itd -p:87:80 --name tom11 -h tom-11 nginx
consul agent -server -bootstrap -ui -data-dir=/var/lib/consul-data -bind=192.168.158.20 -client=0.0.0.0 -node=consul-server02 -enable-script-checks=true -datacenter=dc1 -join 192.168.158.10 & > /var/log/consul.log &
consul-template_0.19.3_linux_amd64.zipconsul_0.9.2_linux_amd64.zipnginx-1.12.0.tar.gz链接: https://pan.baidu.com/s/1CzumDgfpoOXVi_8mqITtRg 提取码: tyv2
如果对您有帮助的话,给个三联吧
转载地址:http://lfdaf.baihongyu.com/