一:keepalived
1.1 keepalived的作用
Keepalived的作用是检测服务器的状态, 如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
1.2 vrrp技术
虚拟路由冗余协议,解决静态网关单点风险
物理层:路由器、三层交换机
软件层:keepalived
vrrp 协议的软件实现,原生设计目的为了高可用 ipvs服务
官网:http://keepalived.org/
功能:1.基于vrrp协议完成地址流动
2.为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
3.为ipvs集群的各RS做健康状态检测
4.基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy 等
1.2.1 vrrp相关术语
虚拟路由器:Virtual Router 不是真实存在 ,虚构出来的
虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
VIP:Virtual IP 192.168.91.100 路由1 路由2
VMAC:Virutal MAC (00-00-5e-00-01-VRID)(虚拟mac)
物理路由器:
master:主设备
backup:备用设备
priority:优先级
1.2.2 vrrp相关技术
通告:心跳,优先级等;周期性 ###是宣告自己的主权,不要妄想抢班夺权,不停的向外
工作方式:抢占式 ###主服务器宕机,过了一段时间修好了,再把主权抢过来
非抢占式 ###主服务器宕机,过了一段时间修好了,原来的主就作为备了
延迟抢占 ###主修好后,等待一定的时间(300s)后再次成为主
安全认证: 无认证 简单字符认证:预共享密钥 MD5
###如果没有安全认证,不在集群中的keeplive服务器设置超高的优先级,会造成事故
工作模式:
主/备:单虚拟路由器
主/主:主/备(虚拟路由器1),备/主(虚拟路由器2)
环境:
有两台服务器
虚拟出两台虚拟路由器
第一台虚拟路由器中服务器1为主,服务器2为备,那么虚拟IP1就飘在服务器1上,真正工作的只有服务器1
第二台虚拟路由器中服务器2为主,服务器1为备,那么虚拟IP2就飘在服务器2上,真正工作的只有服务器2
优点:#提高了资源利用率:这样主,备服务器同时干活,可以同时运行两个项目
#同样有备份功能:如果服务器1坏了,服务器2 将同时拥有虚拟IP1和虚拟IP2
缺点:虽然有备份冗余功能但是对机器的性能要求非常高,当其中一台出现故障,本来一台运行一个任务,现在所有的业务全部压在了一台上,有十分大的风险。
1.2.3 vrrp工作过程
选举Master,比较优先级,高的为Master,若优先级相同无Master时,比较接口IP地址,大的为Master,Master设备发送ARP报文,承担报文转发工作;
状态维持,Master设备周期发送通告报文,公布配置信息和工作状态;
Backup设备根据收到的通告报文判断Master设备是否工作正常,如果Master设备主动放弃Master地位时,会发送优先级为0的通告报文,Backup设备收到后会快速切换成Master设备或者定时器超时后Backup设备认为Master设备无法正常工作,会切换状态为Master。
1.3 系统故障
硬件故障:设计缺陷、wear out(损耗)、非人为不可抗拒因素
软件故障:设计缺陷 bug
1.4 实现高可用
提升系统高用性的解决方案:降低MTTR- Mean Time To Repair(平均故障时间)
解决方案:建立冗余机制
active/passive 主/备
active/active 双主
active --> HEARTBEAT --> passive
active <--> HEARTBEAT <--> active
二:keepalived架构
官方文档:
https://keepalived.org/doc/
http://keepalived.org/documentation.html
keepalived体系架构中主要有三个模块,分别是core、check和vrrp。
core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
vrrp模块:是来实现VRRP协议的。
check模块:负责健康检查,常见的方式有端口检查及URL检查
用户空间核心组件:
1. vrrp stack:VIP消息通告 虚拟ip
2. checkers:监测real server(简单来说 就是监控后端真实服务器的服务)是否存活
3. system call:实现 vrrp 协议状态转换时调用脚本的功能
4. SMTP:邮件组件(报警邮件)
5. IPVS wrapper:生成IPVS规则(直接生成ipvsadm)
6. Netlink Reflector:网络接口(将虚拟地址ip(vip)地址飘动)
7. WatchDog:监控进程(整个架构是否有问题)
控制组件:提供keepalived.conf 的解析器,完成Keepalived配置
IO复用器:针对网络目的而优化的自己的线程抽象
内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限
三:实验环节
3.1 keepalived虚拟路由管理
安装keepalived
[root@ka1 ~]# yum install keepalived -y
[root@ka2 ~]# yum install keepalived -y
全局设置
[root@ka1 ~]# vim /etc/keepalived/keepalived.conf
vip设置
查看vip
在ka2中将优先级设置为80
测试 在web1远程登陆ka1并停止keepalived看ka2是否接管
3.2 开启通信以及日志独立功能
3.2.1 通信
在ka1与ka2这两个参数!!!要开都开要关都关!!!
drop策略消失
成功ping通
3.2.2 日志独立
[root@ka1 ~]# vim /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -S 6"
[root@ka1 ~]# systemctl restart keepalived.service
[root@ka1 ~]# vim /etc/rsyslog.conf
[root@ka1 ~]# systemctl restart rsyslog.service
[root@ka1 ~]# cat /var/log/keepalived.log
3.3 独立子配置文件
[root@ka1 ~]# vim /etc/keepalived/keepalived.conf
注销vrrp,抢其写入conf.d文件
[root@ka1 ~]# mkdir -p /etc/keepalived/conf.d
[root@ka1 ~]# systemctl restart keepalived.service
vip依旧存在
3.4 非抢占和延迟抢占
!!!两台主机都要设置为BACKUP!!!
3.4.1 非抢占
在ka1-ka2中加入nopreempt
拥有vip的机子只有down之后bip才会漂移至另外一个主机
3.4.2 延迟抢占
在ka1-ka2中修改nopreempt为preempt_delay 5s(将抢占时间设置为五秒,企业中默认是五到十分钟)
[root@ka1 ~]# systemctl restart keepalived.service
3.5 组播变单播
ka1-ka2 : vim /etc/keepalived/keepalived.conf
ka1
ka2
systemctl restart keepalived.service 分别重启1和2
测试
3.6 双主模式
在ka1中添加第二个虚拟路由
在ka2中添加第二个虚拟路由
systemctl restart keepalived.service 分别重启1和2
查看vip
停止一台主机后查看vip
[root@ka1 ~]# systemctl stop keepalived.service
vip完成漂移
3.7 keeplived+lvs :高可用负载均衡集群
在web1和web2添加lo
[root@realserver1 ~]# ip a a 172.25.254.100/32 dev lo
[root@realserver2 ~]# ip a a 172.25.254.100/32 dev lo
[root@realserver2 ~]# vim /etc/sysctl.d/arp.conf
将文件从web2复制到web1
[root@realserver2 ~]# scp /etc/sysctl.d/arp.conf root@172.25.254.110:/etc/sysctl.d/arp.conf
[root@realserver1 ~]# sysctl --system
在web1-web2下载httpd服务
yum install httpd -y
[root@realserver2 ~]# echo RS1 - 172.25.254.120 > /var/www/html/index.html
[root@realserver1 ~]# echo RS1 - 172.25.254.101 > /var/www/html/index.html
在keepalived中安装ipvsadm
[root@ka1 ~]# yum install ipvsadm -y
在ka1-ka2分别编辑keepalived文件
ka1: ka2
将ipvsadm上原有的策略删除
[root@ka1 ~]# ipvsadm -C
3.8 keepalived+haproxy
注销掉keepalived的server
安装haproxy
[root@ka1 ~]# yum install haproxy -y
[root@ka2 ~]# yum install haproxy -y
打开内核参数
编辑haproxy参数
ka1
ka2
写脚本
检测脚本ka1和ka2相同操作 操作完后重启keepalived
关闭ka1的haproxy
VIP漂移到ka2