在centos7中搭建haproxy-confd-etcd-tomcat

第一部分 測試環境
1、 簡要信息
操做系統: 版本 CentOS 7.2.1511 內核 3.10.0-327.36.2.el7.x86_64
角色 IP 應用
接入機 172.21.9.9 haproxy、confd
存儲機 172.21.9.4 etcd
主宿機 172.21.9.5 tomcathtml

2、環境準備
一、節點機關閉selinux。打開selinux配置文件:
$ sudo vim /etc/selinux/config
將SELINUX設爲disabled
二、關閉防火牆。
$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalldjava

第二部分 haproxy、confd、etcd、tomcat介紹
1、 架構流程
一、管理員經過Shell或api操做容器
二、將容器信息註冊到Etcd組件
三、Confd組件會定時查詢Etcd,獲取已經註冊到Etcd中容器信息
四、經過Confd的模板引擎生成Haproxy配置node

2、 介紹
一、 Etcd
Etcd是一個高可用的 Key/Value 存儲系統,主要用於分享配置和服務發現。
 簡單:支持 curl 方式的用戶 API (HTTP+JSON)
 安全:可選 SSL 客戶端證書認證
 快速:單實例可達每秒 1000 次寫操做
 可靠:使用 Raft 實現分佈式
二、 Confd
Confd是一個輕量級的配置管理工具。經過查詢Etcd,結合配置模板引擎,保持本地配置最新,同時具有按期探測機制,配置變動自動reload。
三、 Haproxy
HAProxy是提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,支持虛擬主機,它是免費、快速而且可靠的一種解決方案linux

第三部分 haproxy、confd、etcd、tomcat實踐
1、在接入機安裝haproxy和confd
安裝haproxy
$ sudo yum install -y haproxy
下載並安裝confd
$ wget https://github.com/kelseyhigh...
$ sudo cp confd-0.11.0-linux-amd64 /bin/confd
$ sudo chmod +x /bin/confd
$ sudo mkdir -p /etc/confd/conf.d
$ sudo mkdir -p /etc/confd/templates
添加監控配置文件。打開文件:
$ sudo vim /etc/confd/conf.d/haproxy.toml
加入以下內容:nginx

[template]
uid = 0
gid = 0
mode = "0644"
src = "haproxy.cfg.tmpl"
dest = "/etc/haproxy/haproxy.cfg"
keys = [
  "/app/servers",
]
check_cmd = "/usr/sbin/haproxy -c -f {{ .src }}"
reload_cmd = "/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -D -sf $(cat /var/run/haproxy.pid)"

添加haproxy配置模板文件。打開文件:
$ sudo vim /etc/confd/templates/haproxy.cfg.tmpl
添加以下內容:git

global
    log 127.0.0.1 local3
    maxconn 5000
    uid 99
    gid 99
    daemon

defaults
    log 127.0.0.1 local3
    mode http
    option dontlognull
    retries 3
    option redispatch
    maxconn 2000
    contimeout  5000
    clitimeout  50000
    srvtimeout  50000

listen frontend 0.0.0.0:80
    mode http
    balance roundrobin
    maxconn 2000
    option forwardfor
    {{range gets "/app/servers/*"}}
    server {{base .Key}} {{.Value}} check inter 5000 fall 1 rise 2
    {{end}}

    stats enable
    stats uri /admin-status
    stats auth admin:123456

設置開機啓動。打開文件:
$ sudo vim /etc/profile
在末尾添加一行:github

/bin/confd -watch=true -interval 30 -backend=etcd -node 172.21.9.4:4001 &

其中172.21.9.4爲存儲機ip,4001爲監聽的端口。web

2、在存儲機中安裝etcd
安裝etcd
$ sudo yum install -y etcd
$ sudo mkdir -p /mnt/data/etcd
設置開機啓動。打開文件:
$ sudo vim /etc/profile
在末尾添加一行:redis

/usr/bin/etcd -addr=172.21.9.4:4001 -bind-addr=0.0.0.0:4001 -data-dir /mnt/data/etcd &

其中172.21.9.4爲存儲機ip,4001爲監聽的端口。docker

3、在主宿機安裝tomcat
安裝並啓動tomcat
$ sudo yum install tomcat tomcat-admin-webapps tomcat-docs-webapp tomcat-javadoc tomcat-systemv tomcat-webapps
$ sudo systemctl start tomcat
$ sudo systemctl enable tomcat
在瀏覽器打開http://172.21.9.5:8080/, 出現tomcat首頁,說明安裝成功。

4、使用
服務註冊。在主宿機執行命令:
curl -XPUT http://172.21.9.4:4001/v2/key... -d value="172.21.9.5:8080"
將應用程序所在的主宿機IP和端口(172.21.9.5:8080)註冊進etcd所在的存儲機IP和端口(172.21.9.4:4001)
在接入機中,打開haproxy配置文件:
$ sudo vim /etc/haproxy/haproxy.cfg
出現以下內容
server prickly_blackwell 172.21.9.5:8080 check inter 5000 fall 1 rise 2
說明註冊成功,haproxy配置文件已經更新。
訪問服務。在瀏覽器輸入: http://172.21.9.9/,出現tomcat首頁,說明haproxy代理成功。

第四部分 參考資料
1、構建一個高可用及自動發現的Docker基礎架構:
http://blog.liuts.com/post/242/
2、 confd文件
https://github.com/kelseyhigh...
3、 使用etcd + confd + nginx作動態負載均衡:
http://qiankunli.github.io/20...
4、Docker集羣中服務發現工具的概念及優點:
http://www.uml.org.cn/yunjisu...
5、docker服務發現:
http://www.jianshu.com/p/eaa3...
6、從應用場景到實現原理的全方位解讀etcd:
http://www.infoq.com/cn/artic...
7、剖析 etcd:
http://www.infoq.com/cn/artic...
8、centos7 安裝confd 並結合etcd實現haproxy的高可用:
http://www.voidcn.com/blog/no...
9、基於docker+etcd+confd + haproxy構建高可用、自發現的web服務:
http://blog.csdn.net/weiyuank...

相關文章
相關標籤/搜索