实验环境:

主机 ipaddress 服务 备注
k8s-master1 10.0.0.63 nginx
k8s-master2 10.0.0.64 nginx
k8s-node1 10.0.0.65 keepalived 主 vrrp 10.0.0.100
k8s-node2 10.0.0.66 keepalived 备 vrrp 10.0.0.100

拓扑图:

VRRP协议理解

VRRP协议是一款网关冗余备份协议,由主备组成,目的是能实现业务冗余能力,在服务器出现故障出现和恢复时做到自动切换主备的一种技术,它利用vrrp发送组播包,进行主备竞选.完成竞选后实现主备切换能力.

后端节点配置[nginx]

k8s-master1配置:
yum install -y nginx
systemctl start nginx
echo "master1 10.0.0.63" >/usr/share/nginx/html/index.html k8s-master2配置:
yum install -y nginx
systemctl start nginx
echo "master2 10.0.0.64" >/usr/share/nginx/html/index.html 检查:
[root@k8s-master1 ~]# curl 10.0.0.63
master1 10.0.0.63
[root@k8s-master1 ~]# curl 10.0.0.64
master2 10.0.0.64

前端nginx负载均衡配置:

 # 10.0.0.65配置:
yum install -y nginx
egrep -v "^$|#" /etc/nginx/nginx.conf.default >/etc/nginx/nginx.conf
systemctl start nginx 修改/etc/nginx/nginx.conf为如下内容:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream leilei_poll {
server 10.0.0.63;
server 10.0.0.64;
}
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
proxy_pass http://leilei_poll;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
} 测试:
[root@k8s-node1 ~]# curl 10.0.0.65
master1 10.0.0.63
[root@k8s-node1 ~]# curl 10.0.0.65
master2 10.0.0.64 ------------------------------------------------------------------------- # 10.0.0.66配置:
直接拷贝10.0.0.65的配置文件
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream leilei_poll {
server 10.0.0.63;
server 10.0.0.64;
}
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
proxy_pass http://leilei_poll;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
} #测试:
[root@k8s-node1 ~]# curl 10.0.0.66
master1 10.0.0.63
[root@k8s-node1 ~]# curl 10.0.0.66
master2 10.0.0.64
网页访问效果一样.它默认是轮询算法.

keepalived原理:

keepalived部署

10.0.0.65
10.0.0.66 两台安装 keepalived 安装keepalived:
yum install -y keepalived

keepalived配置:

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

精简后配置文件如下[未配置]:
! Configuration File for keepalived global_defs {
router_id lb01 #唯一标识,如果有两台或多台,他们的ID不能够冲突.
} vrrp_instance VI_1 {
state MASTER #定义master 状态.
interface eth0 #定义网卡名
virtual_router_id 51 #虚拟ID需要一样.否则无法交互.
priority 100 # 优先级,优先最高,就会成为主 主的服务器中会生成 虚拟IP地址
advert_int 1 # 发送组播包的时间间隔
authentication { #认证信息
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #vip虚拟地址.
10.0.0.100 #需要相同.
}
}

配置文件需要在两台负载上都修改

主:
keppalived配置10.0.0.65: ! Configuration File for keepalived global_defs {
router_id lb01
}
vrrp_instance VI_1 {
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.100
}
} #------------------------------------------------------------------------# 备:
keppalived配置10.0.0.66: ! Configuration File for keepalived global_defs {
router_id lb02
}
vrrp_instance VI_1 {
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.100
}
} 两台lb配置完毕后都需要进行重启:
systemctl start keepalived.service 此时通过访问:
10.0.0.100 就可以完成访问. 注意: 配置了keepalived之后,web服务器就是10.0.0.100了.

keepalived 主备检查:

在10.0.0.65服务器中使用 ip a 进行IP查看,会发现生成了一个虚拟IP为 10.0.0.100
如果这台服务器优先级不够,虚拟IP就不存在. 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:a2:e0:50 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.65/24 brd 10.0.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet 10.0.0.100/32 scope global eth0 <<---------虚拟IP10.0.0.100 生成了.
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fea2:e050/64 scope link
valid_lft forever preferred_lft forever 通过查看10.0.0.66的IP信息,无法发现 10.0.0.100 ,说明此时,10.0.0.65就是主.
另外注意,如果有域名,则需要绑定域名和IP 他们绑定的IP必须是虚拟IP.

故障转移:

在有主备的情况下,测试down掉主看是否会进行主备切换.

 如果其中一台keep挂了 就会切换到另一台
如果其中一台lib挂了 也会切换到另一组

检查keepalived:

10.0.0.66优先级配置的100 10.0.0.65优先级默认150 如果两台keepalived同时开启,从访问日志能看到的应该是 10.0.0.65

如果关闭10.0.0.65keepalived,那么他会自动切换到10.0.0.66的keepalived

如果关闭10.0.0.63nginx,则访问keepalived的出现的结果一定会是10.0.0.64,且不会切换

如果关闭10.0.0.64nginx,则访问keepalived的出现的结果一定会是10.0.0.63,且不会切换

keepalived脑裂

1.高可用服务器对之间心跳线链路发生故障,导致无法正常通信。
因心跳线坏了(包括断了,老化)。
因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)。
因心跳线间连接的设备故障(网卡及交换机)。
因仲裁的机器出问题(采用仲裁的方案)。 2.高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输。
3.高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败。
4.其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等。
5.Keepalived配置里同一 VRRP实例如果virtual_router_id两端参数配置不一致也会导致裂脑问题发生。 开启iptables防火墙后会阻止组播包,一旦开启后 就会产生脑裂

keepalived脑裂解决办法

问题1: 在主服务器上监控还是备服务器上监控?

需要在备用机上进行监控,用于发现备机在主还没down的情况下切换为了主.

问题2: 监控哪些信息?

备机上出现 虚拟 vip情况. 如: 脑裂,正常切换 等信息

在非主中配置脚本,来监控脑裂的发生,并及时通知管理员
通过shell脚本来监控脑裂:
echo '/proc/sys/net/ipv4/ip_nonlocal_bind =1' >>/etc/sysctl.conf
sysctl -p
10.0.0.66备用服务器配置:

1. 配置脚本[放在备用服务器中,在备用服务器出现漂移IP时通知管理员]
chmod a+x check_keepalived.sh
vim keepalived.sh
#!/bin/bash
if [ `ip a s eth0|grep 10.0.0.100|wc -l` -ne 0 ]
then
echo "keepalived is error!!"
else
echo "keepalived is ok" #这里也可以配置email
fi 2. 配置定时任务调用脚本[备用服务器配置]
echo '* * * * * bash check_keepalived.sh' >>/var/spool/cron/root
systemctl restart crond.service
crontab -l 3. 添加解析记录,将域名解析到虚拟ip中,两台主备均需要配置解析记录.
10.0.0.100 leilei.com

keepalived高可用服务配置管理的更多相关文章

  1. 十一.keepalived高可用服务实践部署

    期中集群架构-第十一章-keepalived高可用集群章节======================================================================0 ...

  2. Keepalived高可用服务

    Keepalived高可用服务 避免负载均衡服务出现单点问题 高可用服务原理 Keepalived的工作原理: Keepalived高可用对之间是通过VRRP通信的,因此,我从 VRRP开始了解起: ...

  3. 干货 | Keepalived高可用服务配置实例

    一个执着于技术的公众号 Keepalived系列导读 Keepalived入门学习 keepalived安装及配置文件详解 前言 在前面的章节中,我们学习了Keepalived简介.原理.以及Keep ...

  4. keepalived高可用简介与配置

    keepalived简介 keepalived介绍 Keepalived 软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP ...

  5. Nginx入门篇(七)之Nginx+keepalived高可用集群

    一.keepalived介绍 keepalived软件最开始是转为负载均衡软件LVS而设计,用来管理和监控LVS集群系统中各个服务节点的状态,后来又加入了可实现高可用的VRRP功能.所以Keepali ...

  6. Linux实战教学笔记31:Keepalived高可用集群应用实践

    1.1 Keepalived高可用软件 1.1.1 Keepalived介绍 Keepalived软件起初是专门为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入 ...

  7. Keepalived高可用集群应用

    Keepalived高可用集群应用 1.keepalived服务说明 1.1.keepalived介绍 Keepalived是一个用C语言编写的路由软件.该项目的主要目标是为Linux系统和基于Lin ...

  8. nginx Keepalived高可用集群

    一.Keepalived高可用 1.简介 Keepalived软件起初是专为LvS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能.因此, ...

  9. 企业级Nginx负载均衡与keepalived高可用实战(二)keepalived篇

    1.Keepalived高可用软件 1.1.Keepalived介绍 Keepalived软件起初是专门为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实 ...

随机推荐

  1. Spring 下,关于动态数据源的事务问题的探讨

    开心一刻 毒蛇和蟒蛇在讨论谁的捕猎方式最高效. 毒蛇:我只需要咬对方一口,一段时间内它就会逐渐丧失行动能力,最后死亡. 蟒蛇冷笑:那还得等生效时间,我只需要缠住对方,就能立刻致它于死地. 毒蛇大怒:你 ...

  2. 从前端到后端实现弹幕的过程(jsp/Jquery.barrager.js)

    Jquery.barrager.js插件,可以去网上下载!下载完后,就把下载文件中的js文件.css文件.图片文件.等等等文件全部拷贝到你们自己的项目中去,千万别拷贝漏了,如果你怕拷贝漏了什么,那就把 ...

  3. mysql数据库深入学习

    mysql 数据库 一.数据库介绍 1.关系型数据库的特点 ​ 二维表 典型产品Oracle传统企业,MySQL是互联网企业 数据存取是通过SQL 最大特点,数据安全性方面强(ACID) 2.NoSQ ...

  4. 如果这篇文章说不清epoll的本质,那就过来掐死我吧!

    转载自:https://www.toutiao.com/i6683264188661367309/ 目录 一.从网卡接收数据说起 二.如何知道接收了数据? 三.进程阻塞为什么不占用cpu资源? 四.内 ...

  5. Cucumber(3)——命令以及日志

    目录 回顾 基本执行命令 关于日志的生成 回顾 在上一节中,我介绍了cucumber一些基本的语法内容,如果你还没有进行相关的了解或者环境的配置,你可以点击这里来进行了解一下 在本节中,我会对cucu ...

  6. RabbitMQ 消息队列入门

    文档 入门 主要的内容:one two three four five six seven 前言 中间件 消息队列 异步处理,注册完发短信 应用解耦,订单接口调用扣库存接口,失败了怎么办? 流量削峰, ...

  7. vs 基础

    1     写入 读取: 1)  写入:Console.Write("hello china")                                      光标紧跟 ...

  8. Mybatis Generator通用Join的实现

    通常,我们使用Mybatis实现join表关联的时候,一般都是通过在xml或注解里写自定义sql实现. 本文通过Mybatis Generator的插件功能新增一个JoinPlugin插件,只要在配置 ...

  9. ATmega328P定时器详解

    写这篇文章,纯粹是想为博客拉点点击量.在博客园,游客访问好像是不计入阅读量的,而作为一个十八线博主,注册用户的访问应该以搜索引擎为主,博客园首页为次,个位数的粉丝就别谈了. 所以,希望各位从搜索引擎点 ...

  10. Python 删除含有只读文件(夹)的文件夹

    def rm_read_only(fn, tmp, info): if os.path.isfile(tmp): os.chmod(tmp, stat.S_IWRITE) os.remove(tmp) ...