confd+etcd完成后端服务器的自动检测

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了confd+etcd完成后端服务器的自动检测相关的知识,希望对你有一定的参考价值。

我们在前端转发这里采用的是haproxy,采用lvs或者nginx都可以本质上都是改变配置文件

首先为haproxy创建日记文件

mkdir -p /var/log/haproxy

touch haproxy.log

开启rsyslog的haproxy的日记记录功能添加:

$ModLoad imudp

$UDPServerRun 514

在#save boot message aslo to boot.log之后添加

local0.*    /var/log/haproxy/haproxy.log

修改/etc/sysconfig/rsyslog文件将SYSLOGD_OPTIONS=""修改为:

SYSLOGD_OPTIONS="-r  -m  0 -c  2"

最后再/etc/haproxy/haproxy.cfg文件中添加

log   127.0.0.1  local0

 最后再重启rsyslog和haproxy服务就可以记录日记了


下面是关于haproxy的一个完整的例子:

global

     maxconn 51200

     chroot /var/lib/haproxy

     uid 99

     gid 99

     daemon 

     nbproc  1

     pidfile /var/run/haproxy.pid

     log 127.0.0.1 local0

defaults

     mode     http

     log      global

     option   httplog

     option   redispatch 

     option   abortonclose

     timeout connect  5000ms

     timeout client  50000ms

     timeout server  50000ms

     balance  roundrobin

listen  admin_stats

     bind 0.0.0.0:8888

     stats refresh  30s

     stats  uri  /stats

     stats realm  Haproxy Manager

     stats  auth smecloud:[email protected]

listen  test2

    bind    172.20.176.34:19000

    server  t1   192.168.206.231:80  check

    server  t2   192.168.206.239:80  check

启动etcd 

etcd -name etcdserver -peer-addr 127.0.0.1:7001 -addr  127.0.0.1:4001 -data-dir /data/etcd  -peer-bind-addr 0.0.0.0:7001 -bind-addr 0.0.0.0:4001&

curl  -L  http://xxxxxxxxx:4001/v2/keys/keynames  -XPUT -d  value="sdadasdad" 设置键的值

curl  -L  http://xxxxxxxxx:4001/v2/keys/keynames

curl  -L  http://xxxxxxxxx:4001/v2/keys/keynames  -XDELETE 删除键

首先先创建两个目录/etc/confd/conf.d 和/etc/confd/templates

在conf.d的目录中新建haproxy.toml

[template]

src="haproxy.cfg.tmpl"

dest = "/etc/haproxy/haproxy.cfg"  

keys = [  

  "/app/servers",

]  

reload_cmd = "service haproxy reload"

在templates中新建一个模板:

global

     maxconn 51200

     chroot /var/lib/haproxy

     uid 99

     gid 99

     daemon 

     nbproc  1

     pidfile /var/run/haproxy.pid

     log 127.0.0.1 local0

defaults

     mode     http

     log      global

     option   httplog

     option   redispatch 

     option   abortonclose

     timeout connect  5000ms

     timeout client  50000ms

     timeout server  50000ms

     balance  roundrobin

listen  admin_stats

     bind 0.0.0.0:8888

     stats refresh  30s

     stats  uri  /stats

     stats realm  Haproxy Manager

     stats  auth smecloud:[email protected]

listen  test2

    bind    172.20.176.34:19000

    {{range gets "/app/servers/*"}}  

    server {{base .Key}} {{.Value}} check 

    {{end}}  

后台启动confd并confd -verbose  -interval 10 -node  ‘127.0.0.1:4001‘  -confdir /etc/confd >/var/log/confd.log &


这时候可以etcdctl set  /app/server/dsdas sdasdad 往etcd里面填充相对应的值的时候就配置文件就会自动更新,几乎可以是实时的 


只需要在后端服务器中启动服务时编写脚本调用etcd填写数值的api即可




注释:

1、base
    作为path.Base函数的别名,获取路径最后一段。
{{ with get "/app/servers/prickly_blackwell"}}
    server {{base .Key}} {{.Value}} check
{{end}}


2、get
    返回一对匹配的KV,找不到则返回错误。
{{with get "/app/servers/prickly_blackwell"}}
    key: {{.Key}}
    value: {{.Value}}
{{end}}


3、gets
    返回所有匹配的KV,找不到则返回错误。
{{range gets "/app/servers/*"}}
    {{.Key}} {{.Value}}
     {{end}}


4、getv
    返回一个匹配key的字符串型Value,找不到则返回错误。
{{getv "/app/servers/cocky_morse"}}



5、getvs 
    返回所有匹配key的字符串型Value,找不到则返回错误。
        {{range getvs "/app/servers/*"}}
           value: {{.}}
        {{end}}


6、split
    对输入的字符串做split处理,即将字符串按指定分隔符拆分成数组。
        {{ $url := split (getv "/app/servers/cocky_morse") ":" }}
          host: {{index $url 0}}
          port: {{index $url 1}}


7、ls
    返回所有的字符串型子key,找不到则返回错误。
{{range ls "/app/servers/"}}
   subkey: {{.}}
{{end}}



8、lsdir
    返回所有的字符串型子目录,找不到则返回一个空列表。
{{range lsdir "/app/"}}
   subdir: {{.}}
{{end}}


本文出自 “东神要一打五” 博客,谢绝转载!

以上是关于confd+etcd完成后端服务器的自动检测的主要内容,如果未能解决你的问题,请参考以下文章

etcd+confd实现Nginx配置文件自动管理

Confd实现Nginx配置文件自动管理

通过Etcd+Confd自动管理Haproxy(多站点)

etcd+confd+nginx实现配置动态upstream

Haproxy+etcd+confd+Docker搭建节点自动发现的高可用负载均衡框架

使用etcd+confd管理nginx配置