负载均衡(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