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