高可用集群之keepalived+lvs实战-技术流ken
keepalived简介
lvs在我之前的博客《高负载集群实战之lvs负载均衡-技术流ken》中已经进行了详细的介绍和应用,在这里就不再赘述。这篇博文将把lvs与keepalived相结合使用,在实际工作中搭建高可用,高负载,高性能的服务器集群。
“Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。”
keepalived的主要功能
1. healthcheck
检查后端节点是否正常工作
如果发现后端节点异常,就将该异常节点从调度规则中删除;
如果发现后端的异常节点恢复正常了,就将该节点重新加入到调度规则中;
2. failover
是对调度器的主节点做健康检测。
将备用节点升级为主节点
接管主节点上的资源(vip、lvs规则)
keepalived实现故障切换的原理
1.keepalived是基于vrrp写于实现的故障切换
2.正常情况下,主节点会每隔一段时间向备节点发送一个心跳信息,这个就是告诉备节点自己正常
当主节点发生故障,那么备节点无法接收都心跳信息,就认定主节点故障,那么就会接收主节点的业务和资源(包括vip)
当主节点又恢复的时候,那么备节点释放所接收到资源和业务
简单说说vrrp协议
1. VRRP((Virtual Router Redundancy Protocol),虚拟路由冗余协议,为了解决静态路由的单点故障问题
2. VRRP的工作机制是基于竞选机制选择一个路由来完成任务处理
3. VRRP协议是通过发送多播数据包实现竞选的(Multicat)
4. 竞选出来主节点会一直发送广播包,backup节点一直监听这些广播包(处于监听状态)
5. 当备用节点无法接收到广播包的是时候,就会重新进行竞选,选出一个新的节点作为主节点
keepalived可以完成如下工作
1. 自动生成vip(vip给用户提供服务)
2. 自动配置lvs规则
3. 可以实现各种服务的高可用
4. failover的时候,做vip的漂移
keepalived的配置文件
第一段:global_defs,全局配置段
global_defs {
notification_email {
@qq.com
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout
router_id id1 <<< 当前主机的ID值,这个值必须是唯一的
} 第二段:vrrp_instance,实例配置段(虚拟服务段)
【该段是定义虚拟服务的vip等信息】
vrrp_instance VI_1 { <<< 指定实例的名称
state MASTER <<< 指定节点的状态,MASTER表示主,BACKUP表示备用节点
interface eth0 <<< 指定将VIP绑定在哪个网卡上
virtual_router_id <<< 虚拟路由ID,用于标识哪些个节点是一组,同一组的主机的虚拟id需要相同
priority <<< 指定该节点的优先级(主这节点的优先级大于备节点)
advert_int <<< 指定备节点在几秒之内没有接收到主节点的心跳信息,就接管其业务和资源
authentication { <<< 指定keepalived集群中各个主备节点做认证的方式
auth_type PASS
auth_pass
}
virtual_ipaddress { <<< 指定用于提供服务的ip地址(也就是VIP)
10.220.5.233
}
} 第三段:virtual_server,虚拟主机配置段
【该段主要是给lvs来用,用来定义后端RS节点】
virtual_server 10.220.5.222 { #指定实例对应的VIP
delay_loop # 对后端节点做健康检查的时间间隔
lb_algo rr # 指定负载均衡调度算法
lb_kind DR # 指定所使用的lvs模型
nat_mask 255.255.255.0
persistence_timeout # 同一IP的请求50秒内被分配到同一台真实主机
protocol TCP # 用TCP协议对真实节点做健康检查 real_server 10.220.5.190 { # 指定一台真实服务器的IP和端口
weight # 设置权重
TCP_CHECK { # 用建立tcp连接的方式做健康检测
connect_timeout # 设置建立tcp连接的超时时间
delay_before_retry # 超时后多久重试
nb_get_retry # 重试次数
connect_port # 健康检查使用的端口号
}
} real_server 10.220.5.191 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
}
}
修改配置文件需要注意的问题
1. 实例可以有一个,也可以有多个
2. 单实例中必须相同的配置
vrrp_instance VI_1
virtual_router_id 51
auth_type PASS
auth_pass 1111
virtual_ipaddress
3. 单实例中必须不相同的配置
router_id id1
state MASTER
priority 100
指定日志保存方式和位置
. 修改keepalived的配置
[root@ken ~]# cat /etc/sysconfig/keepalived
# Options for keepalived. See `keepalived --help' output and keepalived(8) and
# keepalived.conf() man pages for a list of all options. Here are the most
# common ones :
#
# --vrrp -P Only run with VRRP subsystem.
# --check -C Only run with Health-checker subsystem.
# --dont-release-vrrp -V Dont remove VRRP VIPs & VROUTEs on daemon stop.
# --dont-release-ipvs -I Dont remove IPVS topology on daemon stop.
# --dump-conf -d Dump the configuration data.
# --log-detail -D Detailed log messages.
# --log-facility -S - Set local syslog facility (default=LOG_DAEMON)
#
KEEPALIVED_OPTIONS="-D -d -S 0"
#KEEPALIVED_OPTIONS="-D"
. 修改系统日志配置文件
[root@ken ~]# echo "local0.* /var/log/ka.log" >>/etc/rsyslog.conf
. 重启服务
[root@ken ~]# systemctl restart rsyslog
[root@ken ~]# systemctl restart keepalived
日志
级别:指定触发日志的事件的重要等级
日志设施:指定将日志记录在什么位置
keepalived对RS做健康检查的方式
. HTTP_GET:向后端的RS发送http请求,如果请求成功,说明后端节点正常(RS是web服务的时候比较常用)
. TCP:尝试与后端RS建立TCP连接,如果成功,说明后端节点正常
【仅仅是检查RS系统是否正常工作,不能检查具体的业务】
. SMTP:对邮件服务器做健康检测
. MISC:通过脚本的方式实现健康检测 TCP健康检测方式举例
TCP_CHECK { # 通过TcpCheck判断RealServer的健康状态
connect_timeout # 连接超时时间
nb_get_retry # 重连次数
delay_before_retry # 重连时间间隔
connect_port # 检测端口
} HTTP_GET健康检测方式举例
HTTP_GET {
url {
path check/t.html # 检查的uri地址
digest 1362a91278f0 # 用keepalived自带的genhash生成 connect_timeout # 链接超时时间
nb_get_retry # 重连次数
delay_before_retry # 重连时间间隔
connect_port # 检测端口
} MISC健康检测方式举例
MISC_CHECK {
misc_path "/tmp/check.sh http://1.2.3.4:80/c/200.jsp"
# 调用外部程序或者脚本的路径和参数 misc_timeout
# 脚本执行的超时时间 misc_dynamic
# 动态权重标志。
# 脚本返回0 则检测成功,权重不变
# 返回1表示失败,权重设置为0
}
keepalived+lvs服务器集群实战
1.环境准备
centos7.5
VIP:172.20.10.11/28
客户端IP:172.20.10.3/28
KEEPALIVED+LVS1服务器端IP:172.20.10.2/28
KEEPALIVED+LVS2服务器端IP:172.20.10.5/28
WEB1服务器端IP:172.20.10.8/28
WEB2服务器端IP:172.20.10.9/28
2.关闭安全服务
[root@ken ~]# setenforce
[root@ken ~]# systemctl stop firewalld
[root@ken ~]# iptables -F
3.配置KEEPALIVED+LVS1服务器端
相当的服务器配置需要保持相同。接下来的配置你需要配置两遍,即在每个服务端都需要配置一遍。
安装ipvsadm
[root@ken ~]# yum install popt* libnl* kernel-devel ipvsadm -y
安装keepalived
[root@ken ~]# yum install keepalived -y
配置主服务器端keepalived
! 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
router_id id1
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval
vrrp_gna_interval
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
172.20.10.11/
}
}
virtual_server 172.20.10.11 {
delay_loop
lb_algo rr
lb_kind DR
persistence_timeout
protocol TCP
real_server 172.20.10.8 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
}
}
real_server 172.20.10.9 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
}
}
}
配置好之后可以把这个文件使用scp传输到另外一台服务器上面
[root@ken ~]# scp /etc/keepalived/keepalived.conf 172.20.10.5:/etc/keepalived/keepalived.conf
root@172.20.10.5's password:
keepalived.conf % .7KB/s :
配置从服务器端keepalived
! 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
router_id id2
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval
vrrp_gna_interval
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
172.20.10.11/
}
}
virtual_server 172.20.10.11 {
delay_loop
lb_algo rr
lb_kind DR
persistence_timeout
protocol TCP
real_server 172.20.10.8 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
}
}
real_server 172.20.10.9 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
}
}
}
4.重启keepalived
[root@ken ~]# systemctl restart keepalied
5.检查ipvsadm
[root@ken ~]# ipvsadm -L -n --stats
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 172.20.10.11:
-> 172.20.10.8:
-> 172.20.10.9:
6.检查VIP
检查主服务器端
[root@ken ~]# ip a
: 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
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UNKNOWN group default qlen
link/ether :0c::2d:5b:b8 brd ff:ff:ff:ff:ff:ff
inet 172.20.10.2/ brd 172.20.10.15 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 172.20.10.11/ scope global secondary eth0 #VIP现在在主服务器端
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe2d:5bb8/ scope link
valid_lft forever preferred_lft forever
检查从服务器端
[root@ken ~]# ip a
: 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
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UNKNOWN group default qlen
link/ether :0c::a5:e9:a4 brd ff:ff:ff:ff:ff:ff
inet 172.20.10.5/ brd 172.20.10.15 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fea5:e9a4/ scope link
valid_lft forever preferred_lft forever
6.配置web服务器端
1.下载apache
[root@ken ~]# yum install httpd -y
2.准备测试页面
[root@ken ~]# echo "this is 172.20.10.8 for test" >/var/www/html/index.html
3.启动apache
[root@ken ~]# systemctl restart httpd
[root@ken ~]# ss -tnl |grep
LISTEN ::: :::*
4.绑定VIP
[root@ken ~]# ip a a 172.20.10.11/ dev lo:
5.arp抑制
[root@ken ~]# echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore
[root@ken ~]# echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
[root@ken ~]# echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce
[root@ken ~]# echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
浏览器测试
确认每台服务器每项服务重启之后,再次关闭每台服务器
防火墙
[root@ken ~]# iptables -F
输入VIP地址

测试成功!
进行刷新测试

测试成功!
关闭一台172.20.10.8web服务器进行测试
[root@ken ~]# systemctl stop httpd
查看ipvsadm规则
[root@ken ~]# ipvsadm -L -n
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.20.10.11: rr
-> 172.20.10.9: Route
已自动移除172.20.10.8服务器
测试成功!
关闭172.20.10.2 keepalived主服务器进行测试
[root@ken ~]# systemctl stop keepalived
查看keepalived主服务器端ipvsadm规则
[root@ken ~]# ipvsadm -L -n
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
查看keepalived主服务器端VIP
[root@ken ~]# ip a
: 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
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UNKNOWN group default qlen
link/ether :0c::2d:5b:b8 brd ff:ff:ff:ff:ff:ff
inet 172.20.10.2/ brd 172.20.10.15 scope global noprefixroute eth0
valid_lft forever preferred_lft forever #已经没有VIP
inet6 fe80::20c:29ff:fe2d:5bb8/ scope link
valid_lft forever preferred_lft forever
查看从服务器ipvsadm规则
[root@ken ~]# ipvsadm -L -n --stats
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 172.20.10.11:
-> 172.20.10.9:
从服务器端已经自动继承主服务器端ipvsadm规则
查看从服务器端是否有VIP
[root@ken ~]# ip a
: 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
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UNKNOWN group default qlen
link/ether :0c::a5:e9:a4 brd ff:ff:ff:ff:ff:ff
inet 172.20.10.5/ brd 172.20.10.15 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 172.20.10.11/ scope global secondary eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fea5:e9a4/ scope link
valid_lft forever preferred_lft forever
VIP已经自动继承到从服务器端
测试完成!
高可用集群之keepalived+lvs实战-技术流ken的更多相关文章
- 高可用集群之keepalived+lvs实战2
keepalived简介 lvs在我之前的博客<高负载集群实战之lvs负载均衡-技术流ken>中已经进行了详细的介绍和应用,在这里就不再赘述.这篇博文将把lvs与keepalived相结合 ...
- 高可用集群之keepalived+lvs实战
keepalived简介 lvs在我之前的博客<高负载集群实战之lvs负载均衡-技术流ken>中已经进行了详细的介绍和应用,在这里就不再赘述.这篇博文将把lvs与keepalived相结合 ...
- k8s集群监控(十一)--技术流ken
Weave Scope 在我之前的docker监控中<Docker容器监控(十)--技术流ken>就已经提到了weave scope. Weave Scope 是 Docker 和 K ...
- 打造kubernetes 高可用集群(nginx+keepalived)
一.添加master 部署高可用k8s架构 1.拷贝/opt/kubernetes目录到新的master上(注意如果新机上部署了etcd要排除掉) scp -r /opt/kubernetes/ ro ...
- Haproxy+keepalived高可用集群实战
1.1 Haproxy+keepalived高可用集群实战 随着互联网火热的发展,开源负载均衡器的大量的应用,企业主流软件负载均衡如LVS.Haproxy.Nginx等,各方面性能不亚于硬件负载均衡 ...
- LVS+Keepalived实现高可用集群
LVS+Keepalived实现高可用集群来源: ChinaUnix博客 日期: 2009.07.21 14:49 (共有条评论) 我要评论 操作系统平台:CentOS5.2软件:LVS+keepal ...
- 使用Keepalived构建LVS高可用集群
LVS的DR模型配置+Keepalive部署 介绍 下图为DR模型的通信过程,图中的IP不要被扑结构中的IP迷惑,图里只是为了说明DR的通信原理,应用到本例中的拓扑上其工作原理不变. 拓扑结构 服务器 ...
- 基于Keepalived实现LVS双主高可用集群
Reference: https://mp.weixin.qq.com/s?src=3×tamp=1512896424&ver=1&signature=L1C7us ...
- CentOS高可用集群LVS+Keepalived(DR模式)
操作系统:CentOS6.5_x64 mini 负载均衡模式:DR(直接路由) LVS与Keepalived简述: LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是 ...
随机推荐
- 解答VS2013编译报错不准确是什么原因
1.当程序在错误时,VS2013编译报出的错误有时不会一起全部报出,而是按错误的英文首字母逐个报出的 2.如果报错的信息双击点过去查看时又发现无明显错误问题时,这个这个时候可以是VS编译的缓存问题,这 ...
- REdis Asynchronous AOF fsync is taking too long
redis.conf中的no-appendfsync-on-rewrite默认值为no,表示在重写AOF文件或RDB文件时阻塞fsync. 如果重写AOF或RDB文件时长过长,则在日志中可以看到如下信 ...
- 2019浙大校赛--J--Extended Twin Composite Number(毒瘤水题)
毒瘤出题人,坑了我们好久,从基本的素数筛选,到埃氏筛法,到随机数快速素数判定,到费马小定理,好好的水题做成了数论题. 结果答案是 2*n=n+3*n,特判1,2. 以下为毒瘤题目: 题目大意: 输入一 ...
- virtualenv搭建
1.准备工作 终端 网络状况良好 2.安装虚拟环境 如何安装虚拟环境: 2.1了解你的电脑中有哪些版本的python whereis python 查看当前系统中有多少跟python有关的命令 ...
- 携带cookie的跨域访问
携带cookie的跨域解决方案 有的时候访问后台的请求需要携带cookie以供后台分析,比如jQuery的ajax请求: $.ajax({ url: a_cross_domain_url, xhrFi ...
- Metasploit漏洞的利用
- IntelliJ IDEA小问题通过操作软件解决
Diamond types are not supported at this language level http://blog.csdn.net/qq_34884729/article/deta ...
- st表(poj3264)
st表很像线段树,但线段树既能查询和修改,而st表只能查询. 首先我们先用二维数组建立一个表,st[i][j]表内存的是从第i位开始1<<j范围内的best(st[i][j-1],st[i ...
- 黑群晖DS3617xs-DSM6.1.7up3/up2 开启ROOT用户,同时SATA改eSATA,挂载NTFS硬盘设置(二)
这两天闲来没事在某宝上搞了个黑群晖主机就j1900/4G小主机系统是DCM 6.1.7up3 15284版 网上修改的教程很多,走了好多弯路终于搞定我的黑群NAS,现分享给各位道友,有不足的地方请给位 ...
- 彻底搞懂CSS文本、空白换行问题
首先,我们来整理一下与换行有关的3个CSS属性: word-break 该属性决定文本内容超出容器时,浏览器是否自动插入换行符. 属性值: normal:默认换行规则——英文以词为单位换行,连续字符不 ...