LVS+KeepAlived搭建双机热备负载均衡

来源:互联网 发布:淘宝网购酸枣面 编辑:程序博客网 时间:2024/05/06 19:46

1. 网络环境准备


1.1.网络拓扑环境搭建

1.        主服务器(master):虚拟IP-192.168.13.120

2.        备份服务器(backup):虚拟IP-192.168.13.120

3.        真实服务器1(real1):192.168.13.102

4.        真实服务器2(real2):192.168.13.105

5.        真实服务器3(real3):192.168.13.107

测试可以省去备份服务器以及真实服务器23)主备和真实服务器的真实IP不重要,一下所写真实IP均为了举例方便,在相同网段即可

1.2. 下载

本文所有内容的下载地址(ipvsadm,keepalived,keepalived.config,lvsdr.sh,realdr.sh)如下:

链接: https://pan.baidu.com/s/1qYVhhF2  密码: mtj9


2. 环境搭建配置


2.1. 环境检测

检查内核是否支持ipvs

# modprobe –l | grep ipvs

如果在/lib/modules/2.6.18-128.el5/kernel/net/ipv4/ipvs下有很多ip_vs*这样的文件说明ipvs模块已经加入,如果没有,请自行升级内核T T


2.2. 安装ipvsadm(管理工具)

从下载内容包中找到ipvsadm-1.24.tar.gz,执行如下命令(运行命令出错的说明编译环境存在问题,请更新下载GCC)

# tar zxvf ipvsadm-1.24.tar.gz

# cd ipvsadm-1.24

# make && make install

# whereis ipvsadm

如果存在如下图的数据信息则说明安装成功


2.3. 安装keepalived

从下载内容包中找到ipvsadm-1.24.tar.gz,执行如下命令(运行命令出错的说明编译环境存在问题,请更新下载GCC)

#tar -zxvf keepalived-1.1.15.tar.gz

#cd keepalived-1.1.15

#./configure --prefix=/usr/local/keepalived

#make;make install

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

#cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

#mkdir /etc/keepalived

#cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

#cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
启动停止重启命令如下
/etc/rc.d/init.d/keepalived start|stop|restart


2.4. 配置LVS


2.4.1. 创建主备服务器运行脚本(master,backup)

本脚本的主要作用是在主备服务器上创建虚拟IP,并通过该虚拟IP+使用端口路由到真实服务器IP上,其中命令”/sbin/ipvsadm -C”是清理路由表

注:由于本人项目使用了80 3131 5151三个端口,所以配置了三个,实际使用请按需增删

#vim /sbin/lvsdr.sh

!/bin/bash VIP=192.168.13.120 RIP1=192.168.13.102RIP2=192.168.13.107RIP3=192.168.13.105/etc/rc.d/init.d/functionscase "$1" instart)       echo "start LVS of DirectorServer"       #Set the Virtual IP Address       /sbin/ifconfig eth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up       /sbin/route add -host $VIP dev eth0:1       #Clear IPVS Table       /sbin/ipvsadm -C       #Set Lvs Add route link       /sbin/ipvsadm -A -t $VIP:80 -s wrr -p 60       /sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -g       /sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -g       /sbin/ipvsadm -a -t $VIP:80 -r $RIP3 -g       /sbin/ipvsadm -A -t $VIP:3131 -s wrr -p 60       /sbin/ipvsadm -a -t $VIP:3131 -r $RIP1 -g       /sbin/ipvsadm -a -t $VIP:3131 -r $RIP2 -g        /sbin/ipvsadm -a -t $VIP:3131 -r $RIP3 -g        /sbin/ipvsadm -A -t $VIP:5151 -s wrr -p 60       /sbin/ipvsadm -a -t $VIP:5151 -r $RIP1 -g       /sbin/ipvsadm -a -t $VIP:5151 -r $RIP2 -g       /sbin/ipvsadm -a -t $VIP:5151 -r $RIP3 -g       #Run Lvs       /sbin/ipvsadm;;stop)echo "Close LVS Directorserver"/sbin/ifconfig eth0:1 down/sbin/ipvsadm -C;;*)echo "Usage0{start|stop}"exit 1esac
· 分配权限
#chmod 755/sbin/lvsdr.sh
· 执行测试

#/sbin/lvsdr.sh start

#ipvsadm –ln

如果是类似如下图所示,则表示配置正确(看看路由列表是否和自己配置相同)

#/sbin/lvsdr.sh stop

#ipvsadm –ln

如果是如下图所示,则表示配置正确

2.4.2. 创建正式服务器运行脚本(real1,real2,real3)

    要完成主备虚拟IP映射,必须在真实服务器上运行下面的脚本启动,建议将该脚本加入启动项中开机启动,不然每次重启都要运行该脚本。需要注意:执行servicenetwork restart命令后需要重新运行该脚本

#vim /sbin/realdr.sh

!/bin/bashVIP=192.168.13.120/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up/sbin/route add -host $VIP dev lo:0echo "1">/proc/sys/net/ipv4/conf/default/arp_ignoreecho "2">/proc/sys/net/ipv4/conf/default/arp_announceecho "1">/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2">/proc/sys/net/ipv4/conf/all/arp_announcesysctl -p
` 分配权限
#chmod 755/sbin/realdr.sh
· 在real1,real2,real3上分别执行
#/sbin/realdr.shstart
通过ifconfig查看则会看到多出了lo:0里面是192.168.13.120则表示执行成功

2.5. 配置keepalived


2.5.1. 修改主备keepalived配置文件(master,backup)

该配置文件主要核心是监听我们指定其监听的端口,实时监测各个真实服务器(real1,real2,real3)的指定端口是否能连通,如果连接异常则将其从路由表中剔除,如果恢复则重新加入到路由表中。

详细参数说明请参见官网或其他资料,其中state MASTER参数在备份服务器中要改为state BACKUP

#vim /etc/keepalived/keepalived.conf
!Configuration File for keepalivedglobal_defs {   notification_email {939248756@qq.com   }   notification_email_from Alexandre.Cassen@firewall.loc   smtp_server 192.168.200.1   smtp_connect_timeout 30   router_id LVS_DEVEL}vrrp_instance VI_1 {    state MASTER    interface eth0    virtual_router_id 51    priority 100    advert_int 1    authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {        192.168.13.120    }}virtual_server 192.168.13.120 80 {    delay_loop 6    lb_algo wrr    lb_kind DR    nat_mask 255.255.255.0    persistence_timeout 60    inhibit_on_failure    protocol TCP    real_server 192.168.13.102 80 {        weight 1        TCP_CHECK {connect_timeout 10nb_get_retry 3delay_before_retry 3}    }    real_server 192.168.13.107 80 {        weight 1        TCP_CHECK {connect_timeout 10nb_get_retry 3delay_before_retry 3}    }    real_server 192.168.13.105 80 {        weight 1        TCP_CHECK {connect_timeout 10nb_get_retry 3delay_before_retry 3}    }}virtual_server 192.168.13.120 3131 {    delay_loop 6    lb_algo wrr    lb_kind DR    nat_mask 255.255.255.0    persistence_timeout 60    protocol TCP    real_server 192.168.13.102 3131 {        weight 1        TCP_CHECK {connect_timeout 10nb_get_retry 3delay_before_retry 3}    }    real_server 192.168.13.107 3131 {        weight 1        TCP_CHECK {connect_timeout 10nb_get_retry 3delay_before_retry 3}    }real_server 192.168.13.105 3131 {        weight 1        TCP_CHECK {connect_timeout 10nb_get_retry 3delay_before_retry 3}    }}virtual_server 192.168.13.120 5151 {    delay_loop 6    lb_algo wrr    lb_kind DR    nat_mask 255.255.255.0    persistence_timeout 60    protocol TCP    real_server 192.168.13.102 5151 {        weight 1        TCP_CHECK {connect_timeout 10nb_get_retry 3delay_before_retry 3}    }    real_server 192.168.13.107 5151 {        weight 1        TCP_CHECK {connect_timeout 10nb_get_retry 3delay_before_retry 3}    }real_server 192.168.13.105 5151 {        weight 1        TCP_CHECK {connect_timeout 10nb_get_retry 3delay_before_retry 3}    }}

2.5.2. 启动测试keepalived

*@!不要忘记先把路由脚本lvsdr.sh启动起来

#/sbin/lvsdr.sh start

#/etc/rc.d/init.d/keepalived start

查看此时路由状态,执行命令ipvsadm –ln,得到下图,从图中列表可以看出只有real1(IP 192.168.13.102)是连通的

此时分别打开real2/real3的服务通过ipvsadm –ln查看则会看到IP192.168.13.105和192.168.13.107都会出现在列表中。
如果关闭real1的服务,则会得到下图,列表空了

多进行几次测试就会知道其原理了,从而可以对配置文件进行更合适的修改


2.6. 设置自启动

【主备服务器】

#vim /etc/rc.local

添加如下内容:

/etc/rc.d/init.d/keepalived restart

/sbin/lvsdr.sh start

【真实服务器】

#vim /etc/rc.local

添加如下内容:

添加/sbin/realdr.sh start


3. 注意事项

  • 要关闭所有服务器(master,backup,real1,real2,real3)的防火墙 :chkconfig iptables off重启关闭、service iptables stop立即关闭
  •  一个端口要建立一个端口对应的映射配置(lvsdr.shkeepalived.conf都要对应修改)
  • Service network restart后的真实服务器一定要重新运行realdr.sh


0 0
原创粉丝点击