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]  []

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

你可能感兴趣的:(运维)