keepalived原理以及lvs、nginx跟keeplived的运用

keepalived基础

keepalived的原理是根据**vrrp协议(主备模式)**去设定的

vrrp技术相关原理

状态机;

优先级0~255 心跳线1秒

vrrp工作模式

双主双备模式

VRRP负载分担过程

vrrp安全认证:使用共享密匙

keepalived工具介绍

keepalived是专门为LVS和HA(高可用主备模式)设计的一款健康行检查工具

举例说明:当有两台lvs服务器工作时,出现故障,而lvs本身又无法健康性检查,所以借助keepalived工具

当主服务器出现故障,此时备服务器顶上,当主服务器恢复时,有三种模式

1.抢占模式(当主恢复好时,立马切换到这)

2.不抢占模式(当主恢复好时,依然在备服务器上运行)

3.延迟抢占(当主恢复好时,多少秒从备切换到主上)

keepalived架构

keepalived相关文件

  • 软件包名:keepalived

  • 主程序文件:/usr/sbin/keepalived

  • 主配置文件:/etc/keepalived/keepalived.conf

  • 配置文件示例:/usr/share/doc/keepalived/

  • Unit File:/lib/systemd/system/keepalived.service

  • Unit File的环境配置文件:

  • /etc/sysconfig/keepalived CentOS

主配置文件详解:

复制代码
/etc/keepalived/keepalived.conf 
global_defs {
 notification_email {
 root@localhost
 #keepalived 发生故障切换时邮件发送的目标邮箱,可以按行区分写多个
 root@localhost
  360601212@qq.com 
 }
 notification_email_from keepalived@localhost  
 #发邮件的地址
 smtp_server 127.0.0.1     
 #邮件服务器地址
 smtp_connect_timeout 30   
 #邮件服务器连接timeout
 router_id R1
 #每个keepalived主机唯一标识,建议使用当前主机名,但多节点重名不影响
 vrrp_skip_check_adv_addr  
 #对所有通告报文都检查,会比较消耗性能,启用此配置后,如果收到的通告报文和上一个报文是同一个路由器,则跳过检查,默认值为全检查
vrrp_strict 
#严格遵守VRRP协议,启用此项后以下状况将无法启动服务:1.无VIP地址 2.配置了单播邻居 3.在VRRP版本2中有IPv6地址,开启动此项并且没有配置vrrp_iptables时会自动开启iptables防火墙规则,默认导致VIP无法访问,建议不加此项配置。
 vrrp_garp_interval 0 
 #gratuitous ARP messages 免费ARP报文发送延迟,0表示不延迟
 vrrp_gna_interval 0 
 #unsolicited NA messages (不请自来)消息发送延迟
 vrrp_mcast_group4 224.0.0.18 
 #指定组播IP地址范围:224.0.0.0到239.255.255.255,默认值:224.0.0.18 
 vrrp_iptables        
 #此项和vrrp_strict同时开启时,则不会添加防火墙规则,如果无配置vrrp_strict项,则无需启用此项配置
}

切记:在修改配置文件的时候,记得备份,以防万一出错

配置文件讲解

简要来说,全局配置只需要改三处

1.自己的ip 2.路由id名字 3.严格模式关闭

给lvs调度器设置:

复制代码
state MASTER|BACKUP
#当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUP
interface IFACE_NAME 
#绑定为当前虚拟路由器使用的物理接口,如:eth0,bond0,br0,可以和VIP不在一个网卡
virtual_router_id VRID 
#每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一,否则服务无法启动,同属一个虚拟路由器的多个keepalived节点必须相同,务必要确认在同一网络中此值必须唯一
priority 100 
#当前物理节点在此虚拟路由器的优先级,范围:1-254,值越大优先级越高,每个keepalived主机节点此值不同

advert_int 1
#vrrp通告的时间间隔,默认1s


authentication { 
#认证机制
 auth_type AH|PASS   
 #AH为IPSEC认证(不推荐),PASS为简单密码(建议使用)
 auth_pass <PASSWORD> 
 #预共享密钥,仅前8位有效,同一个虚拟路由器的多个keepalived节点必须一样
}
include    /etc/keealived/conf.d/*.conf
virtual_ipaddress { 
#虚拟IP,生产环境可能指定上百个IP地址
 <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
 192.168.200.100 
 #指定VIP,不指定网卡,默认为,注意:不指定/prefix,默认为/32
 192.168.200.101/24 dev eth1   
 #指定VIP的网卡,建议和interface指令指定的岗卡不在一个网卡
 192.168.200.102/24 dev eth2 label eth2:1 
 #指定VIP的网卡label 
}
track_interface { 
#配置监控网络接口,一旦出现故障,则转为FAULT状态实现地址转移
 eth0
 eth1
 ...
}

如果当项目中,有很多的虚拟ip,则建立子配置文件

虚拟服务器端的具体配置

复制代码
  delay_loop 6
    #健康间隔时间6秒
    lb_algo rr
    #调度算法轮询
    lb_kind DR
    #lvs模式为DR 
    persistence_timeout 0
    #连接保持时间改为0 否则 无法体现效果
    protocol TCP
    #采用协议

真实服务器端配置:

复制代码
   weight 1
        #45行删除
        #节点权重
        TCP_CHECK{
            connect_port 80
            #检查目标端口
            connect_timeout 3
            #连接超时 
            nb_get_retry 3
            #重试次数
            delay_before_retry 3
            #重试间隔时间
        }
    }

解释说明:检查80端口,相当于keepalived 用curl这个命令访问真是服务器的80端口,如果80端口能访问,代表活着,如果80端口检查失败,则下线,不会自动调度过去。

超时时间3秒,如果3秒不回应,则代表此真是服务器挂掉

重试次数3次,去访问80端口,3次以上,如果不回复,则认为此服务器挂掉

实验操作

第一步,四台服务器全部关闭防火墙,关闭防护

主lvs调度服务器:

先下载lvs keepalived

第二步切换到主配置文件,然后备份

第三步 修改主配置文件

随后,ipvsadm -ln 查看一下规则 虚拟ip 跟真实ip都在里面

备LVS服务器配置

第一步 下载ipvsadm keepalived

然后进入到主lvs(centos1)服务器将配置文件直接复制到备服务器里面,省的重新写配置文件了

然后再进入到备服务器,将data里面的keepalived配置文件移动到自己keepalived的配置文件中

然后再keepalived配置文件中修改里面的备模式 路由id名 优先级即可

修改过配置文件,然后重启

然后开启ipvsadm

centos3 真实服务器配置(httpd)

加入虚拟ip 是因为DR模式,lvs服务器跟真实服务器要用相同的虚拟ip地址,真实服务器回给客户端才不会有冲突,并且要将路由转发给关了,当配置相同的虚拟ip时,客户端访问,lvs服务器跟真是服务器会同时响应,但是客户端应到lvs服务器,所以要将真实服务器的路由转发功能给关闭

复制代码
ifconfig lo:0 192.168.68.188 netmask 255.255.255.255

关闭路由转发

然后给网页写入内容

然后关闭长连接

centos4真是服务器配置

然后配置虚拟ip 并且关闭路由转发

复制代码
ifconfig lo:0 192.168.68.188 netmask 255.255.255.255

然后关闭长连接(是为了更好的出现7-3 到7-4的转换)

然后客服端去访问虚拟服务器

现在模拟,当主lvs关闭keepalived服务时,7-3 7-4页面是否会出来

客户端访问时,还是会出现7-3 7-4 是因为lvs直接到备服务器上面了

打开备服务器,虚拟ip跑到备服务器上面了,所以还是会正常运行

我们keepalived默认是抢占模式,可以看一下,再次打开主keepalived服务器,然后看虚拟ip

非抢占模式:

操作如下:

主lvs服务器

复制代码
 nopreempt

然后重启

备服务器配置:

随后,关闭主服务器,查看虚拟机ip,可以看见开启非抢占模式,主服务器关闭之后重启 虚拟ip不会回到主服务器上

而是当主服务器关闭,切换到备服务器上,就一直在备服务器上了 可以查看备服务器

延迟抢占

复制代码
preempt_delay 60 

主服务器配置

备服务器配置

然后模拟主服务器关闭

密码是明文传输的,可以通过抓包看见

组播地址

vrrp默认的单播地址是224.0.0.18

如果要修改组播地址,主备服务器都要修改 加在严格模式下方

复制代码
vrrp_mcast_group4 234.6.6.6(这地址自定义)范围224~239

主备的修改是一样的 都是backup

随后,保存,然后重启

在备服务器上抓包

修改单播地址

复制代码
 unicast_src_ip 192.168.68.3
  unicast_peer{
   192.168.68.4
 }

主服务器配置

备服务器配置

随后在备服务器上抓包 单播修改成功

通知脚本

复制代码
#!/bin/bash
#
contact='940132245@qq.com'
notify() {
 mailsubject="$(hostname) to be $1, vip floating"
 mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
 echo "$mailbody" | mail -s "$mailsubject" $contact
}
case $1 in
master)
 notify master
 ;;
backup)
 notify backup
 ;;
fault)
 notify fault
 ;;
*)
 echo "Usage: $(basename $0) {master|backup|fault}"
 exit 1
 ;;
esac

在主服务器上面配置

写一个脚本 keepalive.sh

随后,给这个脚本文件加上权限

随后,修改主配置文件

复制代码
 notify_master "/opt/keepalive.sh master"
   notify_backup "/opt/keepalive.sh backup"
   notify_fault "/opt/keepalive.sh fault"

随后,保存重启

然后模拟master故障

随后,打开自己的qq邮箱,会发一个邮件过来

日志功能

随后,在日志文件中添加6级别

因为修改了keepalived 跟rsyslog 所以都要重新加载

因为把keepalived日志放在了data下面 可以查看一下

查看一下日志

重点! 脑裂

脑裂的意思就是,当主服务器没有故障时,备服务器认为自己是主,虚拟ip188会出现在主备上面

怎么模拟脑裂?------>在备服务器上模拟屏蔽掉主服务器所有的报文,包括屏蔽vrrp协议

在备lvs服务器上面屏蔽掉主服务器的所有流量,包括vrrp报文

然后在主备上面ip a 都能看见虚拟机

使用其他应用的高可用性 vrrp script

当有两台nginx代理服务器,nginx是无法处理自身单点故障的,可以通过keepalived来实现,如果一台nginx代理服务器出故障,直接跳到另外一台nginx代理服务器上

keepalived利用脚本去解决nginx的高并发

定义vrrp script

实验操作

主 备nginx服务器 都要下载nginx 跟keepalived

主备服务器相同操作:

然后开启nginx

主服务器配置修改:

然后重启

随后,写一个脚本,能够让keepalived运行nginx的脚本,并且给这个脚本执行的权限

脚本里面的内容

随后,修改keepalived配置文件里面的内容

将virtual以下的内容删除,因为不需要

第二步,在全部配置下面写入脚本,切记!!一定是在全局配置里面写入脚本

随后,在virtual里面去执行脚本

保存,之后重新加载

将主服务器上面的配置文件复制到备服务器上nginx配置文件中

将主服务器上面的keepalived配置文件复制到备服务器上

备服务器上配置

随后nginx配置文件拷过来之后,重启一下

然后进入主页访问虚拟地址192.168.68.188 会出现7-3 7-4

现在模拟主nginx服务器停止出现故障

然后进入主页访问虚拟ip,还是会出现7-3 7-4 因为主nginx坏掉,是直接跳到备nginx上了

相关推荐
七夜zippoe1 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
盟接之桥1 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
Fcy6483 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满3 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
主机哥哥3 小时前
阿里云OpenClaw部署全攻略,五种方案助你快速部署!
服务器·阿里云·负载均衡
Harvey9033 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技4 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀4 小时前
Linux环境变量
linux·运维·服务器
zzzsde5 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
qq_297574675 小时前
Linux 服务器 Java 开发环境搭建保姆级教程
java·linux·服务器