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集群系统中各个服务节点的状态,后来又加入了可以实 ...
随机推荐
- Wpf之HandyControls与MaterialDesign混用之DataGrid
首先在App.Xaml引入相关资源 <Application.Resources> <ResourceDictionary> <ResourceDictionary.Me ...
- Codeup 25594 Problem H 例题5-8 Fibonacci数列
题目描述 输入一个正整数n,求Fibonacci数列的第n个数.Fibonacci数列的特点:第1,2个数为1,1.从第3个数开始,概述是前面两个数之和.即: 1,1,2,3,5,8,13,21 - ...
- commonJS、AMD和CMD之间的区别
JS中的模块规范(CommonJS,AMD,CMD),如果你听过js模块化这个东西,那么你就应该听过或CommonJS或AMD甚至是CMD这些规范咯,我也听过,但之前也真的是听听而已. 现在就看看吧, ...
- k3s-初体验
k3s安装步骤 1.准备工作 关闭swap交换分区 swapoff -a 关闭防火墙 systemctl stop firewalld.service 2.下载启动k3s包 https://githu ...
- 给我Python几十行代码,我还你一个微信聊天助手
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 故事胶片 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...
- G - Pairs Forming LCM LightOJ - 1236 (质因子分解)
题解:这道题要从n的角度来考虑i和j. n可以表示为n=a1^p1*a2^p2*a3^p3.......n=lcm(i,j),那么质因子a1^p1,a1可以在i或者j中,并且p1=max(a1i,a1 ...
- 落谷 P1734 最大约数和
题目描述 选取和不超过S的若干个不同的正整数,使得所有数的约数(不含它本身)之和最大. 输入格式 输入一个正整数S. 输出格式 输出最大的约数之和. 输入输出样例 输入 #1复制 11 输出 #1复制 ...
- 解决项目迁移至Kubernetes集群中的代理问题
解决项目迁移至Kubernetes集群中的代理问题 随着Kubernetes技术的日益成熟,越来越多的企业选择用Kubernetes集群来管理项目.新项目还好,可以选择合适的集群规模从零开始构建项目: ...
- 2019-2020-1 20199328《Linux内核原理与分析》第三周作业
加载内核 这里可以看出有些东西隔一段时间就会打印出来 查看mymain.c 开头的一些语句不再描述 每10000次循环打印一次 这里还是针对的mymain.c文件,这里我们可以根据自己的计算机对频率进 ...
- notepad正则删除关键词所在行
转自:http://www.gangzi.net/article/615.htm 查找:^.*大师兄.*$替换为:(空) 如果不留空行:查找:^.*大师兄.*\r?\n替换为:(空)注意:Notepa ...