第一部分 測試環境
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...