Lvs和Keepalived实现主从服务器的负载均衡

Keepalived是一个免费开源的,用C编写的类似于layer3, 4 & 7交换机制软件,具备我们平时说的第3层、第4层和第7层交换机的功能。主要提供loadbalancing(负载均衡)和 high-availability(高可用)功能,负载均衡实现需要依赖Linux的虚拟服务内核模块(ipvs),而高可用是通过VRRP协议实现多台机器之间的故障转移服务

本次测试使用的lvs的DR模式和Keepalived主从配置

Keepalived

主负载服务器(server1)的配置:

yum install  keepalived -y   #安装Keepalived
yum install  ipvsadm -y   #安装lvs
service ipvsadm start    #开启lvs

Lvs—DR模式配置

Lvs服务器(server1)

yum install ipvsadm -y  #安装
service ipvsadm start
ipvsadm    #查看ipvsadm条目,如果存在可以执行下一条命令删除
ipvsadm -C    #删除所有ipvsadm条目
ipvsadm -A -t 172.25.38.1:80 -s rr    #添加ipvsadm条目,-A表示追加条目,-t表示使用tcp协议,-s rr表示使用轮询算法
ipvsadm -a -t 172.25.38.1:80 -r 172.25.38.3 -g    #-a表示追加规则,-t表示使用tcp协议,-r表示real-server,-g表示使用DR模型
ipvsadm -a -t 172.25.38.1:80 -r 172.25.38.4 -g
ipvsadm

如下图所示:
Lvs和Keepalived实现主从服务器的负载均衡_第1张图片

Real Server服务器(server3)

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
ifconfig lo:0 172.25.254.200 netmask 255.255.255.255 broadcast 172.25.38.1        ##在lo上设置集群服务的ip地址
route add -host 172.25.254.200 dev lo:0       ##在lo上设置集群服务的路由
route
/etc/init.d/httod start  #开启http

如下图所示:
Lvs和Keepalived实现主从服务器的负载均衡_第2张图片

或者运行脚本
vim /etc/init.d/realserver

#!/bin/bash  
# description: Config realserver
SNS_VIP=172.25.38.200
/etc/rc.d/init.d/functions
case "$1" in
start)
       ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
       /sbin/route add -host $SNS_VIP dev lo:0
       echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
       sysctl -p >/dev/null 2>&1
       echo "RealServer Start OK"
       ;;
stop)
       ifconfig lo:0 down
       route del $SNS_VIP >/dev/null 2>&1
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
       echo "RealServer Stoped"
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac
exit 0

server4相同

Lvs和Keepalived实现主从服务器的负载均衡_第3张图片
Lvs和Keepalived实现主从服务器的负载均衡_第4张图片

有关arp_ignore的相关介绍:

arp_ignore:定义对目标地址为本地IP的ARP询问不同的应答模式
    0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求
    1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求
    2 -只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内
    3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应
    4-7 - 保留未使用
    8 -不回应所有(本地地址)的arp查询

有关arp_announce的相关介绍:

arp_announce:对网络接口上本地IP地址发出的ARP回应作出相应级别的限制
    0 - (默认) 回应在任意网络接口(eth0,eth1,lo)上的任何本地地址
    1 -尽量避免不在该网络接口子网段的本地地址做出arp回应. 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一.如果改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理.
    2 - 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.

配置keepalived

vim /etc/keepalived/keepalived.conf
global_defs {
   notification_email {
         redhat@mail.com
   }
   notification_email_from sns-lvs@gmail.com
   smtp_server 172.25.38.100     #SMTP邮件服务器
   smtp_connection_timeout 30
   router_id LVS_DEVEL   #设置lvs的id
}
vrrp_instance VI_1 {
    state MASTER   #指定Keepalived的角色,MASTER为主服务器,BACKUP为从服务器
    interface eth0  #监测网络接口
    virtual_router_id 51  #虚拟路由编号,主备要一致
    priority 100  #定义优先级,数字越大,优先级越高,主服务器必须大于从服务器
    advert_int 1  #检查间隔,默认为1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.20.200  #定义虚拟IP(VIP)为172.25.38.200(可设置多个,增加下一个须换行)
    }
}
# 定义对外提供服务的LVS的VIP以及port
virtual_server 172.25.38.200 80 {
    delay_loop 6 # 设置健康检查时间,单位是秒
    lb_algo wrr # 设置负载调度的算法为wlc
    lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
    nat_mask 255.255.255.0
    persistence_timeout 0
    protocol TCP
    real_server 172.25.38.3 80 {   #指定real server1的IP地址
        weight 3     #配置节点权值,数字越大权重越高
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 172.25.38.4 {    #指定real server2的IP地址
        weight 3    #配置节点权值,数字越大权重越高
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}
service keepalived start   #开启keepalived

从负载服务器(server2)的配置:

keepalived 从负载服务器与主负载服务器的配置只是在keepalived的配置文件中需要改以下两处:

  (1)指定Keepalived的角色为从服务器,即:
   state BACKUP
  (2)将优先级改为小于100,例如改为99,即:
   priority 99

测试

1.访问vip,两个web服务器,权重一样,所以会依次访问
Lvs和Keepalived实现主从服务器的负载均衡_第5张图片

Lvs和Keepalived实现主从服务器的负载均衡_第6张图片

当server3发生故障(测试关闭http),则只访问server4
Lvs和Keepalived实现主从服务器的负载均衡_第7张图片

 2. 主负载服务器server1发生故障(测试关闭keepalived服务)
服务跳转到从服务器,服务照常

你可能感兴趣的:(linux,应用)