centos 6.5 搭建haproxy+keepalived实现高可用负载均衡

作者: print("") 分类: linux 发布时间: 2017-05-22 09:19

Keepalived 的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除, 当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的 web服务器。
HAProxy 提供高可用性、负载均衡以及基于 TCP 和 HTTP 应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy 特别适用于那些负载特大的 web 站点, 这些站点通常又需要会话保持或七层处理。HAProxy 运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整 合进您当前的架构中, 同时可以保护你的 web 服务器不被暴露到网络上。
系统环境: CenOS 6.5x86_64 Desktop install 将selinux and iptables 设置为disabled

图1 为基本的架构图:

图2 为IP地址分配。

主要用途

IP

Haproxy+keepalived_master

192.168.236.143

Haproxy+keepalived_backup

192.168.236.192

Webser1

192.168.236.150

Webser2

192.168.236.151

一:安装过程,在两台HA机器上分别keepalived:

#ln -s /usr/src/kernels/2.6.18-128.el5-i686/ /usr/src/linux

http://www.keepalived.org/software/ keepalived 的下载地址。版本的话自己可以选择一下版本。楼主选择的版本是1.2.23的版本
[root@mail2 keepalived-1.2.23]# ./configure –sysconf=/etc
[root@mail2 keepalived-1.2.23]# make && make install
[root@mail2 keepalived-1.2.23]# ln –s /usr/local/sbin/keepalived /sbin
[root@mail2keepalived-1.2.23]#cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[root@mail4keepalived-1.2.23]# ln -s /etc/init.d/keepalived /etc/rc.d/rc3.d/S99keepalived
[root@mail4keepalived-1.2.23]# ln -s /etc/init.d/keepalived /etc/rc.d/rc5.d/S99keepalived
二、修改配置文件
Director server 1 的配置文件
[root@Lserver-1 keepalived]# cat keepalived.conf
Master :
! Configuration File for keepalived
vrrp_script chk_http_port {
script “/etc/keepalived/check_haproxy.sh”   ######设置了一个keepalived一个脚本
interval 2
weight 2
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER           ###keepalived 的主
interface eth0
virtual_router_id 51
priority 150       #####keepalived 一个ID 号 备的ID一定要小于主的ID
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port
}
virtual_ipaddress {
192.168.236.230       ######一个VIP地址
}
}
}
 
 
 
 
BACKUP:
! Configuration File for keepalived
vrrp_script chk_http_port {
script “/etc/keepalived/check_haproxy.sh”      #####一个keepalived的脚本同主一样
interval 2
weight 2
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP       ####为keepalived 的backup 备节点
interface eth0
virtual_router_id 51
priority 120       ####### keepalived 的一个ID号,一定要小于主节点
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port
}
virtual_ipaddress {
192.168.236.230        ##同主
}
}
}
三、Master 主机上:
####这里是一个控制haproxy的一个启动脚本
#vi /etc/keepalived/check_haproxy.sh
#!/bin/bash
A=`ps -C haproxy –no-header | wc -l`
if [ $A -eq 0 ];then
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
echo “haproxy start”
sleep 3
if [ `ps -C haproxy –no-header | wc -l`-eq 0 ];then
/etc/init.d/keepalived stop
echo “keepalived stop”
fi
fi
 
 
Backup 备机上:
#!/bin/bash
A=`ip a | grep 192.168.236.230 | wc -l`
B=`ps -ef | grep haproxy | grep -v grep| awk ‘{print $2}’`
if [ $A -gt 0 ];then
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
else
kill -9 $B
fi
#两台机器分别执行:chmod 755 /etc/keepalived/check_haproxy.sh
四、haproxy的安装(主备都一样):
yum -y install pcre pcre-devel
wget https://fossies.org/linux/misc/haproxy-1.7.5.tar.gz
tar xf haproxy-1.7.5.tar.gz
cd haproxy-1.7.5
make TARGET=linux26 ARCH=x86_64 PREFIX=/usr/local/haproxy USE_PCRE=1
make install PREFIX=/usr/local/haproxy
#cd/usr/local/haproxy/
#mkdir conf
#mkdir logs
#vi haproxy.cfg
global
log 127.0.0.1   local0
log 127.0.0.1   local1 notice
#log loghost    local0 info
maxconn 4096
#       chroot /usr/share/haproxy
chroot  /usr/local/haproxy
uid 99
gid 99
daemon
#debug
#quiet
 
defaults
log     global
mode    http
option  httplog
option  dontlognull
retries 3
#redispatch
maxconn 2000
option redispatch
stats  uri    /haproxy
stats auth  admin:admin
frontend www
bind *:80
acl web hdr(host) -i www.lkq.com ####这里是通过域名访问的。如果域名为这个则通过。
use_backend webserver if web
backend webserver             #webserver作用域
mode http
balance   roundrobin
option  httpchk /index.html
server s1 192.168.236.151:80 weight 3 check      ###这两条记录为后端的两台WEB服务器
server s2 192.168.236.150:80 weight 3 check
五、:先主后从,两台机器上都分别启动:
/etc/init.d/keepalivedstart (如果之前没有启动haproxy,这条命令会自动把haproxy启动)
[root@Rserver-1 conf]# ps -ef |grep haproxy
nobody    14766      1  0 19:13 ?        00:00:01 /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
root      16034   8237  0 19:56 pts/2    00:00:00 grep haproxy
[root@Rserver-1 conf]# ps -ef |grep keepalived
root      16016      1  0 19:56 ?        00:00:00 keepalived -D
root      16018  16016  0 19:56 ?        00:00:00 keepalived -D
root      16019  16016  0 19:56 ?        00:00:00 keepalived -D
root      16102   8237  0 19:56 pts/2    00:00:00 grep keepalived
[root@Rserver-1 conf]#
六、再两台HA上分别执行ip addr list |grep 192.168.23
master:
[root@Rserver-1 conf]# ip addr list |grep 192.168.236
inet 192.168.236.143/24 brd 192.168.236.255 scope global eth0
inet 192.168.236.230/32 scope global eth0
[root@Rserver-1 conf]#
Backup:
[root@Lserver-1 keepalived]# ip addr list |grep 192.168.236
inet 192.168.236.192/24 brd 192.168.236.255 scope global eth0
[root@Lserver-1 keepalived]#
七、停掉主上的haproxy,3秒后keepalived会自动将其再次启动
[root@Rserver-1 conf]# killall haproxy
[root@Rserver-1 conf]# ps -ef |grep haproxy
nobody    14766      1  0 19:13 ?        00:00:02 /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
root      16826   8237  0 20:01 pts/2    00:00:00 grep haproxy
八、停掉主的keepalived,备机马上接管服务
Master:
[root@Rserver-1 conf]# /etc/init.d/keepalived stop
[root@Rserver-1 conf]# ip addr list|grep  192.168.236
inet 192.168.236.143/24 brd 192.168.236.255 scope global eth0
[root@Rserver-1 conf]#
Backup:
[root@Lserver-1 keepalived]# ip addr list|grep  192.168.236
inet 192.168.236.192/24 brd 192.168.236.255 scope global eth0
inet 192.168.236.230/32 scope global eth0
[root@Lserver-1 keepalived]#
九、通过浏览器进行测试


两台web的页面会在你刷新时进行切换。此文将httpd安装,配置过程省略了.
 

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

说点什么

avatar
  Subscribe  
提醒