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 ...
随机推荐
- Cordova开发App入门之创建android项目
Apache Cordova是一个开源的移动开发框架.允许使用标准的web技术-HTML5,CSS3和JavaScript做跨平台开发. 应用在每个平台的具体执行被封装了起来,并依靠符合标准的API绑 ...
- AndroidStudio 代码(导入类)报错但可正常运行,以及解决此问题后带来的系列问题解决
首先是应用中很多导入的类都报红色异常显示找不到此类,但运行编译正常: 第一种方法: 点击AndroidStudio菜单File -> Invalidate Caches/Restar… ,在弹出 ...
- Java8学习笔记(八)--方法引入的补充
在Java8学习笔记(三)--方法引入中,简要总结了方法引入时的使用规则,但不够完善.这里补充下几种情况: 从形参到实例方法的实参 示例 public class Example { static L ...
- 最全面的 Webview 详解
前言 现在很多App里都内置了Web网页(Hyprid App),比如说很多电商平台,淘宝.京东.聚划算等等,如下图 那么这种该如何实现呢?其实这是Android里一个叫WebView的组件实现的.今 ...
- 手动添加jar包到本地maven仓库(已测)ok
很多时候我们需要的jar包在maven仓库上没有 我们可以自己找到这个jar包,但是怎么通过在pom文件配置使用呢? 需要我们手动将本地的jar包添加到本地maven仓库. 前提是已经配置好maven ...
- duilib进阶教程 -- 在duilib中使用MFC (2)
好人做到底,送佛送到西.虽然上一篇教程已经说得很详细了,但Alberl还是再举一个例子.上一篇教程的主窗口是MFC的,所以这篇教程把主窗口换成duilib的~O(∩_∩)O~ 1.我们利用<20 ...
- [Algorithm] *String Matching and Hashing
Link: Computer Algorithms: Rabin-Karp String Searching 为了避免挨个字符对文本和模式串进行比较,我们可以尝试一次性判断两者是否相等. 因此,我们需 ...
- post请求参数问题
from:https://www.cnblogs.com/btgyoyo/p/6141480.html jQuery的ajax方法和post方法分别发送请求,在后台Servlet进行处理时结果是不一样 ...
- 使用命令行模式启动VMWare虚拟机
工作中使用到在centos中安装vmware Workstation部署虚拟机,以前都是使用图形界面启动虚拟机,由此要调整VNC的分辨率大小,重启VNC Server后所有虚拟机都关闭了.事后分析可能 ...
- 使用log4cplus时遇到的链接错误:无法解析的外部符号 "public: static class log4cplus::Logger __cdecl log4cplus::Logger::getInstance(class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,
#include "stdafx.h" #include <log4cplus/logger.h> #include <log4cplus/loggingmacr ...