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实现配置动态upstream