keepalived+nginx 高可用部署

1.在服务器里面安装 keepalived

yum -y install keepalived
  1. 配置keepalived的配置文件
cd /etc/keepalived
vim keepalived.conf

在这里插入图片描述
3.
(1).修改主备,修改网卡名,修改优先级
在这里插入图片描述
(2).修改虚拟IP
在这里插入图片描述
(3). 13,14行需要删除 (主备都需要删)
vrrp_skip_check_adv_addr 默认是不跳过检查。检查收到的 VRRP 通告中的所有地址可能会比较耗时,设置此命令的意思是,如果通告与接收的上一个通告来自相同的 master 路由器,则不执行检查(跳过检查)。
vrrp_strict
严格遵守 VRRP 协议。下列情况将会阻止启动 Keepalived:

  1. 没有 VIP 地址。
  2. 单播邻居。
  3. 在 VRRP 版本 2 中有 IPv6 地址。

在这里插入图片描述

4.在启动keepalived之前查看两服务器IP

在这里插入图片描述
启动keepalived之后查看两服务器IP变化
systemctl start keepalived
分别出现虚拟IP
在这里插入图片描述
5.创建脚本,把keepalived和 nginx 关联起来
在这里插入图片描述
6.需要在keepalived的配置文件中写一个策略 (感觉用处不大)
(1)配置一个策略

在这里插入图片描述
(2)在写一个跟踪策略
在这里插入图片描述
keepalived的配置详解
一. keepalived 原理及配置介绍
   什么是 Keepalived 呢,keepalived 观其名可知,保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生,Keepalived 通过请求一个 vip 来达到请求真实 IP 地址的功能,而 VIP 能够在一台机器发生故障时候,自动漂移到另外一台机器上,从而达到了高可用 HA 功能。那说到 keepalived 时不得不说的一个协议就是 VRRP 协议,可以说这个协议就是 keepalived 实现的基础,那么首先我们来看看 VRRP 协议。
VRRP 协议
   网络在设计的时候必须考虑到冗余容灾,包括线路冗余,设备冗余等,防止网络存在单点故障,那在路由器或三层交换机处实现冗余就显得尤为重要,在网络里面有个协议就是来做这事的,这个协议就是 VRRP 协议,Keepalived 就是巧用 VRRP 协议来实现高可用性 (HA) 的 VRRP 协议。
Keepalived 原理
   keepalived 也是模块化设计,不同模块复杂不同的功能,下面是 keepalived 的组件 core check vrrp libipfwc libipvs-2.4 libipvs-2.6
core:是 keepalived 的核心,复杂主进程的启动和维护,全局配置文件的加载解析等
check:负责 healthchecker (健康检查),包括了各种健康检查方式,以及对应的配置的解析包括LVS的配置解析
vrrp:VRRPD 子进程,VRRPD 子进程就是来实现 VRRP 协议的
libipfwc:iptables(ipchains) 库,配置 LVS 会用到
libipvs*:配置 LVS 会用到
注意,keepalived 和 LVS 完全是两码事,只不过他们各负其责相互配合而已。

在这里插入图片描述
keepalived 启动后会有三个进程
父进程:内存管理,子进程管理等等
子进程:VRRP 子进程
子进程:healthchecker 子进程
有图可知,两个子进程都被系统 WatchDog 看管,两个子进程各自管理自己的事,healthchecker 子进程复杂检查各自服务器的健康程度,例如 HTTP,LVS 等等,如果healthchecker 子进程检查到 MASTER 上服务不可用了,就会通知本机上的兄弟 VRRP 子进程,让他删除通告,并且去掉虚拟 IP,转换为 BACKUP 状态。
Keepalived 配置文件详解
   keepalived 有三类配置区域,注意不是三种配置文件,是一个配置文件里面三种不同类别的配置区域,全局配置 (Global Configuration)、VRRPD 配置、LVS 配置。
1.global_defs 全局配置
在这里插入图片描述
说明:
notification_email:指定当 keepalived 出现问题时,发送邮件给哪些用户。
notification_emai_from:发送邮件时,邮件的来源地址。
smtp_server <domain|ip> [PORT]:smtp 服务器的地址或域名。默认端口为 25, 如:smtp_server smtp.felix.com 25</domain|ip>
smtp_helo_name :指定在 HELO 消息中所使用的名称。默认为本地主机名。
smtp_connect_timeout:指定 smtp 服务器连接的超时时间。单位是秒。
router_id:指定标识该机器的 route_id. 如:route_id LVS_01
vrrp_mcast_group4 224.0.0.18:指定发送 VRRP 组播消息使用的 IPV4 组播地址。默认是224.0.0.18
vrrp_mcast_group6 ff02::12 指定发送 VRRP 组播消息所使用的 IPV6 组播地址。默认是ff02::12
default_interface eth0:设置静态地址默认绑定的端口。默认是 eth0。
lvs_sync_daemon [id ] [maxlen ] [port ] [ttl ] [group ] 设置 LVS 同步服务的相关内容。可以同步 LVS 的状态信息。
INTERFACE:指定同步服务绑定的接口。
VRRP_INSTANCE:指定同步服务绑定的 VRRP 实例。
id :指定同步服务所使用的 SYNCID,只有相同的 SYNCID 才会同步。范围是0-255.
maxlen:指定数据包的最大长度。范围是 1-65507
port:指定同步所使用的 UDP 端口。
group:指定组播 IP 地址。
lvs_flush:在 keepalived 启动时,刷新所有已经存在的 LVS 配置。
vrrp_garp_master_delay 10:当转换为 MASTER 状态时,延迟多少秒发送第二组的免费 ARP。默认为 5s,0 表示不发送第二组免的免费 ARP。
vrrp_garp_master_repeat 1:当转换为 MASTER 状态时,在一组中一次发送的免费 ARP 数量。默认是 5.
vrrp_garp_lower_prio_delay 10:当 MASTER 收到更低优先级的通告时,延迟多少秒发送第二组的免费 ARP。
vrrp_garp_lower_prio_repeat 1:当 MASTER 收到更低优先级的通告时,在一组中一次发送的免费 ARP 数量。
vrrp_garp_master_refresh 60:当 keepalived 成为 MASTER 以后,刷新免费 ARP 的最小时间间隔(会再次发送免费 ARP)。默认是 0,表示不会刷新。
vrrp_garp_master_refresh_repeat 2: 当 keepalived 成为 MASTER 以后,每次刷新会发送多少个免费 ARP。默认是 1.
vrrp_garp_interval 0.001:在一个接口发送的两个免费 ARP 之间的延迟。可以精确到毫秒级。默认是 0.
vrrp_lower_prio_no_advert true|false:默认是 false。如果收到低优先级的通告,不发送任何通告。
vrrp_version 2|3:设置默认的 VRRP 版本。默认是 2.
vrrp_check_unicast_src:在单播模式中,开启对 VRRP 数据包的源地址做检查,源地址必须是单播邻居之一。
vrrp_skip_check_adv_addr:默认是不跳过检查。检查收到的 VRRP 通告中的所有地址可能会比较耗时,设置此命令的意思是,如果通告与接收的上一个通告来自相同的 master 路由器,则不执行检查(跳过检查)。
vrrp_strict:严格遵守 VRRP 协议。下列情况将会阻止启动 Keepalived:1. 没有 VIP 地址。2. 单播邻居。3. 在 VRRP 版本 2 中有 IPv6 地址。
vrrp_iptables:不添加任何 iptables 规则。默认是添加 iptables 规则的。
如果 vrrp 进程或 check 进程超时,可以用下面的 4 个选项。可以使处于 BACKUP 状态的 VRRP 实例变成 MASTER 状态,即使 MASTER 实例依然在运行。因为 MASTER 或 BACKUP 系统比较慢,不能及时处理 VRRP 数据包。
vrrp_priority <-20 – 19>:设置 VRRP 进程的优先级。
checker_priority <-20 – 19>:设置 checker 进程的优先级。
vrrp_no_swap:vrrp 进程不能够被交换。
checker_no_swap:checker 进程不能够被交换。
script_user [groupname]:设置运行脚本默认用户和组。如果没有指定,则默认用户为 keepalived_script (需要该用户存在),否则为 root 用户。默认 groupname 同 username。
enable_script_security:如果脚本路径的任一部分对于非 root 用户来说,都具有可写权限,则不会以 root 身份运行脚本。
nopreempt 默认是抢占模式 要是用非抢占式的就加上 nopreempt
2.VRRPD 配置
vrrp_script
作用:添加一个周期性执行的脚本。脚本的退出状态码会被调用它的所有的 VRRP Instance 记录。
注意:至少有一个 VRRP 实例调用它并且优先级不能为 0.优先级范围是 1-254.
在这里插入图片描述
选项说明:
scrip “/path/to/somewhere”:指定要执行的脚本的路径。
interval :指定脚本执行的间隔。单位是秒。默认为1s。
timeout :指定在多少秒后,脚本被认为执行失败。
weight <-254 — 254>:调整优先级。默认为2.
如果脚本执行成功(退出状态码为 0),weight 大于 0,则 priority 增加。
如果脚本执行失败(退出状态码为非 0),weight 小于0,则 priority 减少。
其他情况下,priority 不变。
rise :执行成功多少次才认为是成功。
fail :执行失败多少次才认为失败。
user [GROUPNAME]:运行脚本的用户和组。
init_fail:假设脚本初始状态是失败状态。
vrrp_sync_group
作用:将所有相关的 VRRP 实例定义在一起,作为一个 VRRP Group,如果组内的任意一个实例出现问题,都可以实现 Failov
在这里插入图片描述
说明:
  如果 username 和 groupname 没有指定,则以默认的 script_user 所指定的用户和组。
1.notify_master /path/to_master.sh [username [groupname]]
作用:当成为 MASTER 时,以指定的用户和组执行脚本。
2.notify_backup /path/to_backup.sh [username [groupname]]
作用:当成为 BACKUP 时,以指定的用户和组执行脚本。
3.notify_fault “/path/fault.sh VG_1” [username [groupname]]
作用:当该同步组 Fault 时,以指定的用户和组执行脚本。
4.notify /path/notify.sh [username [groupname]]
作用:在任何状态都会以指定的用户和组执行脚本。
说明:该脚本会在 notify_* 脚本后执行。
notify 可以使用 3 个参数,如下:
a. 可以是 GROUP 或 INTANCE,表明后面是组还是实例.
b. 组名或实例名。
c. 转换后的目标状态。有:MASTER、BACKUP、FAULT。
5.smtp_alert:当状态发生改变时,发送邮件。
6.global_tracking:所有的 VRRP 实例共享相同的 tracking 配置。
在这里插入图片描述
命令说明:
state MASTER|BACKUP:指定该 keepalived 节点的初始状态。
interface eth0:vrrp 实例绑定的接口,用于发送 VRRP 包。
use_vmac [VMAC_INTERFACE]:在指定的接口产生一个子接口,如 vrrp.51,该接口的 MAC 地址为组播地址,通过该接口向外发送和接收 VRRP 包。
vmac_xmit_base:通过基本接口向外发送和接收 VRRP 数据包,而不是通过 VMAC 接口。
native_ipv6:强制 VRRP 实例使用 IPV6.(当同时配置了 IPV4 和 IPV6 的时候)
dont_track_primary:忽略 VRRP 接口的错误,默认是没有配置的。
在这里插入图片描述
添加一个 track 脚本( vrrp_script 配置的脚本。)
mcast_src_ip :指定发送组播数据包的源 IP 地址。默认是绑定 VRRP 实例的接口的主 IP 地址。
unicast_src_ip :指定发送单薄数据包的源 IP 地址。默认是绑定 VRRP 实例的接口的主 IP 地址。
version 2|3:指定该实例所使用的 VRRP 版本。
在这里插入图片描述
采用单播的方式发送 VRRP 通告,指定单播邻居的 IP 地址。
virtual_router_id 51:指定 VRRP 实例 ID,范围是 0-255.
priority 100:指定优先级,优先级高的将成为 MASTER。
advert_int 1:指定发送 VRRP 通告的间隔。单位是秒。
在这里插入图片描述

指定VIP地址。

nopreempt:设置为不抢占。默认是抢占的,当高优先级的机器恢复后,会抢占低优先级的机器成为 MASTER,而不抢占,则允许低优先级的机器继续成为 MASTER,即使高优先级的机器已经上线。如果要使用这个功能,则初始化状态必须为 BACKUP。
preempt_delay:设置抢占延迟。单位是秒,范围是 0—1000,默认是 0. 发现低优先级的 MASTER 后多少秒开始抢占。
通知脚本:
notify_master | [username [groupname]]
notify_backup | [username [groupname]]
notify_fault | [username [groupname]]
notify | [username [groupname]]

当停止 VRRP 时执行的脚本。
notify_stop | [username [groupname]]
smtp_alert

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值