通过Etcd+Confd自动管理Haproxy(多站点)

当网站业务量急剧增大的时候,机器的扩容缩容就是家常便饭,Haproxy作为负载均衡器的变更频率就急剧加大,特别是Docker的出现,这个时候再也不能通过vim修改配置文件的形式去对业务进行变更。

etcd:k/v形式的键值存储,用于存放配置

confd:根据从etcd中获取的配置,对haproxy进行修改

#confd的安装
wget https://github.com/kelseyhightower/confd/releases/download/v0.11.0/confd-0.11.0-linux-amd64
mv confd* /usr/local/bin/confd  
chmod +x /usr/local/bin/confd  
/usr/local/bin/confd -version

#etcd的安装
wget https://github.com/coreos/etcd/releases/download/v3.1.1/etcd-v3.1.1-linux-amd64.tar.gz
tar zxf etcd-v3.1.1-linux-amd64.tar.gz
cd etcd-v3.1.1-linux-amd64
cp etcd* /bin/
/bin/etcd -version

#etcd的启动
mkdir /data/etcd
etcd --name etcdserver --data-dir /data/dir --listen-peer-urls ‘http://192.168.2.202:2380‘ --listen-client-urls ‘http://192.168.2.202:2379,http://127.0.0.1:2379‘ --initial-advertise-peer-urls ‘http://192.168.2.202:2380‘ --advertise-client-urls ‘http://192.168.2.202:2379,http://127.0.0.1:2379‘  &

#confg的配置
mkdir -p /etc/confd/{conf.d,templates}

vim /etc/confd/conf.d/haproxy.toml
[template]  
src = "haproxy.cfg.tmpl"  
dest = "/etc/haproxy/haproxy.cfg"  
keys = [  
  "/web",  
]  
reload_cmd = "/etc/init.d/haproxy reload"

/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 
frontend webin
bind :80
mode http
{{ $domains := lsdir "/web"}}
{{range $domain := $domains}}
acl is_{{$domain}} hdr(host) -i {{$domain}}
{{end}}
{{range $domain := $domains}}
use_backend {{$domain}}_cluster if is_{{$domain}}
{{end}}
{{range $domain := $domains}}
backend {{$domain}}_cluster
        cookie SERVERID insert indirect nocache
{{$servers := printf "/web/%s/*" $domain}}{{range gets $servers}}
        server {{base .Key}} {{.Value}} check inter 5000 rise 2 fall 3 weight 1
{{end}}
{{end}}

#启动confd
/usr/local/bin/confd -interval 5 -node ‘192.168.2.202:2379‘ -confdir /etc/confd &

注册服务器

curl -XPUT http://192.168.2.202:2379/v2/keys/web/www.test.com/prickly_blackwell -d value="192.168.2.201:49162" 
curl -XPUT http://192.168.2.202:2379/v2/keys/web/bbs.test.com/prickly_blackwell -d value="192.168.2.201:49162"
curl -XPUT http://192.168.2.202:2379/v2/keys/web/admin.test.com/prickly_blackwell -d value="192.168.2.201:49162"

etcd注册格式

http://192.168.2.202:2379/v2/keys/web/DOMAIN_NAME/SERVER_NAME -d value="IP:PORT"

http://192.168.2.202:2379/v2/keys/web/域名/服务器名   -d value="IP:端口"

查看/etc/haproxy/haproxy.cfg

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 
frontend webin
bind :80
mode http

acl is_admin.test.com hdr(host) -i admin.test.com
acl is_bbs.test.com hdr(host) -i bbs.test.com
acl is_www.test.com hdr(host) -i www.test.com

use_backend admin.test.com_cluster if is_admin.test.com
use_backend bbs.test.com_cluster if is_bbs.test.com
use_backend www.test.com_cluster if is_www.test.com

backend admin.test.com_cluster
        cookie SERVERID insert indirect nocache
        server prickly_blackwell 192.168.2.201:49162 check inter 5000 rise 2 fall 3 weight 1

backend bbs.test.com_cluster
        cookie SERVERID insert indirect nocache
        server prickly_blackwell 192.168.2.201:49162 check inter 5000 rise 2 fall 3 weight 1

backend www.test.com_cluster
        cookie SERVERID insert indirect nocache
        server prickly_blackwell 192.168.2.201:49162 check inter 5000 rise 2 fall 3 weight 1

本文参考:

http://blog.liuts.com/post/242/

https://yq.aliyun.com/articles/8708

在此感谢!

时间: 2024-10-16 21:23:36

通过Etcd+Confd自动管理Haproxy(多站点)的相关文章

etcd+confd实现Nginx配置文件自动管理

一.需求 我们使用Nginx做七层负载均衡,后端是Tomcat.项目采用灰度发布方式,每次项目升级,都要手动先从Nginx下摘掉一组,然后再升级这组,当项目快速迭代时,手动做这些操作显然会增加部署时间,于是就想通过脚本实现自动化管理Nginx配置文件. 当时考虑自己写Shell脚本对Nginx配置文件操作,需要用到sed流编辑器,sed本身没有条件判断语句,并不能灵活判断配置文件中要添加/删除位置,因此会增加配置错误风险. 在查资料无意间发现confd能自动管理配置文件,通过模板渲染生成配置文件

Confd实现Nginx配置文件自动管理

Confd是一个轻量级的配置管理工具.通过查询Etcd,结合配置模板引擎,保持本地配置最新,同时具备定期探测机制,配置变更自动reload.其后端支持的数据类型有:etcd.consul.vault.environment variables.redis.zookeeper.dynamodb.stackengine.rancher.不过一般使用Confd和etcd的配合使用比较多.前端服务器:服务器IP 主机名 安装组件 备注192.168.27.211 Client1 etcd+confd+n

django + etcd + confd配置管理平台

环境 CentOS 6/7 x64 Python: 2.7.6 Etcd: 3.2.18 Confd: 0.16.0 Nginx: 1.12.1 效果演示 一.拓扑图: 二.涉及软件 etcd:分布式 KV 存储系统,一般用于共享配置和服务注册和发现.是 CoreOS 公司发起的一个开源项目.ETCD 存储格式类似于文件系统,以根"/"开始下一级目录,最后一个是Key,一个关键对应的一个 Value. etcd 集群:使用 Raft 协议保证每个节点数据一致,由多个节点对外提供服务.这

内存自动管理

内存自动管理    20 内存模型    20 Jvm垃圾收集算法    22 标记-清除    22 标记-整理    22 复制算法    22 分代思想    23 Stop-The-World    23 java堆溢出:    24 方法区和运行时常量池溢出    27 本机直接内存溢出    29 垃圾收集器    30 引用计数器:    30 可达性分析算法    31 回收方法区    32 垃圾收集器    33 HotSpot垃圾回收器    33 l CMS Failur

Grunt:任务自动管理工具(收藏+转载)

原文:http://javascript.ruanyifeng.com/tool/grunt.html 安装 命令脚本文件Gruntfile.js Gruntfile.js实例:grunt-contrib-cssmin模块 常用模块设置 grunt-contrib-jshint grunt-contrib-concat grunt-contrib-uglify grunt-contrib-copy grunt-contrib-watch 其他模块 参考链接 在Javascript的开发过程中,经

C++实现简单的内存块自动管理

#ifndef __MEM__H #define __MEM__H #include<iostream> using namespace std; //自动管理内存块 typedef unsigned char byte; class Mem { private: byte* mem; int size; void ensureMinSize(int minSize); public: Mem(); Mem(int sz); ~Mem(); int msize(); //byte* point

Senparc.Weixin.MP SDK 微信公众平台开发教程(十六):AccessToken自动管理机制

Senparc.Weixin.MP SDK 微信公众平台开发教程(十六):AccessToken自动管理机制 在<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>中,我介绍了获取AccessToken(通用接口)的方法. 在实际的开发过程中,所有的高级接口都需要提供AccessToken,因此我们每次在调用高级接口之前,都需要执行一次获取AccessToken的方法,例如: 1 var accessToken = AccessTokenContainer.

还原数据自动管理的一些参数和获得还原数据信息

一.oracle还原数据自动管理的一些参数: 1.oracle 9i之前的一些程序中开发的脚步上包含手动指定回滚段的语句.这样的语句在执行是虽然对最终结果没有影响但是会在控制台报错,对用户的感觉不好.故引入动态参数 UNDO_SUPPRESS_ERRORS那么在自动管理还原数据的模式下手动指定或设置还原段虽然对最终结果没有影响但是不会在控制台报错. alter session set  undo_suppress_errors=true; 2.UNDO_RETENTION该参数决定了为了保证读一

基于etcd+confd对监控prometheus的服务注册发现

Prometheus是对容器监控的一个开源解决方案,可以对宿主机和容器内的信息进行详细监控,通过grafna展示出来,Prometheus是根据node节点上的cadvisor来获取每个容器的监控状态,相对zabbix而言,prometheus相当于server,cadvisor相当于agent,默认情况走的是类似zabbix的被动模式,cadvisor在收到prometheus要数据的请求后,将采集后的数据发送给prometheus. Prometheus是通过读取配置文件去采集指定cadvi