keepalived + lvs
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的更多相关文章
- Net分布式系统之三:Keepalived+LVS+Nginx负载均衡之高可用
上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常运行.针对系统架构设计的高可用要求,我们需要解决Nginx ...
- keepalived+LVS 实现双机热备、负载均衡、失效转移 高性能 高可用 高伸缩性 服务器集群
本章笔者亲自动手,使用LVS技术实现实现一个可以支持庞大访问量.高可用性.高伸缩性的服务器集群 在读本章之前,可能有不少读者尚未使用该技术,或者部分读者使用Nginx实现应用层的负载均衡.这里大家都可 ...
- Keepalived+Lvs+Mysql主主复制
一简单介绍 Keepalived+lvs+mysql主主复制是比較经常使用的一种Mysql高可用方案,当中lvs 提供读负载均衡,Keepalived通过虚拟vip漂移实现故障自己主动转移,而Mysq ...
- mysql高可用架构方案之二(keepalived+lvs+读写分离+负载均衡)
mysql主从复制与lvs+keepalived实现负载高可用 文件夹 1.前言 4 2.原理 4 2.1.概要介绍 4 2.2.工作原理 4 2.3.实际作用 4 3方 ...
- Keepalived+LVS+Nginx负载均衡之高可用
Keepalived+LVS+Nginx负载均衡之高可用 上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常 ...
- 高可用之KeepAlived(2):keepalived+lvs
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- 高可用集群之keepalived+lvs实战-技术流ken
keepalived简介 lvs在我之前的博客<高负载集群实战之lvs负载均衡-技术流ken>中已经进行了详细的介绍和应用,在这里就不再赘述.这篇博文将把lvs与keepalived相结合 ...
- keepalived+lvs子网掩码造成VIP切换故障 + vrrp_script+track_script
keepalived+lvs子网掩码造成VIP切换故障 架构:keepalived+lvs ,前端调度器是双主模型 现象:keepalived手动停掉一台,但是虚拟IP不会切换 整体网络是24位 VI ...
- Keepalived+LVS高可用负载均衡集群
概述 Keepalived是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换(Failover)和健康检查(HeathChecking)功能——判断LVS负载调度器.节点服务器的可用性,及 ...
- CentOS 7 keepalived+LVS
LVS架构中 , 不管是NAT模式还是DR模式 , 当后端的RS宕机了 , 调度器还是会把请求转发到宕掉的RS上 , 然而keepalived可以解决该问题 , 它不仅仅有高可用的功能 , 还有负载均 ...
随机推荐
- 关于mysql中触发器old和new
1.当使用insert语句的时候,如果原表中没有数据的话,那么对于插入数据后表来说新插入的那条数据就是new,如图所示: 2.当使用delete语句的时候,删除的那一条数据相对于删除数据后表的数据来说 ...
- poj 1556
哦天哪这个萨比提又浪费了我好几个小时. 我们在check的时候只考虑严格相交就行了,想了很久才注意到这一点. 然后就建图跑最短路,over. #include <cstdio> #incl ...
- react 使用 lazyload 懒加载图片
文档地址 index.html <script> (function(w, d) { var b = d.getElementsByTagName("body")[0] ...
- 遍历文件,读取.wxss文件,在头部添加一条注释
change.pl #!/usr/bin/perl use autodie; use utf8; use Encode qw(decode encode); use v5.26; my $path = ...
- js获取当前日期方法(YYYY-MM-DD格式)
var myDate = new Date(); var time = myDate.toLocaleDateString().split('/').join('-');将1970/08/08转化 ...
- vue3版本到vue2版本的桥接工具
vue2的命令可以正常使用.
- swust oj 1068
图的按录入顺序深度优先搜索 5000(ms) 10000(kb) Tags: 深度优先 图的深度优先搜索类似于树的先根遍历,即从某个结点开始,先访问该结点, 然后深 ...
- plupload多个实例,返回区分实例的返回
plupload多个实例很简单,但是麻烦的是,返回的时候没有明显标记区分input的id,好蛋疼 var uploader = new plupload.Uploader({ //实例化一个plupl ...
- sql中join与left-join图解区别
select a.* from YG_BRSYK a left join(SELECT DISTINCT SYXH, STUFF((SELECT '.'+MS FROM #lsb where SY ...
- [Day6]引用数据类型、ArrayList 集合
1.类的定义与使用 (1)类的定义格式 创建java文件,与类名相同 public class 类名{ 数据类型 属性名称1: 数据类型 属性名称2: … } (2)使用格式 导包:我们将所有的类 ...