Keepalived高可用服务
Keepalived高可用服务
避免负载均衡服务出现单点问题
高可用服务原理
Keepalived的工作原理:
Keepalived高可用对之间是通过VRRP通信的,因此,我从 VRRP开始了解起:
1) VRRP,全称 Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议,VRRP的出现是为了解决静态路由的单点故障。
2) VRRP是通过一种竟选协议机制来将路由任务交给某台 VRRP路由器的。
3) VRRP用 IP多播的方式(默认多播地址(224.0.0.18))实现高可用对之间通信。
4)工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的开源。备节点可以有多个,通过优先级竞选,但一般Keepalived系统运维工作中都是一对。
5) VRRP使用了加密协议加密数据,但Keepalived官方目前还是推荐用明文的方式配置认证类型和密码。
介绍完 VRRP,接下来我再介绍一下 Keepalived服务的工作原理:
Keepalived高可用之间是通过 VRRP进行通信的, VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。
在 Keepalived服务对之间,只有作为主的服务器会一直发送 VRRP广播包,告诉备它还活着,此时备不会枪占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快可以小于1秒。
部署高可用服务
利用keepalived软件实现
作用:
1.为LVS服务而诞生出来的
2.实现高可用服务功能
第一个历程:准备高可用服务架构
lb01 | lb02 |
---|---|
10.0.1.5 | 10.0.1.6 |
第二个历程:安装keepalived软件
#lb01
[root@lb01 ~]# yum -y install keepalived
#lb02
[root@lb02 ~]# yum -y install keepalived
keepalived配置文件说明
/etc/keepalived/keepalived.conf
GLOBAL CONFIGURATION --- 全局配置部分
VRRPD CONFIGURATION --- VRRP协议配置部分
LVS CONFIGURATION --- LVS服务管理配置部分
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs { --- 全局配置部分
notification_email { --- 设置发送邮件信息的收件人
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc --- 设置连接的邮箱服务器信息
smtp_server 192.168.200.1 --- 设置邮箱服务器
smtp_connect_timeout 30 --- 定义超时时间
router_id LVS_DEVEL --- 高可用集群主机身份标识(集群中主机身份标识名称不能重复)
}
vrrp_instance VI_1 { --- 定义实例名称
state MASTER --- 标识所在家族中的身份(MASTER/BACKUP)
interface eth0 --- 指定虚拟IP地址出现在什么网卡上
virtual_router_id 51 --- 标识家族身份信息(多台高可用服务器配置要一直)
priority 100 --- 设定优先级(优先级越高,就越有可能成为主)
advert_int 1 --- 定义组播包发送的间隔时间(秒)(主和备配置须一致)
authentication { --- 实现通讯需要有认证功能
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { --- 配置虚拟IP地址信息
192.168.200.16
192.168.200.17
192.168.200.18
}
}
[root@lb01 ~]#
第三个历程:编写keepalived配置文件
lb01
[root@lb01 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb01
}
vrrp_instance test {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.1.3/24
}
}
lb02
[root@lb02 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb02
}
vrrp_instance test {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.1.3/24
}
}
第四个历程:启动keepalived服务
#lb01
[root@lb01 ~]# systemctl start keepalived
#lb02
[root@lb02 ~]# systemctl start keepalived
第四个历程:进行访问测试
高可用服务应用
高可用服务常见异常问题 --- 脑裂问题
什么是裂脑
由于某些原因,导致两台高可用服务器对在指定时间内,无法检测到对方的心跳消息,各自取得资源及服务的所有权,而此时的两台高可用服务器都还活着并在正常运行,这样就会导致同一个IP或服务在两端同时存在而发生冲突,最严重的是两台服务器占用同一个VIP地址,当用户写入数据时可能会分别写入到两端,这可能会导致服务器两端的数据不一致或造成数据丢失,这种情况就被成为裂脑.
导致裂脑发生的原因
一般来说,裂脑的发生,有以下几种原因
- 高可用服务器对之间心跳线链路发生故障,导致无法正常通信
- 心跳线坏了(包括断了,老化)
- 网卡及相关驱动坏了,IP配置及冲突问题(网卡直连)
- 心跳线之间连接的设备故障(网卡及交换机)
- 高可用服务器上开启了iptables防火墙阻挠了心跳信息传输
- 高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败
- 其他服务配置不当等原因,如心跳方式不同,心跳广播冲突,软件bug等.
解决裂脑的常见方法
在实际成产环境中,我们可以从以下几个方面来防止裂脑问题发生:
同时使用串行电缆和以太网电缆连接,同时用两条心跳线,这样一条线路坏了,另一个还是好的,依然能传送心跳信息.
当检测到裂脑时强行关闭一个心跳节点(这个功能需要特殊设备支持,如stonith,fence)相当于备节点接收不到心跳信息,通过单独的线路发送命令关闭主节点的电源.
做好对裂脑的监控报警(如邮件及手机短信等或值班),在问题发生时人为第一时间介入仲裁,降低损失.
解决keepalived裂脑的常见方案
作为互联网应用服务器的高可用,特别是前端web负载均衡器的高可用,裂脑的问题对普遍业务的影响是可容忍的,如果是数据库或者存储的业务,一般出现裂脑问题就非常严重了.因此,通过增加冗余心跳线来避免裂脑问题发生,同时加强了对系统的监控.
如果开启防火墙,一定要让心跳消息通过.一般通过允许IP段的形式解决
可以拉一条以太网网线或者串口线作为主备节点心跳线路的冗余
开发检测程序通过监控软件检测裂脑,如zabbix检测如果主备都有VIP就报警.
比较严谨的判断,备节点出现对应VIP,并且主节点及对应服务(如果能远程连接主节点看是否有VIP就更好了)还活着,就说明发生裂脑了.
开发检测keepalived裂脑的脚本"
[root@lb01 conf.d]# vim /server/scripts/check_keepalived.sh
#!/bin/bash
lb01_vip=10.0.1.3
lb01_nginx=$(curl -x 10.0.1.5:80 -I -s -w "%{http_code}\n" -o /dev/null blog.test.com)
if [ ${lb01_nginx} -eq 200 -a `ip add|grep "$lb01_vip"|wc -l` -eq 1 ];then
echo "ha is bad" >> /tmp/check.txt
systemctl stop keepalived
else
echo "ha is ok" >> /tmp/check.txt
fi
如何实现keepalived服务自动释放vip地址资源
nginx+keepalived:nginx负载停止,keepalived也必须停止
第一个历程:编写监控nginx服务状态监控
[root@lb01 ~]# cat /server/scripts/check_web.sh
#!/bin/bash
num=`ps -ef | grep -c nginx`
if [ $num -lt 2 ];then
systemctl stop keepalived
fi
[root@lb01 ~]#
第二个历程:实时监控nginx服务状态---keepalived配置文件
[root@lb01 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb01
}
vrrp_script check_web {
script "/server/scripts/check_web.sh"
interval 2
weight 2
}
vrrp_instance test {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.1.3/24
}
track_script {
check_web
}
}
配置解释
vrrp_script check_web {
script "/server/scripts/check_web.sh" --- 定义需要监控脚本(脚本需要有执行权限)
interval 2 --- 执行脚本间隔时间(秒)
weight 2 --- 利用权重值和优先级进行运算,从而降低主服务优先级使之变为备服务器(建议先忽略)
} 求和运算:weight数值必须是整数 weight + priority 自动提升优先级,使主机可以成为主服务器
求差运算:weight数值必须是负数 weight - priority 自动降低优先级,使主机可以成为备服务器
track_script {
check_web --- 调用你执行的脚本信息
}
高可用集群双主配置
第一个历程:编写lb01的keepalived配置文件
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb01
}
vrrp_instance test {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.1.3/24
}
}
vrrp_instance test2 {
state BACKUP
interface eth0
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.1.4/24
}
}
[root@lb01 ~]#
第二个历程:编写lb02的配置keepailved文件
[root@lb02 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb02
}
vrrp_instance test {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.1.3/24
}
}
vrrp_instance test2 {
state MASTER
interface eth0
virtual_router_id 52
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.1.4/24
}
}
[root@lb02 ~]#
第三个历程:配置nginx负载均衡服务
#lb01和lb02一样
[root@lb02 ~]# vim /etc/nginx/conf.d/lb.conf
upstream test {
server 10.0.1.7:80;
server 10.0.1.8:80;
server 10.0.1.9:80;
}
server {
listen 80;
server_name www.test.com;
location / {
proxy_pass http://test;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
server {
listen 80;
server_name bbb.test.com;
location / {
proxy_pass http://test;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
第三个历程:重启服务
#lb01
[root@lb01 ~]# systemctl restart keepalived
[root@lb01 ~]# systemctl restart nginx
#lb02
[root@lb02 ~]# systemctl restart keepalived.service
[root@lb02 ~]# systemctl restart nginx
访问测试
高可用服务安全配置(负载均衡服务)
lb01和lb02负载均衡服务器配置一样
第一个历程:修改nginx负载均衡文件
[root@lb01 conf.d]# vim lb.conf
upstream test {
server 10.0.1.7:80;
server 10.0.1.8:80;
server 10.0.1.9:80;
}
server {
listen 10.0.1.3:80;
server_name www.test.com;
location / {
proxy_pass http://test;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
server {
listen 10.0.1.4:80;
server_name bbb.test.com;
location / {
proxy_pass http://test;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
第二个历程:修改内核信息
[root@lb01 conf.d]# echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf
[root@lb01 conf.d]# sysctl -p
net.ipv4.ip_nonlocal_bind = 1
[root@lb01 conf.d]#
第三个历程:重启nginx服务
[root@lb01 conf.d]# systemctl restart nginx
[root@lb01 conf.d]# netstat -lntup|grep nginx
tcp 0 0 10.0.1.4:80 0.0.0.0:* LISTEN 6294/nginx: master
tcp 0 0 10.0.1.3:80 0.0.0.0:* LISTEN 6294/nginx: master
[root@lb01 conf.d]#
Keepalived高可用服务的更多相关文章
- 十一.keepalived高可用服务实践部署
期中集群架构-第十一章-keepalived高可用集群章节======================================================================0 ...
- keepalived高可用服务配置管理
实验环境: 主机 ipaddress 服务 备注 k8s-master1 10.0.0.63 nginx k8s-master2 10.0.0.64 nginx k8s-node1 10.0.0.65 ...
- 干货 | Keepalived高可用服务配置实例
一个执着于技术的公众号 Keepalived系列导读 Keepalived入门学习 keepalived安装及配置文件详解 前言 在前面的章节中,我们学习了Keepalived简介.原理.以及Keep ...
- keepalived高可用简介与配置
keepalived简介 keepalived介绍 Keepalived 软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP ...
- keepalived高可用集群。
keepalived故障切换转移原理1vrrp协议:(vritual router redundancy protocol)虚拟路由冗余协议,2故障转移.keepalived三大功能1实现物理高可用, ...
- Linux系统——Keepalived高可用集群
#### keepalived服务的三个重要功能1. 管理LVS负载均衡软件Keepalived可以通过读取自身的配置文件,实现通过更底层的接口直接管理LVS的配置以及控制服务的启动,停止功能,这使得 ...
- nginx keepalived 高可用方案(转)
转自: https://www.cnblogs.com/leeSmall/p/9356535.html 一.Nginx Rewrite 规则 1. Nginx rewrite规则 Rewrite规则含 ...
- Nginx入门篇(七)之Nginx+keepalived高可用集群
一.keepalived介绍 keepalived软件最开始是转为负载均衡软件LVS而设计,用来管理和监控LVS集群系统中各个服务节点的状态,后来又加入了可实现高可用的VRRP功能.所以Keepali ...
- Linux实战教学笔记31:Keepalived高可用集群应用实践
1.1 Keepalived高可用软件 1.1.1 Keepalived介绍 Keepalived软件起初是专门为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入 ...
随机推荐
- WPF多线程更新UI的一个解决途径
那么该如何解决这一问题呢?通常的做法是把耗时的函数放在线程池执行,然后切回主线程更新UI显示.前面的updateTime函数改写如下: private async void updateTime() ...
- 七、Null、空以及0的区别
一.Null的区别 create database scort use scort create table emp ( empno int primary key, ename ), sal int ...
- vue部分问题
[color=#00b050]学 vue 的看过来,vue-cli 挺好用的,但是遇到具体情况还得做一部分调整和配置默认你已经成功启动 vue-cli 1.使用 scsscnpm i node-sas ...
- v-if-else 条件判断 是否插入元素指令
<div id="app05"> <p v-if="OK">True的时候显示,否则不显示</p> <template ...
- Linux进程基本原理
主题进程介绍 一进程相关概念 内核的功用:进程管理.文件系统.网络功能.内存管理.驱动程序.安全功能等 在操作系统上会运行多个应用程序,应用程序分配多大的内存都由内核实现 程序文件 程序和进程的关系 ...
- jsp标签的介绍
cankao:http://www.cnblogs.com/xdp-gacl/p/3788369.html jsp常用的标签有以下3个 1.<jsp:include>标签 2.<js ...
- pic16f877a的PWM实验学习
遇到的问题,编译时找不到TRISC.一开始以为头文件中没有定义,发现定义了. 所以是自己创建工程的时候,设备类型选错了. #include <pic.h> __CONFIG(0xFF32) ...
- Qt的信号和槽机制
一.信号和槽机制 信号和槽用于两个对象之间的通信,我们希望任何对象都可以和其他对象进行通信. 当一个特殊的事情发生时便可以发射一个信号,而槽就是一个函数,它在信号发射后被调用来相应这个信号.( ...
- 【数据库】一篇文章搞掂:MySQL数据库
一.安装 使用版本:5.7(2018/08/03 阿里云的云数据库最高支持5.7,所以这里考虑用5.7) 下载版本:MySQL Community Server 5.7.23 下载地址:https:/ ...
- ROS的使用
1.输入roscore时出现错误:Unable to contact my own server at 修改: 在.bashrc文件中添加以下内容: export ROS_HOSTNAME=local ...