linux中实现Web服务器负载均衡(HAProxy+Keepalived)

 

说明:

操作系统:CentOS 5.X 64位

Web服务器:192.168.21.127、192.168.21.128

站点:bbs.111cn.net和sns.111cn.net部署在两台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 #重启防火墙使配置生效

二、安装HAProxy

1、创建HAProxy运行账户和组

groupadd haproxy #添加haproxy组

useradd -g haproxy haproxy -s /bin/false #创建nginx运行账户haproxy并加入到haproxy组,不允许haproxy用户直接登录系统

2、安装编译工具

yum install  gcc gcc-c++ make openssl-devel kernel-devel

3、安装HAProxy

HAProxy下载地址: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,此时该参数就为linux26

CPU=x86_64   #使用uname -r查看系统信息,如x86_64 x86_64 x86_64 GNU/Linux,此时该参数就为x86_64

PREFIX=/usr/local/haprpxy   #/usr/local/haprpxy为haprpxy安装路径

4、设置HAProxy

mkdir -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  #添加脚本执行权限

chkconfig haproxy 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-bak  #备份

vi  /usr/local/haproxy/conf/haproxy.cfg  #编辑,修改

#####################################################################

# this config needs haproxy-1.1.28 or haproxy-1.2.1

global

log 127.0.0.1   local0 #在本机记录日志

log 127.0.0.1   local1 notice

#log loghost    local0 info

maxconn 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     global

log  127.0.0.1   local3  #日志文件设置

mode    http  #运行模式tcp、http、health

option  httplog

option  httpclose       #每次请求完毕后主动关闭http通道

option  dontlognull     #不记录健康检查的日志信息

option  redispatch  #如果后端有服务器宕机,强制切换到正常服务器

option  abortonclose  #丢弃由于客户端等待时间过长而关闭连接但仍在haproxy等待队列中的请求

option  forwardfor  #获取客户端真实访问IP

option  originalto  #记录客户端访问的目的IP

maxconn  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 bbs.111cn.net  hdr(host) -i bbs.111cn.net  #规则设置,-i后面是要访问的域名,如果访问bbs.111cn.net这个域名,就负载均衡到bbs.111cn.net作用域

use_backend bbs.111cn.net if bbs.111cn.net   #acl和if后面的名称必须相同这里为bbs.111cn.net

acl sns.111cn.net  hdr(host) -i sns.111cn.net  #规则设置,-i后面是要访问的域名,如果访问sns.111cn.net这个域名,就负载均衡到sns.111cn.net作用域

use_backend sns.111cn.net if sns.111cn.net

backend     bbs.111cn.net

mode http

balance   source

#option  httpchk /index.php  #检测服务器此文件是否存在,如果没有,则认为服务器连接异常,此参数可以不设置

server     192.168.21.127  192.168.21.127:80   check  inter  2000  rise 3  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  rise 3  fall  3  weight 100

backend     sns.111cn.net

mode http

balance   source  #设置负载均衡模式,source保存session值,roundrobin轮询模式

#option  httpchk /index.php  #检测服务器此文件是否存在,如果没有,则认为服务器连接异常,此参数可以不设置

server     192.168.21.127  192.168.21.127:80   check  inter  2000  rise 3  fall  3  weight 100

server     192.168.21.128  192.168.21.128:80   check  inter  2000  rise 3  fall  3  weight 100

#errorloc  503  http://www.111cn.net/404.html

errorfile 403 /etc/haproxy/errorfiles/403.http

errorfile 500 /etc/haproxy/errorfiles/500.http

errorfile 502 /etc/haproxy/errorfiles/502.http

errorfile 503 /etc/haproxy/errorfiles/503.http

errorfile 504 /etc/haproxy/errorfiles/504.http

#####################################################################

:wq! #保存退出

service haproxy start #启动

service haproxy stop  #关闭

service haproxy restart  #重启

6、设置HAProxy日志

vi  /etc/syslog.conf  #编辑,在最下边增加

# haproxy.log

local0.*          /var/log/haproxy.log

local3.*          /var/log/haproxy.log

:wq! #保存退出

vi  /etc/sysconfig/syslog   #编辑修改

SYSLOGD_OPTIONS="-r -m 0"   #接收远程服务器日志

:wq! #保存退出

service syslog restart  #重启syslog

三、安装keepalived

下载keeplived:http://www.keepalived.org/software/keepalived-1.2.12.tar.gz

上传keepalived-1.2.12.tar.gz到/usr/local/src目录

cd /usr/local/src

tar zxvf keepalived-1.2.12.tar.gz

cd keepalived-1.2.12

./configure  #配置,必须看到以下提示,说明配置正确,才能继续安装

Use IPVS Framework : Yes

IPVS sync daemon support : Yes

Use VRRP Framework       : Yes

make #编辑

make install  #安装

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/

cp /usr/local/etc/rc.d/init.d/keepalived  /etc/rc.d/init.d/

chmod +x /etc/rc.d/init.d/keepalived  #添加执行权限

chkconfig keepalived on  #设置开机启动

service keepalived start #启动

service keepalived stop  #关闭

service keepalived restart  #重启

四、配置keepalived

cp /etc/keepalived/keepalived.conf  /etc/keepalived/keepalived.conf-bak

vi /etc/keepalived/keepalived.conf  #编辑,修改为以下代码

#########################################################

#以下为192.168.21.129服务器:

! Configuration File for keepalived

global_defs {

notification_email {

acassen@firewall.loc

failover@firewall.loc

sysadmin@firewall.loc

}

notification_email_from Alexandre.Cassen@firewall.loc

smtp_server 192.168.200.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_script chk_haproxy {

script "/etc/keepalived/check_haproxy.sh"  #HAproxy服务监控脚本

interval 2

weight 2

}

vrrp_instance VI_1 {

state MASTER

interface eth0

virtual_router_id 51

priority 100

advert_int 1

authentication {

auth_type PASS

auth_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 BACKUP

interface eth0

virtual_router_id 52

priority 99

advert_int 1

authentication {

auth_type PASS

auth_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 keepalived

global_defs {

notification_email {

acassen@firewall.loc

failover@firewall.loc

sysadmin@firewall.loc

}

notification_email_from Alexandre.Cassen@firewall.loc

smtp_server 192.168.200.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_script chk_haproxy {

script "/etc/keepalived/check_haproxy.sh"  #HAproxy服务监控脚本

interval 2

weight 2

}

vrrp_instance VI_1 {

state BACKUP

interface eth0

virtual_router_id 51

priority 99

advert_int 1

authentication {

auth_type PASS

auth_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 MASTER

interface eth0

virtual_router_id 52

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.21.254

}

notify_master "/etc/keepalived/clean_arp.sh  192.168.21.254"  #更新虚拟服务器(VIP)地址的arp记录到网关

}

#########################################################

系统运维  www.111cn.net  温馨提醒:qihang01原创内容 版权所有,转载请注明出处及原文链接

:wq! #保存退出

五、设置HAproxy服务监控脚本

vi  /etc/keepalived/check_haproxy.sh #编辑,添加以下代码

#########################################################

#!/bin/sh

if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then

/etc/rc.d/init.d/haproxy  start

fi

sleep 2

if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then

/etc/rc.d/init.d/keepalived  stop

fi

#########################################################

:wq! #保存退出

chmod +x /etc/keepalived/check_haproxy.sh   #添加执行权限

六、设置更新虚拟服务器(VIP)地址的arp记录到网关脚本

vi  /etc/keepalived/clean_arp.sh  #编辑,添加以下代码

#!/bin/sh

VIP=$1

GATEWAY=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_range

echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout

echo 4096 > /proc/sys/net/ipv4/tcp_max_syn_backlog

echo 262144 > /proc/sys/net/ipv4/tcp_max_tw_buckets

echo 262144 > /proc/sys/net/ipv4/tcp_max_orphans

echo 300 > /proc/sys/net/ipv4/tcp_keepalive_time

echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle

echo 0 > /proc/sys/net/ipv4/tcp_timestamps

echo 0 > /proc/sys/net/ipv4/tcp_ecn

echo 1 > /proc/sys/net/ipv4/tcp_sack

echo 0 > /proc/sys/net/ipv4/tcp_dsack

第二部分:测试HAProxy+Keepalived是否正常运行

一、打开HAProxy监控页面

http://bbs.111cn.net/haproxy-status

输入用户名,密码

admin

123456

登录之后如下图所示

二、bbs.111cn.net 解析到192.168.21.253;sns.111cn.net 解析到192.168.21.254;

在两台HAProxy服务器:192.168.21.129、192.168.21.130上执行命令:ip addr

如下图所示:

可以看出现在VIP:192.168.21.253指向192.168.21.129;VIP:192.168.21.254指向192.168.21.130;

在浏览器中打开

http://bbs.111cn.net/

http://sns.111cn.net/

如下图所示:

此时,bbs和sns域名都被均衡到192.168.21.127上面

三、停止192.168.21.127上面的nginx服务

service nginx stop

继续打开上面的两个网址,如下图所示:

此时,bbs和sns域名都被均衡到192.168.21.128上面(由于192.168.21.127服务器nginx服务被关闭,实现了故障转移)

四、关闭192.168.21.129上面的HAProxy服务

service haproxy stop

此时,在两台HAProxy服务器:192.168.21.129、192.168.21.130上执行命令:ip addr

如下图所示:

系统运维  www.111cn.net  温馨提醒:qihang01原创内容 版权所有,转载请注明出处及原文链接

可以看出VIP:192.168.21.253和192.168.21.254均指向到192.168.21.130;

此时,打开http://bbs.111cn.net/如下图所示:

可以正常访问

五、恢复192.168.21.129上面的HAProxy服务,恢复192.168.21.127上面的nginx服务

停止192.168.21.130上面的Keepalived服务

service keepalived stop

在两台HAProxy服务器:192.168.21.129、192.168.21.130上执行命令:ip addr

如下图所示:

可以看出VIP:192.168.21.253和192.168.21.254均指向到192.168.21.129;

此时,打开http://sns.111cn.net/如下图所示:

可以正常访问

备注:

查看HAProxy日志文件:

tail -f /var/log/haproxy.log

时间: 2024-10-27 10:21:44

linux中实现Web服务器负载均衡(HAProxy+Keepalived)的相关文章

Nginx+Keepalived实现Web服务器负载均衡

说明: 操作系统:CentOS 5.X 64位 Web服务器:192.168.21.127.192.168.21.128 站点:bbs.111cn.net和sns.111cn.net部署在两台Web服务器上 实现目的: 增加两台服务器(主主模式),通过Nginx+Keepalived实现Web服务器负载均衡 架构规划: Nginx服务器:192.168.21.129.192.168.21.130 虚拟服务器(VIP):192.168.21.252.192.168.21.253 部署完成之后: 1

Web服务器负载均衡方案(3)

web|web服务|web服务器 (1)http为默认的服务,不用设置 (2)ftp----/usr/lib/ftpAgentClusterServer Configuration→Cluster Services→Service Settings: (1)http,80:TCP,sticky (2)ftp,21:TCP,ftpClusterServer Configuration→Servers Configuration: (1) pc1 (pc1.test.com),direct,ping

四种常用方法实现服务器负载均衡

为了提高服务器的性能和工作负载能力,企业通常会使用DNS服务器.网络地址转换等技术来实现多服务器负载均衡,特别是目前企业对外的互联网Web网站,许多都是通过几台服务器来完成服务器访问的负载均衡.   目前企业使用的所谓"负载均衡服务器",实际上它是应用系统的一种控制服务器,所有用户的请求都首先到此服务器,然后由此服务器根据各个实际处理服务器状态将请求具体分配到某个实际处理服务器中,对外公开的域名与IP地址都是这台服务器.负载均衡控制与管理软件安装在这台服务器上,这台服务器一般只做负载均

全局服务器负载均衡已开始向云上转移

即使应用程序已经从传统的数据中心转移到云计算,但服务器负载均衡仍然是IT基础设施的核心元素.无论服务器是真实的还是虚拟的,永久的还是短暂的,能够在多个服务器之间智能地分配工作负载总是必要的. 但是,在多个云.多个数据中心和混合基础设施之间可靠地分布工作负载的能力仍然存在较大的不足,结果就是工作负载分布不佳和应用程序性能降级.如果能在全球范围内更好地管理工作负载,则可以避免这种性能下降.简而言之,需要更好的全局服务器负载均衡(GSLB). 云计算和负载均衡 负载均衡器也被称为应用程序交付控制器(A

邮件服务器负载均衡大型企业部署方案

邮件服务器负载均衡在大型企业中的应用是很普遍的,市场经济下大型企业的队伍不断发展壮大,面对企业员工数量的不断增加,企业对邮件服务器也提出了更高的要求. 1. 高可用性 多台服务器进行负载均衡的同时,不会因为一台服务器的宕机而导致整个系统瘫痪. 2. 可扩展性 在不改变网路环境的情况下,添加和移除应用服务器,而不影响整体应用的性能,实现透明部署. 3. 安全性 具备IDS/IPS等安全防护措施, 能够防范诸如DOS, DDOS等攻击, 确保后台服务器不会因为黑客攻击等而影响整体系统的稳定性. 4.

Apache实现Web Server负载均衡详解(不考虑Session版)

本篇文章是对使用Apache实现Web Server负载均衡的方法进行了详细的分析介绍,需要的朋友参考下(不考虑Session版)   至少需三台服务器:服务器A:控制服务器 服务器B和服务器C:实际执行服务器 负载均衡原理:将访问服务器A的请求分发至服务器B和服务器C 修改服务器A上apache的http.conf文件: 首先,加载相应的代理模块,去掉以下模块前面的#号:LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_

linux搭建nginx WEB服务器的教程

  下文来为各位介绍一篇在linux搭建nginx WEB服务器的教程,如果各位不想使用apache环境了,想用nginx环境就可以和小编一起来看看. 1.下载nginx 命令:wget http://nginx.org/download/nginx-0.8.54.tar.gz 2.解压 命令:tar zxvf nginx-0.8.54.tar.gz 3.进入目录 命令:cd nginx-0.8.54 4.安装依赖包 命令:yum -y install gcc pcre-devel openss

SQL Server数据库服务器负载均衡集群的实现方法

SQL Server数据库服务器http://www.aliyun.com/zixun/aggregation/13996.html">负载均衡集群的实现方法是本文我们主要要介绍的内容,我们知道,SQL Server数据库服务器可以说是应用范围最广的数据库产品,并且越来越多地在大型和比较关键的应用系统中提供服务.当企业应用越来越复杂.数据量越来越大的时候,SQL Server数据库要不停的进行处理.存储.查询的工作,这个时候企业就要考虑SQL Server数据库服务器的性能和速度及安全性了

如何私用云中的服务器负载均衡

从许多角度上来说,管理一个私有云跟管理内部数据中心是差不多的.IT管理员仍要通过几个重要的步骤来监控和平衡基础设施,但是云环境的真正成功依赖几个方面:安全.服务器密度.网络规划和负载管理. 在把工作负荷放置在"云就绪"的服务器前,管理员必须规划好他们的物理服务器环境.在这个规划阶段,云管理员可以调整环境,弄明白他们提供的工作负载并真正理解可用的资源信息. 分布式计算允许用户从多种设备,多个地点和多个时间来访问.这就意味着企业的云环境必须有能力处理用户数量浮动,特别那些用户从不同时区登录