一、Keepalived

1.1 介绍

keepalived观察其名可知,保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,它集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生。说到keepalived就不得不说VRRP协议,可以说这个协议就是keepalived实现的基础,那么首先我们来看看VRRP协议。

1.2 VRRP

虚拟路由器冗余协议,用于master与slave的通信以及状态检查,单台LVS应该可以不理会此项。

1)VRRP是用来实现路由器冗余的协议。
2)VRRP协议是为了消除在静态缺省路由环境下路由器单点故障引起的网络失效而设计的主备模式的协议,使得发生故障而进行设计设备功能切换时可以不影响内外数据通信,不需要再修改内部网络的网络参数。
3)VRRP协议需要具有IP备份,优先路由选择,减少不必要的路由器通信等功能。
4)VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个)。然而,在路由器组内部,如果实际拥有这个对外IP的路由器如果工作正常的话,就是master,或者是通过算法选举产生的,MASTER实现针对虚拟路由器IP的各种网络功能,如ARP请求,ICMP,以及数据的转发等,其他设备不具有该IP,状态是BACKUP。除了接收MASTER的VRRP状态通告信息外,不执行对外的网络功能,当主级失效时,BACKUP将接管原先MASTER的网络功能。
5)VRRP协议配置时,需要配置每个路由器的虚拟路由ID(VRID)和优先权值,使用VRID将路由器进行分组,具有相同VRID值的路由器为同一个组,VRID是一个0-255的整整数;同一个组中的路由器通过使用优先权值来选举MASTER,优先权大者为MASTER。

1.3 运行原理

keepalived检查每个服务器节点状态,服务器节点异常或者工作出现故障,keepalived将故障节点从集群系统中剔除;故障恢复后,keepalived再将其加入到集群系统中。master会发组播,当backup收不到VRRP包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。


keepalived也是模块化设计,不同模块复杂不同的功能,它主要有三个模块,分别是core、check和VRRP,其中:
core模块:为keepalived的核心组件,负责主进程的启动、维护以及全局配置文件的加载和解析;
check:负责健康检查,包括常见的各种检查方式;

VRRP模块:是来实现VRRP协议的。


二、LVS

2.1 介绍

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。在1998年5月由章文嵩博士期间创建,是中国国内最早出现的自由软件项目之一。

2.2 组成

前端:负载均衡层

由一台或多台负载调度器构成

中间:服务器群组层

由一组实际运行应用服务的服务器组成

底端:数据共享存储层

提供共享存储空间的存储区域

2.3 LVS术语

Director Server:调度服务器

--将负载分发到real server的服务器

Real Server:真实服务器

--真正提供应用服务的服务器

VIP:虚拟IP

--公布给用户访问的虚拟IP地址

RIP:真实IP

--集群节点上使用的IP地址

DIP:调度器连接服务器的ip地址

2.4 LVS的工作模式:

(1)VS/NAT:通过网络地址转换实现的虚拟服务器

存在的问题:大并发量访问时,调度器的性能成为瓶颈

(2)VS/DR:直接使用路由技术实现虚拟服务器

客户端过来访问由调度器分发给服务器,服务器返回数据的时候不通过调度器直接给客户端

(3)VS/TUN:通过隧道方式实现虚拟服务器

2.5 负载均衡常用调度算法

轮询:rr              round robin

加权轮询:wrr         weighted round robin

最少连接:lc           least connections

加权最少连接:wlc     weighted least connections


三、项目案例

3.1 环境:

系统版本:rhel7.2

2台调度器做高可用(192.168.4.42 192.168.4.43)

2台web服务器做负载均衡(192.168.4.45 192.168.4.46)

虚拟VIP:192.168.4.250

3.2 配置KVS/DR模式的LB集群

(1) 配置web服务器

yum -y install httpd

echo web44 > /var/www/html/index.html

echo web45 > /var/www/html/index.html

ifconfig lo:1 192.168.4.250/32

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

为了防止重新启动配置失效,可以将配置命令书写在/etc/rc.local文件中。

该文件为链接文件,指向的文件路径为/etc/rc.d/rc.loacl,需要将这两个文件+x权限,开机才能够自加载。


虚拟ip地址也可以写在配置文件中

vim /etc/sysconfig/network-scripts/ifcfg-lo:1

DEVICE=lo:1

ONBOOT=yes

BOOTPROTO=static

IPADDR=192.168.4.250

NETMASK=0.0.0.0


3.3 在分发器上安装提供lvs服务的ipvsadm软件

[root@server42 ~]# yum -y install ipvsadm

[root@server43 ~]# yum -y install ipvsadm

3.4 配置分发器的HA集群

(1) 分发器安装keepalived软件

[root@server42 ~]# yum -y install keepalived

[root@server43 ~]# yum -y install keepalived

(2) 修改keepalived服务的配置文件

[root@server42 ~]# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {                             #全局定义(global definition)
   notification_email {
     [email protected]           #设置报警收件人邮箱
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]     #表示发送通知邮件时邮件源地址是谁
   smtp_server 192.168.200.1               #表示发送email时使用的smtp服务器地址
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state MASTER                #设置为主,从的设置可以为BACKUP
    interface eth0                 #定义网络接口
    virtual_router_id 51        #主从VRID号保持一致
    priority 150                     #服务器优先级,主的高于从的
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111           #主从密码保持一致
    }
    virtual_ipaddress {           #设置VIP
        192.168.4.250
    }
}
virtual_server 192.168.4.250 80 {
    delay_loop 6
    lb_algo rr                                    #设置LVS调度算法为rr
    lb_kind DR                                 #设置LVS的模式为DR
    nat_mask 255.255.255.0
 # persistence_timeout 50             #该项要注释否则无法实现轮询效果,这个参数的意义是保持客户端的请求在这个时间段内全部发到同一个真实服务器
    protocol TCP
    connect_timeout 3                     #链接超时时间
    nb_get_retry 3                           #重连次数
    delay_before_retry 3                 #重连间隔
real_server 192.168.4.44 80 {       #后端提供web的真实ip
        weight 1
            }
    real_server 192.168.4.45 80 {
        weight 1
}
}

3.5 启动keepalived服务

先启动主的keepalived服务,再启动备份的服务。

systemctl start keepalived

3.6 查看是否获取到VIP地址和虚拟服务及realserver

ip add show | grep 192.168.4.250

3.7 客户端测试

elinks -dump http://192.168.4.250


四、ipvsadm命令使用

yum -y install ipvsadm

ipvsadm -L       #查看详细信息

ipvsadm -Ln     #显示端口

ipvsadm -Ln --stats    #查看状态信息,访问web ip的次数 

ipvsadm -A -t 192.168.4.250:80 -s rr

#-A添加虚拟服务器 -t tcp -s指定负载调度算法


ipvsadm -a -t 192.168.4.250:80 -r 192.168.4.44:80 -m

ipvsadm -a -t 192.168.4.250:80 -r 192.168.4.45:80 -m

#添加real server

-a 添加真实服务器

-d 删除真实服务器

-r 指定真实服务器

-m 使用NAT模式 ;-g 使用DR模式 ;-i 使用TUN模式

-w 为节点服务器设置权重,默认为1