confd+etcd完成後端服務器的自動檢測

我們在前端轉發這裏採用的是haproxy,採用lvs或者nginx都可以本質上都是改變配置文件

首先爲haproxy創建日記文件

mkdir -p /var/log/haproxy

touch haproxy.log

開啓rsyslog的haproxy的日記記錄功能添加:

$ModLoad imudp

$UDPServerRun 514

在#save boot message aslo to boot.log之後添加

local0.*    /var/log/haproxy/haproxy.log

修改/etc/sysconfig/rsyslog文件將SYSLOGD_OPTIONS=""修改爲:

SYSLOGD_OPTIONS="-r  -m  0 -c  2"

最後再/etc/haproxy/haproxy.cfg文件中添加

log   127.0.0.1  local0

 最後再重啓rsyslog和haproxy服務就可以記錄日記了


下面是關於haproxy的一個完整的例子:

global

     maxconn 51200

     chroot /var/lib/haproxy

     uid 99

     gid 99

     daemon 

     nbproc  1

     pidfile /var/run/haproxy.pid

     log 127.0.0.1 local0

defaults

     mode     http

     log      global

     option   httplog

     option   redispatch 

     option   abortonclose

     timeout connect  5000ms

     timeout client  50000ms

     timeout server  50000ms

     balance  roundrobin

listen  admin_stats

     bind 0.0.0.0:8888

     stats refresh  30s

     stats  uri  /stats

     stats realm  Haproxy Manager

     stats  auth smecloud:smecloud@1507

listen  test2

    bind    172.20.176.34:19000

    server  t1   192.168.206.231:80  check

    server  t2   192.168.206.239:80  check

啓動etcd 

etcd -name etcdserver -peer-addr 127.0.0.1:7001 -addr  127.0.0.1:4001 -data-dir /data/etcd  -peer-bind-addr 0.0.0.0:7001 -bind-addr 0.0.0.0:4001&

curl  -L  http://xxxxxxxxx:4001/v2/keys/keynames  -XPUT -d  value="sdadasdad" 設置鍵的值

curl  -L  http://xxxxxxxxx:4001/v2/keys/keynames

curl  -L  http://xxxxxxxxx:4001/v2/keys/keynames  -XDELETE 刪除鍵

首先先創建兩個目錄/etc/confd/conf.d 和/etc/confd/templates

在conf.d的目錄中新建haproxy.toml

[template]

src="haproxy.cfg.tmpl"

dest = "/etc/haproxy/haproxy.cfg"  

keys = [  

  "/app/servers",

]  

reload_cmd = "service haproxy reload"

在templates中新建一個模板:

global

     maxconn 51200

     chroot /var/lib/haproxy

     uid 99

     gid 99

     daemon 

     nbproc  1

     pidfile /var/run/haproxy.pid

     log 127.0.0.1 local0

defaults

     mode     http

     log      global

     option   httplog

     option   redispatch 

     option   abortonclose

     timeout connect  5000ms

     timeout client  50000ms

     timeout server  50000ms

     balance  roundrobin

listen  admin_stats

     bind 0.0.0.0:8888

     stats refresh  30s

     stats  uri  /stats

     stats realm  Haproxy Manager

     stats  auth smecloud:smecloud@1507

listen  test2

    bind    172.20.176.34:19000

    {{range gets "/app/servers/*"}}  

    server {{base .Key}} ``.`Value` check 

    `end`  

後臺啓動confd並confd -verbose  -interval 10 -node  '127.0.0.1:4001'  -confdir /etc/confd >/var/log/confd.log &


這時候可以etcdctl set  /app/server/dsdas sdasdad 往etcd裏面填充相對應的值的時候就配置文件就會自動更新,幾乎可以是實時的 


只需要在後端服務器中啓動服務時編寫腳本調用etcd填寫數值的api即可




註釋:

1、base
    作爲path.Base函數的別名,獲取路徑最後一段。
{{ with get "/app/servers/prickly_blackwell"}}
    server `base `.`Key` ``.`Value` check
`end`


2、get
    返回一對匹配的KV,找不到則返回錯誤。
{{with get "/app/servers/prickly_blackwell"}}
    key: ``.`Key`
    value: ``.`Value`
`end`


3、gets
    返回所有匹配的KV,找不到則返回錯誤。
{{range gets "/app/servers/*"}}
    ``.`Key` ``.`Value`
     `end`


4、getv
    返回一個匹配key的字符串型Value,找不到則返回錯誤。
{{getv "/app/servers/cocky_morse"}}



5、getvs 
    返回所有匹配key的字符串型Value,找不到則返回錯誤。
        {{range getvs "/app/servers/*"}}
           value: ``.``
        `end`


6、split
    對輸入的字符串做split處理,即將字符串按指定分隔符拆分成數組。
        {{ $url := split (getv "/app/servers/cocky_morse") ":" }}
          host: {{index $url 0}}
          port: {{index $url 1}}


7、ls
    返回所有的字符串型子key,找不到則返回錯誤。
{{range ls "/app/servers/"}}
   subkey: ``.``
`end`



8、lsdir
    返回所有的字符串型子目錄,找不到則返回一個空列表。
{{range lsdir "/app/"}}
   subdir: ``.``
`end`


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章