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集群系统中各个服务节点的状态,后来又加入了可以实 ...
随机推荐
- H - Knight Moves DFS
A friend of you is doing research on the Traveling Knight Problem (TKP) where you are to find the sh ...
- linux通过进程名查看其占用端口
1.先查看进程pid ps -ef | grep 进程名 2.通过pid查看占用端口 netstat -nap | grep 进程pid 参考: https://blog.csdn.net/sinat ...
- 配置CORS代理请求
参考资料: Vue-CLI 3.x 跨域问题处理 使用代理设置:见官方文档 配置代理 新建配置文件 在 package.json 文件的同级目录下创建 vue.config.js 文件,文件的格式应该 ...
- [YII2] 文件上传类
//测试文件上传类 public function actionCreate() { $model = new Lvyou(); $upload_model = new \app\models\Upl ...
- C# 基础知识系列- 13 常见类库介绍(二)日期时间类
0. 前言 上一篇内容介绍了Console类和Math类,这篇内容着重介绍一下C#中时间日期的处理方式. 上一篇勘误: 上一篇中关于静态类没有构造函数,这一表述有误.正确的说法是C#中静态类不包含常规 ...
- 如何使用Markdown 编写文档
Markdown 是一种轻量级标记语言,用来编写文本文档,一般后缀名为.md.该语言在 2004 由约翰·格鲁伯(John Gruber)创建. 由于Markdown 语法简单,易读易写,变得越来越通 ...
- java内存模型(JMM)和happens-before
目录 重排序 Happens-Before 安全发布 初始化安全性 java内存模型(JMM)和happens-before 我们知道java程序是运行在JVM中的,而JVM就是构建在内存上的虚拟机, ...
- 【杂谈】从实现角度看ChannelFuture
JDK中的Future特性 在介绍Netty的ChannelFuture之前,我们先来看看JDK中的Future是如何实现的.总的来说就是任务提交的时候会使用装饰器模式,将任务包装成一个FutureT ...
- Visual Studio Code mac OS 安装 中文简体语言包
先下载中文简体语言包 官网 https://marketplace.visualstudio.com/search?target=VSCode&category=Language%20Pack ...
- 深入研究Clang(十) Clang Static Analyzer简介
Clang Static Analyzer 官网地址:http://clang-analyzer.llvm.org/ Clang Static Analyer是一个源码分析工具,它可以发现C.C++和 ...