Consul-template+Nginx实现Consul集群高可用
描述
目前市面上有两种提供服务发现工具,Eureka和Consul,Eureka集群、技术能力已经成熟,但是已经不维护,有一些公司用了Consul做为替代品,小编负责项目遇到一个问题,Consul集群没有实现高可用,导致RPC有段时间没有工作。。。
Consul配置文件和Eureka配置文件不一样,需要指定所有集群ip和端口并用逗号隔开,而Consul只能指定一台机器的ip和端口,所以当指定这台机器宕机以后其它服务就无法使用RPC接口。
安装Consul集群
详情见上篇博客:。。。。。。。
安装并配置Nginx
在nginx.conf中添加如下include conf.d/*.conf;配置。
Consul-Template简介
Consul-Template可以查询Consul中的服务目录、Key、Key-values等。这种强大的抽象功能和查询语言模板可以使Consul-Template特别适合动态的创建配置文件。例如:创建Apache/Nginx Proxy Balancers、Haproxy Backends、Varnish Servers、Application Configurations等
- Quiescence:Consul-Template内置静止平衡功能,可以智能的发现Consul实例中的更改信息。这个功能可以防止频繁的更新模板而引起系统的波动。
- Dry Mode:不确定当前架构的状态,担心模板的变化会破坏子系统?无须担心。因为Consul-Template还有Dry模式。在Dry模式,Consul-Template会将结果呈现在STDOUT,所以操作员可以检查输出是否正常,以决定更换模板是否安全。
- CLI and Config:Consul-Template同时支持命令行和配置文件。
- Verbose Debugging:即使每件事你都做的近乎完美,但是有时候还是会有失败发生。Consul-Template可以提供更详细的Debug日志信息。
Consul-Template安装
下载Consul-Template
wget https://releases.hashicorp.com/consul-template/0.19.3/consul-template_0.19.3_linux_amd64.zip
解压Consul-Template
unzip consul-template_0.19.3_linux_amd64.zip
如果没有unzip则安装
sudo apt-get install unzip
授最高权限
chmod 777 consul-template
测试是否安装成功
consul-template -v
编写ctmpl模板
创建consul.ctmpl(touch consul.ctmpl)文件,内容如下:
upstream consul {
{
{
range service "consul"}}
# .Port 获取consul的8300端口,这里直接写成8500
server {