keepalived高可用服务配置管理
实验环境:
主机 | 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高可用服务配置管理的更多相关文章
- 十一.keepalived高可用服务实践部署
期中集群架构-第十一章-keepalived高可用集群章节======================================================================0 ...
- Keepalived高可用服务
Keepalived高可用服务 避免负载均衡服务出现单点问题 高可用服务原理 Keepalived的工作原理: Keepalived高可用对之间是通过VRRP通信的,因此,我从 VRRP开始了解起: ...
- 干货 | Keepalived高可用服务配置实例
一个执着于技术的公众号 Keepalived系列导读 Keepalived入门学习 keepalived安装及配置文件详解 前言 在前面的章节中,我们学习了Keepalived简介.原理.以及Keep ...
- keepalived高可用简介与配置
keepalived简介 keepalived介绍 Keepalived 软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP ...
- Nginx入门篇(七)之Nginx+keepalived高可用集群
一.keepalived介绍 keepalived软件最开始是转为负载均衡软件LVS而设计,用来管理和监控LVS集群系统中各个服务节点的状态,后来又加入了可实现高可用的VRRP功能.所以Keepali ...
- Linux实战教学笔记31:Keepalived高可用集群应用实践
1.1 Keepalived高可用软件 1.1.1 Keepalived介绍 Keepalived软件起初是专门为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入 ...
- Keepalived高可用集群应用
Keepalived高可用集群应用 1.keepalived服务说明 1.1.keepalived介绍 Keepalived是一个用C语言编写的路由软件.该项目的主要目标是为Linux系统和基于Lin ...
- nginx Keepalived高可用集群
一.Keepalived高可用 1.简介 Keepalived软件起初是专为LvS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能.因此, ...
- 企业级Nginx负载均衡与keepalived高可用实战(二)keepalived篇
1.Keepalived高可用软件 1.1.Keepalived介绍 Keepalived软件起初是专门为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实 ...
随机推荐
- Spring 下,关于动态数据源的事务问题的探讨
开心一刻 毒蛇和蟒蛇在讨论谁的捕猎方式最高效. 毒蛇:我只需要咬对方一口,一段时间内它就会逐渐丧失行动能力,最后死亡. 蟒蛇冷笑:那还得等生效时间,我只需要缠住对方,就能立刻致它于死地. 毒蛇大怒:你 ...
- 从前端到后端实现弹幕的过程(jsp/Jquery.barrager.js)
Jquery.barrager.js插件,可以去网上下载!下载完后,就把下载文件中的js文件.css文件.图片文件.等等等文件全部拷贝到你们自己的项目中去,千万别拷贝漏了,如果你怕拷贝漏了什么,那就把 ...
- mysql数据库深入学习
mysql 数据库 一.数据库介绍 1.关系型数据库的特点 二维表 典型产品Oracle传统企业,MySQL是互联网企业 数据存取是通过SQL 最大特点,数据安全性方面强(ACID) 2.NoSQ ...
- 如果这篇文章说不清epoll的本质,那就过来掐死我吧!
转载自:https://www.toutiao.com/i6683264188661367309/ 目录 一.从网卡接收数据说起 二.如何知道接收了数据? 三.进程阻塞为什么不占用cpu资源? 四.内 ...
- Cucumber(3)——命令以及日志
目录 回顾 基本执行命令 关于日志的生成 回顾 在上一节中,我介绍了cucumber一些基本的语法内容,如果你还没有进行相关的了解或者环境的配置,你可以点击这里来进行了解一下 在本节中,我会对cucu ...
- RabbitMQ 消息队列入门
文档 入门 主要的内容:one two three four five six seven 前言 中间件 消息队列 异步处理,注册完发短信 应用解耦,订单接口调用扣库存接口,失败了怎么办? 流量削峰, ...
- vs 基础
1 写入 读取: 1) 写入:Console.Write("hello china") 光标紧跟 ...
- Mybatis Generator通用Join的实现
通常,我们使用Mybatis实现join表关联的时候,一般都是通过在xml或注解里写自定义sql实现. 本文通过Mybatis Generator的插件功能新增一个JoinPlugin插件,只要在配置 ...
- ATmega328P定时器详解
写这篇文章,纯粹是想为博客拉点点击量.在博客园,游客访问好像是不计入阅读量的,而作为一个十八线博主,注册用户的访问应该以搜索引擎为主,博客园首页为次,个位数的粉丝就别谈了. 所以,希望各位从搜索引擎点 ...
- Python 删除含有只读文件(夹)的文件夹
def rm_read_only(fn, tmp, info): if os.path.isfile(tmp): os.chmod(tmp, stat.S_IWRITE) os.remove(tmp) ...