目录
一、VRRP技术
1.1 概述
VRRP是一种选择协议,它可以把一个虚拟路由器的责任动态分配到局域网上的 VRRP 路由器中的一台。控制虚拟路由器 IP 地址的 VRRP 路由器称为主路由器,它负责转发数据包到这些虚拟 IP 地址。一旦主路由器不可用,这种选择过程就提供了动态的故障转移机制,这就允许虚拟路由器的 IP 地址可以作为终端主机的默认第一跳路由器。
1.2 工作原理
通过冗余网关间共享虚拟MAC和IP地址,保证数据转发时并不是转发给某一个具体IP而是把数据给虚拟局域网网关的IP,因此,不论哪个路由器成为主路由都不会影响通讯,通过组播协议对数据端口进行监控,一旦检测数据转发端口坏掉,主路由停发HELLO包,备份路由提升为主路由,实现数据的稳定转发。
缺点:虽然有备份冗余功能但是对机器的性能要求非常高,当其中一台出现故障,本来一台运行一个任务,现在所有的业务全部压在了一台上,有十分大的风险
二、keepalive技术
2.1 介绍
基于vrrp协议完成地址流动
为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
为ipvs集群的各RS做健康状态检测
基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务
2.2 Keepalived 架构
vrrp stack | VIP消息通告 |
checkers | 监测real server(简单来说 就是监控后端真实服务器的服务) |
system call | 实现 vrrp 协议状态转换时调用脚本的功能 |
SMTP | 邮件组件(报警邮件) |
IPVS wrapper | 生成IPVS规则(直接生成ipvsadm) |
Netlink Reflector | 网络接口(将虚拟地址ip(vip)地址飘动) |
三、实验配置
3.1 实验配置准备
主keepalived:192.168.162.100
备keepalived:192.168.162.111
web1:192.168.162.101
web2:192.168.162.121
vip:192.168.162.11
客户机访问
##关闭防火墙
[root@localhost ~]#systemctl stop firewalld.service
[root@localhost ~]#setenforce 0
##在主备服务器上安装keepalive
[root@localhost ~]#yum install ipvsadm keepalived -y
##加载模块,并查看是否存在
[root@localhost yum.repos.d]# modprobe ip_vs
[root@localhost yum.repos.d]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@localhost yum.repos.d]#
3.2 主服务器配置
##切换到此目录下
[root@lppdff ~]# cd /etc/keepalived/
##拷贝此配置文件并查看
[root@lppdff keepalived]# cp keepalived.conf{,.bak}
[root@lppdff keepalived]# ls
keepalived.conf keepalived.conf.bak
[root@lppdff keepalived]#
##修改配置文件
[root@lppdff keepalived]# vim keepalived.conf
##修改第十行
10 smtp_server 127.0.0.1
21 interface ens33
30 192.168.162.11 ##虚拟地址,需要提前设定
37 lb_kind DR ##修改模式
##修改虚拟地址记录
41 real_server 192.168.162.100 80 {
42 weight 1
43 TCP_CHECK {
44 connect_port 80
45 connect_timeout 3
46 nb_get_retry 3
47 delay_before_retry 3
48 }
49 }
50 }
##添加提供web服务的地址
34 virtual_server 192.168.162.11 80 {
35 delay_loop 6
36 lb_algo rr
37 lb_kind DR
38 persistence_timeout 0
39 protocol TCP
40
41 real_server 192.168.162.101 80 {
42 weight 1
43 TCP_CHECK {
44 connect_port 80
45 connect_timeout 3
46 nb_get_retry 3
47 delay_before_retry 3
48 }
49 }
50 real_server 192.168.162.121 80 {
51 weight 1
52 TCP_CHECK {
53 connect_port 80
54 connect_timeout 3
55 nb_get_retry 3
56 delay_before_retry 3
57 }
58 }
59 }
##添加配置记录
[root@localhost keepalived]#vim /etc/sysctl.conf
[root@localhost keepalived]#sysctl -p
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
重启服务,并查看是否具有记录
##启动ipvsadm
[root@lppdff keepalived]# ipvsadm-save >/etc/sysconfig/ipvsadm
[root@lppdff keepalived]# systemctl start ipvsadm.service[root@lppdff keepalived]# systemctl restart keepalived.service
[root@lppdff keepalived]# ipvsadm -ln
拷贝文件给备用keepalive服务器
##此过程需要输入密码
[root@lppdff keepalived]# scp keepalived.conf root@192.168.162.111:/etc/keepalived/
[root@lppdff keepalived]# scp /etc/sysctl.conf root@192.168.162.111:/etc/keepalived/
[root@lppdff keepalived]#
备用服务器验证
3.3 备用服务器配置
[root@localhost keepalived]# vim keepalived.conf
##启动ipvsadm
[root@localhost keepalived]# ipvsadm-save >/etc/sysconfig/ipvsadm
[root@localhost keepalived]# systemctl start ipvsadm.service
##添加记录
[root@localhost keepalived]# vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
启动服务,查看结果
[root@localhost keepalived]# systemctl start keepalived.service
[root@localhost keepalived]# ipvsadm -ln
3.4 模拟故障
如果keepalive主宕机备份机是否可以顶上主服务器使用
##在keepalive主服务器关闭服务
[root@lppdff keepalived]# systemctl stop keepalived.service
客户机抓包查看(抢占模式)
重启主服务器
[root@lppdff keepalived]# systemctl start keepalived.service
再次抓包时出现主服务器地址
3.5 配置节点服务器
##俩台节点服务器安装http服务
[root@localhost ~]# yum install httpd -y
##添加虚拟网卡地址
[root@localhost /]# ifconfig lo:0 192.168.162.11 netmask 255.255.255.255
##指明路由
[root@localhost /]# route add -host 192.168.162.11 dev lo:0
##修改配置文件添加记录
[root@localhost /]# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
创建网页文件验证
##创建网页文件
[root@localhost /]# vim /var/www/html/index.html
##重启服务
[root@localhost /]# systemctl start httpd.service