在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...

相关文章
相关标签/搜索