注:keepalive和Nginx和高可用没有关联。

1.什么是高可用,为什么要设计高可用?

1.两台业务系统启动着相同的服务,如果有一台故障,另一台自动接管,我们将国称之为高可用。
2.系统可用率算法例:
1个9:(1-90%)*365=36.5天 —-> 表示该系统1年时间里最多可能的业务中断时间是36.5天
2个9:(1-99%)*365=3.65天 —-> 表示该系统1年时间里最多可能的业务中断时间是3.65天

2.高可用的目的?

保证系统可实时不间断的使用。

3.高可用使用什么工具来实现?

软件:keepalive

4.keepalive如何实现高可用?

keepalive是通过vrrp(虚拟路由冗余协议)实现高可用。

VRRP协议原理

5.keepalive使用场景

通常业务系统需要保证7X24小时不down机。比如公司内部OA系统,每天公司人员都需要使用,则不允许down机。作为业务系统来说随时随地地都要求可用。

场景及原理说明

6.keepalive安装与配置

1.安装

yum install -y keepalive

2.配置[root@lb01 ~]#

**lb01配置**:
cat /etc/keepalived/keepalived.conf
global_defs {
router_id lb01 #标识信息
} vrrp_instance VI_1 {
state MASTER
priority 150 #优先级
interface eth0 #绑定的网卡
virtual_router_id 50 #同一个虚拟的路由
advert_int 1 #心跳的间隔时间
authentication {
auth_type PASS #两个主机之间的密语
auth_pass 1111 #心跳密码
}
virtual_ipaddress {
10.0.0.3 #虚拟IP地址(可以绑定多个虚拟IP地址)
}
}
**lb02配置**:
#lb02配置如下
global_defs {
router_id lb02
} vrrp_instance VI_1 {
state BACKUP
priority 100
interface eth0
virtual_router_id 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3 #虚拟IP地址
}
}

3.启动

systemctl  start keepalive

4.测试:keepalive高可用地址漂移
(1)keepalive提供一个VIP(虚拟IP)和vmac(虚拟Mac地址)

虚拟IP地址

(2)抓包测试

抓包测试

7.keepalive高可用抢占式和非抢占式

(1)默认配置为抢占式:
master挂掉,backup上台,master重新启动则讲IP抢占过去。
(2)非抢占式配置:
两台均为backup,在优先级上做区分,如master挂掉,backup上台,则backup变成master,master变为backup。
a.两个节点的state均为backup(官方建议)
b.两个节点都在vrrp_instance中添加nopreempt
c.其中一个节点的优先级要高于另外一个节点
两台服务器角色都启用了nopreempt后,必须修改角色状态统一为backup,唯一的区别就是优先级不同。

#Master
vrrp_instance VI_1 {
state BACKUP
priority 150
nopreempt
} #Backup
vrrp_instance VI_1 {
state BACKUP
priority 100
nopreempt
}

8.keepalive高可用与Nginx集成

  • PS: 有Nginx负载均衡,并不一定必须要装Keepalived
  • Nginx负载均衡实现高可用,需要借助Keepalived地址漂移功能
  • 比如:第一次 keepalived绑定在Master上, 通过vip地址访问到这台master上的所有服务
  • 因为所有的服务都是 listen port;

9.keepalive问题

keepalive高可用故障脑裂
由于某些原因,导致两台keepalive高可用服务器在指定时间内,无法检测到对方的心跳消息,各自取得资源及服务的所有权,而此时的两台高可用服务器又都还活着。
a.服务器网线松动等网络故障
b.服务器硬件故障发生损坏现象而奔溃
c.主备服务器都开启了firewalld防火墙
解决方法:

    • 如果Nginx宕机, 会导致用户请求失败, 但Keepalived并不会进行地址漂移
    • 所以需要编写一个脚本检测Nginx的存活状态, 如果不存活则kill nginx和keepalived
# 脚本如下
[root@lb01 ~]# cat /server/scripts/check_www.sh
#!/bin/sh
nginxpid=$(ps -C nginx --no-header|wc -l)
#1.判断Nginx是否存活,如果不存活则尝试启动Nginx
if [ $nginxpid -eq 0 ];then
systemctl start nginx
sleep 3
#2.等待3秒后再次获取一次Nginx状态
nginxpid=$(ps -C nginx --no-header|wc -l)
#3.再次进行判断, 如Nginx还不存活则停止Keepalived,让地址进行漂移,并退出脚本
if [ $nginxpid -eq 0 ];then
systemctl stop keepalived
fi
fi
[root@lb01 ~]# chmod +x /server/scripts/check_www.sh

配置keepalived使用

[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id lb01
} #定义脚本所在的位置,以及执行时间
vrrp_script check_www {
script "/server/scripts/check_www.sh"
interval 5
} vrrp_instance VI_1 {
state BACKUP
priority 150
nopreempt
interface eth0
virtual_router_id 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
} #调用脚本
track_script {
check_www
}
}

10.如何高可用集群双主配置

###编写lb01服务器keepalived配置文件
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb01
} vrrp_instance shuai {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24
}
}
vrrp_instance ashuai {
state BACKUP
interface eth0
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.4/24
}
} ###编写lb02服务器keepalived配置文件
! Configuration File for keepalived
global_defs {
router_id lb02
} vrrp_instance shuai {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24
}
}
vrrp_instance ashuai {
state MASTER
interface eth0
virtual_router_id 52
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.4/24
}
}

11.高可用服务安全访问配置(负载均衡服务)

1.修改nginx负载均衡文件

    upstream oldboy {
server 10.0.0.7:80;
server 10.0.0.8:80;
server 10.0.0.9:80;
}
server {
listen 10.0.0.3:80;
server_name www.oldboy.com;
location / {
proxy_pass http://oldboy;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_next_upstream error timeout http_404 http_502 http_403;
}
}
server {
listen 10.0.0.4:80;
server_name bbs.oldboy.com;
location / {
proxy_pass http://oldboy;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}

2.修改内核文件

异常问题:
01. 如何设置监听网卡上没有的地址
解决: 需要修改内核信息
echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf
sysctl -p

3.重启nginx负载均衡服务

systemctl restart nginx

Keepalive介绍及工作原理的更多相关文章

  1. SharePoint Client Object Model API 介绍以及工作原理解析

    CSOM和ServerAPI 的对比 SharePoint从2010开始引入了Client Object Model的API(后文中用CSOM来代替),从名字来看,我们可以简单的看出,该API是面向客 ...

  2. keepalived介绍及工作原理

    keepalived介绍keepalived观察其名可知,保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,它集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防 ...

  3. Docker OpenvSwitch 介绍 or 工作原理

    Docker OpenvSwitch Network 介绍 什么是OpenVSwich OpenvSwich Network:属于第三方网络项目,可以理解为是一个标准的交换机协议. OpenvSwic ...

  4. Docker Swarm 介绍 or 工作原理

    Docker Swarm 介绍 Swarm 简介 Swarm是Docker公司自研发的容器集群管理系统,Swarm在早期是作为一个独立服务存在,在Docker Engine v1.12中集成了Swar ...

  5. Appium介绍及工作原理

    一.Appium介绍 Appium是一个开源.跨平台的测试框架,可以用来测试原生及混合的移动端应用.Appium支持IOS.Android及FirefoxOS平台.Appium使用WebDriver的 ...

  6. appium介绍和工作原理

    导读 Appium这个听起来既生疏也熟悉的自动化测试工具,比起原生的UiAutomator可能是异常的不起眼,可是却是有自身独当一面的能力,可以完成许多高难度作业,完成UiAutomator不可能完成 ...

  7. JSP第一篇【JSP介绍、工作原理、生命周期、语法、指令、行为】

    什么是JSP JSP全名为Java Server Pages,java服务器页面.JSP是一种基于文本的程序,其特点就是HTML和Java代码共同存在! 为什么需要JSP JSP是为了简化Servle ...

  8. Docker Macvlan 介绍 or 工作原理

    Docker Macvlan Network Macvlan Network:属于Docker的网络驱动. Macvlan Network:Docker主机网卡接口逻辑上分为多个子接口,每个子接口标识 ...

  9. Docker Weave 介绍 or 工作原理

    Docker Weave Network Weave Network:属于第三方网络项目. Weave在Docker主机之间实现Overlay网络,使用业界标准VXLAN封装,基于UDP传输,也可以加 ...

随机推荐

  1. prometheus nginx-module-vts删除内存区数据

    项目地址:https://github.com/vozlt/nginx-module-vts 删除所zone内存中的数据 curl localhost/status/control?cmd=delet ...

  2. Iperf3网络性能测试工具详解教程

    Iperf3网络性能测试工具详解教程 小M 2020年4月17日 运维 本文下载链接 [学习笔记]Iperf3网络性能测试工具.pdf 网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保 ...

  3. DNS和BIND

    https://www.jianshu.com/p/296b2c7ea76f DNS和BIND 毛利卷卷发关注 0.482018.07.25 10:33:44字数 4,919阅读 4,909 DNS ...

  4. 如果你想设置无人自动升级,我们推荐你将这个值修改为security,它会告诉 yum 仅仅升级修复安全问题的软件包。

    定期升级你的 CentOS 系统,是所有系统安全中最重要的措施之一.如果你不使用最新的安全补丁升级你的操作系统软件包,你将会让你的机器很容易被攻击. 如果你管理者多个 CentOS 机器,手动升级系统 ...

  5. Phoenix 使用教程

    引言 hbase 提供很方便的 shell 脚本,可以对数据表进行 CURD 操作,但是毕竟是有一定的学习成本的,基本上对于开发来讲,sql 语句都是看家本领,那么,有没有一种方法可以把 sql 语句 ...

  6. MyBatis 开启 Log4j 日志调试信息开关

    Log4j 是什么 Log4j 是由 Apache 提供的开源日志框架,用于帮助用户处理日志信息. Log4j 能将日志信息分级打印和存储,而且提供了日志不同的存储方式,我们可以将日志发送到控制台,或 ...

  7. addrinfo结构体原型-(转自 cxz2009)

    addrinfo结构体原型 typedef struct addrinfo {    int ai_flags;        //AI_PASSIVE,AI_CANONNAME,AI_NUMERIC ...

  8. CentOS7 删除virbr0虚拟网卡

    在CentOS 7的安装过程中如果有选择相关虚拟化的的服务安装系统后,启动网卡时会发现有一个以网桥连接的私网地址的virbr0网卡,这个是因为在虚拟化中有使用到libvirtd服务生成的,如果不需要可 ...

  9. LNMP环境搭建与配置

    lnmp就是 Linux+nginx + mysql + PHP,把Apache替换为Nginx: 这里我用到的Linux环境为为centos,接下来就分步骤来一步步安装及测试. 一.安装php 参考 ...

  10. 实时实例分割的Deep Snake:CVPR2020论文点评

    实时实例分割的Deep Snake:CVPR2020论文点评 Deep Snake for Real-Time Instance Segmentation 论文链接:https://arxiv.org ...