介紹
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}}