Consul

Consul

Scroll Down

consul

简介

Consul是一个服务发现和注册的工具,其具有分布式、高扩展性能特点。
在这里插入图片描述

Consul主要包含如下功能:

服务发现: 支持 http 和 dns 两种协议的服务注册和发现方式。
监控检查: 支持多种方式的健康检查。
Key/Value存储: 支持通过HTTP API实现分布式KV数据存储。
多数据中心支持:支持任意数量数据中心。

实验步骤

先解压

unzip consul_1.4.0_linux_amd64.zip -d /usr/bin

查看版本

consul -v 

创建两个目录:
存放consul持久化数据的目录:

mkdir -p /opt/consul/data

存放consul配置文件:

mkdir -p /opt/consul/config

以上步骤四台都是以一样的
8500是consul的默认端口号

下面每个主机写的要看清楚有所不同
ClientA:

consul agent -server -bootstrap-expect 2 -data-dir /opt/consul/data/ -config-dir /opt/consul/config/ -bind 192.168.43.57 -client 0.0.0.0 -enable-script-checks=true -node=consul1 -datacenter=kgc

-server //表示一个服务端代理
-bootstrap-expect 2 //表示数据中心期待的节点数量
-data-dir //数据目录的位置
-config-dir //配置文件目录
-bind //当前这个bind绑定的ip地址
-client //允许谁访问
-enable-script-checks=true //启用心跳检查
-node //当前节点的名字
-datacenter=kgc

ClientB:

consul agent -server -node=consul2 -data-dir /opt/consul/data/ -config-dir /opt/consul/config/ -bind 192.168.43.3 -client 0.0.0.0 -enable-script-checks=true -datacenter=kgc -join 192.168.43.57

ClientC:

consul agent -server -node=consul3 -data-dir /opt/consul/data/ -config-dir /opt/consul/config/ -bind 192.168.43.254 -client 0.0.0.0 -enable-script-checks=true -datacenter=kgc -join 192.168.43.57

ClientD:
加了ui代表能打开图形界面

consul agent -ui -node=client1 -data-dir /opt/consul/data/ -config-dir /opt/consul/config/ -bind 192.168.43.205 -client 0.0.0.0 -enable-script-checks=true -datacenter=kgc -join 192.168.43.57

第四台打了ui所以能打开web界面
在这里插入图片描述

查看集群所有成员:
consul members //在任意一台上面都可以

在这里插入图片描述
查看consul的详细信息:
consul info
查看consul的集群群主:

curl http://127.0.0.1:8500/v1/status/leader

查看consul的成员:

curl http://127.0.0.1:8500/v1/status/peers

查看注册到consul上的所有服务:

curl http://127.0.0.1:8500/v1/catalog/services

查看注册到consul上的服务的信息:

curl http://127.0.0.1:8500/v1/catalog/service/nginx

查看consul集群节点的详细信息
pretty 加?pretty是美化输出

curl http://127.0.0.1:8500/v1/catalog/nodes?

consul命令行中对键值对的操作(kv=key/value)
1、创建或者更新键值对----->put

consul kv put redis/config/connection  5   #有值是修改,没有是创建
              键                  值

2、获取键值--get

consul kv get redis

在这里插入图片描述
3、查询详情--detailed

consul kv get -detailed redis

在这里插入图片描述
4、删除一个键--delete

consul kv delete  redis

5、递归删除--recurse

consul kv delete -recurse  redis/

6、导出键值--export

 consul kv export redis/   #就相当于查看一样

7、列出指定前缀的键--keys

consul kv get -keys redis/

在这里插入图片描述
8、分隔符--separator ---默认情况下是/

consul kv get -keys -separator="" redis

在这里插入图片描述
9、列出所有的键

consul kv get -keys -separator="" 

在这里插入图片描述
10、导入键值对(从.json文件中导入键值对)
第一种:consul kv import @value.json
第二种:cat @value.json | consul lv import -

把第四台停掉

rm -rf /opt/consul/data/*
rm -rf /opt/consul/config/*

四台都要清空

其他两台清空之后然后在打命令
把第三台和第四台都稍微的小改一下
ClientC:

consul agent  -node=client1 -ui  -data-dir /opt/consul/data/ -config-dir /opt/consul/config/ -bind 192.168.43.3 -client 0.0.0.0 -enable-script-checks=true -datacenter=kgc -join 192.168.43.57

ClientD:

consul agent -server -ui -node=consul3   -data-dir /opt/consul/data/ -config-dir /opt/consul/config/ -bind 192.168.43.205 -client 0.0.0.0 -enable-script-checks=true -datacenter=kgc -join 192.168.43.57

在随便下载git
然后把代码仓库文件复制到其他

yum  -y install git 
git clone http://github.com/luojunyong/spring-cloud-examples.git   #克隆代码仓库到本地
scp -r spring-cloud-examples 192.168.43.3:/root/      #记得要加 -r 因为有目录
scp -r spring-cloud-examples 192.168.43.205:/root/ 
scp -r spring-cloud-examples 192.168.43.254:/root/ 
consul结合nginx实现微服务动态联动

只保留前面三台的consul,停掉两台生产者和消费者,第四台的consul
将前面三台consul的/opt/consul/data 目录清空,重新启动

第四台

tar -zxvf consul-template_0.19.5_linux_amd64.tgz 
mv consul-template /usr/bin
mkdir -p /opt/consul/logs 
mkdir -p /usr/local/nginx/conf/vhost
vim /opt/consul/config/nginx-consul-web1.ctml
upstream web1 {
        ip_hash;       //调度算法
{{range service "service-producer"}} //抓取微服务的范围为名字中带有“service-producer”
        server {{.Address}}:{{.Port}} max_fails=3 fail_timeout=30s;
        {{end}}
}
 
server {
        listen 80;
        server_name www.kgc.cn;
        location / {
          proxy_connect_timeout  300s;    //连接超时时间
          proxy_send_timeout     900s;    //发送超时时间
          proxy_read_timeout     900s;    //发送读取时间
          proxy_buffer_size       32k;     //代理缓冲区的大小
          proxy_buffers         4 32k;     //代理缓冲区的个数和单个的大小
          proxy_busy_buffers_size 64k;     // 代理缓冲区单个最大的大小
          proxy_redirect          off;     // 禁止该功能
          proxy_set_header Host $host;
          proxy_set_header Referer $http_referer;
          proxy_set_header X-Real-IP  $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_pass http://web1;
         }
}

proxy_redirect 指定修改被代理服务器返回的响应头中的location头域跟refresh头域数值

在第一台

cd /root/spring-cloud-examples/spring-cloud-consul/spring-cloud-consul-producer
vim src/main/resources/application.properties

在这里插入图片描述

mvn  spring-boot:run
spring.cloud.consul.discovery.preferIpAddress=true

确保consul注册中心能够获取到生产者的IP地址

第二台

cd /root/spring-cloud-examples/spring-cloud-consul/spring-cloud-consul-producer-2
vim src/main/resources/application.properties

在这里插入图片描述

第三台

cd /root/spring-cloud-examples/spring-cloud-consul/spring-cloud-consul-consumer/
vim src/main/resources/application.properties

在这里插入图片描述

访问第三台上的8500端口
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第四台

vim /usr/local/nginx/conf/nginx.conf

在server部分前

include /usr/local/nginx/conf/vhost/*.conf;
consul-template --consul-addr 192.168.50.105:8500 -template /opt/consul/config/nginx-consul-web1.ctml:/usr/local/nginx/conf/vhost/web1.conf:"/usr/local/nginx/sbin/nginx -s reload" -dry

==-consul-addr 指定你当前的注册中心
-template 指定你生产的配置文件是根据哪个模板生产
-dry 仅运行此命令而不生成配置文件==
在这里插入图片描述

nohup consul-template --consul-addr 192.168.50.105:8500 -template /opt/consul/config/nginx-consul-web1.ctml:/usr/local/nginx/conf/vhost/web1.conf:"/usr/local/nginx/sbin/nginx -s reload" --log-level=info > /opt/consul/logs/consul-template.log 2>&1 & 2>&1  #不管是正确输出还是错误输出都转化成标准输出

生成的日志的级别为info
在这里插入图片描述

因为consul的配置文件里指定为ip_hash的调度算法,所以这里不再轮询

在这里插入图片描述

在第四台监控consul日志文件,并停止第一台或者第二台任意一个生产者

tailf /opt/consul/logs/consul-template.log

在这里插入图片描述
再访问一次就可以看到
在这里插入图片描述

四台主机都是服务端
在这里插入图片描述

然后前三台安装maven
然后

yum -y install git 
git clone https://github.com/luojunyong/spring-cloud-examples.git

三台相同操作

cd spring-cloud-examples/spring-cloud-consul/spring-cloud-consul-producer
vim src/main/resources/application.properties

在这里插入图片描述