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

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

测试可以省去备份服务器以及真实服务器 2 3)主备和真实服务器的真实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

LVS+KeepAlived搭建双机热备负载均衡_第1张图片


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.102
RIP2=192.168.13.107
RIP3=192.168.13.105
/etc/rc.d/init.d/functions
case "$1" in
start)
       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 1
esac
· 分配权限
#chmod 755/sbin/lvsdr.sh
· 执行测试

#/sbin/lvsdr.sh start

#ipvsadm –ln

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

LVS+KeepAlived搭建双机热备负载均衡_第2张图片

#/sbin/lvsdr.sh stop

#ipvsadm –ln

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

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

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

#vim /sbin/realdr.sh

!/bin/bash
VIP=192.168.13.120
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
echo "1">/proc/sys/net/ipv4/conf/default/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/default/arp_announce
echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -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 keepalived
global_defs {
   notification_email {
		[email protected]
   }
   notification_email_from [email protected]
   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 10
			nb_get_retry 3
			delay_before_retry 3
		}
    }
	
    real_server 192.168.13.107 80 {
        weight 1
        TCP_CHECK {
			connect_timeout 10
			nb_get_retry 3
			delay_before_retry 3
		}
    }
	
    real_server 192.168.13.105 80 {
        weight 1
        TCP_CHECK {
			connect_timeout 10
			nb_get_retry 3
			delay_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 10
			nb_get_retry 3
			delay_before_retry 3
		}
    }
	
    real_server 192.168.13.107 3131 {
        weight 1
        TCP_CHECK {
			connect_timeout 10
			nb_get_retry 3
			delay_before_retry 3
		}
    }
	
	real_server 192.168.13.105 3131 {
        weight 1
        TCP_CHECK {
			connect_timeout 10
			nb_get_retry 3
			delay_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 10
			nb_get_retry 3
			delay_before_retry 3
		}
    }
	
    real_server 192.168.13.107 5151 {
        weight 1
        TCP_CHECK {
			connect_timeout 10
			nb_get_retry 3
			delay_before_retry 3
		}
    }
	
	real_server 192.168.13.105 5151 {
        weight 1
        TCP_CHECK {
			connect_timeout 10
			nb_get_retry 3
			delay_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)是连通的
LVS+KeepAlived搭建双机热备负载均衡_第3张图片
此时分别打开real2/real3的服务通过ipvsadm –ln查看则会看到IP192.168.13.105和192.168.13.107都会出现在列表中。
如果关闭real1的服务,则会得到下图,列表空了
LVS+KeepAlived搭建双机热备负载均衡_第4张图片

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


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


你可能感兴趣的:(keepalived,负载均衡,LVS,双机热备)