一、Keepalived介绍

         Keepalived起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能,Keepalived是一款高可用软件,它的功能主要包括:

1、管理LVS负载均衡软件

2、实现对LVS集群节点健康检查功能

3、作为系统网络服务的高可用功能

二、Keepalived工作原理

Keepalived的实现基于VRRP

1、VRRP协议,全称Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议,VRRP的出现是为了解决静态路由的单点故障。
2、VRRP是用过IP多播的方式(默认多播地址(224.0.0.18))实现高可用对之间通信的。
3、工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的资源。备节点可以有多个,通过优先级竞选,但一般Keepalived系统运维工作中都是一对

三、keepalived部署

1、安装keepalived(lb01 lb02)

rpm -qa keepalived
yum install keepalived -y

2、keepalived配置文件详解

global_defs {                                    --- 全局配置标题
notification_email { --- 定义管理员邮箱信息,
@qq.com
@qq.com
}
notification_email_from oldboy@.com --- 定义利用什么邮箱发送邮件
smtp_server smtp..com --- 定义邮件服务器信息
smtp_connect_timeout --- 定义邮件发送超时时间
router_id oldboy01 --- (重点参数)局域网keepalived主机身份标识信息,每一个keepalived主机身份标识信息唯一
} vrrp_instance VI_1 { --- vrrp协议相关配置(vip地址设置)
state MASTER --- keepalived角色描述(状态)信息,可以配置参数(MASTER BACKUP)
interface eth0 --- 表示将生成虚IP地址,设置在指定的网卡上
virtual_router_id --- 表示keepalived家族标识信息
priority --- keepalived服务竞选主备服务器优先级设置(越大越优先)
advert_int --- 主服务组播包发送间隔时间
authentication { --- 主备主机之间通讯认证机制,
auth_type PASS --- 采用明文认证机制
auth_pass --- 编写明文密码
}
virtual_ipaddress { --- 设置虚拟IP地址信息
10.0.0.3
}
}

3、搭建基础的keepalived配置文件

#lb01主

global_defs {

router_id LVS_01

}

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.3/24 dev eth0 label eth0:1

}

}

虚拟IP地址显示信息:
默认显示信息:inet 10.0.0.3/32 scope global eth0
修改显示信息:inet 10.0.0.3/24 scope global secondary eth0:1

#lb02备

global_defs {

router_id LVS_02

}

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.3/24 dev eth0 label eth0:1

}

}

虚拟IP地址显示信息:
默认显示信息:inet 10.0.0.3/32 scope global eth0
修改显示信息:inet 10.0.0.3/24 scope global secondary eth0:1

测试说明:进行抓包观察配置效果;并且对比两个负载均衡服务器的配置文件

四、keepaliver

脑产生的原因

①高可用服务器之间心跳线链路发生故障,导致无法正常通信,心跳线坏了(包括断了,老化)

②网卡及相关驱动坏了,IP配置及冲突问题(网上直连)

③心跳线间连接的设置故障(网上及交换机)

④高可用服务器上开启了iptables防火墙阻挡了心跳消息传输

高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败

 解决裂脑常见方案

①同时使用串行电缆和以太网电缆连接,同时用两条心跳线路

②当检测裂脑时强行关闭一个心跳节点(这个功能需要特殊设备支持,如stonith、fence)

③运维层面做好对裂脑的监控报警

#制作监控脚本---lb02
报警的条件:只要lb02 上面有vip
.lb01 挂了
.心碎 #!/bin/bash
#desc: jiankong lb02 vip
if [ `ip a s eth0 |grep -c "10.0.0.3"` == ];then
echo "baojing"
fi

五、企业实践案例一:nginx反向代理只监听vip地址,防攻击

1、企业keepalived服务应用(修改nginx反向代理只监听vip地址)

#lb01 lb02 nginx配置
worker_processes ;
events {
worker_connections ;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout ;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; upstream server_pools {
server 10.0.0.7;
server 10.0.0.8;
server 10.0.0.9;
} server {
listen 10.0.0.3:;
server_name www.etiantian.org;
location / {
proxy_pass http://server_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
access_log logs/access_www.log main; }
server {
listen 10.0.0.3:;
server_name blog.etiantian.org;
location / {
proxy_pass http://server_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
access_log logs/access_blog.log main; }
}
说明:在修改反向代理服务器配置文件监听地址时,多个server都需要配置监听地址,否则仍旧使用默认监听所有,nginx修改ip相关的必须重启服务,平滑重启不启作用

2、lb02上不存在vip地址,无法监听,需要修改内核文件

解决方法:
echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf
sysctl -p

六、企业实践案例二:keepalived结合脚本监控nginx服务

1、nginx服务停止,keepalived服务自动停止,vip飘走

 #!/bin/bash
#name: check_web.sh
#desc: check nginx and kill keepalived
if [ `ps -ef |grep nginx |grep -v grep |wc -l` -lt ];then
/etc/init.d/keepalived stop
fi

2、把监控脚本放入keepalived配置文件中

 global_defs {
router_id LVS_02
} vrrp_script check_web {
script "/server/scripts/check_web.sh" --- 表示将一个脚本信息赋值给变量check_web
interval --- 执行监控脚本的间隔时间
weight --- 利用权重值和优先级进行运算,从而降低主服务优先级
使之变为备服务器(建议先忽略)
} vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
10.0.0.3/ dev eth0 label eth0:
}
track_script {
check_web
}
}

七、企业实践案例三:keepalived多实例配置

#lb01
global_defs {
router_id LVS_01
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
10.0.0.3/ dev eth0 label eth0:
}
}
vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
10.0.0.4/ dev eth0 label eth0:
}
}
#lb02
global_defs {
router_id LVS_02
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
10.0.0.3/ dev eth0 label eth0:
}
}
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
10.0.0.4/ dev eth0 label eth0:
} }
#lb01 lb02  nginx.conf 
worker_processes ;
events {
worker_connections ;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout ;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
upstream server_pools {
server 10.0.0.7;
server 10.0.0.8;
server 10.0.0.9;
}
server {
listen 10.0.0.3:;
server_name www.etiantian.org;
location / {
proxy_pass http://server_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
access_log logs/access_www.log main;
}
server {
listen 10.0.0.4:;
server_name blog.etiantian.org;
location / {
proxy_pass http://server_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
access_log logs/access_blog.log main; }
}

windows hosts解析

10.0.0.3  www.etiantian.org
10.0.0.4 bbs.etiantian.org

八、指定文件接收Keepalived服务日志

vi /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -S 0 -d" vi /etc/rsyslog.conf
local0.*                                                /var/log/keepalived.log
/etc/init.d/keepalived restart

查看生成的接收keepalived日志文件

ll /var/log/keepalived.log
-rw------- 1 root root 5600 Oct 13 11:43 /var/log/keepalived.log

linux运维、架构之路-keepalived高可用的更多相关文章

  1. Nginx知多少系列之(十四)Linux下.NET Core项目Nginx+Keepalived高可用(主从模式)

    目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略 8.加权轮询(round rob ...

  2. linux运维架构师职业规划

    1.假如你从来未接触过Linux的话,首先要做的就找一本指导书来学习.现在公认的Linux的入门书籍是“鸟哥的私房菜”,讲的很全面,鸟哥的私房菜一共分为两部,一部是基础篇,一部是服务器篇.“鸟哥的私房 ...

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

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

  4. linux运维、架构之路-MHA高可用方案

    一.软件介绍          MHA(master high   availability)目前是MySQL高可用方面是一个相对成熟的解决方案.在切换过程中,mha能做到0-30s内自动完成数据库的 ...

  5. 京东云开发者|IoT运维 - 如何部署一套高可用K8S集群

    环境 准备工作 配置ansible(deploy 主机执行) # ssh-keygen # for i in 192.168.3.{21..28}; do ssh-copy-id -i ~/.ssh/ ...

  6. Linux运维就业技术指导(九)期末架构考核

    一,毕业架构设计考核筹备 1.1,架构图模板示例 1.1.1 架构图(一)概述 本架构是4层lvs负载均衡给后方7层nginx反向代理: 业务进行了动静分离: 数据库前端有memcached缓存组,降 ...

  7. 【Linux运维-集群技术进阶】Nginx+Keepalived+Tomcat搭建高可用/负载均衡/动静分离的Webserver集群

    额.博客名字有点长.. . 前言 最终到这篇文章了,心情是有点激动的. 由于这篇文章会集中曾经博客讲到的全部Nginx功能点.包含主要的负载均衡,还有动静分离技术再加上这篇文章的重点.通过Keepal ...

  8. linux运维、架构之路-LVS负载均衡

    一.LVS介绍 1.介绍           LVS是Linux Virtual Server的简写,是linux虚拟的服务器集群系统,可以在unix/linux平台下实现负载均衡集群功能,由章文嵩博 ...

  9. Linux运维企业架构实战系列

    Linux运维企业架构项目实战系列 项目实战1-LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2-LVS.nginx实现负载均衡系列 2.1 项目实战2.1-实现基于LVS负载均衡集 ...

随机推荐

  1. ThreadPoolExecutor 源码分析

    ThreadPoolExecutor 线程池核心实现类 线程池的生命周期 RUNNING: 接受新任务,同时处理工作队列中的任务 SHUTDOWN: 不接受新任务,但是能处理工作队列中的任务 STOP ...

  2. .Net Core使用IConfiguration来处理Json文件

    前几天公司的用上了携程的开源配置中心:Apollo 然后同事给我提了这么个问题,因为之前的时候我们用的都是.NET Core自带的appsetting.json,为了兼容代码的目前工具类中用来进行配置 ...

  3. 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第4节 ArrayList集合_17-ArrayList练习二_存储自定义

    分析题目和解题思路 先来新建学生类.定义两个成员变量,后面进行代码的生成 遍历集合

  4. object数据类型

    1 object数据类型是dataframe中特殊的数据类型,当某一列出现数字.字符串.特殊字符和时间格式两种及以上时,就会出现object类型,即便把不同类型的拆分开,仍然是object类型. 如下 ...

  5. Binder进程与线程ProcessState以及IPCThreadState

    ProcessState以及IPCThreadState ProcessState是负责打开Binder节点并做mmap映射,IPCThreadState是负责与Binder驱动进行具体的命令交互. ...

  6. 19c的 rac在oracle linux7.4上搭建总结

    准备: 1,ASM磁盘空间最低要求OCR的磁盘占用需求有了明显增长.为了方便操作,设置如下:External: 1个卷x40GNormal: 3个卷x30GHight: 5个卷x25GFlex: 3个 ...

  7. SpringBoot中FreeMarker创建

    1.创建SpringBoot项目时,勾选freemarker依赖(web,dev) 2.Controller中向model中存放数据 package com.ziv.springbootbygrald ...

  8. ModelForm基本使用

    介绍 Django提供Form和ModelForm两种表单验证方式.相比较Form,ModelForm可以直接与与数据库表相关联,不需要像Form那样需要手动逐一字段添加表单验证的字段.且可以随意选择 ...

  9. C++ 中赋值运算符重载以及深拷贝浅拷贝解析

    转载自:http://blog.csdn.net/business122/article/details/21242857 关键词:构造函数,浅拷贝,深拷贝,堆栈(stack),堆heap,赋值运算符 ...

  10. 剑指Offer编程题(Java实现)——替换空格

    题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 解题思路1 在字符串尾部填充任 ...