Docker----Consul介绍与安装

consul简介

Consul是一个分布式、高可用的系统,是一个为了解决在生产环境中服务注册,服务发现,服务配置的一个工具,它有多个组件,提供如下几个关键功能:

  • ① 服务发现: Consul的某些客户端可以提供一个服务,例如api或者mysql,其它客户端可以使用Consul去发现这个服务的提供者。使用DNS或者HTTP,应用可以很容易的找到他们所依赖的服务。
  • ② 健康检查:Consul客户端可以提供一些健康检查,这些健康检查可以关联到一个指定的服务(服务是否返回200 OK),也可以关联到本地节点(内存使用率是否在90%以下)。这些信息可以被一个操作员用来监控集群的健康状态,被服务发现组件路由时用来远离不健康的主机。
  • ③ 键值存储: 应用可以使用Consul提供的分层键值存储用于一些目的,包括动态配置、特征标记、协作、leader选举等等。通过一个简单的HTTP API可以很容易的使用这个组件。
  • ④ 多数据中心:Consul队多数据中心有着非常好的支持,这意味着Consul用户不用担心由于创建更多抽象层而产生多个区域

特点

① 支持健康检查,允许存储键值对
② 一致性协议采用Raft算法,用来保证服务高可用
③ 成员管理和消息广播采用GOSSIP协议,支持ACL访问控制
④ 方便部署,与Docker等轻量级容器可无缝配合
在这里插入图片描述

实验搭建

server部署 192.168.80.10

创建consul目录,并将压缩包添加到服务器中,并解压

[root@localhost ~]# hostnamectl set-hostname server
[root@localhost ~]# su
[root@server ~]# mkdir consul
[root@server ~]# cd consul/
[root@server ~/consul]# rz -E
rz waiting to receive.
[root@server ~/consul]# ls
consul_0.9.2_linux_amd64.zip
[root@server ~/consul]# unzip consul_0.9.2_linux_amd64.zip 
Archive:  consul_0.9.2_linux_amd64.zip
  inflating: consul                  
[root@server ~/consul]# ls
consul  consul_0.9.2_linux_amd64.zip
[root@server ~/consul]# mv consul /usr/bin/

在这里插入图片描述
建立consul服务。并查看集群信息

[root@server ~/consul]# consul agent \
> -server \
> -bootstrap \
> -ui \
> -data-dir=/var/lib/consul-data \
> -bind=192.168.80.10 \
> -client=0.0.0.0 \
> -node=consul-server01 &> /var/log/consul.log &
[1] 13392
[root@server ~/consul]# consul members
Node             Address             Status  Type    Build  Protocol  DC
consul-server01  192.168.80.10:8301  alive   server  0.9.2  2         dc1
[root@server ~/consul]# consul info | grep leader
	leader = true
	leader_addr = 192.168.80.10:8300

查看集群server成员curl 127.0.0.1:8500/v1/status/peers
集群Raf leadercurl 127.0.0.1:8500/v1/status/leader
注册的所有服务curl 127.0.0.1:8500/v1/catalog/services
查看nginx服务信息curl 127.0.0.1:8500/v1/catalog/nginx
集群节点详细信息curl 127.0.0.1:8500/v1/catalog/nodes

client部署 192.168.80.20

让容器服务自动加入nginx集群

[root@client ~]# docker run -d \
> --name=registrator \  #下载registrator容器
> --net=host \  #使用host网络
> -v /var/run/docker.sock:/tmp/docker.sock \  #数据卷挂载(使用的是系统默认的)
> --restart=always \  #重启策略(遇到问题会重启)
> gliderlabs/registrator:latest \  #下载的仓库名称/镜像名称
> -ip=192.168.80.20 \  #指向本地服务器IP地址
> consul://192.168.80.10:8500  #指向注册中心的地址

查看镜像和容器列表

[root@client ~]# docker images
REPOSITORY               TAG       IMAGE ID       CREATED       SIZE
gliderlabs/registrator   latest    3b59190c6c80   5 years ago   23.8MB
[root@client ~]# docker ps -a
CONTAINER ID   IMAGE                           COMMAND                  CREATED         STATUS                        PORTS     NAMES
76b939831872   gliderlabs/registrator:latest   "/bin/registrator -i…"   2 minutes ago   Restarting (1) 1 second ago             registrator

创建两个nginx容器

docker run -itd -p:83:80 --name test-01 -h test01 nginx
docker run -itd -p:84:80 --name test-02 -h test02 nginx
#-name 给容器命名 -h 设置容器主机名

浏览器输入:192.168.80.10:8500
在这里插入图片描述

配置template模块自动更新

server192.168.80.10

Consul-Template是一个守护进程,用于实时查询Consul集群信息,并更新文件系统上任意数量的指定模板,生成配置文件,更新完成以后,可以查询Consul中的服务目录,Key、Key-values等。

在consul目录中添加nginx模板

[root@server ~/consul]# cd /root/consul/
[root@server ~/consul]# vim nginx.ctmpl

upstream http_backend {   #群集模块模板
 {{range service "nginx"}}   #指定nginx服务项
  server {{.Address}}:{{.Port}};  #指向真实服务器的地址和端口“{{.Address}}” 此参数会根据consul群集的参数自动设置上去
  {{end}}   #结束语句(以上为轮询请求方式)
}

server {
 listen 100;   #对外提供的端口,可自行设置,只要不起冲突
 server_name localhost 192.168.80.10;   #本地反向代理的节点地址
 access_log /var/log/nginx/chen.com-access.log;    #访问日志文件目录(需手动创建)  
 index index.html index.php;   #指定访问的index 首页类型
 location / {
        proxy_set_header HOST $host;   #反向代理的请求头部信息
        proxy_set_header X-Real-IP $remote_addr;   #真实服务器IP 
        proxy_set_header Client-IP $remote_addr;   #客户IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   #Forward转发地址
        proxy_pass http://http_backend;   #反向代理指向upstream地址池
  }     
}

手工编译安装nginx

yum -y install gcc pcre-devel zlib-devel
rz nginx-1.12.0.tar.gz
tar zxvf nginx-1.12.0.tar.gz -C /opt
cd /opt/nginx-1.12.10

./configure --prefix=/usr/local/nginx

make && make install

在这里插入图片描述
修改nginx配置文件

vim /usr/local/nginx/conf/nginx.conf
//19     include vhost/*.conf;

在这里插入图片描述

创建vhost文件目录、访问日志目录,并启动服务

[root@server /usr/local/nginx/conf]# mkdir vhost
[root@server /usr/local/nginx/conf]# mkdir /var/log/nginx
[root@server /usr/local/nginx/conf]# /usr/local/nginx/sbin/nginx 

在这里插入图片描述

配置template

解压template压缩包

[root@server ~/consul]# ls
consul_0.9.2_linux_amd64.zip            nginx-1.12.0.tar.gz
consul-template_0.19.3_linux_amd64.zip  nginx.ctmpl
[root@server ~/consul]# unzip consul-template_0.19.3_linux_amd64.zip 
Archive:  consul-template_0.19.3_linux_amd64.zip
  inflating: consul-template         
[root@server ~/consul]# ls
consul_0.9.2_linux_amd64.zip  consul-template_0.19.3_linux_amd64.zip  nginx.ctmpl
consul-template               nginx-1.12.0.tar.gz
[root@server ~/consul]# mv consul-template /usr/bin/

在这里插入图片描述
启动服务

[root@server ~/consul]# consul-template -consul-addr 192.168.80.10:8500 -template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/lic.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info

参数详情

  • -consul-addr 192.168.226.132:8500:指向consul服务端节点

  • -template "/root/consul/nginx.ctmpl:指定模板路径

  • :/usr/local/nginx/conf/vhost/test.conf:指定文件生成到vhost中并命名为test.conf

  • :/usr/local/nginx/sbin/nginx -s reload:不中断服务reload重载nginx服务让配置文件生效

  • –log-level=info:产生日志,级别为info(日志生成位置在nginx.ctml中定义“access_log”)

测试

再开一个终端

[root@server ~]# cd /usr/local/nginx/conf/
[root@server /usr/local/nginx/conf]# cd vhost/
[root@server /usr/local/nginx/conf/vhost]# ls
lic.conf
[root@server /usr/local/nginx/conf/vhost]# cat lic.conf 
upstream http_backend {
 
  server 192.168.80.20:83;
  
  server 192.168.80.20:84;
  
}

server {
 listen 100;
 server_name localhost 192.168.80.10;
 access_log /var/log/nginx/chen.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;
  }     
}

在192.168.80.20,服务器上

docker run -itd -p:85:80 --name test-05 -h test05 nginx

再回到192.168.80.10,的另一个终端上查看

[root@server /usr/local/nginx/conf/vhost]# cat lic.conf 
upstream http_backend {
 
  server 192.168.80.20:83;
  
  server 192.168.80.20:84;
  
  server 192.168.80.20:85;
  
}

server {
 listen 100;
 server_name localhost 192.168.80.10;
 access_log /var/log/nginx/chen.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;
  }     
}

在这里插入图片描述

测试访问代理服务器

是都可以完成代理访问轮询
浏览器访问:192.168.80.10:100
在这里插入图片描述
在192.168.80.20 服务器上查看

docker logs -f test-01
docker logs -f test-02
docker logs -f test-05

在这里插入图片描述

再添加一个节点

consul多节点
//添加一台有docker环境的服务器192.168.184.13加入已有的集群

consul agent \
-server \
--bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.80.10 \
-client=0.0.0.0 \
-node=consul-server02 \
-enable-script-checks=true \
-datacenter=dc1 \
-join 192.168.80.30 &> /var/log/consul.log &

--enable-script-ckecks=true:设置检查服务为可用
-datacenter:数据中心名称
-join:加入到已有的集群中

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值