一、 简介

(1)、LVS简介

LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 用现在的观点来看就是个4层(传输层tcp/udp)的负责均衡器。 它是一个由章文嵩博士发起的自由软件项目,现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。
LVS目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR);十种调度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。

官方地址:http://www.linuxvirtualserver.org
http://www.linuxvirtualserver.org/zh/

(2)、Keepalived简介

Keepalived是一个用C语言编写的路由软件。该项目的主要目标是为Linux系统和基于Linux的基础架构提供简单而强大的负载均衡和高可用性设施。

二、 实验环境

(1) 该测试为LVS(DR模式)+Keepalived+Web(Nginx)HA/LB架构

LVS(DR)+Keepalived 高可用集群搭建_第1张图片

(2) 测试服务器如下:

序号 IP 名称 安装软件
1 192.168.100.51 LVS(主) Centos 7.3 Keepalived ipvsadm
2 192.168.100.52 LVS(备) Centos 7.3 Keepalived ipvsadm
3 192.168.100.53 Web(主) Centos 7.3 Nginx
4 192.168.100.54 Web(备) Centos 7.3 Nginx
5 192.168.100.50 VIP
6 192.168.100.127 测试PC(Windows 10)

备注:测试已关闭防火墙及selinux

三、 实验

(1) 安装ipvsadm、keepalived(以下操作在LVS(主)、LVS(备)上操作):

# yum install –y ipvsadm keepalived
# vi /etc/keepalived/keepalived.conf  #修改配置文件

(2) 配置LVS(以下操作在LVS(主)、LVS(备)上操作):

[root@t1 ~]# vi /etc/sysctl.conf
#打开转发
net.ipv4.ip_forward =0 -> net.ipv4.ip_forward=1
#让配置生效
[root@t1 ~]# sysctl –p    

(3) 配置keepalived以下操作在LVS(主)、LVS(备)上操作):


[root@t1 ~]# vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.100.49       #因未配置smtp,这里没配置
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
  #vrrp_strict               #若ping不同vip,可以注释改项
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER      #LVS(主)为MASTER,LVS(备)为BACKUP
    interface ens33   #物理网卡名称
    virtual_router_id 51   #主备需一致
    priority 150           # 优先级,主大于备
    advert_int 1           #心跳频率
    authentication {       #主备一致
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.100.50/32 dev ens33    #虚拟VIP
    }
}

virtual_server 192.168.100.50 80 {
    delay_loop 6      # 健康检查间隔时间(秒)
    lb_algo rr        # 调度算法(rr,轮询)
    lb_kind DR        # DR模式
    persistence_timeout 50   #连接保持时间(秒)
    protocol TCP

    real_server 192.168.100.53 80 {       #web1服务器ip 端口
        weight 1
    TCP_CHECK {
            connect_port    80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.100.54 80 {
        weight 1
    TCP_CHECK {
            connect_port    80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

#配置完主从后启动keepalived

[root@t1 ~]# systemctl start keepalived.service

#测试,在LVS主上可以看到vip

[root@t1 ~]# ip addr|grep ens33

LVS(DR)+Keepalived 高可用集群搭建

[root@t1 ~]# ipvsadm –L

LVS(DR)+Keepalived 高可用集群搭建

#若停止LVS(主),可以查看到自动漂移至LVS(从)

(4) 配置Web服务器(以下操作在Web(主)、Web(从)上操作):

#安装nginx

[root@t3 ~]# yum install g++ gcc openssl openssl-devel pcre pcre-devel zlib-devel –y
[root@t3 ~]# wget http://nginx.org/download/nginx-1.14.2.tar.gz
[root@t3 ~]# tar zxvf nginx-1.14.2.tar.gz
[root@t3 ~]# cd nginx-1.14.2/
[root@t3 ~]# ./configure
[root@t3 ~]# make
[root@t3 ~]# make install

#为方便测试,web(主)添加web1,web(备)添加web2


[root@t3 ~]# echo "hello,web1" > /usr/local/nginx/html/test.html
[root@t3 ~]# /usr/local/nginx/sbin/nginx

#配置web服务器,禁用Arp对虚拟IP的响应

[root@t3 ~]# vim /etc/sysctl.conf

net.ipv4.conf.ens33.arp_ignore=1
net.ipv4.conf.ens33.arp_announce=2
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2

#配置web服务器,

[root@t3 ~]# ifconfig lo:0 192.168.100.50 netmask 255.255.255.255 broadcast 192.168.100.50 up
[root@t3 ~]# route add -host 192.168.100.50 dev lo:0

(5) 测试

1、在pc上,游览器访问http://192.168.100.50/test.html
显示,“hello,web1”;间隔50秒后(之前设置的连接时间)再次访问显示,“hello,web2”。

2、关闭web1上的nginx,访问显示,“hello,web2”

这里就不贴图了~

参考:
http://www.keepalived.org/index.html
http://www.linuxvirtualserver.org/zh/