负载均衡(LB):load balancer 化整为零
高可用(HA):High Avilibility 互相备份,互相替换 防止单点故障
好处:防止单点故障,保障系统的正常运行
坏处:多搞了服务器,加大投入。

HA 软件:
keepalived :开源免费,深度融合了LVS,可以实现高可用和负载均衡

heartbeat
HAproxy :可以实现高可用和负载均衡
LB 软件:

keepalived

keepalived 是一个用C语言编写的路由软件,主要目标是为Linux系统和基于Linux的基础设施提供负载平衡和高可用性设施。
负载均衡:是用LVS的(IPVS)内核模块提供Layer 4负载均衡。
高可用性:是通过VRRP协议。
VRRP是路由器故障转移的基本块。此外,Keepalied还实现了一组连接到VRRP有限状态机的钩子,提供了低速和高速的协议交互。为了提供最快的网络故障检测。

keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。
heartbeat是集群管理中保证集群高可用的一个服务软件

keepalived 是基于VRRP协议实现的

VRRP协议:虚拟路由冗余协议,可以认为是实现路由器高可用的一个协议

就是将多个相同功能的路由组成一个路由器组,
然后这个组里面有有个master和多个backup,这个路由器组它对外提供服务的是一个vip,虚拟ip,这个虚拟ip是放在master上面的,

这个master会定时的发送组播给所有的backup,当backup收不到master发送的vrrp包的时候就认为master已经挂掉了,
然后就会根据vrrp的优先级再选出一个backup来当master,从而保证了路由器的一个高可用

keepalived 主要有三个模块:core,check,vrrp

core:核心模块:负责进程的启动及维护,配置文件的加载和解析
check:负责进行健康检查,常见的检查方式:
vrrp模块是用来实现vrrp协议的

keepalived 的配置文件:keepalived.conf

配置域:
global_defs:
内容:邮件的配置,机器的标识
作用:是当发生故障的时候的通知对象以及机器的一些标识
static_ipaddress和static_ipaddress : 配置本节点的ip信息和路由信息
如果自己的机器上已经配置了ip和路由的话,这两个地方就不用再去配置了

vrrp_script
用来在健康检查的,当检查失败的时候,vrrp_script里面有一个权重值,vrrp_instance 里的priority就会减少相应的权重值
vrrp_instance
用来定义对外提供服务的vip及相关属性的
vrrp——rsync_group 它是用来定义vrrp_instance组的,可以使这个组内的成员动作一致
就是比如说有两个vrrp_instance在这个组里面,当其中一个vrrp_instance发生故障切换时,
另一个也会跟着切换,即使他没有发生故障

相关参数:
smtp_alert 表示是否开启邮件通知(用全局区域的邮件设置来发通知)
state 可以是MASTER或BACKUP,不过当其他节点keepalived启动时会将priority比较大的节点选举为MASTER,因此该项其实没有实质用途。
interface 节点固有IP(非VIP)的网卡,用来发VRRP包。
virtual_router_id 取值在0-255之间,用来区分多个instance的VRRP组播。
同一网段中virtual_router_id的值不能重复,否则会出错
可以用这条命令来查看该网络中所存在的vrid:tcpdump -nn -i any net 224.0.0.0/8
priority 用来选举master的,要成为master,那么这个选项的值最好高于其他机器50个点,该项取值范围是1-255(在此范围之外会被识别成默认值100)。
advert_int 发VRRP包的时间间隔,即多久进行一次master选举(可以认为是健康查检时间间隔)。
virtual_ipaddress vip,不解释了。
virtual_routes 虚拟路由,当IP漂过来之后需要添加的路由信息。

nopreempt 允许一个priority比较低的节点作为master,即使有priority更高的节点启动。

virtual_server_group一般在超大型的LVS中用到,一般LVS用不上这东西

keepalived主从切换
将backup的配置项里的priority选项的值调整的比master高50个点,然后再刷新一下配置文件就可以了
也可以将master的keepalive停止,让keepalived的backup们重新选举

keepalived 仅做HA时的配置
1,keepalived主机,配置文件
2,keepalived的备用机器 配置文件
3,vip,对内提供服务的内网ip地址
4,对外提供服务的公网ip地址

LVS+Keepalived配置
keepalived与LVS结合使用的时候。会用到一个工具ipvsadm
用来查看相关VS的状态

编译安装keepalived

去官网下载压缩包
解压
cd keepalived-xxx
./configure --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --mandir=/usr/share
make && make install

实验

master机器上和backup上做同等操作

1,安装keepalive

[root@master  ~]# yum intall keepalived -y 
已加载插件:fastestmirror, product-id, search-disabled-repos, subscription-manager

This system is not registered with an entitlement server. You can use subscription-manager to register.

没有该命令:intall。请使用 /usr/bin/yum --help
[root@master  ~]# /usr/bin/yum install keepalived -y
已加载插件:fastestmirror, product-id, search-disabled-repos, subscription-manager

This system is not registered with an entitlement server. You can use subscription-manager to register.

Determining fastest mirrors
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.njupt.edu.cn
base                                                                                                                   | 3.6 kB  00:00:00     
extras                                                                                                                 | 2.9 kB  00:00:00     
updates                                                                                                                | 2.9 kB  00:00:00     
正在解决依赖关系
--> 正在检查事务
查看keepalived 的版本
[root@master  ~]# keepalived -v
Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2

Copyright(C) 2001-2017 Alexandre Cassen, <acassen@gmail.com>

Build options:  PIPE2 LIBNL3 RTA_ENCAP RTA_EXPIRES RTA_PREF FRA_OIFNAME FRA_SUPPRESS_PREFIXLEN FRA_TUN_ID RTAX_CC_ALGO RTAX_QUICKACK LIBIPTC LIBIPSET_DYNAMIC LVS LIBIPVS_NETLINK VRRP VRRP_AUTH VRRP_VMAC SOCK_NONBLOCK SOCK_CLOEXEC FIB_ROUTING INET6_ADDR_GEN_MODE SNMP_V3_FOR_V2 SNMP SNMP_KEEPALIVED SNMP_CHECKER SNMP_RFC SNMP_RFCV2 SNMP_RFCV3 SO_MARK

先备份(修改配置文件前先备份)

[root@swarm-manager keepalived]# cp keepalived.conf /root

修改配置文件

[root@master ~]# cd /etc/keepalived/
[root@master  keepalived]# ls
keepalived.conf
[root@lb-nginx keepalived]# vim keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 151
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16
    }
}

启动keepalived

[root@swarm-manager keepalived]# service keepalived start 
Redirecting to /bin/systemctl start keepalived.service
#查看Keepalived 进程是否启动
[root@lb-nginx keepalived]# ps aux |grep keepalived
root      14407  0.0  0.0 122888  1412 ?        Ss   11:37   0:00 /usr/sbin/keepalived -D
root      14408  0.0  0.0 133848  3344 ?        S    11:37   0:00 /usr/sbin/keepalived -D
root      14409  0.0  0.0 133720  2656 ?        S    11:37   0:00 /usr/sbin/keepalived -D
root      14412  0.0  0.0 112728   976 pts/0    S+   11:38   0:00 grep --color=auto keepalived

[root@master keepalived]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:77:73:fe brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.33/24 brd 192.168.0.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.200.16/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.200.17/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.200.18/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe77:73fe/64 scope link 
       valid_lft forever preferred_lft forever

keepalived --脑裂现象

什么是脑裂现象?
master和backup上都有vip

为什么会出现脑裂现象?
1, 两边的vrrp通告报文不能正常发送,可能是网络不通畅,或两边都有防火墙
使master发送的证明自己还活着的数据包不能成功发送给backup,两边联系不上了,backup也会生成vip,
2, master和backup的router id不同
3,优先级一样也会出现脑裂

脑裂的影响是什么?
不影响用户使用 ,如果是局域网的用户使用,反而还可以起到一个负载均衡的作用,但缺点是有随机性,不可控,决定权不在管理员的手中了,而是在arp缓存表里存的是哪个复杂载均衡器的mac地址(arp缓存表里一个ip只能对应一个mac),给管理员的管理带来了不便。

keepalived (高可用)和LVS (负载均衡)

LVS :DNAT
NGINX:FULLNAT
master和backup上必须要开启路由功能
并且real server要填写网关
双vip的使用场景:DNAT
nginx不需要使用双vip