Rootop 服务器运维与web架构

etcd+confd+nginx实现服务注册及自动发现

etcd:etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现。
confd:confd是一个配置管理工具。通过查询etcd,结合配置模板引擎生成正式配置文件,同时具备定期探测机制(根据参数手动指定间隔秒数)来生成新的配置,配置变更自动重载。

# 安装 etcd 单机版,直接github下载二进制版本即可运行。

nohup etcd --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://0.0.0.0:2379 > etcd.log &

# 安装 confd 直接github下载二进制版
# 创建配置文件目录及模板目录

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

# 配置文件内容,注意后缀名

[root@localhost confd]# cat conf.d/test2.toml
[template]
src = "nginx2.conf.tpl"
dest = "/tmp/nginx2.conf"
keys = [
 "/myapp/web/nginx2/user",
 "/myapp/web/nginx2/root",
 "/myapp/web/nginx2/upstream"
]

check_cmd = "/usr/sbin/nginx -t -c {{.dest}}"
reload_cmd = "/usr/sbin/nginx -s reload"

如果有多个,可以写多个 [template]

注释:
src 模板文件路径
dest 生成的配置文件路径
keys 去etcd抓取的key
check_cmd 可以检测配置文件是否有问题
reload_cmd 是检测成功才执行的命令

# 模板文件内容

aaa
bbb
ccc
user = {{getv "/myapp/web/nginx2/user"}}
root = {{getv "/myapp/web/nginx2/root"}}
ddd
eee

upstream aaa {
 {{range getvs "/myapp/web/nginx2/upstream/*"}}
 server {{.}}
 {{end}}
}

#这里随便写了点东西测试效果
这样通过读src的模板路径,生成到dest路径下,根据定义的keys去etcd抓取回来后,赋值给模板中。
可以看到有getv和getvs,前面是抓取单个key,getvs是批量抓取,根据定义的前缀(key的前缀)循环写入模板。(比如nginx的upstream会用到多个server)

# 往 etcd 中添加key

etcdctl set /myapp/web/nginx2/user www
etcdctl set /myapp/web/nginx2/root /home/www2
etcdctl set /myapp/web/nginx2/upstream/s1 1.1.1.1:80
etcdctl set /myapp/web/nginx2/upstream/s1 1.1.1.2:80
etcdctl set /myapp/web/nginx2/upstream/s1 1.1.1.3:80

# 运行 confd ,每隔1秒抓取一次etcd

confd -interval=1 -backend etcd -node http://192.168.10.64:2379

# 运行 confd ,单次

confd -onetime -backend etcd -node http://192.168.10.64:2379

# 查看生成结果

[root@localhost ~]# cat /tmp/nginx2.conf
aaa
bbb
ccc
user = www
root = /home/www2
ddd
eee

upstream aaa {

 server 1.1.1.2:80

 server 1.1.1.3:80

 server 1.1.1.3:80

}

这样就自动生成想要的配置文件了。

原创文章,转载请注明。本文链接地址: http://www.rootop.org/pages/4058.html

作者:Venus

专注于 服务器运维与web架构 E-mail:venus#rootop.org

评论已关闭。