说明:
操作系统:CentOS 5.X 64位
Web服务器:192.168.21.127、192.168.21.128
站点:bbs.osyunwei.com和sns.osyunwei.com部署在两台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
#kernel 大于2.6.28的用:TARGET=linux2628
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 #每个进程可用的最大连接数
nbproc 8 #进程数量,可以设置多个,提高处理效率
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 http-pretend-keepalive #服务器端保持长连接
option http-server-close #每次请求完毕后主动关闭http通道
option forceclose #服务端响应后主动关闭请求连接,及早释放服务连接,不必等到客户端应答确认
option httpclose #每次请求完毕后主动关闭http通道
option accept-invalid-http-request #接受无效的http请求,一般建议不设置,但是可解决部分杂牌浏览器访问打不开页面问题
option dontlognull #不记录健康检查的日志信息
option redispatch #如果后端有服务器宕机,强制切换到正常服务器
option abortonclose #丢弃由于客户端等待时间过长而关闭连接但仍在haproxy等待队列中的请求
option forwardfor except 127.0.0.0/8 #不记录本机转发的日志
option originalto #记录客户端访问的目的IP
maxconn 65535 #每个进程可用的最大连接数
balance source #同一IP地址的所有请求都发送到同一服务器
retries 3 #三次连接失败,则判断服务不可用
contimeout 5000 #连接超时
clitimeout 50000 #客户端超时
srvtimeout 50000 #服务器超时
timeout check 5s #检测超时
timeout http-request 5s #http请求超时时间
timeout queue 30s #一个请求在队列里的超时时间
timeout http-keep-alive 5s #设置http-keep-alive的超时时间
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.osyunwei.com hdr(host) -i bbs.osyunwei.com #规则设置,-i后面是要访问的域名,如果访问bbs.osyunwei.com这个域名,就负载均衡到bbs.osyunwei.com作用域
use_backend bbs.osyunwei.com if bbs.osyunwei.com #acl和if后面的名称必须相同这里为bbs.osyunwei.com
acl sns.osyunwei.com hdr(host) -i sns.osyunwei.com #规则设置,-i后面是要访问的域名,如果访问sns.osyunwei.com这个域名,就负载均衡到sns.osyunwei.com作用域
use_backend sns.osyunwei.com if sns.osyunwei.com
backend bbs.osyunwei.com
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.osyunwei.com
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.osyunwei.com/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.osyunwei.com 温馨提醒:qihang01原创内容 版权所有,转载请注明出处及原文链接
:wq! #保存退出
五、设置HAproxy服务监控脚本
vi /etc/keepalived/check_haproxy.sh #编辑,添加以下代码
#########################################################
#!/bin/bash
A=`ps -C haproxy --no-header | wc -l`
if [ $A -eq 0 ]
then service haproxy start
sleep 3
if [ `ps -C haproxy --no-header | wc -l ` -eq 0 ]
then service keepalived stop
fi
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服务器上分别操作
sed -i "s/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g" '/etc/sysctl.conf'
echo -e "net.core.somaxconn = 262144" >> /etc/sysctl.conf
echo -e "net.core.netdev_max_backlog = 262144" >> /etc/sysctl.conf
echo -e "net.core.wmem_default = 8388608" >> /etc/sysctl.conf
echo -e "net.core.rmem_default = 8388608" >> /etc/sysctl.conf
echo -e "net.core.rmem_max = 16777216" >> /etc/sysctl.conf
echo -e "net.core.wmem_max = 16777216" >> /etc/sysctl.conf
echo -e "net.ipv4.route.gc_timeout = 20" >> /etc/sysctl.conf
echo -e "net.ipv4.ip_local_port_range = 1025 65535" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_retries2 = 5" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_fin_timeout = 30" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_syn_retries = 1" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_synack_retries = 1" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_timestamps = 0" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_tw_recycle = 1" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_keepalive_time = 120" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_keepalive_probes = 3" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_keepalive_intvl = 15" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_max_tw_buckets = 200000" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_max_orphans = 3276800" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_max_syn_backlog = 262144" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_wmem = 8192 131072 16777216" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_rmem = 32768 131072 16777216" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_mem = 94500000 915000000 927000000" >> /etc/sysctl.conf
echo -e "net.ipv4.ip_conntrack_max = 25000000" >> /etc/sysctl.conf
echo -e "net.ipv4.netfilter.ip_conntrack_max = 25000000" >> /etc/sysctl.conf
echo -e "net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180" >> /etc/sysctl.conf
echo -e "net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 1" >> /etc/sysctl.conf
echo -e "net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60" >> /etc/sysctl.conf
echo -e "net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120" >> /etc/sysctl.conf
第二部分:测试HAProxy+Keepalived是否正常运行
一、打开HAProxy监控页面
http://bbs.osyunwei.com/haproxy-status
输入用户名,密码
admin
123456
登录之后如下图所示
二、bbs.osyunwei.com 解析到192.168.21.253;sns.osyunwei.com 解析到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.osyunwei.com/
http://sns.osyunwei.com/
如下图所示:
此时,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上面的keepalived服务
service keepalived stop
此时,在两台HAProxy服务器:192.168.21.129、192.168.21.130上执行命令:ip addr
如下图所示:
系统运维 www.osyunwei.com 温馨提醒:qihang01原创内容 版权所有,转载请注明出处及原文链接
可以看出VIP:192.168.21.253和192.168.21.254均指向到192.168.21.130;
此时,打开http://bbs.osyunwei.com/如下图所示:
可以正常访问
五、恢复192.168.21.129上面的keepalived服务,恢复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.osyunwei.com/如下图所示:
可以正常访问
备注:
查看HAProxy日志文件:
tail -f /var/log/haproxy.log
至此,HAProxy+Keepalived实现Web服务器负载均衡配置完成。
相关推荐
本文将对 Web 负载均衡解决方案进行详细介绍,该解决方案基于 HAproxy 和 keepalived 实现高可用负载均衡。HAProxy 是一种提供高可用性、负载均衡以及基于 TCP 和 HTTP 应用的代理,可以支持虚拟主机,免费、快速...
在构建高可用性服务系统时,HAproxy+Keepalived的组合被广泛应用于负载均衡架构。这个方案确保了服务的连续性和效率,特别是在处理大量网络请求时。在本篇文章中,我们将深入探讨如何在Red Hat Enterprise Linux 5.8...
在这个配置中,Haproxy作为负载均衡器,Keepalived用于心跳检测和故障切换,Nginx作为反向代理,LAMP提供Web服务,Nfs则用于共享数据存储,确保服务的连续性和数据一致性。” 【标签】:“高可用性,负载均衡,故障...
- Web服务器集群负载均衡:为Web应用提供可扩展性强且健壮的服务支撑。 - 数据库服务器集群负载均衡:优化数据库访问性能及稳定性。 ##### 5. Sphinx **定义**:Sphinx是一款开源全文搜索引擎工具,可以集成到...
### MyCat高可用负载均衡集群实现(HAProxy+Keepalived+MyCat) #### 一、概述 在当今高度依赖数据库应用的企业环境中,确保数据库系统的稳定性和高效性至关重要。为了达到这一目标,采用高可用(High ...
在IT行业中,构建高可用和安全的Web服务是至关重要的,而"部署haproxy+ssl+keepalived"正是实现这一...总的来说,haproxy+ssl+keepalived的组合为Web服务提供了强大的负载均衡和高可用性保障,是企业级应用的常见选择。
通过配置 Haproxy 和 Keepalived 实现高可用性,确保集群的可用性和负载均衡。 知识点: 1. 高可用集群的定义和重要性 高可用集群是指一个系统或应用程序在出现故障或宕机时仍能继续提供服务的能力。高可用集群...
【haproxy+keepalived 实现高可用负载均衡】是一种常见的在服务器集群中实现高可用性和负载分发的技术组合。Haproxy 是一款开源的高性能、高可用的代理服务器,它可以作为七层负载均衡器,处理 HTTP、TCP 等多种协议...
Haproxy是一款高性能的负载均衡器,而Keepalived则是一个用于网络服务高可用性的系统,它可以监控服务状态并实现故障切换。以下是对这两个工具及其在MySQL和Web服务中的应用的详细解释: 一、Haproxy Haproxy是一...
本文将详细介绍如何配置 Keepalived 和 HAProxy 来实现高可用负载均衡,并解决 Keepalived 在 CentOS 5.7 上安装时可能遇到的问题。 #### 二、系统环境 - **Keepalived版本**: 1.2.2 - **操作系统**: CentOS 5.7 - ...
对于大型的Web服务器的时候可以使用Haproxy;对性能有严格要求的时候可以使用LVS,就单纯从负载均衡的角度来说,LVS也许会成为主流,更适合现在大型的互联网公司。本文采用HAproxy+keepalived双主方案来解决业务架构...
本压缩包“haproxy+apache+keepalived.tar.gz”提供了一个基于Ansible自动化工具的解决方案,用于搭建haproxy、Apache HTTP服务器和keepalived的集群环境,以实现负载均衡和高可用性。 haproxy是一款流行的开源负载...
这种组合架构,既利用了HAProxy的高性能负载均衡和反向代理能力,又借助Keepalived实现整体架构的高可用性。 4. Keepalived功能与安装配置 - 管理LVS:Keepalived可以与LVS紧密配合,实现高效的负载分发。 - 健康...
标题中的"keepalived+haproxy+nginx-脚本"指的是一个集成的高可用性和负载均衡解决方案,其中包含了三个关键组件:Keepalived、HAProxy和Nginx。这个解决方案通常用于构建高可靠的Web服务架构,确保在主服务器故障时...
在本文中,我们将探讨如何利用Keepalived和HAProxy这两个工具来实现MySQL数据库的高可用负载均衡,特别是在使用了MySQL Cluster的情况下。 **Keepalived的作用** Keepalived的主要目标是提供故障隔离和负载均衡器...
HAProxy 更倾向于大型 Web 服务器的负载均衡需求;而 LVS 则因其出色的性能表现,特别适合对性能有严格要求的应用场景。 **1.2 LVS/Nginx/HAProxy 特点** - **Nginx**:以其出色的稳定性、丰富的特性及较低的资源...