1.下载安装confd
]# wget https://github.com/kelseyhightower/confd/releases/download/v0.15.0/confd-0.15.0-linux-amd64
]# mkdir -p /opt/confd/bin
]# mv confd-0.15.0-linux-amd64 /opt/confd/bin/confd
]# chmod +x /opt/confd/bin/confd
]# export PATH="$PATH:/opt/confd/bin"
为了方便,我一般将confd直接安装到/sbin中
2.创建confd配置目录
]# mkdir -p /etc/confd/{conf.d,templates}
目录结构如下:
├── confd
│ ├── conf.d
│ │ └── haproxy.toml
│ ├── confd.toml
│ └── templates
│ └── haproxy.cfg.tmpl
conf.d 目录中是应用的配置文件定义
templates 目录中是应用的模版文件
confd.toml 是confd本身的配置文件
3.confd本身的配置文件
]# cat /etc/confd/confd.toml
backend = "etcd"
confdir = "/etc/confd"
log-level = "debug"
interval = 60
nodes = [
"http://10.1.1.1:2379",
"http://10.1.1.2:2379",
"http://10.1.1.3:2379",
]
prefix = "/production"
scheme = "https"
配置很简单明了
backend 后端类型,默认etcd
confdir confd的配置文件目录,默认/etc/confd
interval confd向后端轮询的周期,单位”秒“,默认600秒
log-level 日志详细等级,默认“info”
node 后端节点地址
prefix 访问key的前缀,默认是“/”
scheme 访问后端的URI scheme ,可以是"http"或"https"
更多配置项,自行参考confd的github文档。
3.创建confd启动文件
]# cat /etc/systemd/system/confd.service
[Unit]
Description=Confd
After=haproxy.service
[Service]
ExecStart=/sbin/confd
Restart=always
[Install]
WantedBy=basic.target
]# systemctl enable /etc/systemd/system/confd.service
]# systemctl start /etc/systemd/system/confd.service
]# journalctl -f -u confd.service
4.创建haproxy的应用配置定义
]# cat /etc/confd/conf.d/haproxy.toml
[template]
src = "haproxy.cfg.tmpl"
dest = "/etc/haproxy/haproxy.cfg"
keys = [
"/app/your_awesome_app"
]
reload_cmd = "echo restarting && /usr/bin/systemctl reload haproxy"
src 定义了模板文件
dest 定义了用模版生成的配置文件
keys 是我们要监控的etcd中的key
reload_cmd 是生成confd生成新的配置以后的动作
5.创建haproxy的模板文件
]# cat /etc/confd/templates/haproxy.cfg.tmpl)
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
maxconn 4096
user haproxy
group haproxy
daemon
stats socket /var/run/haproxy.sock mode 600 level admin
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
option forwardfor
option http-server-close
frontend stats
bind *:8888
stats enable
stats uri /
frontend http-in
bind *:80
default_backend application-backend
backend application-backend
balance leastconn
option httpclose
option forwardfor
cookie JSESSIONID prefix
{{range getvs "/app/your_awesome_app*"}}
server {{.}} cookie A check
{{end}}
backend app
balance roundrobin
{{range gets "/app/servers/*"}}
server {{base .Key}} {{.Value}} check inter 5000 fall 1 rise 2
{{end}}
6.confd模板相关
6.1 模板内内嵌的语法支持,全部需要加{{}}来标记。
6.2 在模板文件内, . 代表了当前变量,即在非循环体内,.就代表了传入的那个变量。
6.3 模板内的变量定义方法: {{$variable := value}},例如{{$username := "jhon"}}
假设我们定义了一个结构体:
type Article struct {
ArticleId int
ArticleContent string
那么我们在模板内可以通过.ArticleContent和.ArticleId的方式来获取并把变量的内容渲染到模板内。
{{.ArticleContent}}{{.ArticleId}}
6.4 with语句创建一个封闭的作用域,在其范围内,可以使用.action,而与外面的.无关,只与with的参数有关:
{{ with arg }}
此时的点 . 就是arg
{{ end }}
6.5 循环依靠range语句
{{range gets "/services/zookeeper/*"}}
{{$data := json .Value}}
id: {{$data.Id}}
ip: {{$data.IP}}
{{end}}
6.6 如果取回的值是json格式的,可以创建一个map
例如: etcdctl set /myapp/upstream/app1 '{"IP": "99.99.99.99","NAME": "jhon"}'
{{with get "/myapp/upstream/app1"}}
key: {{base .Key}}
{{$data := json .Value}}
Ipaddress: {{$data.IP}} Username: {{$data.NAME}}
{{end}}
6.7 confd一些常用的函数
get 返回匹配的“键-值”对
gets 返回所有匹配的“键-值”对
getv 返回匹配“键”的“值”
getvs 返回所有匹配“键”的“值”
ls 返回指定路径下的所有子键
lsdir 返回指定路径下所有具有子目录的子键
dir 返回指定“键”的父目录
exist 检查指定的“键”是否存在
base 返回路径的最后一个元素
另有一些go函数的别名,具体用法看文档
join
split
replace
toUpper
toLower
getenv
datatime
参考文档:
https://github.com/kelseyhightower/confd/blob/master/docs/templates.md
https://seanmcgary.com/posts/automatically-scale-haproxy-with-confd-and-etcd/
https://www.jianshu.com/p/05671bab2357
https://www.cnblogs.com/iamdoufu/p/4533063.html
- 使用etcd+confd管理nginx配置
1.前言 最近在项目中用nginx做反向代理,需要动态生成nginx的配置.大概流程是用户在页面上新增域名.http或https协议以及端口信息,后台会根据域名自动生成一个nginx的server配置 ...
- 基于docker+etcd+confd + haproxy构建高可用、自发现的web服务
基于docker+etcd+confd + haproxy构建高可用.自发现的web服务 2016-05-16 15:12 595人阅读 评论(0) 收藏 举报 版权声明:本文为博主原创文章,未经博主 ...
- Docker+Jenkins持续集成环境(4):使用etcd+confd实现容器服务注册与发现
前面我们已经通过jenkins+docker搭建了基本的持续集成环境,实现了服务的自动构建和部署,但是,我们遇到一个问题,jenkins构建出来的镜像部署后,需要通过ip:port去访问,有什么更好的 ...
- confd+etcd实现高可用自动发现
Confd是什么 Confd是一个轻量级的配置管理工具. 通过查询后端存储,结合配置模板引擎,保持本地配置最新,同时具备定期探测机制,配置变更自动reload. 对应的后端存储可以是etcd,redi ...
- confd template src格式和 templates 语法
Template Resources Template resources are written in TOML and define a single template resource. Tem ...
- Etcd+Confd实现Nginx配置文件自动管理
一.需求 我们使用Nginx做七层负载均衡,后端是Tomcat.项目采用灰度发布方式,每次项目升级,都要手动先从Nginx下摘掉一组,然后再升级这组,当项目快速迭代时,手动做这些操作显然会增加部署时间 ...
- confd动态生成配置文件
下载安装confd $ mkdir -p $GOPATH/src/github.com/kelseyhightower $ git clone https://github.com/kelseyhig ...
- 【Docker】基于docker+etcd+confd + haproxy构建高可用、自发现的web服务
各个工具介绍 (1)Docker:Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux机器上,也可以实现虚拟化,docker ...
- confd test
vi /etc/confd/confd.toml backend = "consul"confdir = "/etc/confd"log-level = &qu ...
随机推荐
- django --- DetailView源码分析
[背景] 最近在看django官方文档的class-based-views这一节的时候一直不得要领,感觉自己清楚,但是回想起来又没有脉络:于是没有办法只 能是“暗中观察”django的源码了. 刚打开 ...
- Python验证码识别 安装Pillow、tesseract-ocr与pytesseract模块的安装以及错误解决
1.安装Pillow pip install Pillow 2.安装tesseract-ocr OCR(Optical Character Recognition, 光学字符识别) 软件 安装包含两个 ...
- 【iCore4 双核心板_ARM】例程十八:USBD_VCP实验——虚拟串口
实验步骤: 1.将跳线冒跳至USB_OTG,通过Micro USB 线将iCore4 USB-OTG接口与电脑相连. 2.打开设备管理器,可以找到虚拟出来的端口,(特殊情况下如果没有虚拟出端口,我们可 ...
- 小矮人Javascript模块加载器
https://github.com/miniflycn/webkit-dwarf 短小精悍的webkit浏览器Javascript模块加载器 Why 我们有许多仅基于webkit浏览器开发的应用 无 ...
- 编译错误“The run destination My Mac is not valid for Running the scheme '***',解决办法
[转载] http://blog.csdn.net/duanyipeng/article/details/8007684 编译错误"The run destination My Ma ...
- 机器学习&深度学习基础(目录)
从业这么久了,做了很多项目,一直对机器学习的基础课程鄙视已久,现在回头看来,系统的基础知识整理对我现在思路的整理很有利,写完这个基础篇,开始把AI+cv的也总结完,然后把这么多年做的项目再写好总结. ...
- Java编程的逻辑 (84) - 反射
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...
- 稍稍解读下ThreadPoolExecutor
# 说说ThreadPoolExecutor ## 认识 先来看看它所在的架构体系: ```java package java.util.concurrent; public interface Ex ...
- Mac获取公网ip
终端输入 curl http://members.3322.org/dyndns/getip way 2: ➜ ~ wget http://ipecho.net/plain -O - -q ; ech ...
- Redhat6.5——解决yum功能不能正常使用
以前或多或少接触过linux服务器,由于是服务器上的,很多东西也没去玩过.要想多研究,还是得自己弄一个linux系统.由于正常工作,还是接触windows更多,双系统显然没有那么方便,所以决定弄个虚拟 ...