Keepalived原理

Keepalived原理
keepalived也是模块化设计,不同模块复杂不同的功能,下面是keepalived的组件
core check vrrp libipfwc libipvs-2.4 libipvs-2.6 core:是keepalived的核心,复杂主进程的启动和维护,全局配置文件的加载解析等
check:负责healthchecker(健康检查),包括了各种健康检查方式,以及对应的配置的解析包括LVS的配置解析
vrrp:VRRPD子进程,VRRPD子进程就是来实现VRRP协议的
libipfwc:iptables(ipchains)库,配置LVS会用到
libipvs*:配置LVS会用到
注意,keepalived和LVS完全是两码事,只不过他们各负其责相互配合而已 keepalived启动后会有三个进程
父进程:内存管理,子进程管理等等
子进程:VRRP子进程
子进程:healthchecker子进程 有图可知,两个子进程都被系统WatchDog看管,两个子进程各自复杂自己的事,healthchecker子进程复杂检查各自服务器的健康程度,例如HTTP,LVS等等,如果healthchecker子进程检查到MASTER上服务不可用了,就会通知本机上的兄弟VRRP子进程,让他删除通告,并且去掉虚拟IP,转换为BACKUP状态
genhash 用法:
[root@localhost bin]# ./genhash -s 192.168.100.101 -p  -u /       #genhash http 页面探测时检查hash 值,首先要获取hash 值
MD5SUM = 47f174a067d193f370407ec4aa882ab0 [root@localhost bin]#

配置文件详解:本次测试着重点在keepalived 中使用LVS 功能

[root@localhost keepalived]# cat keepalived.conf
! Cconfiguration File for keepalived global_defs { #全局配置段
notification_email { #定义报警邮件接收地址
test1@ppap.com
test2@ppap.com
test3@ppap.com
}
notification_email_from error_from@ppap.com #定义告警邮件发送邮箱
smtp_server 114.114.114.114 #定义邮箱服务器
smtp_connect_timeout #定义邮件发送超时时间
router_id lvs_1 #定义路由标识信息,相同局域网唯一
} vrrp_instance VI_1 { #定义vrrp 实例,实例可以定义多个,在主+主,主+主+备 分别在不通服务器调用
state MASTER #状态参数,标识在当前主机上,实列状态,有master/backup
interface ens33 #指定绑定虚IP的网卡设备
virtual_router_id #路由 id 标识,用于区分不同vrrp 实例,相同实例id 必须一致:[-]
priority #定义当前实例的优先级,优先级大小决定主备
advert_int #主备通讯时间间隔 authentication {
auth_type PASS #定义实例认证类型
auth_pass #定义认证密码
}
virtual_ipaddress { #定义vrrp 需要发布的虚拟ip ,可以绑定网卡
192.168.100.201/
192.168.100.202/
192.168.100.203/ dev eth2 label eth2: 指定网卡和名称
} nopreempt #开启不抢占功能,默认抢占
} virtual_server 192.168.100.201 { #定义虚拟服务地址端口 delay_loop #查询后端real_server 状态间隔时间
lvs_sched wlc #定义lvs 负载算法
lvs_method DR #定义lvs 模式
persistence_timeout #定义会话保持时间
protocol TCP #定义负载协议为tcp real_server 192.168.100.101 { #定义real_server
weight #设置权重为1 ,默认为1
uthreshold #最大连接阈值
TCP_CHECK {
connect_timeout #定义探测超时时间默认为5 s
retry #尝试三次 }
}
real_server 192.168.100.103 {
weight # 设置权重为1,默认1
uthreshold # 设置连接最大阈值
HTTP_GET {
url {
path /
digest c32410fe653866bfc3e85c896a4abc94
status_code 200 #正常应该是 200 状态码 }
connect_timeout #定义探测超时时间,默认5s
retry # 尝试 次
}
} }

测试结果:

[root@localhost keepalived]# ip addr
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN group default qlen
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
valid_lft forever preferred_lft forever
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP group default qlen
link/ether :::2d:b8:9a brd ff:ff:ff:ff:ff:ff
inet 192.168.100.100/ brd 192.168.100.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.100.201/ scope global secondary ens33
valid_lft forever preferred_lft forever
inet 192.168.100.202/ scope global secondary ens33
valid_lft forever preferred_lft forever
inet6 fe80::18a9:d1fe::/ scope link noprefixroute
valid_lft forever preferred_lft forever
[root@localhost keepalived]# ipvsadm -L -n
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.100.201: wlc persistent
-> 192.168.100.101: Route
-> 192.168.100.103: Route

停止其中一个节点服务:  重启节点只能重新加载keepalived 配置

[root@localhost /]# systemctl stop httpd
[root@localhost /]#
Mar   :: localhost Keepalived_healthcheckers[]: Error connecting server [192.168.100.103]:.

Mar   :: localhost Keepalived_healthcheckers[]: Error connecting server [192.168.100.103]:.
Mar 1 04:30:15 localhost Keepalived_healthcheckers[2966]: Check on service [192.168.100.103]:80 failed after 1 retry.
Mar :: localhost Keepalived_healthcheckers[]: Removing service [192.168.100.103]: from VS [192.168.100.201]:
Mar :: localhost Keepalived_healthcheckers[]: Remote SMTP server [114.114.114.114]: connected.

keepalived + lvs的更多相关文章

  1. Net分布式系统之三:Keepalived+LVS+Nginx负载均衡之高可用

    上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常运行.针对系统架构设计的高可用要求,我们需要解决Nginx ...

  2. keepalived+LVS 实现双机热备、负载均衡、失效转移 高性能 高可用 高伸缩性 服务器集群

    本章笔者亲自动手,使用LVS技术实现实现一个可以支持庞大访问量.高可用性.高伸缩性的服务器集群 在读本章之前,可能有不少读者尚未使用该技术,或者部分读者使用Nginx实现应用层的负载均衡.这里大家都可 ...

  3. Keepalived+Lvs+Mysql主主复制

    一简单介绍 Keepalived+lvs+mysql主主复制是比較经常使用的一种Mysql高可用方案,当中lvs 提供读负载均衡,Keepalived通过虚拟vip漂移实现故障自己主动转移,而Mysq ...

  4. mysql高可用架构方案之二(keepalived+lvs+读写分离+负载均衡)

    mysql主从复制与lvs+keepalived实现负载高可用 文件夹 1.前言    4 2.原理    4 2.1.概要介绍    4 2.2.工作原理    4 2.3.实际作用    4 3方 ...

  5. Keepalived+LVS+Nginx负载均衡之高可用

    Keepalived+LVS+Nginx负载均衡之高可用 上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常 ...

  6. 高可用之KeepAlived(2):keepalived+lvs

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  7. 高可用集群之keepalived+lvs实战-技术流ken

    keepalived简介 lvs在我之前的博客<高负载集群实战之lvs负载均衡-技术流ken>中已经进行了详细的介绍和应用,在这里就不再赘述.这篇博文将把lvs与keepalived相结合 ...

  8. keepalived+lvs子网掩码造成VIP切换故障 + vrrp_script+track_script

    keepalived+lvs子网掩码造成VIP切换故障 架构:keepalived+lvs ,前端调度器是双主模型 现象:keepalived手动停掉一台,但是虚拟IP不会切换 整体网络是24位 VI ...

  9. Keepalived+LVS高可用负载均衡集群

    概述 Keepalived是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换(Failover)和健康检查(HeathChecking)功能——判断LVS负载调度器.节点服务器的可用性,及 ...

  10. CentOS 7 keepalived+LVS

    LVS架构中 , 不管是NAT模式还是DR模式 , 当后端的RS宕机了 , 调度器还是会把请求转发到宕掉的RS上 , 然而keepalived可以解决该问题 , 它不仅仅有高可用的功能 , 还有负载均 ...

随机推荐

  1. Redis防止重複請求鎖功能

    class Lock { const PREFIX_KEY = "MY_LOCK:"; static private $LOCKED = []; static public fun ...

  2. share drive 无效

    docker设置的share dirve怎么按都无效 试了几遍都不行,想想刚才电脑系统更新了,然后查了下百度,发现是电脑策略的问题,设置成经典的就可以了

  3. [LeetCode] Longest Substring Without Repeating Characters 最长无重复字符的子串

    Given a string, find the length of the longest substring without repeating characters. Example 1: In ...

  4. 腾讯云云机安装dockers

    云机的配置 首先更新一下源(更新前一直装不了) 下载dockers-ce(社区版) 启动dockers服务 使用hello-world进行测试(由于本地没有hello-world这个镜像,所以dock ...

  5. 不偏移的天地图地图服务-ArcGIS版

    地图偏移和纠偏是使用在线电子地图不可避免的话题.研究不深入,暂且分享一种已纠偏的地图服务. 服务地址 直接放点干货: 影像地图: http://t0.tianditu.com/cia_w/esri/w ...

  6. @staticmethod和classmethod

    之前一直搞不清楚这两个类方法有什么区别,今天着重学习了一下 @staticmethod是静态方法,不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样. class C(object): ...

  7. Caused by: java.lang.ClassNotFoundException: Could not load requested class :XXX.XXX.XXX 异常处理

    在ssh整合中:出现的异常 Exception sending context initialized event to listener instance of class org.springfr ...

  8. Android开发网【申明:来源于网络】

    Android开发网[申明:来源于网络] 地址:http://www.jizhuomi.com/android/video/

  9. Python爬虫实例(四)网站模拟登陆

    一.获取一个有登录信息的Cookie模拟登陆 下面以人人网为例,首先使用自己的账号和密码在浏览器登录,然后通过抓包拿到cookie,再将cookie放到请求之中发送请求即可,具体代码如下: # -*- ...

  10. pip升级包错误问题解决

    命令框内输入 sudo pip install six --upgrade --ignore-installed six --红色字体表示想要忽略的包名称--