etcd 指定配置文件启动_Etcd + confd 通过 Nginx 对后端服务的注册发现

先简单介绍下用到的产品,Etcd是一个分布式KV存储系统,confd是一个对Etcd key或目录做变化监控的工具,并配有相关语法,可以将变化的KV处理后形成配置文件,假设后端服务用的是Docker,Nginx就是对Docker做7层负载和流量调度的。

再看业务逻辑,Docker容器起来后,会通过接口(rest api或者rpc)向Etcd注册相关KV信息,confd检测到Etcd的KV变化后,立即触发程序通过模板形成新的Nginx配置文件,先做离线语法测试,如果没问题就覆盖原配置,进而reload,测试不通过不覆盖原配置,整个过程安全可控。在容器注册到Nginx的upstream后,Nginx会对容器做健康检查,如果正常,则分发流量过去。对应的业务流程图如下:

4af45d5747e147560b35a8e1c604c0a2.png

根据业务情况,目前要考虑的问题有5个:

1、Nginx多域名多server的混合注册,使Nginx可以混合调度多个业务;

2、不同机房如何在同一Etcd集群上进行注册,如何规划;

3、confd更新频率如何周期可控制,KV每有变化实时触发reload太敏感,况且每个容器要注册多个KV,在整体注册完之前,是不需要reload的;

4、confd启动时如何关联多个Etcd的地址,保证高可用;

5、权限问题如何处理,怎么做,如果任何人知道ip和端口就可以注册,那么服务就垮了。

1.Nginx如何实现多域名多server的混合注册

先分析下Nginx做负载均衡时的配置文件,分析后发现能 决定不同的注册服务的3个 关键元素:

  • server_name的域名
  • upstream的名称
  • upstream里的server,

有了这个思路后,设计confd对应的Nginx的模板文件(confd是可以直接下载二进制包,不存在安装问题,配置好path后直接使用,在使用中默认读取/etc/confd下的conf.d和templates下两个目录的配置,对应github: https://github.com/coreos/etcd ),具体是操作步骤如下:

1、创建confd使用的目录

 $mkdir -p /etc/confd/{conf.d,templates}

2、在conf.d下创建.toml配置文件,在templates下创建.tmpl模板文件(后面介绍,想看步骤3注册效果)

3、根据Nginx的3个元素去分析规划KV规则,优化后发现注册一个服务要添加两个健值,并用e tcdctl命令进行模拟测试,注册第一个服务如下:

 $etcdctl set /service_sgin/subdomain/service1 "www.service1.com" $etcdctl set /service_sgin/upstream/service1/server1 192.168.1.1

其中service1是对应业务名称," www.service1.com "是域名,192.168.1.1对应是server,先看下注册后的结果:

1e6c937b6822327af3f49059c2378a9e.png

然后再继续注册第二个服务,对应命令如下:

$etcdctl set /service_sgin/subdomain/service2 "www.service2.com page.service2.com"$etcdctl set /service_sgin/upstream/service2/server1 192.168.1.2

注册后配置文件截图如下:

f44ca41bc95fbc3d2abcbd1a28b958e4.png

达到了混合注册的效果,另外加了一个默认的server,当过来没有符合业务的域名,直接302到小米的主页http://www.mi.com,好了剖开看confd的两个概要配置编码如下:

$vim /etc/confd/conf.d/nginx.conf.toml

[template] prefix = "/service_sgin" #此配置对应Etcd的默认目录 src = "nginx.conf.tmpl" #对应templates下的模板文件 dest = '/usr/local/nginx/conf/nginx.conf' #对应nginx的配置文件 owner = "root" mode = "0666" keys = [ "/upstream
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值