LVS配合piranha实现负载均衡及DR高可用

2024-03-15 11:10

本文主要是介绍LVS配合piranha实现负载均衡及DR高可用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一. 架构

VIP:192.168.1.20

DR:192.168.1.19

DR_BACK:192.168.1.15

RS1: 192.168.1.17

RS2: 192.168.1.18

二.初始化配置

同步时间

ntpdate asia.pool.ntp.org

关闭selinux

#临时修改,立即生效
setenforce 0
#永久修改,需要重启
vim /etc/sysconfig/selinuxSELINUX=disabled

为了调试方便暂时关闭防火墙

/etc/init.d/iptables stop


三.DR配置

绑定虚拟IP

ifconfig eth0:0 192.168.1.20 broadcast 192.168.1.20 netmask 255.255.255.255 up

设置路由

route add -host 192.168.1.20 dev eth0:0

开启包转发

sed -i 's/net.ipv4.ip_forward\ =\ 0/net.ipv4.ip_forward\ =\ 1/' /etc/sysctl.conf 
sysctl -pnet.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296

安装lvs和piranha

yum install ipvsadm piranha -y

设置piranha密码

piranha-passwd
New Password: 
Verify: 
Updating password for user piranha

启动piranha

/etc/init.d/piranha-gui start

在浏览器访问piranha

  http://192.168.1.19:3636/login登录 

用户名:piranha

密码:刚刚你设置的密码

172441_2sFx_1767904.jpg


配置Backup Server 

         点击 ENABLE 激活冗余服务器

         Redundant server public IP: 192.168.1.15        //备份LVS地址

         Heartbeat interval (seconds):6                          //心跳网络检测时间

          Assume dead after(seconds):18                       //死亡转移时间

          Heartbeat runs on port:539                              //监控的端口

          Monitor NIC links for failures : 不勾选                   //网卡链路失效选项

          Syncdaemon: 不勾选                                            //同步守护进程选项

173539_mc2Y_1767904.jpg

配置虚拟服务器  > 点击 VIRTUAL SERVER   > ADD

           添加一条心的记录并编辑

           name :  LVS                                  //自定义名称

          Application port  :80                               //监控应用端口号

          Protocol :tcp                                           //监控网络的协议类型

          Virtual IP Address:192.168.1.20          //虚拟服务器的IP地址

          Virtual IP Network Mask: 255.255.255.255  //虚拟服务掩码

          Device: eth0:0                                            //虚拟IP设备宿主 >

          Re-entry time: 15                                         //移除RS后从新加入时间

          Service timeout: 6                                       //RS失效后存活时间

          Scheduling: 保持默认(最小连接数)                                        //调度算法

           Persistence: 保持默认                                           //维持时间

           Persistence Network Mask:保持默认  //掩码


173539_PsYF_1767904.jpg

配置 Real-server1

         点击Real SERVER     新建一条RS 记录

          NAME:node1             //自定义RS名称

          Address:192.168.1.17                //RS1服务器IP地址

          Port:80                                          //服务的端口

          Weight:1                                       //调度权重

173847_pKQG_1767904.jpg

配置 Real-server2

         点击Real SERVER     新建一条RS 记录

          NAME:node1             //自定义RS名称

          Address:192.168.1.18                //RS1服务器IP地址

          Port:80                                          //服务的端口

          Weight:1                                       //调度权重

激活

174038_101P_1767904.jpg

174038_QQf5_1767904.jpg

配置好的配置文件如下(/etc/sysconfig/ha/lvs.cf)

serial_no = 12
primary = 192.168.1.19
service = lvs
backup_active = 1
backup = 192.168.1.15
heartbeat = 1
heartbeat_port = 539
keepalive = 6
deadtime = 18
network = direct
debug_level = NONE
monitor_links = 0
syncdaemon = 0
virtual LVS {active = 1address = 192.168.1.20 eth0:0vip_nmask = 255.255.255.255port = 80send = "GET / HTTP/1.0\r\n\r\n"expect = "HTTP"use_regex = 0load_monitor = nonescheduler = wlcprotocol = tcptimeout = 6reentry = 15quiesce_server = 0server node1 {address = 192.168.1.17active = 1port = 80weight = 1}server node2 {address = 192.168.1.18active = 1port = 80weight = 1}
}


复制配置文件到DR_BACK

scp /etc/sysconfig/ha/lvs.cf 192.168.1.15:/etc/sysconfig/ha/

启动LVS服务(先启动主)

/etc/init.d/pulse start
Starting pulse:                                            [  OK  ]

查看lvs转发

 ipvsadm -l -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.20:80 wlc-> 192.168.1.17:80              Route   1      0          4         -> 192.168.1.18:80              Route   1      0          4

四. RS配置

建立lvsrs启动脚本

vim /etc/init.d/lvsrs

  

#!/bin/bash
#description : Start Real Server 
# chkconfig: 2345 90 60
# Default-Start:  2345
# Default-Stop: 90
VIP=192.168.1.20
#./etc/rc.d/init.d/functions
case "$1" instart)echo " Start LVS  of  Real Server"/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 upecho "1" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "1" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/all/arp_announce ;;stop)/sbin/ifconfig lo:0 downecho "close LVS Director server"echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "0" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/all/arp_announce;;*)echo "Usage: $0 {start|stop}"exit 1
esac

添加进启动项,开机自启动

chkconfig --add lvsrs

启动服务

/etc/init.d/lvsrs start

五.验证

验证负载均衡:

在RS1和RS2分别安装nginx并启动,修改默认首页

vim /usr/local/nginx/html/index.html

<h1>标签分别改成NODE1和NODE2

浏览器访问http://192.168.1.20

显示NODE1

换个机器访问显示NODE2及表示成功。

这个时候再来查看lvs状态

ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.20:http wlc-> 192.168.1.17:http            Route   1      2          1         -> 192.168.1.18:http            Route   1      2          0

验证DR高可用:

手动停止主DR,模拟故障

/etc/init.d/pulse stop
Shutting down pulse:                                       [  OK  ]

继续访问http://192.168.1.20

如果仍然能正常访问则证明成功

这个时候在备份DR上查看LVS状态

[root@vm2 ha]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.20:80 wlc-> 192.168.1.17:80              Route   1      0          2         -> 192.168.1.18:80              Route   1      0          3


转载于:https://my.oschina.net/liuhuan0927/blog/617819

这篇关于LVS配合piranha实现负载均衡及DR高可用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/811770

相关文章

Java StringBuilder 实现原理全攻略

《JavaStringBuilder实现原理全攻略》StringBuilder是Java提供的可变字符序列类,位于java.lang包中,专门用于高效处理字符串的拼接和修改操作,本文给大家介绍Ja... 目录一、StringBuilder 基本概述核心特性二、StringBuilder 核心实现2.1 内部

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

SpringBoot AspectJ切面配合自定义注解实现权限校验的示例详解

《SpringBootAspectJ切面配合自定义注解实现权限校验的示例详解》本文章介绍了如何通过创建自定义的权限校验注解,配合AspectJ切面拦截注解实现权限校验,本文结合实例代码给大家介绍的非... 目录1. 创建权限校验注解2. 创建ASPectJ切面拦截注解校验权限3. 用法示例A. 参考文章本文

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详