zoukankan      html  css  js  c++  java
  • confd

    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
  • 相关阅读:
    假期12
    假期11
    第十六章 IP子网的划分
    第十五章 链路聚合基本原理及其基本配置
    第十四章 交换机端口技术
    第十七章 nginx动静分离和rewrite重写
    第十六章 四层负载均衡
    第十五章 nginx七层负载均衡
    第十四章 nginx代理配置
    每日日报
  • 原文地址:https://www.cnblogs.com/zhengchunyuan/p/9681947.html
Copyright © 2011-2022 走看看