Quantcast
Channel: polygun2000的博客
Viewing all articles
Browse latest Browse all 55

confd读书笔记

$
0
0
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

 

Viewing all articles
Browse latest Browse all 55

Trending Articles