热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用keepalived搭建高可用LVS集群

LinuxCluster使用keepalived搭建高可用LVS一般比较常用于搭建高可用集群的有:heartbeat、keepalived、piranha。常见

Linux Cluster
使用keepalived搭建高可用LVS
一般比较常用于搭建高可用集群的有:heartbeat、keepalived、piranha。
常见的高可用集群有:高可用LVS集群、高可用web集群(keepalived+nginx)、高可用mysql集群。
keepalived是一个类似于layer3, 4 & 7交换机制的软件,也就是我们平时说的第3层、第4层和第7层交换。只需要简单配置keepalived的配置文件即可实现自动生成ipvsadm规则,还可以监控后端realserver主机的健康状态,出现故障时自动剔除集群,恢复后自动添加,以及MASTER与BACKUP之间的故障切换。
本次实验使用keepalived+Apache,搭建高可用LVS集群。
DIP=director IP
RIP=realserverIP
VIP=virtual server IP
realserver=rs
ha=director

1.实验概况

1.1实验拓扑图

这里写图片描述

1.2简介
本次实验使用virtualbox创建一台最小化安装的centos5.5配置yum源,完成后再复制出三台刚才已安装好的centos5.5,共四台虚拟机,
只需要启用一张网卡,选择桥接模式。采用LVS的DR直接路由工作模式,wlc调度算法,后端服务器健康状态监测方式为HTTP,
此外后端服务器健康状态监测方式还有SSL、HTTPS、TCP_CHECK等。
hostname ip 角色 作用
ha1 VIP:eth0:0 192.168.8.30 LVS负载均衡器MASTER 接收用户请求,
转发给后端realserver处理
DIR:eth0 192.168.8.31 用于与后端realserver进行通信

ha2 VIP:eth0:0 192.168.8.30 LVS负载均衡器BACKUP 备用的LVS调度器
DIR:eth0 192.168.8.32 用于与后端realserver、
LVS负载均衡器MASTER进行通信

rs1 RIP:192.168.8.33 WEB服务器 与director通信,提供web服务
VIP:lo:0 192.168.8.30 用于处理director分配的请求后
以此地址返回给用户
rs2 RIP:192.168.8.34 WEB服务器 与director通信,提供web服务
VIP:lo:0 192.168.8.30 用于处理director分配的请求后
以此地址返回处理结果给用户

1.3实验步骤

1.3.1MASTER配置
1).单网卡、桥接模式启动ha1,并配置ip地址为192.168.8.31
2).关闭防火墙与selinux
service iptable stop
service ip6table stop
vim /etc/selinux/conf
修改为SELINUX=disabled
3).安装keepalived前的准备
由于一开始centos5.5是最小化安装,所以需要提前安装编译工具以及其他安装keepalived的组件
安装openssl
yum install -y openssl openssl-devel #安装openssl以及openssl开发包未安装内核开发也可以使keepalived安装成功,但无法自动生成ipvsadm规则
yum install -y kernel-devel
安装编译工具gcc-c++
yum install -y gcc-c++
安装ipvs管理工具ipvsadm
yum install -y ipvsadm
4).安装keepalived
wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
tar xvf keepalived-1.2.7.tar.gz
cd keepalived-1.2.7
./configure --syscOnf=/etc --with-kernel-dir=/usr/src/kernels/2.6.18-417.el5-i686
#注意/usr/src/kernels/2.6.18-417.el5-i686,为题主自己的内核版本,
读者自己操作是使用tab补全,万一照抄或许会失败。

配置检测结束后会出现如下结果,为三个yes,其中IPVS use libnl: No,对后续的安装配置运行无影响。

Keepalived configuration

Keepalived version : 1.2.7
Compiler : gcc
Compiler flags : -g -O2 -DETHERTYPE_IPV6=0x86dd
Extra Lib : -lpopt -lssl -lcrypto
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
IPVS use libnl : No
Use VRRP Framework : Yes
Use VRRP VMAC : No
SNMP support : No
Use Debug flags : No

make
make install
ln -s /usr/local/sbin/keepalived /sbin

至此keepalived安装完成

5).配置keepalived
keepalived的配置文件在 /etc/keepalived/keepalived.conf
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.confbk #先备份一下
vim /etc/keepalived/keepalived.conf
以下为题主自己的配置文件,后端服务器健康状态使用HTTP
! Configuration File for keepalived

global_defs {
notification_email {
root@localhost #用于接受邮件报警,当服务异常时发邮件到邮箱提醒
}
notification_email_from admin@localhost #邮件发送地址
smtp_server 127.0.0.1 #邮件服务器本机
smtp_connect_timeout 30 #smtp sever 超时时间
router_id LVS_DEVEL #服务标识,邮件主题
}

vrrp_instance VI_1 {
state MASTER #指定本服务器为主服务器
interface eth0
virtual_router_id 51 #虚拟路由标识,MASTER与BACKUP需一致
priority 100 #定义优先级,需大于BACKUP的priority值
advert_int 1
authentication { #设置验证类型与验证密码
auth_type PASS
auth_pass abcd #验证密码MASTER与BACKUP需一致
}
virtual_ipaddress {
192.168.8.30 #设置VIP,既配置在MASTER调度器上由于接受用户请求的地址
}
}

virtual_server 192.168.8.30 80 { #虚拟服务器定义部分既MASTER调度器
delay_loop 6 #运行情况监测时间6s一次
lb_algo wlc #设置调度算法为wlc
lb_kind DR #设置LVS的工作模式为DR模式
nat_mask 255.255.255.0 #虚拟服务器子网掩码
persistence_timeout 50 #session保持时间
protocol TCP #指定转发的协议类型

real_server 192.168.8.33 80 { #后端真实服务器节点配置realserver1
weight 3 #该节点服务器权重
HTTP_GET { #后端服务器情况检查方式HTTP_GET,向后端服务器发送http请求,无回应即为该节点服务器异常,剔除ipvsadm规则
url {
path /
status_code 200
}
connect_timeout 3 #3秒无响应超时
nb_get_retry 3 #重试次数
delay_before_retry 3 #重试时间间隔
}
}
real_server 192.168.8.34 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
6).将改配置文件复制到BACKUP主机
scp /etc/keepalived/keepalived.conf 192.168.8.32:/etc/keepalived/
7).启动keepalived服务
service keepalived start
至此MASTER的配置完成

1.3.2BACKUP配置
0).单网卡、桥接模式启动ha2,并配置ip地址为192.168.8.32 
1).与MASTER的配置相差不大
关闭iptables与selinux
安装openssl openssl-dev gcc-c++ kernel-devel ipvsadm keepalived。安装步骤参考MASTER的配置
2).修改MASTER传过来的keepalived.conf
vim /etc/keepalived/keepalived.conf
将 state MASTER 改为state MBACKUP
priority 100 改为priority 80
即可
3).启动keepalived服务
service keepalived start
至此BACKUP的配置完成

1.3.3Realserver1配置
1).单网卡、桥接模式启动rs1,并配置ip地址为192.168.8.33,关闭iptables与selinux
2).安装httpd服务
yum install httpd
3).配置测试页,启动httpd服务
echo "this is realserver1 test web" > /var/www/html/index.html
service httpd start
4).配置arptable调整网卡的响应/通告级别
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
5).配置网络别名及添加路由
ifconfig lo:0 192.168.8.30 broadcast 192.168.8.30 netmask 255.255.255.255 up
route add -host 192.168.8.30 dev lo:0

1.3.4Realserver2配置
1).与realserver1的配置差别不大,同样的  单网卡、桥接模式启动rs2,并配置ip地址为192.168.8.34,关闭iptables与selinux
安装httpd,创建测试页为与realserver1区别echo "this is realserver2 test web" > /var/www/html/index.html
启动httpd服务
配置arptable
配置网络别名添加路由
可使用curl http://192.168.8.33 检测realserver1的测试页是否正常
至此所有的配置结束

1.4检测

1.4.1实验结果检测
1).在MASTER输入ipvsadm -l -n 检查是否自动创建的了集群服务及添加的集群主机
输入ip addr 检查192.168.8.30 这个提供用户请求的ip地址是否存在本机
存在及正常

1.4.1LVS故障切换检测
1).假设MASTER出现异常,在MASTER输入service keepalived stop 停止keepalived服务,
使用ipvsadm -l -n 查看本机的ipvsadm是否清空
使用ip addr 查看VIP 192.168.8.30是否还存在本机
在BACKUP输入ipvsadm -l -n 查看BACKUP是否继承了MASTER的ipvsadm规则
输入ip addr 查看VIP 192.168.8.30是否存在本机
若有即为LVS故障切换成功。
假设MASTER解除异常 service keepalived start 重新启用
则ipvsadm规则与VIP都应该存在MASTER上

1.4.1后端服务器realserver健康状况检测
1).假设realserver1出现异常service httpd stop
则在LVS上的使用ipvsadm -l -n查看ipvsadm规则,ipvsadm将rs1剔除,显示为集群节点服务器中无rs1 192.168.8.33
假设realserver1解除异常service httpd start
则ipvsadm的规则上重新出现rs1 192.168.8.33

2其他情况

2.1当两个realserver节点,都出现异常
解决:将WEB服务重定向在MASTER与BACKUP上,显示错误页面。
1).yum install httpd
2).echo "404,Not Found" > /var/www/html/index.html
3).修改vim /etc/keepalived/keepalived.conf,添加sorry_server 127.0.0.1 80,修改后内容如下

virtual_server 192.168.8.30 80 {
delay_loop 6
lb_algo wlc
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
sorry_server 127.0.0.1 80
real_server 192.168.8.33 80 {
weight 3
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}

4).重启keepalived服务
service keepalived restart
5).手动将两台realserver的httpd服务stop,再访问http://192.168.8.30进行测试

这里写图片描述
测试
这里写图片描述


推荐阅读
  • 负载均衡 LVS vs Nginx 对比
    前言今天总结一下负载均衡中LVS与Nginx的区别,之前看过好几篇博文一开始就说LVS是单向的,Nginx是双向的,我个人认为这是不准确的,LVS三种模式中,虽然DR模式以及TU ... [详细]
  • 我们身边的网络知识
    我们身边的网络常识今天咱们交流的主题是网络基础,这块东西对于咱们计算机或者通讯专业的人来说应该是很熟悉的,今天拿出来再说一说,是因为这块知识在咱们工作和生活中时刻都在使用,并且非常 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 网关(Gateway)又称网间连接器、协议转换器。网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关的结构也和 ... [详细]
  • 点击上方[全栈开发者社区]→右上角[]→[设为星标⭐]前言年前准备换工作,总结了一波面试最频繁的面试问题跟大家交流。此文章是关于浏览器的常见问题, ... [详细]
  • 计算机网络概述计算机网络基本概念计算机网络计算机网络是互连的、自治的计算机集合。协议计算机网络中的实体在进行数据交换的过程中必须遵循的规定或约定,称为网络协议。协议的三个要素:语法 ... [详细]
  • 【图解HTTP】第一章 了解web及网络基础
    [图解HTTP]了解Web及网络基础Web页面是如何呈现的?根据Web浏览器地址栏中指定的URL,Web浏览器从Web服务器端获取文件资源(resour ... [详细]
  •   简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。集群主要分为:高可用集群(HighAvailabilityCluste ... [详细]
  • 什么是网络数据包代理?为何需要网络数据包代理?为更优的决策获得更全面、精准的数据更严格的安全性更快地解决问题提高主动性更好的投资回报率NPB到底能做什么?冗余数据包去重SSL解密报 ... [详细]
  • 1.什么是数据库的索引每种查找算法都只能应用于特定的数据结构之上,例如二分查找要求被检索数据有序,而二叉树查找只能应用于二叉查找树上,但是 ... [详细]
author-avatar
郑郑郑克_583
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有