我們在前端轉發這裏採用的是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`