第一部分 测试环境
一、 简要信息
操作系统: 版本 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 tomcat
二、环境准备
1、节点机关闭selinux。打开selinux配置文件:
$ sudo vim /etc/selinux/config
将SELINUX设为disabled
2、关闭防火墙。
$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld
第二部分 haproxy、confd、etcd、tomcat介绍
一、 架构流程
1、管理员通过Shell或api操作容器
2、将容器信息注册到Etcd组件
3、Confd组件会定时查询Etcd,获取已经注册到Etcd中容器信息
4、通过Confd的模板引擎生成Haproxy配置
二、 介绍
1、 Etcd
Etcd是一个高可用的 Key/Value 存储系统,主要用于分享配置和服务发现。
简单:支持 curl 方式的用户 API (HTTP+JSON)
安全:可选 SSL 客户端证书认证
快速:单实例可达每秒 1000 次写操作
可靠:使用 Raft 实现分布式
2、 Confd
Confd是一个轻量级的配置管理工具。通过查询Etcd,结合配置模板引擎,保持本地配置最新,同时具备定期探测机制,配置变更自动reload。
3、 Haproxy
HAProxy是提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案
第三部分 haproxy、confd、etcd、tomcat实践
一、在接入机安装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
加入如下内容:
[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
添加如下内容:
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
在末尾添加一行:
/bin/confd -watch=true -interval 30 -backend=etcd -node 172.21.9.4:4001 &
其中172.21.9.4为存储机ip,4001为监听的端口。
二、在存储机中安装etcd
安装etcd
$ sudo yum install -y etcd
$ sudo mkdir -p /mnt/data/etcd
设置开机启动。打开文件:
$ sudo vim /etc/profile
在末尾添加一行:
/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为监听的端口。
三、在主宿机安装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首页,说明安装成功。
四、使用
服务注册。在主宿机执行命令:
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代理成功。
第四部分 参考资料
一、构建一个高可用及自动发现的Docker基础架构:
http://blog.liuts.com/post/242/
二、 confd文件
https://github.com/kelseyhigh...
三、 使用etcd + confd + nginx做动态负载均衡:
http://qiankunli.github.io/20...
四、Docker集群中服务发现工具的概念及优势:
http://www.uml.org.cn/yunjisu...
五、docker服务发现:
http://www.jianshu.com/p/eaa3...
六、从应用场景到实现原理的全方位解读etcd:
http://www.infoq.com/cn/artic...
七、剖析 etcd:
http://www.infoq.com/cn/artic...
八、centos7 安装confd 并结合etcd实现haproxy的高可用:
http://www.voidcn.com/blog/no...
九、基于docker+etcd+confd + haproxy构建高可用、自发现的web服务:
http://blog.csdn.net/weiyuank...