Keepalived之高可用LVS集群
前文我们聊了下keepalived的邮件通知相关配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13645163.html;今天我们来说说keepalived高可用LVS集群;
我们知道一个服务通常是以一个套接字形式对外提供服务,所谓套接字就是ip+端口;前面的博客中我们主要聊到了keepalived对ip地址的高可用,但通常对ip地址高可用没有多大实质的作用,重要的是我们高可用的ip地址后端对应的服务才是根本,这一篇博客主要讲怎么利用keepalived高可用LVS集群,生成ipvs规则,以及对LVS集群的rs做健康状态检测;
环境说明
| 名称 | ip地址 | 端口 |
| keepalived-node01(master) | 192.168.0.41 | \ |
| keepalived-node02(backup) | 192.168.0.42 | \ |
| LVS-RS1 | 192.168.0.43 | 80 |
| LVS-RS2 | 192.168.0.44 | 80 |
| VIP | 192.168.0.111 | 80 |
准备LVS集群RS1和RS2
1、安装webserver
yum install nginx -y
提示:rs1和rs2上都要安装nginx服务,用于后端rs提供的服务;
2、提供测试页

3、启动rs1和rs2上的nginx服务

4、编写修改内核参数,并配置vip给RS1和RS2的脚本


#/bin/bash
#
vip='192.168.0.111'
mask='255.255.255.255'
interface='lo:0' case $1 in
start)
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
ifconfig $interface $vip netmask $mask broadcast $vip up
route add -host $vip dev $interface
;;
stop)
ifconfig $interface down
echo 0 >/proc/sys/net/ipv4/conf/all/arp_announce
echo 0 >/proc/sys/net/ipv4/conf/lo/arp_announce
echo 0 >/proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 >/proc/sys/net/ipv4/conf/lo/arp_ignore
;;
*)
echo "Usage:bash $0 start|stop"
exit 1
;;
esac
提示:以上脚本主要实现了两个参数,给定start参数就把对应的内核参数修改以后,并vip配置到指定的接口;给stop参数就把vip从指定的端口上删除,并还原内核参数的设定;
在rs1和rs2上执行设置内核参数的脚本


提示:到此后端两个RS的环境就准备好了;
配置keepalived,生成lvs规则

完整的配置

[root@node01 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs {
notification_email {
root@localhost
}
notification_email_from node01_keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node01
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
vrrp_mcast_group4 224.0.12.132
} vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.0.111/24 brd 192.168.0.255 dev ens33 label ens33:1
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
} virtual_server 192.168.0.111 80 {
delay_loop 3
lb_algo wrr
lb_kind DR
protocol TCP
sorry_server 127.0.0.1 80 real_server 192.168.0.43 80 {
weight 1
nb_get_retry 2
delay_before_retry 2
connect_timeout 30
HTTP_GET {
url {
path /index.html
status_code 200
}
}
}
real_server 192.168.0.44 80 {
weight 1
nb_get_retry 2
delay_before_retry 2
connect_timeout 30
HTTP_GET {
url {
path /index.html
status_code 200
}
}
}
} [root@node01 ~]#
提示:virtual_server用于定义LVS对外集群ip地址和端口(vip),用大括号括起来,其中delay_loop用于指定对后端rs做健康状态检查的时间间隔;lb_algo/lvs_sched用于指定lvs的调度算法,常用的算法有rr,wrr,lc,wlc,lblc,sh,dh;lb_kind/lvs_method用于指定lvs集群的类型,常用的类型有DR,NAT,TUN,需注意这里的类型的值必须大写,否则服务有异常;有关LVS集群类型的相关说明请参考https://www.cnblogs.com/qiuhom-1874/p/12327506.html;protocol用于指定4层协议,常用的4层协议有TCP ,UDP,SCTP,需注意这里的值必须大写;sorry_server用于指定,当后端RS都宕机情况下,临时对用户说sorry的服务器地址和端口;real_server:用来定义后端RS的相关配置,其中weight用于指定当前rs的权重,nb_get_retry用指定对rs检测的重试次数,如果在指定的次数上都监测失败就标记该RS为下线状态,并从当前集群中下线;delay_before_retry用于指定重试之前延迟的时间;connect_timeout用于指定对rs检测的超时时长;HTTP_GET 用于配置对rs的检查方法,HTTP_GET表示应用层http检测,其中path用于指定检测到uri,status_code用于指定对指定URI检测到状态码,通常为200;以上virtual_server的配置在node02上也是相同的配置;
安装sorryserver,并配置测试页面


启动keepalived

提示:到此基于keepalived高可用LVS集群就配置完成了;
验证:用浏览器对VIP访问,看看是否能够访问到后端RS提供的页面?

提示:我们用浏览器访问VIP并没有访问到后端的rs提供的页面;其中的原因是我们在配置keepalived时,开启了严格遵守vrrp协议,所以启动keepalived它默认会自动生成iptables规则,禁止任何地址访问VIP;

提示:解决办法用iptables -F清空iptables规则;这种清空iptables规则的方式只是临时的方式,重启以后,或者vip飘逸后,对应的规则又会生成,永久解决办法是在keepalived的配置文件,禁用它自动生成iptabels规则;

提示:在/etc/keepalived/keepalived.conf的global_defs中加上vrrp_iptables这个配置,这个配置表示禁用自动生成iptables规则;当然我们也可配置不严格遵守vrrp协议,把vrrp_strict去掉也行;选择其中一种方式即可;
验证:重启keepalived,看看对应iptables规则是否还会生成?

提示:可以看到现在vip所在节点的iptables规则就没有在自动生成了,对于node02也是相同的配置,重启keepalived即可解决自动生成iptables规则的问题;
现在在用浏览器访问vip,看看是否能够访问到后端RS提供的页面?


提示:可以看到我们在浏览器上访问VIP是可以正常访问到后端rs提供的页面;
验证:把node01上的keepalived停掉,看看node02是否会自动将vip配置上对应的接口?用浏览器是否还会访问到rs提供的页面呢?

提示:可以看到当node01的keepalived宕机以后,对应vip会自动飘逸到node02上去,并且在客户端访问VIP几乎不受影响;
验证:在node01上查看ipvs规则,看看是否都生成了ipvs规则呢?

提示:可以看到node01上并没有生成ipvs规则,原因是keepalived停掉了,对应的ipvs规则也就删除了;node02上的keepalived是活跃状态,所以对应ipvs规则也是有keepalived自动生成;
验证:把rs1的web服务停掉,看看keepalived是否会检测到rs1不再线,从而把rs1自动从集群踢出去呢?

提示:可以看到当rs1故障以后,keepalived会检测到rs1故障,然后把rs1从集群中提出去,所以我们在ipvs规则表中就没有rs1;
验证:把rs2停掉,看看对应的sorryserver是否会被激活?

提示:可以看到把rs2停掉以后,对应ipvs规则表中就没有RS2,并且它会把我们之前配置的sorryserver 的地址和端口配置上;
验证:用浏览器访问VIP看看对应相应的内容是否是vip所在节点的sorryserver提供的页面呢?

提示:可以看到当rs都宕机以后,再次访问VIP就会响应我们之前在配置文件中提供的sorryserver的页面;
验证:启动rs1或rs2看看对应sorryserver是否会下线呢?

提示:可以看到当rs2恢复以后,对应的sorryserver就从集群下线;
到此基于keepalived高可用LVS集群的配置,测试就结束了;
Keepalived之高可用LVS集群的更多相关文章
- 整合apache+tomcat+keepalived实现高可用tomcat集群
Apache是一个强大的Web服务器在处理静态页面.处理大量网络客户请求.支持服务的种类以及可配置方面都有优势,高速并且强壮.但是没有JSP/Servlet的解析能力.整合Apache和Tomcat可 ...
- Keepalived+Nginx+Tomcat 实现高可用Web集群
https://www.jianshu.com/p/bc34f9101c5e Keepalived+Nginx+Tomcat 实现高可用Web集群 0.3912018.01.08 20:28:59字数 ...
- 搭建高可用kubernetes集群(keepalived+haproxy)
序 由于单master节点的kubernetes集群,存在master节点异常之后无法继续使用的缺陷.本文参考网管流程搭建一套多master节点负载均衡的kubernetes集群.官网给出了两种拓扑结 ...
- corosync+pacemaker实现高可用(HA)集群
corosync+pacemaker实现高可用(HA)集群(一) 重要概念 在准备部署HA集群前,需要对其涉及的大量的概念有一个初步的了解,这样在实际部署配置时,才不至于不知所云 资源.服务与 ...
- 高可用Kubernetes集群-16. ansible快速部署
说明 本文档指导采用二进制包的方式快速部署高可用kubernetes集群. 脚本托管:k8s-ansible(持续更新) 参考:高可用kubernetes集群 组件版本 组件 版本 备注 centos ...
- 企业运维实践-还不会部署高可用的kubernetes集群?使用kubeadm方式安装高可用k8s集群v1.23.7
关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...
- 构建高可用ZooKeeper集群
ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 Zo ...
- 搭建高可用mongodb集群(四)—— 分片(经典)
转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还 ...
- 构建高可用ZooKeeper集群(转载)
ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 Zo ...
随机推荐
- Go 语言中,有时 nil 并不是一个 nil
今天,我遇到了一个 Go FAQ.首先,作为一个小小的 Go 语言测验,看看您是否在 Go playground 中运行该程序之前就能推断出它应该打印出的内容(我已经将程序放在侧边栏中,以防它在 Go ...
- Java 创建、刷新Excel透视表/设置透视表行折叠、展开
透视表是依据已有数据源来创建的交互式表格,我们可在excel中创建透视表,也可编辑已有透视表.本文以创建透视表.刷新透视表以及设置透视表的行展开或折叠为例,介绍具体的操作方法. 所需工具:Free S ...
- Spring——IOC(控制反转)与DI(依赖注入)
IOC与DI的理解及使用 控制反转IOC(Inversion of Control)是一种设计思想,DI(依赖注入)是实现IOC的一种方法.在没有IOC的程序中,我们使用面向对象编程,对象的创建于对象 ...
- stat 命令家族(2)- 详解 pidstat
性能测试必备的 Linux 命令系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1819490.html 介绍 对 Linux 任务的统计 ...
- LDA线性判别分析原理及python应用(葡萄酒案例分析)
目录 线性判别分析(LDA)数据降维及案例实战 一.LDA是什么 二.计算散布矩阵 三.线性判别式及特征选择 四.样本数据降维投影 五.完整代码 结语 一.LDA是什么 LDA概念及与PCA区别 LD ...
- 《Java从入门到失业》第二章:Java环境(一):Java SE安装
从这一章开始,终于我们可以开始正式进入Java世界了.前面我们提到过,Java分三个版本,我们这里只讨论Java SE. 2.1Java SE安装 所谓工欲善其事,必先利其器.第一步,我们当然是要下载 ...
- unity探索者之socket传输protobuf字节流(四)
版权声明:本文为原创文章,转载请声明http://www.cnblogs.com/unityExplorer/p/7027659.html 上篇已经把socket的传输说的差不多了,这篇主要是说说断线 ...
- UML活动图(Activity Diagram)
目录: 1.什么是活动图 2.活动图的构成 (1)起点 (2)重点 (3)活动名称 (4)判断条件 (5)同步条 (6)接收信号 (7)发送信号 (8)泳道 (9)转移 3.活动图实例--订单处理 4 ...
- 结构体深度比较 reflect.DeepEqual
demo1 package main import ( "fmt" "reflect" ) func main() { sliceMap1 := make([] ...
- MySQL引擎【转】
数据库引擎介绍MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另外 ...