consul搭建與使用

介紹

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}}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章