一、Consul
1、作用
服务注册:可能通过API将服务注册到Consul中。
服务发现:可以通过API获取服务的IP和PROT。
故障检测:支持如TCP、HTTP等方式的健康检查机制,从而当服务有故障时自动摘除。
K/V存储:使用K/V存储实现动态配置中心,其使用HTTP长轮询实现变更触发和配置更改。
多数据中心:支持多数据中心,可以按照数据中心注册和发现服务,即支持只消费本地机房服务,使用多数据中心集群还可以避免单数据中心的单点故障。
Raft算法:Consul使用Raft算法实现集群数据一致性。
二、环境搭建
1、安装consul
cd /usr/local/
//下载
wget https://releases.hashicorp.com/consul/1.10.1/consul_1.10.1_linux_amd64.zip
//解压
unzip consul_1.10.1_linux_amd64.zip
//如果解压出现错误:-bash:unzip 未找到命令
//解决办法
yum -y install unzip
//测试是否有安装成功,执行以下
./consul
//启动-----consul
//假设当前linux ip为 192.168.110.110
./consul agent -dev -ui -node=consul-dev-client=192.168.110.110
//如果consul在虚拟机启动后,本地浏览器无法访问的话,换种方式启动consul
./consul agent -dev -ui -node=consul-dev-client=0.0.0.0
//或
./consul agent -dev -client 0.0.0.0 -ui
//访问:浏览器输入 192.168.110.110:8500(默认端口8500)
//若无法访问,尝试关闭防火墙
systemctl stop firewalld
2、安装nginx-upsync-module
cd /usr/local
//下载
wget https://github.com/weibocom/nginx-upsync-module/archive/master.zip
//解压
unzip master.zip
3.配置nginx
groupadd nginx
useradd -g nginx -s /sbin/nologin nginx
mkdir -p /var/tmp/nginx/client/
mkdir -p /usr/local/nginx
4、编译nginx
cd nginx-1.9.0
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre --add-module=../nginx-upsync-module-master
make && make install
5、创建upsync_dump_path,指定从consul拉取的上游服务器后持久化到的位置,这样即使consul服务器出问题了,本地还有一个备份。
mkdir /usr/local/nginx/conf/servers/
6、nginx.conf 配置和启动
http {
include mime.types;
##动态去consul server 去获取 注册的真实反射代理地址
upstream test {
##server是固定的,所以随便取个端口号
server 127.0.0.1:11111;
##kv/upstreams/test-- 获取key-value upstreams的test值
upsync 192.168.227.134:8500/v1/kv/upstreams/test upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off;
##动态获取的consul相关的负载均衡配置 持久化保存到硬盘
upsync_dump_path /usr/local/nginx/conf/servers/servers_test.conf;
}
server {
listen 80;
server_name 192.168.227.134;
location / {
proxy_pass http://test;
index index_index.do;
}
}
}
//启动nginx
/usr/local/nginx/sbin/nginx
//关闭nginx
/usr/local/nginx/sbin/nginx -s stop
//重启nginx
/usr/local/nginx/sbin/nginx -s reload
//在启动nginx时报错
openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
//百度都说这问题是安装openssl位置不对,也不知道怎么不对的,解决方案:
ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
//使用postmen 发送put请求
http://consul服务IP:8500/v1/kv/upstreams/test/192.168.110.110:8081
http://consul服务IP:8500/v1/kv/upstreams/test/192.168.110.110:8082
三、consul常用API
1、服务注册
put/post访问 http://192.168.110.110:8500/v1/catalog/register
{
"Datacenter": "dc1",
"Node":"tomcat",
"Address":"192.168.5.165",
"Service": {
"Id" :"192.168.5.165:8080",
"Service": "itmayiedu",
"tags": ["dev"],
"Port": 8080
}
}
解释:
Datacenter指定数据中心
Address指定服务IP
Service.Id指定服务唯一标识
Service.Service指定服务分组,服务名
Service.tags指定服务标签(如测试环境、预发环境等)
Service.Port指定服务端口
2、获取服务
GET请求:http://192.168.110.110:8500/v1/catalog/service/服务名
c.添加Key/Value
//添加key value方式:
a.使用linux命令方式发送put请求
curl -X PUT http://consul服务IP:8500/v1/kv/upstreams/test/192.168.2.112:8080
b.使用postmen 发送put请求
http://consul服务IP:8500/v1/kv/upstreams/test/192.168.212.1:8081
kv 表示key value
upstreams/test 表示添加的是给nginx upstream使用,test 类似分组