haproxy mysql 连接池_Docker+Haproxy实现MongoDB数据库负载均衡

问题:

想通过Haproxy轮训模式实现mongo入口的负载均衡!

搭建步骤:

1.宿主机下载docker镜像

docker pull haproxy

2.宿主机添加Haproxy配置文件(用于容器挂载)

mkdir /usr/local/etc/haproxyvim /usr/local/etc/haproxy/haproxy.cfg

编辑配置文件:

配置的haproxy.cfg文件globallog 127.0.0.1 local2chroot /usr/local/etc/haproxypidfile /var/run/haproxy.pidmaxconn 4000#user haproxy#group haproxydaemon# turn on stats unix socketstats socket /usr/local/etc/haproxy/stats########统计页面配置########listen admin_statsbind 0.0.0.0:1080 #监听端口mode http #http的7层模式option httplog #采用http日志格式#log 127.0.0.1 local0 errmaxconn 10stats refresh 30s #统计页面自动刷新时间stats uri /stats #统计页面urlstats realm XingCloud\ Haproxy #统计页面密码框上提示文本stats auth admin:admin #统计页面用户名和密码设置stats hide-version #隐藏统计页面上HAProxy的版本信息defaultslog globallog 127.0.0.1 local3mode httpoption tcplogoption dontlognullretries 10option redispatchmaxconn 2000timeout http-request 10stimeout queue 1mtimeout connect 10stimeout client 1mtimeout server 1mtimeout http-keep-alive 10stimeout check 10slisten mongobind 0.0.0.0:27017mode tcpbalance roundrobinserver  gintama-mongos01  xxx.xxx.xxx.xxx:27017    check  maxconn 2000server gintama-mongos02 xxx.xxx.xxx.xxx:27017 check maxconn 2000server gintama-mongos3 xxx.xxx.xxx.xxx:27017 check maxconn 2000server gintama-mongos4 xxx.xxx.xxx.xxx:27017 check maxconn 2000server gintama-mongos5 xxx.xxx.xxx.xxx:27017 check maxconn 2000server gintama-mongos6 xxx.xxx.xxx.xxx:27017 check maxconn 2000~~

3.创建且运行容器

docker run -d --name haproxy --net=host -v /usr/local/etc/haproxy:/usr/local/etc/haproxy haproxy

镜像启动后:

镜像启动成功,我们可以看下查询部署页面,访问xxx.xxx.xxx.xxx:1080/stats

部署成功!

HAProxy关键配置详解

总览

HAProxy的配置文件共有5个域

global:用于配置全局参数

default:用于配置所有frontend和backend的默认属性

frontend:用于配置前端服务(即HAProxy自身提供的服务)实例

backend:用于配置后端服务(即HAProxy后面接的服务)实例组

listen:frontend+backend的组合配置,可以理解成更简洁的配置方法

global域的关键配置

daemon:指定HAProxy以后台模式运行,通常情况下都应该使用这一配置

user [username] :指定HAProxy进程所属的用户

group [groupname] :指定HAProxy进程所属的用户组

log [address] [device] [maxlevel] [minlevel]:日志输出配置,如log 127.0.0.1 local0 info warning,即向本机rsyslog或syslog的local0输出info到warning级别的日志。其中[minlevel]可以省略。HAProxy的日志共有8个级别,从高到低为emerg/alert/crit/err/warning/notice/info/debug

pidfile :指定记录HAProxy进程号的文件绝对路径。主要用于HAProxy进程的停止和重启动作。

maxconn :HAProxy进程同时处理的连接数,当连接数达到这一数值时,HAProxy将停止接收连接请求

frontend域的关键配置

acl [name] [criterion] [flags] [operator] [value]:定义一条ACL,ACL是根据数据包的指定属性以指定表达式计算出的true/false值。如"acl url_ms1 path_beg -i /ms1/"定义了名为url_ms1的ACL,该ACL在请求uri以/ms1/开头(忽略大小写)时为true

bind [ip]:[port]:frontend服务监听的端口

default_backend [name]:frontend对应的默认backend

disabled:禁用此frontend

http-request [operation] [condition]:对所有到达此frontend的HTTP请求应用的策略,例如可以拒绝、要求认证、添加header、替换header、定义ACL等等。

http-response [operation] [condition]:对所有从此frontend返回的HTTP响应应用的策略,大体同上

log:同global域的log配置,仅应用于此frontend。如果要沿用global域的log配置,则此处配置为log global

maxconn:同global域的maxconn,仅应用于此frontend

mode:此frontend的工作模式,主要有http和tcp两种,对应L7和L4两种负载均衡模式

option forwardfor:在请求中添加X-Forwarded-For Header,记录客户端ip

option http-keep-alive:以KeepAlive模式提供服务

option httpclose:与http-keep-alive对应,关闭KeepAlive模式,如果HAProxy主要提供的是接口类型的服务,可以考虑采用httpclose模式,以节省连接数资源。但如果这样做了,接口的调用端将不能使用HTTP连接池

option httplog:开启httplog,HAProxy将会以类似Apache HTTP或Nginx的格式来记录请求日志

option tcplog:开启tcplog,HAProxy将会在日志中记录数据包在传输层的更多属性

stats uri [uri]:在此frontend上开启监控页面,通过[uri]访问

stats refresh [time]:监控数据刷新周期

stats auth [user]:[password]:监控页面的认证用户名密码

timeout client [time]:指连接创建后,客户端持续不发送数据的超时时间

timeout http-request [time]:指连接创建后,客户端没能发送完整HTTP请求的超时时间,主要用于防止DoS类攻击,即创建连接后,以非常缓慢的速度发送请求包,导致HAProxy连接被长时间占用

use_backend [backend] if|unless [acl]:与ACL搭配使用,在满足/不满足ACL时转发至指定的backend

backend域的关键配置

acl:同frontend域

balance [algorithm]:在此backend下所有server间的负载均衡算法,常用的有roundrobin和source,完整的算法说明见官方文档configuration.html#4.2-balance

cookie:在backend server间启用基于cookie的会话保持策略,最常用的是insert方式,如cookie HA_STICKY_ms1 insert indirect nocache,指HAProxy将在响应中插入名为HA_STICKY_ms1的cookie,其值为对应的server定义中指定的值,并根据请求中此cookie的值决定转发至哪个server。indirect代表如果请求中已经带有合法的HA_STICK_ms1 cookie,则HAProxy不会在响应中再次插入此cookie,nocache则代表禁止链路上的所有网关和缓存服务器缓存带有Set-Cookie头的响应。

default-server:用于指定此backend下所有server的默认设置。具体见下面的server配置。

disabled:禁用此backend

http-request/http-response:同frontend域

log:同frontend域

mode:同frontend域

option forwardfor:同frontend域

option http-keep-alive:同frontend域

option httpclose:同frontend域

option httpchk [METHOD] [URL] [VERSION]:定义以http方式进行的健康检查策略。如option httpchk GET /healthCheck.html HTTP/1.1

option httplog:同frontend域

option tcplog:同frontend域

server [name] [ip]:[port] [params]:定义backend中的一个后端server,[params]用于指定这个server的参数,常用的包括有:

check:指定此参数时,HAProxy将会对此server执行健康检查,检查方法在option httpchk中配置。同时还可以在check后指定inter, rise, fall三个参数,分别代表健康检查的周期、连续几次成功认为server UP,连续几次失败认为server DOWN,默认值是inter 2000ms rise 2 fall 3

cookie [value]:用于配合基于cookie的会话保持,如cookie ms1.srv1代表交由此server处理的请求会在响应中写入值为ms1.srv1的cookie(具体的cookie名则在backend域中的cookie设置中指定)

maxconn:指HAProxy最多同时向此server发起的连接数,当连接数到达maxconn后,向此server发起的新连接会进入等待队列。默认为0,即无限

maxqueue:等待队列的长度,当队列已满后,后续请求将会发至此backend下的其他server,默认为0,即无限

weight:server的权重,0-256,权重越大,分给这个server的请求就越多。weight为0的server将不会被分配任何新的连接。所有server默认weight为1

timeout connect [time]:指HAProxy尝试与backend server创建连接的超时时间

timeout check [time]:默认情况下,健康检查的连接+响应超时时间为server命令中指定的inter值,如果配置了timeout check,HAProxy会以inter作为健康检查请求的连接超时时间,并以timeout check的值作为健康检查请求的响应超时时间

timeout server [time]:指backend server响应HAProxy请求的超时时间

default域

上文所属的frontend和backend域关键配置中,除acl、bind、http-request、http-response、use_backend外,其余的均可以配置在default域中。default域中配置了的项目,如果在frontend或backend域中没有配置,将会使用default域中的配置。

listen域

listen域是frontend域和backend域的组合,frontend域和backend域中所有的配置都可以配置在listen域下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值