LVS+keepalived实现高可用的负载均衡

1 篇文章 0 订阅
1 篇文章 0 订阅

因为LVS是由linux内核去实现的,所以我们不需要安装,它的管理工具有两种,可以通过ipvsadm或者keepalived去进行配置策咯

这里我们讲的LVS跟keepalived如何实现负载均衡。

首先我们准备了四台服务器:192.168.1.21,192.168.1.22,192.168.1.23,192.168.1.28

192.168.1.21和192.168.1.28是作为web服务器,上面分别安装了tomcat。

然后192.168.1.22,192.168.1.23这两台我们做LVS服务器。

首先我们在这两台上装一下keepalived。

yum install -y keepalived

安装完事之后,我们主要要修改一下/etc/keepalived/keepalived.conf这个文件

这里我将192.168.1.28作为主负载服务器

内容配置如下:

global_defs {
    notification_email {
       root@localhost
    }
    notification_email_from root@localhost
    smtp_server localhost
    smtp_connection_timeout 30
    router_id LVS_MASTER         # 设置lvs的id,在一个网络应该是唯一的
}
vrrp_instance VI_1 {
    state MASTER            # 指定keepalived的角色,MASTER为主,BACKUP为备
    interface enp0s3        # 当前进行vrrp通讯的网络接口卡(当前centos的网卡)
    virtual_router_id 80    # 虚拟路由编号,主从要一致
    priority 200            # 优先级,数值越大,获取处理请求的优先级越高,注意主从不能一致
    advert_int 2            # 检查间隔,默认为1s(vrrp组播周期秒数),我这边设置了2s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.100        # 定义虚拟ip(VIP),可多设,每行一个
    }
}
# 定义对外提供的LVS的VIP以及port
virtual_server 192.168.1.100 8080 {
    delay_loop 6          # 设置健康检查时间,单位为秒
    lb_algo rr            # 设置负载调度的算法为rr,互联网应用常使用 wlc 或 rr。
    lb_kind DR            # 设置lvs实现负载的机制,有NAT、TUN、DR三个模式
    nat_mask 255.255.255.0
    persistence_timeout 0       
    protocol TCP
    real_server 192.168.1.21 8080 { # 指定real server1的ip地址
        weight 1        # 配置节点权值,数值越大权重越高
        TCP_CHECK {
            connect_timeout 10 #连接超时时间
            nb_get_retry 3     #重连次数
            delay_before_retry 3 #重连间隔时间
        }
    }
    real_server 192.168.1.28 8080 { # 指定real server2的ip地址
        weight 1
        TCP_CHECK {
            connect_timeout 10 
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_router_id 80    # 虚拟路由编号,主从要一致,注意同一网段如果另一台集群中也设置同样的数值会报错,所以这个得设置唯一,一开始我设置成默认的,结果就冲突了。

persistence_timeout. :会话保持时间,单位是秒。这个会话是网络7层传输协议中的(第三层)会话。比如我们把它设置为60,那么客户端60秒内访问LVS虚拟服务器的请求都会被转到到同1个后台服务器节点。如果设置为0,那么每次请求都会根据配置的调度情况进行分发。

下面这个是从负载服务器的配置

! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from root@localhost
   smtp_server localhost
   smtp_connect_timeout 30
   router_id LVS_BACKUP
}

vrrp_instance VI_1 {
    state BACKUP  #表示是从负载服务器
    interface eth0 #这是从服务器的网卡
    virtual_router_id 80 # 注意主从一致
    priority 100    #低于主的priority值
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.100
    }
}

# 定义对外提供的LVS的VIP以及port
virtual_server 192.168.1.100 8080 {
    delay_loop 6             # 设置健康检查时间,单位为秒
    lb_algo rr            # 设置负载调度的算法为rr
    lb_kind DR            # 设置lvs实现负载的机制,有NAT、TUN、DR三个模式
    nat_mask 255.255.255.0
    persistence_timeout 0      
    protocol TCP
    real_server 192.168.1.28 8080 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.1.21 8080 { # 指定real server1的ip地址
        weight 1        # 配置节点权值,数值越大权重越高
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

因为我这两台是装在centos6上的,启动keepalived的命令是service keepalived start,如果是centos7,则是systemctl start keepalived.service

我们现在可以安装ipvsadm管理工具,查看一下lvs的路由策略

yum install -y ipvsadm

安装完事之后,用ipvsadm -S -n

接下来我们需要做的就是配置一下realserver。

将这192.168.1.21,192.168.1.28两台web服务器都配置成lvs的real server,编辑realserver脚本文件,进入指定文件夹:cd /etc/init.d/,编辑脚本文件:vi realserver,如下图:

#vi /usr/local/sbin/realserver.sh
#!/bin/bash
# description: Config realserver lo and apply noarp
#Written by :NetSeek http://www.linuxtone.org

SNS_VIP=192.168.1.100
 
. /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

保存脚本文件后更改该文件权限:chmod 755 realserver,开启realserver服务:service realserver start;

注意:配置real server是web服务器都需要配置的,有多少台就配置多少台!

这样lvs+keepalived负载均衡就搭建好了

下面我们开始演示:

首先演示主负载服务器宕机,我们通过关闭keepalived的服务,来演示宕机。

然后我们看一下还能不能访问,192.168.1.100:8080

 

然后我们在192.168.1.22这个从负载服务器上,tail -f /var/log/message,查看日志

发现状态有BACKUP STATE TRANSACTION TO MASTER STATE

然后我们在重启一下主负载的keepalived的服务,这时,从负载会立即又切换回BACKUP STATE

这是MASTER的日志

再看一下从负载的状态

这是主从负载的高可用。

下一步,我们来实验一下,web服务器如果宕机是啥效果

我将192.168.1.28的tomcat给关闭

然后我们访问192.168.1.100:8080

 

依然可以用,实现web服务高可用。

然后我们在启动一下192.168.1.28的tomcat服务

又可以访问192.168.1.28了,实现web服务器的高可用

大功告成,这是最基础的lvs+keepalived实现高可用的负载均衡

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值