介绍
consul是一个分布式、高可用的服务注册与服务发现的系统。
可以搭建集群,避免单节点出现故障而导致服务不可用
安装
以centos7服务器为例
可以在consul的官网下载对应系统的最新版本consul
https://www.consul.io/downloads.html
#下载最新版本consul
wget https://releases.hashicorp.com/consul/1.6.0/consul_1.6.0_linux_amd64.zip
#解压
unzip consul_1.6.0_linux_amd64.zip
#将解压好的文件放到系统path目录下,可以全局使用consul命令
mv consul /usr/local/bin/
在命令行输入consul
显示以下内容,即安装成功
Usage: consul [--version] [--help] <command> [<args>]
Available commands are:
#省略
配合nginx搭建负载均衡,可以下载consul的工具
https://www.consul.io/downloads_tools.html
#下载consul-template,可以用来生成nginx.conf的配置文件
wget https://releases.hashicorp.com/consul-template/0.21.2/consul-template_0.21.2_linux_amd64.zip
#解压
unzip consul-template_0.21.2_linux_amd64.zip
#同样将解压后的文件移动到系统path目录
mv consul-template /usr/local/bin
启动服务
单个局域网内至少要有一个consul-server
不共享的网络下需要将bing写为0.0.0.0
运行sever
consul agent -server -ui -data-dir=/data/consul -bootstrap-expect=1 -node=consul-1 -client={内网IP} -advertise={公网IP} -datacenter={数据中心名称}
-ui 启用web页面
-node ={节点名称} 搭建集群时同一个集群这个值不能相同
-bootstrap-expect 期望节点值,达到这个节点 服务就会运行,只用第一台加这个参数,作为leads
-datacenter 数据中心 一个集群的数据中心名称一样
-data-dir 数据储存地址
其余的consul 启动后
consul join {server的公网IP}
创建clien
consul agent -data-dir=/data/consul -node={node} -client=0.0.0.0 -advertise={clien的公网IP} -datacenter={数据中心名称}
join ={server的IP}
在server下执行 可以查看consul列表
#查看consul列表
consul members
nginx模板
consul-template --consul-addr={consul-server IP}:8500 -template={consul模板路径}:{生成的nginx模板路径}
会通过server返回的服务列表生成nginx的配置
{{range services}}
{{if in .Name "consul" }} {{else}}
upstream {{.Name}} {
{{range service .Name}}
{{if .Node | regexMatch "server1|server2" }}server {{.Address}}:{{.Port}} max_fails=3 fail_timeout=60 weight=1;{{end}}
{{else}}server 127.0.0.1:65535; # force a 502{{end}}
} {{end}}{{end}}
server {
listen 80;
server_name localhost;
{{range services}} {{$name := .Name}} {{$service := service .Name}}
{{if in .Name "consul" }} {{else}}
location /{{$name}} {
proxy_pass http://{{$name}} ;
client_max_body_size 0;
proxy_connect_timeout 300s;
proxy_send_timeout 900;
proxy_read_timeout 900;
proxy_buffer_size 32k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_redirect off;
proxy_hide_header Vary;
proxy_set_header Accept-Encoding '';
proxy_set_header Host $host;
proxy_set_header Referer $http_referer;
proxy_set_header Cookie $http_cookie;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_headers_hash_max_size 51200;
proxy_headers_hash_bucket_size 6400;
}
} {{end}}{{end}}