http://www.osyunwei.com/archives/7512.html (主要参考)
http://blog.chinaunix.net/uid-25266990-id-3989321.html (次要参考)
http://xz159065974.blog.51cto.com/8618592/1405812 (动静态分离)
http://www.cnblogs.com/dkblog/archive/2011/07/06/2098949.html
---------------------------------------------------------------
操作系统:CentOS 6.5 64位
Web服务器:192.168.21.127、192.168.21.128
站点:bbs.osyunwei.com和sns.osyunwei.com部署在两台Web服务器上
实现目的:
增加两台服务器(主主模式),通过HAProxy+Keepalived实现Web服务器负载均衡
架构规划:
HAProxy服务器:192.168.1.117、192.168.1.118
虚拟服务器(VIP):192.168.1.20、192.168.1.30
Realserver: 192.168.1.119 192.168.1.120
部署完成之后:
1、VIP:192.168.1.20指向192.168.1.117;VIP:192.168.1.30指向192.168.1.118;
2、当192.168.1.117宕机时,VIP:192.168.1.20漂移到192.168.1.118上;
3、当192.168.1.118宕机时,VIP:192.168.1.30漂移到192.168.1.117上;
这样的主主模式好处是,两台服务器在提供服务的同时,又互为对方的备份服务器。
具体操作:
第一部分:在两台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 #创建haproxy运行账户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 #备份
vim /usr/local/haproxy/conf/haproxy.cfg #编辑,修改 (两台机子一样)
在第二台机118上:scp root@192.168.1.117:/usr/local/haproxy/conf/haproxy.cfg /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 www.ccqq.com hdr(host) -i www.ccqq.com #规则设置,-i后面是要访问的域名,如果访问bbs.osyunwei.com这个域名,就负载均衡到bbs.osyunwei.com作用域 use_backend www.ccqq.com if www.ccqq.com #acl和if后面的名称必须相同这里为bbs.osyunwei.com acl img.ccqq.com hdr(host) -i img.ccqq.com #规则设置,-i后面是要访问的域名,如果访问sns.osyunwei.com这个域名,就负载均衡到sns.osyunwei.com作用域 use_backend img.ccqq.com if img.ccqq.com backend www.ccqq.com mode http balance roundrobin #option httpchk /index.php #检测服务器此文件是否存在,如果没有,则认为服务器连接异常,此参数可以不设置 server web01 192.168.1.120:80 check inter 2000 rise 3 fall 3 weight 100 #inter 2000 心跳检测时间;rise 3 三次连接成功,表示服务器正常;fall 3 三次连接失败,表示服务器异常; weight 100 权重设置 server web02 192.168.1.119:80 check inter 2000 rise 3 fall 3 weight 100 backend img.ccqq.com mode http balance roundrobin #设置负载均衡模式,source保存session值,roundrobin轮询模式 #option httpchk /index.php #检测服务器此文件是否存在,如果没有,则认为服务器连接异常,此参数可以不设置 server web01 192.168.1.119:80 check inter 2000 rise 3 fall 3 weight 100 server web02 192.168.1.120: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
在windows下修改 hosts :
192.168.1.20 www.ccqq.com
192.168.1.30 img.ccqq.com
二、安装配置keepalived(2配置参考1,大体上一样)
[root@node1 keepalived-1.2.4]# make && make install
[root@node1 keepalived-1.2.4]# chmod +x /etc/init.d/keepalived
! Configuration File for keepalived global_defs { notification_email { carbon3@qq.com } notification_email_from keepalived@domain.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_http_port { script "/opt/check_haproxy.sh" interval 2 weight 2 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 mcast_src_ip 192.168.1.117 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { chk_http_port } virtual_ipaddress { 192.168.1.20 } } 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.1.30 } }
BACKUP 机的 keepalived 配置:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
! Configuration File for keepalived global_defs { notification_email { carbon3@qq.com } notification_email_from keepalived@domain.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_http_port { script "/opt/check_haproxy.sh" interval 2 weight 2 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 mcast_src_ip 192.168.1.118 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { chk_http_port } virtual_ipaddress { 192.168.1.20 } } 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.1.30 } }
检测脚本,为了防止haproxy服务关闭导致keepalived不自动切换。 测了有问题
1
2
3
4
5
6
7
8
9
|
#vim /opt/check_haproxy.sh
#!/bin/bash
if
[ $(
ps
-C haproxy --no-header |
wc
-l) -
eq
0 ];
then
/etc/init
.d
/haproxy
start
fi
sleep
2
if
[ $(
ps
-C haproxy --no-header |
wc
-l) -
eq
0 ];
then
/etc/init
.d
/keepalived
stop
fi
|
9、启动两台keepalived和Haproxy服务。
1
2
|
#servcie haproxy start
#service keepalived start
|
ip addr 查看两台机的VIP
域名测试 是否正常
---日志问题 没试成功------------------------------------------
1.vim /etc/rsyslog.conf
添加local0.* /var/log/haproxy.log
2.Haproxy.conf代码
global
log 127.0.0.1 local0 info
......
3. 日志输出在/var/log/haproxy.log下
centos 下,修改 vim /etc/sysconfig/rsyslog ,把
SYSLOGD_OPTIONS=”-m 0″ 改为 SYSLOGD_OPTIONS=”-m 0 -r”
service rsyslog restart
-----------------------------------------------
cd /
find -name haproxy
[root@carbonlinux /]rm -rf /usr/share/haproxy
[root@carbonlinux /]# rm -rf /usr/sbin/haproxy
[root@carbonlinux /]# rm -rf /usr/local/sbin/haproxy
[root@carbonlinux /]# rm -rf /usr/local/doc/haproxy
[root@carbonlinux /]# rm -rf /etc/haproxy
[root@carbonlinux /]# rm -rf /etc/rc.d/init.d/haproxy
[root@carbonlinux /]# rm -rf /var/lock/subsys/haproxy