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

第一部分 测试环境
一、 简要信息
操作系统: 版本 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...


辛巴
it男
256 声望
4 粉丝
0 条评论
推荐阅读
mac下编译go-ethereum
macos: 10.14.4 下载go-ethereum源码,按照文档执行命令编译: $ make all 报错:fatal error: 'stdlib.h' file not found /usr/include 查看xcode是否安装: $ xcode-select --install xcode-select: error: com...

lansheng2282阅读 3.3k

Linux 不同的发行版设置静态 IP
该文件通常位于 /etc/sysconfig/network-scripts/ 目录下,文件名格式为 ifcfg-<接口名称>。例如,如果接口名称为 ens33,需要编辑 /etc/sysconfig/network-scripts/ifcfg-ens33 文件。使用以下命令打开文件:

青阳半雪阅读 1.9k评论 3

WAL的概念与实践分析
在计算机科学中,预写式日志[1](Write-Ahead logging,缩写 WAL)是关系数据库系统中用于提供原子性和持久性(事务ACID属性中的A与D)的一系列技术。在使用WAL的系统中,所有的修改在生效之前都要先写入log文件...

KaiwuDB阅读 954

封面图
阿里云CentOS7.9安装VNC远程桌面服务
阿里云默认的Centos系统不带图形界面的, 需要安装图形界面、VNCServer以支持远程桌面Linux端安装 Window System {代码...} 安装图形界面软件 {代码...} 查看已安装的图形界面yum grouplist回车后屏幕会打印很多...

YYGP阅读 918

Centos防火墙和端口操作
防火墙设置开机启用防火墙 {代码...} 设置开机禁用防火墙 {代码...} 启动防火墙 {代码...} 关闭防火墙 {代码...} 检查防火墙状态 {代码...} 重启防火墙 {代码...} 端口开端口命令 {代码...} 命令含义:--zone #作...

zxl20070701阅读 782

centos安装mysql7
删除mysql相关的依赖查询已安装的rpm包 {代码...} 若查询有结果,需删除 {代码...} 删除相关mysql目录并删除查询mysql目录 {代码...} 查询mysql命令 {代码...} 下载mysql二进制包进入/user/local/src/ {代码...} ...

Zeran阅读 682

一文吃透Tomcat核心知识点
架构首先,看一下整个架构图。最全面的Java面试网站接下来简单解释一下。Server:服务器。Tomcat 就是一个 Server 服务器。Service:在服务器中可以有多个 Service,只不过在我们常用的这套 Catalina 容器的Tomca...

程序员大彬1阅读 299

256 声望
4 粉丝
宣传栏