HAProxy+Keepalived实现web服务器负载均衡

合集下载

负载均衡日志定制(haproxy+keepalived)

负载均衡日志定制(haproxy+keepalived)

Haproxy + keepalived 负载均衡日志定制定制输出日志的好处用户所有请求都通过负载均衡器,因此在此处收集日志,比在各后端真实服务器收集日志再汇总要有效得多。

工作目标✓记录用户访问日志:haproxy产生。

✓记录keepalived日志:keepalived启动、运行状态,用于排错。

总体规划➢使用独立的分区存储日志。

因keepalived日志内容较少,可与haproxy日志共用存储空间。

比如我的项目里,用/data/logs作为日志的存储路径(/data最好用独立的分区或者磁盘),haproxy日志名称haproxy.log,keepalived日志名称keepalived.log。

若果对日志保留又要求,需要归档及轮转。

➢系统日志与haproxy日志分离,不重复记录--配置不佳的方案,会导致系统日志与haproxy日志重复记录,占用大量的磁盘空间,一旦与系统相关的分区被填满,整个负载均衡将失效。

定制日志所涉及的组件✓系统日志服务rsyslog。

✓负载均衡haproxy。

✓高可用keepalived。

技术实现从负载均衡器里选择备机先做配置,这样做的好处是不会对现有业务造成影响。

接着创建好存储目录/data/logs,确保此目录能创建及写入文件。

➢系统日志配置:针对/etc/rsyslog.conf文件进行修改,一个完整的内容如下(去掉了注重要说明:mail.none;authpriv.none;cron.none /var/log/messages 这一行删掉了字段“*.info;”,如果不删除,会在/var/log/messages文件及/data/logs/haproxy.log重复记录访问日志。

最后两行为手动添加进去的,特别是最后一行“local4.* /data/logs/keepalived.log”,是与keepalived日志要求相匹配,否则不能起作用。

➢配置keepalived:无需修改配置文件keepalived.conf,只需要在启动服务时,加入选项“-S 4”就行。

HAproxy均衡负载部署和配置文件详解

HAproxy均衡负载部署和配置文件详解

HAproxy均衡负载部署和配置文件详解HAproxy均衡负载部署和配置文件详解HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。

根据官方数据,其最高极限支持10G 的并发。

HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。

HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。

并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。

其支持从4层至7层的网络交换,即覆盖所有的TCP协议。

就是说,Haproxy甚至还支持Mysql 的均衡负载。

如果说在功能上,能以proxy反向代理方式实现WEB均衡负载,这样的产品有很多。

包括Nginx,ApacheProxy,lighttpd,Cheroke 等。

但要明确一点的,Haproxy 并不是Http 服务器。

以上提到所有带反向代理均衡负载的产品,都清一色是WEB 服务器。

简单说,就是他们能自个儿提供静态(html,jpg,gif..)或动态(php,cgi..)文件的传输以及处理。

而Haproxy 仅仅,而且专门是一款的用于均衡负载的应用代理。

其自身并不能提供http服务。

但其配置简单,拥有非常不错的服务器健康检查功能还有专门的系统状态监控页面,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入。

自1.3版本开始还引入了frontend,backend,frontend根据任意HTTP 请求头内容做规则匹配,然后把请求定向到相关的backend。

另外, 版本1.3 是处于活跃开发阶段的版本, 它支持如下新特性:●内容交换: 可以根据请求(request)的任何一部分来选择一组服务器, 比如请求的URI , Host头(header) , cookie , 以及其他任何东西.当然,对那些静态分离的站点来说,对此特性还有更多的需求。

haproxy中常用的后端负载均衡策略

haproxy中常用的后端负载均衡策略

haproxy中常用的后端负载均衡策略Haproxy是一款高性能、高可靠、通用且开源的负载均衡器。

1. 轮询(round-robin)轮询是最基本和最常用的后端负载均衡策略。

它将请求平均分配到可用的服务器上,每次请求都按照服务器列表中的顺序依次分配。

如果请求到最后一个服务器后又从头开始。

当后端服务器列表中某一台服务器失效时,则haproxy会自动跳过它继续向下选取一个可用服务器。

轮询策略适用于所有的并发请求相对比较平均的情况,因为它只是简单的按照顺序分配请求,并不考虑服务器的负载情况。

权重轮询是一种在轮询基础上增加权重的负载均衡策略。

权重轮询在选择服务器时,会以服务器的权重值为依据,选择权重比较高的服务器处理请求。

在haproxy中,我们可以通过配置服务器的权重值来调整某些服务器的处理优先级。

例如,我们可以针对负载更高的服务器分配更高的权重值,这样来平衡系统负载。

3. IP哈希(ip-hash)IP哈希是一种将请求根据客户端IP进行哈希运算,将请求分配到特定的服务器上的负载均衡策略。

对于每个请求,haproxy都会通过哈希算法计算客户端IP地址的哈希值,并将请求分发到哈希值对应的服务器上。

这样,同一IP的请求总是被分到同一台服务器上处理,保证了会话的一致性。

但是,当后端服务器出现故障时,除了故障服务器之外的所有会话都会分配到其他服务器上,导致这些会话需要重新建立连接,带来一定的性能开销。

4. 最少连接数(least-conn)最少连接数策略是一种优先选择当前连接数最少的服务器来处理请求的负载均衡策略。

它能有效地降低服务器的负载,提高系统的性能。

对于每一个请求,在haproxy中会记录每个服务器当前的连接数,然后将请求发到连接数最少的服务器上。

通过这种方式,haproxy可以很好地避免请求过度集中在某一台服务器上,从而确保所有服务都能得到合理的负载。

这种策略的好处是可以有效地缓存静态资源,减少服务器的访问压力,提高系统的性能。

haproxy负载均衡配置文档剖析

haproxy负载均衡配置文档剖析

基于haproxy的反向代理和负载均衡1 安装方法一:Centos下使用root权限,使用指令: yum install haproxy.x86_64安装完成后程序位置:/usr/sbin/, 配置文件位置: /etc/haproxy/方法二:下载.gz压缩包, 解压, make && make install (暂时无测试)2 配置以root权限打开/etc/haproxy/haproxy.cfg默认配置文件已有模板, 简单改动即可实现代理和均衡前端配置注释掉所有静态相关的配置(因为现在没有动静分离).Balance: 有roundrobin(轮询), source(ip哈希), weight(权重), url(网址)等, 更多的均衡方法请查看官方手册.Cookie: 设置cookie保持, 有rewrite, insert, prefix等, 具体说明请查看附录说明.Server: 设置后端服务器ip, cookie:设置cookie对应的server, check: 后端检查, weight: 权重设置.附录I1 cookiecookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ][ postonly ] [ preserve ] [ domain <domain> ]*[ maxidle <idle> ] [ maxlife <life> ]sections :defaults | frontend | listen | backendyes|no|yes|yesArguments :<name> cookie的名称,用于持久性的监视、修改和增加。

cookie在response中通过"Set-Cookie"头发送给客户端,并由客户端的所有request的"Cookie"头返回。

Keepalived搭建lvs负载均衡高可用

Keepalived搭建lvs负载均衡高可用

Keepalived搭建lvs负载均衡高可用一.环境准备 (2)二.KEEPALIVED+LVS 负载均衡 (2)1. 网络IP规划: (2)2. LVS 分发有三种模式: (2)3.LVS的8种常用调度模式:(本文采用rr模式) (3)三.简易安装思路(主lvs上,192.168.0.60) (4)1.安装ipvsadm 包--分发器 (4)2.keepalievd 依赖包--HA (4)3.安装编辑keepalievd包 (4)4.建立开机启动文件 (5)5.启动keepalived并设置开机自启 (5)6.修改主配置文件:(主从稍有不同,在主上标记从的配置) (5)7.启动keepalived和ipvsadm服务并查看 (7)四.配置web服务器(本文需要两台,配置相同) (7)2.启动脚本 (8)3.开机启动脚本 (8)4.为web节点添加网页index.html (8)5.开启httpd服务 (8)五.测试 (9)1.正常状态:lvs在主上工作,负载62和63 (9)2.主机宕机状态:lvs在从上工作,负载62和63 (9)六.压力测试(webbench) (10)七.报错信息(日志文件为:/var/log/messages) (10)1.过程中出现过vip不能漂移 (10)一.环境准备关闭selinux、iptables修改hosts文件all 有机器的ip 与各自的主机名对应修改/etc/sysconfig/network主机名修改/etc/resolv.conf配置yum源配置网卡做好快照二.KEEPALIVED+LVS 负载均衡1. 网络IP规划:vip:192.168.0.70主分发器dip:192.168.0.60 gw:192.168.0.1从分发器dip:192.168.0.61 gw:192.168.0.1Realserver: web服务器dip:192.168.0.62gw:192.168.0.1lo:1 192.168.0.70Realserver: web服务器dip:192.168.0.63gw:192.168.0.1lo:1 192.168.0.702.LVS 分发有三种模式:LVS是工作在TCP/IP的网络层,通过控制IP来实现负载均衡的,所以它相对于其他负载均衡如DNS域名轮流解析、应用层负载的调度、客户端的调度等,效率是非常高的。

使用LVS+Keepalived 实现高性能高可用负载均衡实际操作说明

使用LVS+Keepalived 实现高性能高可用负载均衡实际操作说明

使用LVS+Keepalived 实现高性能高可用负载均衡实际操作说明kkmangnn 网站: /way2rhce前言:本文档用keepalived实现负载均衡和高可用性一. 网站负载均衡拓朴图.系统环境:CentOS 5.2 ,需要安装有gcc openssl-devel kernel-devel包二. 安装LVS和Keepalvied软件包1. 下载相关软件包#mkdir /usr/local/src/lvs#cd /usr/local/src/lvs#wget /software/kernel-2.6/ipvsadm-1.24.tar.gz#wget /software/keepalived-1.1.15.tar.gz2. 安装LVS和Keepalived#lsmod |grep ip_vs#uname -r2.6.18-92.el5#ln -s /usr/src/kernels/2.6.18-92.el5-i686/ /usr/src/linux#tar zxvf ipvsadm-1.24.tar.gz#cd ipvsadm-1.24#make && make install#tar zxvf keepalived-1.1.15.tar.gz#cd keepalived-1.1.15#./configure && make && make install把keepalived做成系统启动服务方便管理#cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/#cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/#mkdir /etc/keepalived#cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/#cp /usr/local/sbin/keepalived /usr/sbin/#service keepalived start|stop三.配置web服务器的脚本.#vi /usr/local/src/lvs/web.sh#!/bin/bashSNS_VIP=192.168.0.8case "$1" instart)ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP/sbin/route add -host $SNS_VIP dev lo:0echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "1" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/all/arp_announcesysctl -p >/dev/null 2>$1echo "RealServer Start OK";;stop)ifconfig lo:0 downroute del $SNS_VIP >/dev/null 2>&1echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "0" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/all/arp_announceecho "RealServer Stoped";;*)echo "Usage: $0 {start|stop}"exit 1esacexit 0# chmod +x /usr/local/src/lvs/web.sh ##修改成可执行#vi /etc/rc.local ##将该脚本写入开机文件/usr/local/src/lvs/web.sh start配置好一台web服务器之后,将配置文件拷贝到第二台服务器。

企业级高可用Web架构之HAPorxy+Keepalived

企业级高可用Web架构之HAPorxy+Keepalived

企业级高可用Web架构之HAPorxy+Keepalived----d6b24c86-6ea8-11ec-beaf-7cb59b590d7d1.global2.127。

0.0.1本地03。

maxconn655354.chroot/usr/local/haproxy5.uid996.gid997.daemon8.nbproc89.pidfile/usr/local/haproxy/haproxy。

pid10。

调试11。

12.defaults23.statsuri/web-status24。

续500025。

clitimeout5000026。

srvtimeout5000027。

34.serverweb1203.93.236.147:80weight5checkinter2000riSE2FALL 335.serverweb2203.93.236.146:80weight3checkinter2000riSE2FALL 3二、haproxy的启动、关闭和重启脚本,代码如下:1.#!/ 垃圾箱/垃圾箱2.#chkconfig35on早期适用于高可用性环境。

四5.#sourcefunctionlibrary.6.如果[-f/etc/init.d/functions];然后7../etc/init。

d.职能8.elif[-f/etc/rc.d/init.d/functions];then9../etc/rc.d/init.d/functions10.else11.exit01 2.fi13.14.#源网络配置。

15../ etc/sysconfig/network16。

17.#checkthatnetworkingisup.18.[${networking}=\19.20.[f/usr/local/haproxy/conf/haproxy.cfg]| | exit121。

22.retval=023.24.开始{25./usr/local/haproxy/sbin/haproxy-c-q-f/usr/local/haproxy/conf/h阿普罗西。

REDIS+KEEPALIVED+HAPROXY 集群,负载均衡,主备自动切换安装手册

REDIS+KEEPALIVED+HAPROXY 集群,负载均衡,主备自动切换安装手册

REDIS集群,KEEPALIVED+HAPROXY负载均衡,主备自动切换安装手册服务器环境:centos6.3机器1:redis主节点(172.16.8.21:6379)从节点(172.16.8.21:63791)从节点(172.16.8.21:63792)机器2:从节点172.16.8.22:63793从节点172.16.8.23:63794一、REDIS集群安装进入机器1:mkdir /usr/local/redismkdir /usr/local/redis/data1 下载redis,进入/usr/local/src目录2 wget http://download.redis.io/releases/redis-2.8.9.tar.gz3 tar xvf redis-2.8.9.tar.gz4 cd redis-2.8.95 make && make install6 cp redis.conf /usr/local/bin7 cd /usr/local/bin8 cp redis.conf redis-slave19 cp redis.conf redis-slave210 vi redis.conf11 搜索dind设为172.16.8.21dir 设为/usr/local/redis/datadaemonize 设为yes12 vi redis-slave113 搜索bind 设为172.16.8.21pidfile 设为/var/run/redis-slave1.piddbfilename设为dump-slave1.rdbdir设为/usr/local/redis/dataport 设为63791将slaveof前面的#号去掉,改为slaveof 172.16.8.21 6379 daemonize 设为yes14 vi redis-slave215 搜索bind 设为172.16.8.21pidfile 设为/var/run/redis-slave2.piddbfilename设为dump-slave2.rdbdir设为/usr/local/redis/dataport 设为63792将slaveof前面的#号去掉,改为slaveof 172.16.8.21 6379 daemonize 设为yes16redis-server redis.confredis-server redis-slave1redis-server redis-slave2进入机器2mkdir /usr/local/redismkdir /usr/local/redis/data1 下载redis,进入/usr/local/src目录2 wget http://download.redis.io/releases/redis-2.8.9.tar.gz3 tar xvf redis-2.8.9.tar.gz4 cd redis-2.8.95 make && make install6 cp redis.conf /usr/local/bin7 cd /usr/local/bin8 cp redis.conf redis-slave39 cp redis.conf redis-slave410 vi redis-slave311 搜索bind 设为172.16.8.22pidfile 设为/var/run/redis-slave3.piddbfilename设为dump-slave3.rdbdir设为/usr/local/redis/dataport 设为63793将slaveof前面的#号去掉,改为slaveof 172.16.8.21 6379daemonize 设为yes12 vi redis-slave413 搜索bind 设为172.16.8.22pidfile 设为/var/run/redis-slave4.piddbfilename设为dump-slave4.rdbdir设为/usr/local/redis/dataport 设为63794将slaveof前面的#号去掉,改为slaveof 172.16.8.21 6379daemonize 设为yes14 redis-server redis-slave315 redis-server redis-slave4到现在已完成redis集群配置,且只有172.16.8.21 6379可写数据,其余slave机器只能读数据redis-cli -h 172.16.8.21 -p 6379info可以看到这样子就是成功了二、安装haproxy进入机器1cd /usr/loca/srcwget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.25.tar.gztar xvf http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.25.tar.gzcd haproxy-1.4.25make TARGET=linux26 PREFIX=/usr/local/haproxymake install PREFIX=/usr/local/haproxycd /usr/local/haproxyvi haproxy.cfg添加下面内容# this config needs haproxy-1.1.28 or haproxy-1.2.1globallog 172.16.8.21 local0#log 172.16.8.21 local1 notice#log loghost local0 infomaxconn 4096chroot /usr/local/haproxyuid 99gid 99daemon#debugquietnbproc 2pidfile /usr/local/haproxy/haproxy.piddefaultslog globalmode httpoption httplogoption dontlognulllog 172.16.8.21 local3 inforetries 3redispatchmaxconn 3000contimeout 5000clitimeout 50000srvtimeout 50000listen cluster 0.0.0.0:63790mode tcpbalance roundrobinoption forwardforserver redis-slave1 172.16.8.21:63791 weight 100 check inter 2000 rise 2 fall 3 server redis-slave2 172.16.8.21:63792 weight 100 check inter 2000 rise 2 fall 3 server redis-slave3 172.16.8.22:63793 weight 100 check inter 2000 rise 2 fall 3 server redis-slave4 172.16.8.22:63794 weight 100 check inter 2000 rise 2 fall 3listen 172.16.8.21 *:8888mode http#transparentstats refresh 10sstats uri /haproxyadminstats realm Haproxy \ statisticstats auth admin:adminstats hide-version保存加上日志支持 vi /etc/rsyslog.conf在最下边增加local3.* /var/log/haproxy.loglocal0.* /var/log/haproxy.logvi /etc/sysconfig/rsyslog修改: SYSLOGD_OPTIONS="-r -m 0"重启日志服务service rsyslog restart进入机器2cd /usr/loca/srcwget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.25.tar.gz tar xvf http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.25.tar.gz cd haproxy-1.4.25make TARGET=linux26 PREFIX=/usr/local/haproxymake install PREFIX=/usr/local/haproxycd /usr/local/haproxyvi haproxy.cfg添加下面内容# this config needs haproxy-1.1.28 or haproxy-1.2.1globallog 172.16.8.22 local0#log 172.16.8.22 local1 notice#log loghost local0 infomaxconn 4096chroot /usr/local/haproxyuid 99gid 99daemon#debugquietnbproc 2pidfile /usr/local/haproxy/haproxy.piddefaultslog globalmode httpoption httplogoption dontlognulllog 172.16.8.22 local3 inforetries 3redispatchmaxconn 3000contimeout 5000clitimeout 50000srvtimeout 50000listen cluster 0.0.0.0:63790mode tcpbalance roundrobinoption forwardforserver redis-slave1 172.16.8.21:63791 weight 100 check inter 2000 rise 2 fall 3 server redis-slave2 172.16.8.21:63792 weight 100 check inter 2000 rise 2 fall 3 server redis-slave3 172.16.8.22:63793 weight 100 check inter 2000 rise 2 fall 3 server redis-slave4 172.16.8.22:63794 weight 100 check inter 2000 rise 2 fall 3 listen 172.16.8.22*:8888mode http#transparentstats refresh 10sstats uri /haproxyadminstats realm Haproxy \ statisticstats auth admin:adminstats hide-version保存加上日志支持 vi /etc/rsyslog.conf在最下边增加local3.* /var/log/haproxy.loglocal0.* /var/log/haproxy.logvi /etc/sysconfig/rsyslog修改: SYSLOGD_OPTIONS="-r -m 0"重启日志服务service rsyslog restart三、安装keepalived进入机器1cd /usr/local/srcwget /software/keepalived-1.2.12.tar.gztar xvf keepalived-1.2.12.tar.gzcd keepalived-1.2.12./configuremake&&make install注:若这里报错提示没有装openssl,则执行yum –y install openssl-devel安装,若还有其他的包没装,则执行yum命令进行安装cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/mkdir /etc/keepalivedcp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ln -s /usr/local/sbin/keepalived /usr/sbin/vi /etc/keepalived/keepalived.conf将内容改为如下! Configuration File for keepalivedvrrp_script chk_haproxy {script "/etc/keepalived/check_haproxy.sh"interval 2global_defs {router_id LVS_DEVEL}vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 51priority 150advert_int 1authentication {auth_type PASSauth_pass 1111}track_script {chk_haproxy}virtual_ipaddress {172.16.8.20}}}保存vi /etc/keepalived/check_haproxy.sh添加内容#!/bin/bash#A = `ps -C haproxy --no-header |wc -l`if [[ `ps -C haproxy --no-header |wc -l` -eq 0 ]];thenecho "haproxy not runing,attempt to start up."/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfgsleep 3if [[ `ps -C haproxy --no-header |wc -l` -eq 0 ]];then/etc/init.d/keepalived stopecho "haproxy start failure,stop keepalived"elseecho "haproxy started success"fifi注意`这个符号不是单引号,是esc下面那个键进入机器2cd /usr/local/srcwget /software/keepalived-1.2.12.tar.gztar xvf keepalived-1.2.12.tar.gzcd keepalived-1.2.12./configuremake&&make install注:若这里报错提示没有装openssl,则执行yum –y install openssl-devel安装,若还有其他的包没装,则执行yum命令进行安装cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ mkdir /etc/keepalivedcp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ ln -s /usr/local/sbin/keepalived /usr/sbin/vi /etc/keepalived/keepalived.conf将内容改为如下! Configuration File for keepalivedvrrp_script chk_haproxy {script "/etc/keepalived/check_haproxy.sh"interval 2global_defs {router_id LVS_DEVEL}vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 51priority 120advert_int 1authentication {auth_type PASSauth_pass 1111}track_script {chk_haproxy}virtual_ipaddress {172.16.8.20}}}保存vi /etc/keepalived/check_haproxy.sh添加内容#!/bin/bash#A = `ps -C haproxy --no-header |wc -l`if [[ `ps -C haproxy --no-header |wc -l` -eq 0 ]];thenecho "haproxy not runing,attempt to start up."/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfgsleep 3if [[ `ps -C haproxy --no-header |wc -l` -eq 0 ]];then/etc/init.d/keepalived stopecho "haproxy start failure,stop keepalived"elseecho "haproxy started success"fifi注意`这个符号不是单引号,是esc下面那个键保存在机器1机器2中分别执行service keepalived start然后在浏览器上打开http://172.16.8.20:8888/haproxyadmin用户名和密码是admin只要机器1和机器2中keepalived服务没有同时挂掉,一台机器挂掉后,另一台机器就会绑定172.16.8.20地址,实现主备切换,因此都可以通过172.16.8.20:63790访问该redis 集群Vip压力测试redis-benchmark -h 172.16.8.20 -p 63790 -t get -q -r 1000 -n 100000 -c 800主机器压力测试redis-benchmark -h 172.16.8.21 -p 6379 -t get -q -r 1000 -n 100000 -c 800从节点压力测试redis-benchmark -h 172.16.8.22 -p 63793 -t get -q -r 1000 -n 100000 -c 800本文参考于百度文库地址/link?url=Wd0Z2arJ4wdspy7jw9O1mGZCy2e5GiO4hCIv36 QxoOtNGcFOMG8rPpegmRH_z72Ejc-KAP9Ld2Aieo7DPgmC_b1bXB2BZVSKPTXsoz BNNYi。

HAproxy负载均衡配置教程

HAproxy负载均衡配置教程

HAproxy负载均衡配置教程一、简介haproxy是一个开源的高性能负载均衡软件;支持双机热备、虚拟主机和图形化的管理界面,自带强大的对RS健康检查功能;支持TCP(四层)、HTTP(七层)应用代理功能;多用于PV很大,但是又需要七层应用代理的业务二、工作原理1、基于TCP负载均衡工作原理:使用NAT方式接收和返回请求报文,只单纯对请求流量和返回流量做转发;RS不用配置公网IP2、基于HTTP负载均衡工作原理:使用NAT方式接收和返回请求报文,在接收请求报文后会检查报文头信息,根据报文头信息匹配Frontend(ACL规则)再转发给Backend(server池);RS不用配置公网IP三、安装HAproxy1、下载haproxy源码包下载地址:/download.php?id=40475&ResourceID=125082、tar xf haproxy-1.4.22.tar.gz -C /home3、cd /home/haproxy-1.4.224、make TARGET=linux26 ARCH=x86_645、make install PREFIX=/usr/local/haproxy6、ln -s /usr/local/haproxy /usr/haproxy7、cd /usr/local/haproxy8、mkdir -p bin conf logs var/run var/chroot9、cd examples/10、cp haproxy.cfg /usr/local/haproxy/etc11、cp haproxy.init/etc/init.d/haproxy12、chmod 700 /etc/init.d/haproxy13、chkconfig --add haproxy14、chkconfig haproxy on四、配置基于四层负载均衡1、vim haproxy.cfg##全局配置信息###globalchroot /usr/local/haproxy/var/chroot #chroot运行路径daemon #以后台形式运行harpoxygroup haproxy #启动程序所用组,随便写,只要下面我们创建这个组即可user haproxy #启动程序所用用户,随便写,只要下面我们创建这个用户即可log 127.0.0.1:514 local0 warring #定义haproxy 日志存放设备及级别pidfile /usr/local/haproxy/var/run/haproxy.pid #haproxy 进程PID文件,用于存放pidmaxconn 20480 #默认最大连接数spread-checks 3nbproc 8 #进程数量,一般为CPU核数2倍####默认配置选项#######defaultslog globalmode tcp #所处理的类别(7层代理http,4层代理tcp)retries 3 #3次连接失败就认为服务器不可用,也可以通过后面设置option redispatch #serverID 对应的服务器挂掉后,强制定向到其他健康的服务器contimeout 5000 #设置默认连接超时时间clitimeout 50000 #设置客户端连接超时时间srvtimeout 50000 #设置服务器连接超时时间#########设置图形化监控页面######listen admin_status #定义实例名为admin_status,实例名可以随意起bind 0.0.0.0:81 #设置Frontend和Backend的组合体,监控组的名称,按需要自定义名称mode tcp #设置模式;tcp为四层http为7 层stats enable #激活图形化管理界面stats uri /admin?stats #设置图形管理界面url打开路径stats auth admin:admin #设置监控页面的用户和密码:adminbalance roundrobin #设置对RS的调度算法,这里设置的是轮询方式option httpcloseoption forwardfor #让RS节点记录客户端的真实IP,如果不加这条,RS节点只记录负载均衡服务器的IPoption httpchk HEAD /test.html HTTP /1.0 #定义通过URL方式进行对RS的健康检查,不加这条,默认是通过IP+端口的方式进行健康检查;如果想通过URL进行健康检查,后端RS节点上的web定义存放网页的目录下必须有test.html这个页面,否则健康检查会失败server www01 10.0.0.8:8080 check inter 1500 fall 3 rise 3 check port 8080 maxconn3000 weight 1server www02 10.0.0.9:8080 check inter 1500 fall 3 rise 3 check port 8080 maxconn3000 weight 1#定义server地址池,server是规定的server地址池字段,不能变;后面www01是名字,随便写;10.0.0.X:8080是定义的RS的IP和端口,端口最好不要用80;checkinter 1500是定义健康检查间隔为1.5秒,不定义默认为2秒检查一次;fall 3是定义检查三次后端RS都失败就把该节点踢掉,不定义默认也是检查三次;rise 3是定义当RS节点从故障到恢复,健康检查三次才会认为该节点真正正常;check port8080是指定健康检查的端口号为8080;maxconn 3000是定义单个节点最大连接数为3000pv;具体要安装服务器硬件状况配置,否则很可能会因为pv过大把服务器压垮;weight 1是定义权重,权重值越大,承载的任务越多2、useradd haproxy -s /sbin/nologin -M五、配置基于七层负载均衡1、vim haproxy.cfg##全局配置信息###globalchroot /usr/local/haproxy/var/chroot #chroot运行路径daemon #以后台形式运行harpoxygroup haproxy #启动程序所用组,随便写,只要下面我们创建这个组即可user haproxy #启动程序所用用户,随便写,只要下面我们创建这个用户即可log 127.0.0.1:514 local0 warring #定义haproxy 日志存放设备及级别pidfile /usr/local/haproxy/var/run/haproxy.pid #haproxy 进程PID文件,用于存放pidmaxconn 20480 #默认最大连接数spread-checks 3nbproc 8 #进程数量,一般为CPU核数2倍####默认配置选项#######defaultslog globalmode tcp #所处理的类别(7层代理http,4层代理tcp)retries 3 #3次连接失败就认为服务器不可用,也可以通过后面设置option redispatch #serverID 对应的服务器挂掉后,强制定向到其他健康的服务器contimeout 5000 #设置默认连接超时时间clitimeout 50000 #设置客户端连接超时时间srvtimeout 50000 #设置服务器连接超时时间##### 设置frontend#########frontend http_80_inbind 10.0.0.7:80 #设置监听端口,即haproxy提供的web服务端口和VIP,和lvs的vip 类似####acl 策略配置######acl frank_web hdr_reg(host) -i ^(.sh|.sh)$mane 如果请求的域名不区分大小写为这两个域名#如果请求的域名满足正则表达式中的2个域名则把该条请求匹配给frank_web这条acl ;-i 是忽略大小写redirect prefix http://192.168.151.249 code 301 if fran_web#如果请求的域名满足正则表达式中的2个域名则把该条请求匹配给frank_web这条acl 并用301跳转给http://192.168.151.249这台服务器处理;最后的fran_web一定要和acl上的frank_web一样,也就是name处是什么,这里就写什么default_backend wwwpools #定义了默认的请求交由wwwpools这个地址组处理backend wwwpools #定义地址组,取名为wwwpoolsbalance roundrobin #定义调度算法为轮询模式server www 10.0.0.8:8080 check inter 1500 rise 3 fall 3 weight 1#定义一个地址RS节点,取名为www,健康检查间隔为1.5秒,检查三次则把RS节点剔除;故障恢复后健康检查3次则认为真正正常六、在301跳转的基础上做ACL分流1、acl web_www path_beg /www/ #把后缀带/www/的请求定义为名字为web_www的acl列表2、acl web_bbs path_beg /bbs/ # #把后缀带/bbs/的请求定义为名字为web_bbs的acl列表3、use_backend wwwpools if web_www #调用web_www acl,只要请求后缀有/www/字符就交由wwwpools这个地址组处理4、usr_backend wwwbbs if web_bbs #调用web_bbs acl,只要请求后缀有/bbs/字符就交由wwwbbs这个地址组处理注意:操作之前先要配置wwwpools和wwwbbs这两个地址组。

负载均衡、高可用web集群介绍

负载均衡、高可用web集群介绍
负载均衡、高可用Web集群介绍
2
负载均衡、高可用Web集群介绍
负载均衡、高可用性集群介绍
3
单台服务器
负载均衡及高可用web集群
“云”
负载均衡、高可用Web集群介绍
负载均衡、高可用性集群介绍
4
用户 互联网
1 负载均衡节点1
3 web节点1
2 负载均衡节点2
4 web节点2
目前比较成熟的方案不只一个(有人用mon+heartbeat+fake+coda方案,也有人用 Idirectord+heartbeal方案),HAProxy+Keepalived解决方案配置极为方便。
10
负载均衡、高可用Web集群介绍
总结
1. 负载均衡、高可用性集群 2. HAProxy 3. Keepalived 4. HAProxy+Keepalived
11
负载均衡、高可用Web集群介绍
负载均衡、高可用Web集群介绍
5
负载均衡、高可用Web集群介绍
HAProxy介绍
HAProxy是一个பைடு நூலகம்性能的TCP/HTTP负载 均衡服务器软件,速度非常快,可用性极 高。它适用于所有基于TCP或者HTTP的 应用程序,尤其适用于繁忙的Web服务。 在当今主流的服务器配置上,可以轻松地 支持几万的并发连接。
6
负载均衡、高可用Web集群介绍
7
负载均衡、高可用Web集群介绍
keepalived介绍
从Keepalived的作用就是"keep alive”,让你的系统 正常运转,永不岩机。使用Keepalived的目的,就是 检测众多Web服务器的状态;如果有一台Web服务器 出现故障,Keepalived将很快检测到并把它从系统中 剔除,待其恢复正常后,Keepalived会自动将其重新 加入到服务器群中。整个过程不需要人工干涉,你所 要做的,只是对发生故障的节点进行修复。

HAProxy优势分析

HAProxy优势分析

HAProxy优势分析2012/4/241什么是HAProxyHAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。

HA-Proxy 可以在4和7两层作负载均衡。

HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮件服务器、内部协议通信服务器、Mysql等),和7层(HTTP)。

在4层模式下,HAProxy仅在客户端和服务器之间转发双向流量。

7层模式下,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或者删除请求 (request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则。

HAProxy 支持的操作系统:∙Linux 2.4 on x86, x86_64, Alpha, SPARC, MIPS, PARISC∙Linux 2.6 on x86, x86_64, ARM (ixp425), PPC64∙Solaris 8/9 on UltraSPARC 2 and 3∙Solaris 10 on Opteron and UltraSPARC∙FreeBSD 4.10 - 8 on x86∙OpenBSD 3.1 to -current on i386, amd64, macppc, alpha, sparc64 and VAX (check the ports)2HAProxy的架构HAProxy最主要的特点是性能,HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。

HAProxy完全可以支持数以万计的并发连接。

并且HAProxy 的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上,下图是HAProxy的架构:∙∙下图是HAProxy的监控页面截图:∙∙HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。

Keepalived+HAproxy实现redis高可用负载均衡

Keepalived+HAproxy实现redis高可用负载均衡

Keepalived+HAproxy实现redis的高可用负载均衡总概:Keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。

Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。

HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。

HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。

并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。

这里我利用HAproxy对多台redis服务器进行负载,然后用Keepalived对HAproxy进行监控:(主)服务器A:192.168.4.143 (从)服务器B:192.168.4.126A上安装redis(主)、reids-slave1(从)、redis-slave2(从)、HAproxy、KeepalivedB上安装redis-slave3(从)、redis-slave4(从)、HAproxy、KeepalivedKeepalived监控A、B上的HAproxy,利用Keepalived的VIP漂移技术,若A、B上的HAprox 都工作正常,则VIP与优先级别高的服务器(主服务器)绑定,当主服务器当掉时,则与从服务器绑定,而VIP则是暴露给外部访问的ip;HAproxy利用Keepalived生产的VIP对多台redis(从)进行读负载,当某台redis当掉,则将其移除,回复后加入集群。

Haproxy+多台MySQL从服务器(Slave)实现负载均衡共12页

Haproxy+多台MySQL从服务器(Slave)实现负载均衡共12页

Haproxy+多台MySQL从服务器(Slave)实现负载均衡共12页Haproxy+多台MySQL从服务器(Slave)实现负载均衡2015-08-28本系统采用MySQL一主多从模式设计,即1台MySQL“主”服务器(Master)+多台“从”服务器(Slave),“从”服务器之间通过Haproxy进行负载均衡,对外只提供一个访问IP,当程序需要访问多台"从"服务器时,只需要访问Haproxy,再由Haproxy将请求分发到各个数据库节点。

我们的程序可以有俩个数据源(DataSourceA,DataSourceB),一个(DataSourceA)直接连接主库,另外一个(DataSourceB)连接Haproxy,当需要写入操作时可以使用DataSourceA,读取时使用DataSourceB。

设计图如下:看到这里大家可能会有一个疑问,这个问题就是主从数据库之间数据同步延时的问题!因为大多数使用MySQL主从同步数据都是异步的,也就是说当主库的数据发生变化时并不能立即的更新从库,这么做的目的也是为了更好的性能,那么设想一下,当用户新增一条记录后立刻去从库查询,可能并不能查到刚刚新增的数据,这岂不是很脑裂的问题~~~。

然而实际情况并不应该是这样的,我们也不应该这样去设计程序,我们就拿一个类似于CSND博客管理的系统来说,假设一个“博客系统”只有俩部分,一部分是博客管理后台,用户可以在后台新增,编辑,删除博客。

另一部分是门户网站,负责展示所有用户的博客信息,相对于这样一个系统来说,后台管理模块对数据库的操作压力不是很大,相反门户网站读取博客信息对数据库的压力很大,这也式一般互联网产品的特点,而且最重要的一点是系统可以接受主从同步数据带来的延迟,也就是说当用户在后台新增一条博客时,前台门户网站并不能立即查询到这条信息。

一般都是再过一段时间后才会出现在首页,因为大多数系统都有缓存设置,这样正好给主从同步延迟带来时间。

高性能反向代理软件HAProxy(三)之高可用

高性能反向代理软件HAProxy(三)之高可用

高性能反向代理软件HAProxy(三)之高可用一、实验目的软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现。

LVS是基于Linux操作系统实现的一种软负载,而HAProxy则是基于第三方应用实现的软负载。

HAProxy相比LVS的使用要简单很多,但跟LVS一样,HAProxy自己并不能实现高可用,一旦HAProxy节点故障,将会影响整个站点。

本文带来的是HAProxy 基于KeepAlived实现Web高可用及动静分离。

二、实验环境介绍是准备1、实验拓扑图2、环境介绍3、同步时间[root@proxy ~]# ntpdate 202.120.2.101[root@node1 ~]# ntpdate 202.120.2.101[root@node2 ~]# ntpdate 202.120.2.101[root@hpf-linux ~]# ntpdate 202.120.2.101root@Slave ~]# ntpdate 202.120.2.1014、node1、node2节点安装启动httpd及提供测试页[root@node1 ~]# rpm -q httpdhttpd-2.2.15-45.el6.centos.x86_64[root@node1 ~]# cat /www//htdoc/index.html &lt;h1&gt;This is node1 !&lt;/h1&gt;[root@node1 ~]# servicehttpd start[root@node2 ~]# rpm -q httpdhttpd-2.2.15-45.el6.centos.x86_64[root@node2 ~]# cat /www//htdoc/index.html &lt;h1&gt;This is node2 !&lt;/h1&gt;[root@node2 ~]# service httpd start5、安装LNMP动态站点并提供测试页如何安装LNMP这里就不列举说明了,下面提供测试页:[root@hpf-linux ~]# cat /www//index.php&lt;h1&gt;This is LNMP:node3 !&lt;/h1&gt;&lt;?php phpinfo();?&gt;6、查看各节点的服务是否启动[root@proxy htdoc]# curl http://192.168.1.9&lt;h1&gt;This is node1 !&lt;/h1&gt;[root@proxy htdoc]# curl http://192.168.1.10&lt;h1&gt;This is node2 !&lt;/h1&gt;[root@proxy htdoc]# curl http://192.168.1.6 |head % Total % Received % Xferd A verage Speed Time Time Time Current Dload Upload Total Spent Left Speed100 75128 0 75128 0 0 1044k 0 --:--:-- --:--:-- --:--:-- 1063k&lt;h1&gt;This is LNMP:node3 !&lt;/h1&gt;三、安装并配置Haproxy1、在HA1节点安装haproxy并提供配置文件[root@proxy ~]# rpm -q haproxyhaproxy-1.5.4-2.el6_7.1.x86_64[root@proxy ~]# cat /etc/haproxy/haproxy.cfgglobal log 127.0.0.1 local0 #日志配置,所有日志都记录在本地,通过local0输出log 127.0.0.1 local1 notice maxconn 25600 #最大连接数chroot /usr/share/haproxy #改变Haproxy的工作目录uid 99 #用户的UID gid 99 #用户的GID nbproc 1 #进程数据(可以设置多个) daemon #以后台守护进程方式运行Haproxy #debug #是否开启调试defaults log global mode http #默认使用协议,可以为{http|tcp|health} http:是七层协议tcp:是四层health:只返回OK option httplog #详细记录http日志option dontlognull #不记录健康检查的日志信息retries 3 #3次连接失败则认为服务不可用option redispatch #ServerID对应的服务器宕机后,强制定向到其他运行正常的服务器maxconn 30000 #默认的最大连接数# contimeout 5000 #连接超时# clitimeout 5000 #客户端超时# srvtimeout 5000 #服务器超时timeout check 1s #心跳检测超时timeout http-request 10s #默认http请求超时时间timeout queue 1m #默认队列超时时间timeout connect 10s #默认连接超时时间timeout client 1m #默认客户端超时时间timeout server 1m #默认服务器超时时间timeout http-keep-alive 10s #默认持久连接超时时间listen stats mode http bind 0.0.0.0:8090 #指定IP地址与Port stats enable #开启Haproxy统计状态stats refresh 3s #统计页面自动刷新时间间隔stats hide-version #状态页面不显示版本号stats uri /haproxyadmin?stats #统计页面的uri为”/haproxyadmin?stats” stats realm Haproxy\ Statistics #统计页面认证时提示内容信息stats auth admin:admin #统计页面的用户名与密码stats admin if TRUE #启用或禁用状态页面frontend allen #定义前端服务器bind *:80 mode http option httpclose #每次请求完成主动关闭http连接option forwardfor #后端服务器获取客户端的IP地址,可以从http header中获取acl url_static path_end -i.html .jpg .gif #定义ACL规则以如”.html”结尾的文件;-i:忽略大小写acl url_dynamic path_end -i .php default_backend webservers #客户端访问时默认调用后端服务器地址池use_backend lamp if url_dynamic #调用后端服务器并检查ACL规则是否被匹配backend webservers#定义后端服务器balance roundrobin #定义算法;基于权重进行轮询server node1 192.168.1.9:80 check rise 2 fall 1 weight 2 server node2 192.168.1.10:80 check rise 2 fall 1 weight 2backend lamp balance source #定义算法;源地址hash运算;类似于Nginx的ip_hash server lamp 192.168.1.6:80 check rise 2 fall 1#####注释:check:启动对后端server的健康状态检测;rise:离线的server转换到正常状态成功检查的次数;fall:确认server从正常状态转换为不可用状态需要检查的次数;weight:权重,数量越大,超重越高从新载入文件:[root@proxy ~]# service haproxy restart浏览器测试:2、在HA2服务器上安装Haproxy;这里就不在介绍了,安装与配置方法与在HA1服务器上安装相同。

企业级高可用Web架构之HAPorxy+Keepalived

企业级高可用Web架构之HAPorxy+Keepalived

企业级高可用Web架构之HAPorxy+Keepalived1.global2.log127.0.0.1local03.maxconn655354.chroot/usr/local/haproxy5.uid996.gid997.daemon8.nbproc89.pidfile/usr/local/haproxy/haproxy.pid10.debug11.12.defaults23.statsuri/web-status24.contimeout500025.clitimeout5000026.srvtimeout5000027.34.serverweb1203.93.236.147:80weight5checkinter2000rise2fall335.serverweb2203.93.236.146:80weight3checkinter2000rise2fall3二、haproxy的启动、停用和重新启动脚本,代码如下:1.#!/bin/sh2.#chkconfig35onarlysuitedforhighavailabilityenvironments.4.5.#sourcefunctionlibrary.6.if[-f/etc/init.d/functions];then7../etc/init.d/functions8.elif[-f/etc/rc.d/init.d/functions];then9../etc/rc.d/init.d/functions10.else11.exit01 2.fi13.14.#sourcenetworkingconfiguration.15../etc/sysconfig/network16.17.#checkthatnetworkingisup.18.[${networking}=\19.20.[-f/usr/local/haproxy/conf/haproxy.cfg]||exit121.22.retval=023.24.start(){25./usr/local/haproxy/sbin/haproxy-c-q-f/usr/local/haproxy/conf/haproxy.cfg26.if[$?-ne0];then27.echo\28.return129.fi30.31.echo-n\32.daemon/usr/local/haproxy/sbin/haproxy-d-f/usr/local/haproxy/conf/haproxy.cfg-p/var/run/haproxy.pid33.retval=$?34.echo35.[$retval-eq0]&&touch/var/lock/subsys/haproxy36.return$retval37.}38.39.stop(){40.echo-n\41.killprochaproxy-usr142.retval=$?43.echo44.[$retval-eq0]&&rm-f/var/lock/subsys/haproxy45.[$retval-eq0]&&rm-f/var/run/haproxy.pid46.return$retval47.}48.49.restart(){50./usr/local/haproxy/sbin/haproxy-c-q-f/usr/local/haproxy/conf/haproxy.cfg51.if[$?-ne0];then52.echo\check'.\53.return154.fi55.stop56.start57.}58.59.check(){60./usr/local/haproxy/sbin/haproxy-c-q-v-f/usr/local/haproxy/conf/haproxy.cfg61.}62.63.rhstatus(){64.statushaproxy65.}66.67.condrestart(){68.[-e/var/lock/subsys/haproxy]&&restart||:69.}70.71.#seehowwewerecalled.72.case\73.start)74.start75.;;76.stop)77.stop78.;;79.re start)80.restart81.;;82.reload)83.restart84.;;85.condrestart)86.condrestart87.;;88.status)89.rhstatus90.;;91.check)92.check9 3.;;94.*)95.echo$\tus|check}\96.retval=197.esac98.99.exit$retval四、大家须要特别注意的几个地方就是:1)haproyx采用的是balancesource机制,它跟nginx的ip_hash机制原理类似,是让客3)存有网友说道haproxy必须使用listen203.93.236.141:80这样相似的格式,这样其实不好,搞集群时会引致从机启动没法,我们可以用bind*:80的方式替代。

haproxy+keepalived搭建高可用的软负载均衡F5

haproxy+keepalived搭建高可用的软负载均衡F5

tar zxvf haproxy-1.4.24.tar.gz --解压haproxytar zxvf keepalived-1.2.12.tar.gz --解压keepalivedcd keepalived-1.2.12//先安装gcc yum install gcc*,openssl*//yum install openssl-develln -s /usr/src/kernels/2.6.9-78.EL-i686/usr/src//linux./configuremake && make installcp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/mkdir /etc/keepalivedcp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ cp /usr/local/sbin/keepalived /usr/sbin/--chkconfig keepalived on --配置自动启动service keepalived start[root@fzjh01 ~]# vi /etc/keepalived/keepalived.confglobal_defs {router_id haproxy-1}vrrp_script check_nginx {script "/etc/keepalived/check_haproxy.sh"interval 2}vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 51priority 180 #100advert_int 1authentication {auth_type PASSauth_pass 1234}track_script {check_nginx}virtual_ipaddress {10.172.0.108/24 dev eth0}}tar xzvf haproxy-1.4.24.tar.gzcd /apps/haproxy-1.4.24make TARGET=linux26 PREFIX=/usr/local/haproxy make install PREFIX=/usr/local/haproxymkdir /usr/local/haproxy/conf -p[root@fzjh01 ~]# vi /usr/local/haproxy/conf/haproxy.cfggloballog 127.0.0.1 local0# log 127.0.0.1 local1 noticemaxconn 32000# user haproxy# group haproxydaemon# nbproc 4defaultslog globalmode http# option httplogoption dontlognullretries 3option redispatchmaxconn 32000contimeout 30000clitimeout 500000srvtimeout 500000#FOR ADMINlisten admin_statbind *:8088stats enable# stats hide-versionstats uri /lb_status# stats realm Haproxy\ statistics# stats auth sxit:sxitstats refresh 20sstats admin if TRUE#FOR HISlisten his_8080 *:8080balance roundrobincookie SERVERID insert nocache indirectoption httpchk HEAD /xtHisService/index.jsp HTTP/1.0option forwardforserver 10.172.0.36-8080 10.172.0.36:8080 cookie his01 check weight 10 server 10.172.0.39-8080 10.172.0.39:8080 cookie his02 check weight 10#FOR EMRlisten emr_8081bind *:8081balance roundrobincookie SERVERID insert nocache indirectoption httpchk HEAD / HTTP/1.0option forwardforserver 10.172.0.42-8081 10.172.0.42:8081 cookie emr01 check weight 10 server 10.172.0.43-8081 10.172.0.43:8081 cookie emr02 check weight 10#FOR UDPlisten udp_80bind *:80balance roundrobincookie SERVERID insert nocache indirectoption httpchk HEAD / HTTP/1.0option forwardforserver 10.172.0.42-80 10.172.0.42:80 cookie udp01 check weight 10#FOR LISlisten lis_8082bind *:8082balance roundrobincookie SERVERID insert nocache indirectoption httpchk HEAD / HTTP/1.0option forwardforserver 10.172.0.37-8082 10.172.0.37:8082 cookie lis01 check weight 10 server 10.172.0.40-8082 10.172.0.40:8082 cookie lis02 check weight 10Haproxy监控脚本#vi /etc/keepalived/check_haproxy.sh#!/bin/bashA=`ps -C haproxy --no-headers | wc -l `if [ $A -eq 0 ]; then/sbin/service haproxy startsleep 3A=`ps -C haproxy --no-headers | wc -l `if [ $A -eq 0 ];thenkillall keepalivedfifi增加执行权限chmod +x /etc/keepalived/check_haproxy.sh#4. Haproxy自动启动脚本[root@lb03 keepalived]# vi /etc/init.d/haproxy#!/bin/sh#chkconfig: 2345 10 90#description:haproxyif [ -f /etc/init.d/functions ]; then. /etc/init.d/functionselif [ -f /etc/rc.d/init.d/functions ] ; then. /etc/rc.d/init.d/functionselseexit 0fi# Source networking configuration.. /etc/sysconfig/network# Check that networking is up.[ ${NETWORKING} = "no" ] && exit 0config="/usr/local/haproxy/conf/haproxy.cfg"exec="/usr/local/haproxy/sbin/haproxy"PID="/var/run/haproxy.pid"[ -f $config ] || exit 1RETVAL=0start() {daemon $exec -c -q -f $configif [ $? -ne 0 ]; thenecho "Errors found in configuration file."return 1fiecho -n "Starting HAproxy: "$exec -D -f $config -p $PIDRETVAL=$?echo[ $RETVAL -eq 0 ] && touch /var/lock/subsys/haproxy return $RETVAL}stop() {echo -n "Shutting down HAproxy: "killproc haproxy -USR1RETVAL=$?echo[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/haproxy[ $RETVAL -eq 0 ] && rm -f $PIDreturn $RETVAL}restart() {$exec -c -q -f $configif [ $? -ne 0 ]; thenecho "Errors found in configuration file, check it with 'haproxy check'."return 1fistopstart}rhstatus() {status haproxy}# See how we were called.case "$1" instart)start;;stop)stop;;restart)restart;;status)rhstatus;;*)echo $"Usage: haproxy {start|stop|restart|status}"RETVAL=1esacexit $RETVALchmod 777 /etc/init.d/haproxy -R service keepalived start 启动service haproxy startchkconfig haproxy onhttp://10.172.0.108:8088/lb_status。

haproxy 中常用的后端负载均衡策略

haproxy 中常用的后端负载均衡策略

haproxy 中常用的后端负载均衡策略
haproxy是一个广泛使用的高性能负载均衡软件,它支持多种负载均衡策略以满足不同场景下的需求。

本文将介绍 haproxy 中常用的四种后端负载均衡策略:轮询(round-robin)、加权轮询(weighted round-robin)、最少连接(least connections)和 IP 哈希(ip hash)。

1. 轮询(round-robin)
轮询是最常用的负载均衡策略之一,它将请求平均分配到每个后端服务器上。

当请求达到一定数量后,所有后端服务器的负载将保持均衡状态。

轮询策略适用于后端服务器性能相同且无特殊要求的场景。

2. 加权轮询(weighted round-robin)
加权轮询是在轮询策略的基础上增加了权重设置,它可以根据后端服务器的性能来分配请求,权重越高的服务器获得更多的请求。

加权轮询策略适用于后端服务器性能不同的场景。

3. 最少连接(least connections)
最少连接是根据当前连接数来分配请求,将请求发送到连接数最少的服务器上。

最少连接策略适用于后端服务器处理能力不同的场景,可以避免服务器过载。

4. IP 哈希(ip hash)
IP 哈希是根据客户端 IP 地址进行哈希计算,将同一个客户端的请求发送到同一个后端服务器上。

IP 哈希策略适用于需要保持会
话状态的场景,可以避免用户在多个服务器之间切换导致会话断开。

以上四种后端负载均衡策略都有各自的优缺点,根据实际需求选择合适的策略可以提高系统的稳定性和性能。

使用Nginx+Keepalived组建高可用负载平衡Web server集群

使用Nginx+Keepalived组建高可用负载平衡Web server集群

一,首先说明一下网络拓扑结构:1,Nginx 反向代理Server(HA):①Nginx master:192.168.1.157②Nginx backup:192.168.1.158虚拟IP统一为:192.168.1.1102,web服务器:192.168.1.160 ,192.168.1.161,192.168.1.162 即web服务器,已配置好Tomcat(Jboss等皆可)和java程序3,mysql 数据库Servermysql主从服务器二,Nginx安装配置1,安装建议先用yum install yum-fastestmirror更新下源下载并安装nginx1.0.9,下载文件均放到/usr/local/src目录下cd /usr/local/src①update yumyum -y update②利用CentOS Linux系统自带的yum命令安装、升级所需的程序库安装依赖包#yum install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel下载nginx#cd /usr/local/src#wget /download/nginx-1.0.9.tar.gz#tar zxvf nginx-1.0.9.tar.gz#cd nginx-1.0.9配置安装:#./configure --prefix=/usr --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf--error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx/nginx.pid--lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module--with-http_flv_module --with-http_gzip_static_module--http-log-path=/var/log/nginx/access.log--http-client-body-temp-path=/var/tmp/nginx/client/--http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ #make#make install建立用户:/usr/sbin/groupadd nginx/usr/sbin/useradd -g nginx -M nginxmkdir -p /var/tmp/nginx/client启动nginx#/usr/sbin/nginxps:如果中途提示缺少库,直接yum install xxx即可。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

HAProxy+keepalived实现web服务器负载均衡说明:操作系统:CentOS 5.X 64位Web服务器:192.168.21.127、192.168.21.128站点:和部署在两台Web服务器上实现目的:增加两台服务器(主主模式),通过HAProxy+Keepalived实现Web服务器负载均衡架构规划:HAProxy服务器:192.168.21.129、192.168.21.130虚拟服务器(VIP):192.168.21.253、192.168.21.254部署完成之后:1、VIP:192.168.21.253指向192.168.21.129;VIP:192.168.21.254指向192.168.21.130;2、当192.168.21.129宕机时,VIP:192.168.21.253漂移到192.168.21.130上;3、当192.168.21.130宕机时,VIP:192.168.21.254漂移到192.168.21.129上;这样的主主模式好处是,两台服务器在提供服务的同时,又互为对方的备份服务器。

具体操作:第一部分:在两台HAProxy服务器上分别操作一、关闭SElinux、配置防火墙1、vi /etc/selinux/config#SELINUX=enforcing #注释掉#SELINUXTYPE=targeted #注释掉SELINUX=disabled #增加:wq! #保存退出setenforce 0 #使配置立即生效2、vi /etc/sysconfig/iptables #编辑-A RH-Firewall-1-INPUT -d 224.0.0.18 -j ACCEPT #允许组播地址通信-A RH-Firewall-1-INPUT -p vrrp -j ACCEPT #允许VRRP(虚拟路由器冗余协)通信-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT #允许80端口通过防火墙:wq! #保存退出/etc/init.d/iptables restart #重启防火墙使配置生效二、安装HAProxy1、创建HAProxy运行账户和组groupaddhaproxy #添加haproxy组useradd -ghaproxyhaproxy -s /bin/false #创建nginx运行账户haproxy并加入到haproxy组,不允许haproxy用户直接登录系统2、安装编译工具yum install gccgcc-c++ make openssl-devel kernel-devel3、安装HAProxyHAProxy下载地址:http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.24.tar.gz 上传haproxy-1.4.24.tar.gz到/usr/local/src目录中cd /usr/local/src #进入软件包存放目录tar zxvf haproxy-1.4.24.tar.gz #解压cd haproxy-1.4.24 #进入安装目录make TARGET=linux26 CPU=x86_64 PREFIX=/usr/local/haprpxy #编译make install PREFIX=/usr/local/haproxy #安装参数说明:TARGET=linux26#使用uname -r查看内核,如:2.6.18-371.el5,此时该参数就为linux26CPU=x86_64#使用uname -r查看系统信息,如x86_64 x86_64x86_64 GNU/Linux,此时该参数就为x86_64PREFIX=/usr/local/haprpxy#/usr/local/haprpxy为haprpxy安装路径4、设置HAProxymkdir -p /usr/local/haproxy/conf #创建配置文件目录mkdir -p /etc/haproxy #创建配置文件目录cp/usr/local/src/haproxy-1.4.24/examples/haproxy.cfg /usr/local/haproxy/conf/haproxy. cfg #拷贝配置模板文件ln -s /usr/local/haproxy/conf/haproxy.cfg /etc/haproxy/haproxy.cfg #添加配置文件软连接cp-r /usr/local/src/haproxy-1.4.24/examples/errorfiles /usr/local/haproxy/errorfiles #拷贝错误页面ln -s /usr/local/haproxy/errorfiles /etc/haproxy/errorfiles #添加软连接mkdir -p /usr/local/haproxy/log #创建日志文件目录touch /usr/local/haproxy/log/haproxy.log #创建日志文件ln -s /usr/local/haproxy/log/haproxy.log /var/log/haproxy.log #添加软连接cp/usr/local/src/haproxy-1.4.24/examples/haproxy.init /etc/rc.d/init.d/haproxy #拷贝开机启动文件chmod +x /etc/rc.d/init.d/haproxy #添加脚本执行权限chkconfighaproxy on #设置开机启动ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin #添加软连接5、配置haproxy.cfg参数cp /usr/local/haproxy/conf/haproxy.cfg /usr/local/haproxy/conf/haproxy.cfg-b ak #备份vi /usr/local/haproxy/conf/haproxy.cfg #编辑,修改############################################################# ######### thisconfig needs haproxy-1.1.28 or haproxy-1.2.1globallog 127.0.0.1 local0 #在本机记录日志log 127.0.0.1 local1 notice#log loghost local0 infomaxconn 65535 #每个进程可用的最大连接数chroot /usr/local/haproxy #haproxy安装目录uid 500 #运行haproxy的用户uid(cat /etc/passwd查看)gid 500 #运行haproxy的组uid(cat /etc/group查看)daemon #以后台守护进程运行pidfile /usr/local/haproxy/haproxy.pid #将所有进程写入pid文件#debug #调试模式#quiet #安装模式defaults#log globallog 127.0.0.1 local3 #日志文件设置mode http #运行模式tcp、http、healthoption httplogoption httpclose #每次请求完毕后主动关闭http通道option dontlognull #不记录健康检查的日志信息option redispatch #如果后端有服务器宕机,强制切换到正常服务器option abortonclose #丢弃由于客户端等待时间过长而关闭连接但仍在haproxy等待队列中的请求option forwardfor #获取客户端真实访问IPoption originalto #记录客户端访问的目的IPmaxconn 65535 #每个进程可用的最大连接数balance source #同一IP地址的所有请求都发送到同一服务器retries 3 #三次连接失败,则判断服务不可用contimeout 5000 #连接超时clitimeout 50000 #客户端超时srvtimeout 50000 #服务器超时timeout check 5s #检测超时stats refresh 30s #统计页面自动刷新时间stats uri /haproxy-status #统计页面URL路径stats realm haproxy-status #统计页面输入密码框提示信息stats auth admin:123456 #统计页面用户名和密码stats hide-version #隐藏统计页面上HAProxy版本信息frontend web #自定义描述信息bind :80 #监听80端口acl hdr(host) -i #规则设置,-i后面是要访问的域名,如果访问这个域名,就负载均衡到作用域use_backend if #acl和if后面的名称必须相同这里为acl hdr(host) -i #规则设置,-i后面是要访问的域名,如果访问这个域名,就负载均衡到作用域use_backend if backend mode httpbalance source#option httpchk /index.php #检测服务器此文件是否存在,如果没有,则认为服务器连接异常,此参数可以不设置server 192.168.21.127 192.168.21.127:80 check inter 2000 rise3 fall 3 weight 100 #inter 2000 心跳检测时间;rise 3 三次连接成功,表示服务器正常;fall 3 三次连接失败,表示服务器异常;weight 100 权重设置server 192.168.21.128 192.168.21.128:80 check inter 2000 rise3 fall 3 weight 100backend mode httpbalance source #设置负载均衡模式,source保存session值,roundrobin轮询模式#option httpchk /index.php #检测服务器此文件是否存在,如果没有,则认为服务器连接异常,此参数可以不设置server 192.168.21.127 192.168.21.127:80 check inter 2000 rise3 fall 3 weight 100server 192.168.21.128 192.168.21.128:80 check inter 2000 rise3 fall 3 weight 100#errorloc 503 /404.htmlerrorfile 403 /etc/haproxy/errorfiles/403.httperrorfile 500 /etc/haproxy/errorfiles/500.httperrorfile 502 /etc/haproxy/errorfiles/502.httperrorfile 503 /etc/haproxy/errorfiles/503.httperrorfile 504 /etc/haproxy/errorfiles/504.http############################################################# ########:wq! #保存退出service haproxy start #启动service haproxy stop #关闭service haproxy restart #重启6、设置HAProxy日志vi /etc/syslog.conf #编辑,在最下边增加# haproxy.loglocal0.* /var/log/haproxy.loglocal3.* /var/log/haproxy.log:wq! #保存退出vi /etc/sysconfig/syslog #编辑修改SYSLOGD_OPTIONS="-r -m 0" #接收远程服务器日志:wq! #保存退出service syslog restart #重启syslog三、安装keepalived下载keeplived:/software/keepalived-1.2.12.tar.gz 上传keepalived-1.2.12.tar.gz到/usr/local/src目录cd /usr/local/srctarzxvf keepalived-1.2.12.tar.gzcd keepalived-1.2.12./configure #配置,必须看到以下提示,说明配置正确,才能继续安装Use IPVS Framework : YesIPVS sync daemon support : YesUse VRRP Framework : Yesmake #编辑make install #安装cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/mkdir /etc/keepalivedcp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/cp /usr/local/sbin/keepalived /usr/sbin/cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/chmod +x /etc/rc.d/init.d/keepalived #添加执行权限chkconfigkeepalived on #设置开机启动service keepalived start #启动service keepalived stop #关闭service keepalived restart #重启四、配置keepalivedcp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf-bakvi /etc/keepalived/keepalived.conf #编辑,修改为以下代码######################################################### #以下为192.168.21.129服务器:! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVEL}vrrp_scriptchk_haproxy {script "/etc/keepalived/check_haproxy.sh" #HAproxy服务监控脚本interval 2weight 2}vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}track_script {chk_haproxy #监测haproxy进程状态}virtual_ipaddress {192.168.21.253}notify_master "/etc/keepalived/clean_arp.sh 192.168.21.253" #更新虚拟服务器(VIP)地址的arp记录到网关}vrrp_instance VI_2 {state BACKUPinterface eth0virtual_router_id 52priority 99advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.21.254}notify_master "/etc/keepalived/clean_arp.sh 192.168.21.254" #更新虚拟服务器(VIP)地址的arp记录到网关}######################################################### :wq! #保存退出######################################################### #以下为192.168.21.130服务器:192.168.21.130! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_scriptchk_haproxy {script "/etc/keepalived/check_haproxy.sh" #HAproxy服务监控脚本interval 2weight 2}vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 51priority 99advert_int 1authentication {auth_type PASSauth_pass 1111}track_script {chk_haproxy #监测haproxy进程状态virtual_ipaddress {192.168.21.253}notify_master "/etc/keepalived/clean_arp.sh 192.168.21.253" #更新虚拟服务器(VIP)地址的arp记录到网关}vrrp_instance VI_2 {state MASTERinterface eth0virtual_router_id 52priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.21.254}notify_master "/etc/keepalived/clean_arp.sh 192.168.21.254" #更新虚拟服务器(VIP)地址的arp记录到网关}#########################################################系统运维 温馨提醒:qihang01原创内容版权所有,转载请注明出处及原文链接:wq! #保存退出五、设置HAproxy服务监控脚本vi /etc/keepalived/check_haproxy.sh #编辑,添加以下代码##########################################################!/bin/shif [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then/etc/rc.d/init.d/haproxy startfisleep 2if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then/etc/rc.d/init.d/keepalived stopfi######################################################### :wq! #保存退出chmod +x /etc/keepalived/check_haproxy.sh #添加执行权限六、设置更新虚拟服务器(VIP)地址的arp记录到网关脚本vi /etc/keepalived/clean_arp.sh #编辑,添加以下代码#!/bin/shVIP=$1GATEWAY=192.168.21.2 #网关地址/sbin/arping -I eth0 -c 5 -s $VIP $GATEWAY &>/dev/null:wq! #保存退出chmod +x /etc/keepalived/clean_arp.sh #添加脚本执行权限七、系统内核优化在两台HAProxy服务器上分别执行以下命令echo 1024 60999 > /proc/sys/net/ipv4/ip_local_port_rangeecho 30 > /proc/sys/net/ipv4/tcp_fin_timeoutecho 4096 > /proc/sys/net/ipv4/tcp_max_syn_backlogecho 262144 > /proc/sys/net/ipv4/tcp_max_tw_bucketsecho 262144 > /proc/sys/net/ipv4/tcp_max_orphansecho 300 > /proc/sys/net/ipv4/tcp_keepalive_timeecho 1 > /proc/sys/net/ipv4/tcp_tw_recycle echo 0 > /proc/sys/net/ipv4/tcp_timestamps echo 0 > /proc/sys/net/ipv4/tcp_ecnecho 1 > /proc/sys/net/ipv4/tcp_sackecho 0 > /proc/sys/net/ipv4/tcp_dsack第二部分:测试HAProxy+Keepalived是否正常运行一、打开HAProxy监控页面/haproxy-status输入用户名,密码admin123456登录之后如下图所示二、 解析到192.168.21.253; 解析到192.168.21.254;在两台HAProxy服务器:192.168.21.129、192.168.21.130上执行命令:ipaddr如下图所示:可以看出现在VIP:192.168.21.253指向192.168.21.129;VIP:192.168.21.254指向192.168.21.130;在浏览器中打开//如下图所示:此时,bbs和sns域名都被均衡到192.168.21.127上面三、停止192.168.21.127上面的nginx服务servicenginx stop继续打开上面的两个网址,如下图所示:此时,bbs和sns域名都被均衡到192.168.21.128上面(由于192.168.21.127服务器nginx服务被关闭,实现了故障转移)四、关闭192.168.21.129上面的keepalived服务service keepalived stop此时,在两台HAProxy服务器:192.168.21.129、192.168.21.130上执行命令:ipaddr 如下图所示:系统运维 温馨提醒:qihang01原创内容版权所有,转载请注明出处及原文链接可以看出VIP:192.168.21.253和192.168.21.254均指向到192.168.21.130;此时,打开/如下图所示:可以正常访问五、恢复192.168.21.129上面的keepalived服务,恢复192.168.21.127上面的nginx 服务停止192.168.21.130上面的Keepalived服务servicekeepalived stop在两台HAProxy服务器:192.168.21.129、192.168.21.130上执行命令:ipaddr如下图所示:可以看出VIP:192.168.21.253和192.168.21.254均指向到192.168.21.129;此时,打开/如下图所示:可以正常访问备注:查看HAProxy日志文件:tail -f /var/log/haproxy.log至此,HAProxy+Keepalived实现Web服务器负载均衡配置完成。

相关文档
最新文档