IPVS-DR+heartbeat+ldirectord实现高可用负载均衡集

2024-01-11 17:32

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

一、环境 节点类型      主机名    ip地址   lvs-master    node0     eth0:192.168.32.30                           eth1:10.160.100.30  heart vip:192.168.32.21 lvs-backup    node1     eth0:192.168.32.31                           eth1:10.160.100.31  heart vip:192.168.32.21 RealServer1   node2     eth0:192.168.32.32                           eth1:10.160.100.32    RealServer2   node3     eth0:192.168.32.33                           eth1:10.160.100.33二、安装1、安装libnet [root@node1 ~]# tar -zxvf libnet-1.1.4.tar.gz [root@node1 ~]# cd libnet-1.1.4 [root@node1 libnet-1.1.4]# ./configure [root@node1 libnet-1.1.4]# make;make install #libnet是一个高层次API工具,使用heartbeat需要用到他 2、安装heartbeat [root@node1 ~]# tar -zxvf heartbeat-2.1.3.tar.gz  [root@node1 ~]# cd heartbeat-2.1.3 [root@node1 heartbeat-2.1.3]# ./ConfigureMe configure --disable-swig --disable-snmp- subagent [root@node1 heartbeat-2.1.3]# make ; make install   [root@node1 heartbeat-2.1.3]# cp doc/ha.cf doc/haresource doc/anthkeys /etc/ha.d/ #heartbeat复制样本配置文件(ha.cf、haresources、authkeys要到/etc/ha.d目录下面  [root@node1 heartbeat-2.1.3]# cp ldirectord/ldiretord.cf /etc/ha.d/   #复制ldirectord的配置文件至/etc/ha.d目录下  [root@node1 heartbeat-2.1.3]# groua dd -g 694 haclient   #添加heartbeat运行需要的haclient组  [root@node1 heartbeat-2.1.3]# useradd -u 694 -g 694 hacluster   #添加heartbeat运行需要的hacluster用户  #heartbeat的安装包中默认包含ldirectord插件,该插件主要用于管理负载均衡,为保证ldirectord可用还行安装perl-Mailtoo ls  [root@node1 ~]# yum install perl-TimeDate.noarch [root@node1 ~]# rpm -ivh perl-MailTools-2.04-1.el5.rf.noarch.rpm #安装ldirectord正常运行所需依赖工具 3、安装ipvsadm [root@node1 ~]# yum install ipvsadm.i386 [root@node1 ~]# modprobe -l | grep ipvs /lib/mo dules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs.ko /lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_dh.ko /lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_ ftp.ko /lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_lblc.ko /lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_lblcr.ko /lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_lc.ko /lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_nq.ko /lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_rr.ko /lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_ sed.ko /lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_sh.ko /lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_wlc.ko /lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_wrr.ko #查看内核是否加载ipvs模块 三、配置ldirectord [root@node1 ~]# vim /etc/ha.d/ldirectord.cf check timeout=3   #检测超时时间checkinterval=1  #检测时间autoreload=yes   #配置文件改动时是否自动加载log file="/var/log/ldirectord.log"    # ldirectord日志路径quiescent=yes    #检测到real server异常后是否保留该real server的配置 virtual=192.168.32.21:80                 #VIP         real=192.168.32.32:80 gate #Real Server1         real=192.168.32.33:80 gate #Real Server2         service=http         request="test.html"              #要求 httpd根下必须存在test.html文件且内容为receive参数所定义        receive="test"         virtualhost=httpd       #随意定义        scheduler=rr            #LVS负载算法,rr:轮询 persistent=600          #连接会话保持时间        proto col=tcp                   checktype=negotiate     #通过交互来判断服务是否正常        checkport=80   [root@node1 ~]# scp /etc/ha.d/ldirectord node0:/etc/ha.d/ldirectord #确保两lvs主机(node0和node1)ldirectord.cf文件内容完全一样 四、heartbeat(两台lvs服务器node0和node1配置完全一样)1、heartbeat主配置文件(/etc/ha.d/ha.cf) [root@node1 ha.d]# vim /etc/ha.d/ha.cf #debugfile /var/log/ha-debug   logfile /var/log/ha-log    #指名heartbeat的日志存放位置。  #c rm yes      #是否开启Cluster Resource Manager(集群资源管理)功能。    bcast eth1    #指明心跳使用以太网广播方式,并且是在eth1接口上进行广播。    keepalive 2  #指定心跳间隔时间为2秒(即每两秒钟在eth1上发送一次广播)。    deadtime 30  #指定备用节点在30秒内没有收到主节点的心跳信号后,则立即接管主节点的服务资源。    warntime 10  #指定心跳延迟的时间为十秒。当10秒钟内备份节点不能接收到主节点的心跳信号时,就会往日志中写入一个警告日志,但此时不会切换服务。    initdead 120   #在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两 倍。     udpport 694   #设置广播通信使用的端口,694为默认使用的端口号。     #baud 19200    #设置串行通信的波特率。   #serial /dev/ttyS0   #选择串行通信设备,用于双机使用串口线连接的情况。如果双机使用以太网。     #ucast eth0 192.168.1.2 #采用网卡eth1的udp单播来组织心跳,后面跟的IP地址应为双机对方的IP地址。    # mcast eth0 225.0.0.1 694 1 0 #采用网卡eth0的Udp多播来组织心跳,一般在备用节点不止一台时使用。Bcast、ucast和mcast分别代表广播、单播和多播,是组织心跳的三种方式,任选其一即可。 auto_failback on  #用来定义当主节点恢复后,是否将服务自动切回,heartbeat的两台主机分别为主节点和备份节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给备份节点并由备份节点运行服务。在该选项设为on的情况下,一旦主节点恢复运行,则自动获取资源并取代备份节点,如果该选项设置为off,那么当主节点恢复后,将变为备份节点,而原来的备份节点成为主节点。     #stonith baytech /etc/ha.d/conf/stonith.baytech    # stonith的主要作用是使出现问题的节点从集群环境中脱离,进而释放集群资源,避免两个节点争用一个资源的情形发生。保证共享数据的安全性和完整性。     #watchdog /dev/watchdog  #该选项是可选配置,是通过Heartbeat来监控系统的运行状态。使用该特性,需要在内核中载入"softdog"内核模块,用来生成实际的设备文件,如果系统中没有这个内核模块,就需要指定此模块,重新编译内核。编译完成输入" insmod softdog"加载该模块。然后输入"grep misc /proc/devices"(应为10),输入" cat /proc/misc |grep watchdog"(应为130)。最后,生成设备文件:"mknod /dev/watchdog c 10 130" 。即可使用此功能。 node node0   #主节点主机名,可以通过 命令“uanme –n”查看。  node node1   #备用节点主机名。    ping 192.168.32.254 #选择ping的节点,ping 节点选择的越好,HA集群就越强壮,可以选择固定的路由器作为ping节点,但是最好不要选择集群中的成员作为ping节点 ,ping节点仅仅用来测试网络连接。     #ping_group group1 192.168.12.251 192.168.12.239   #类似于ping。     #respawn hacluster /usr/local/ha/lib/heartbeat/ipfail   #apiauth pingd g id=haclient uid=hacluster  apiauth pingd gid=root uid=root   respawn hacluster /usr/local/ha/lib/heartbeat/pingd -m 100 -d 5s  #该选项是可选配置,列出与heartbeat一起启动和关闭的进程,该进程一般是和heartbeat集成的插件,这些进程遇到故障可以自动重新启动。最常用的进程是pingd,此进程用于检测和监控网卡状态,需要配合ping语句指定的ping node来检测网络的连通性。其中hacluster表示启动pingd进程的身份。   #下面的配置是关键,也就是激活crm管理,开始使用v2 style格式    crm respawn    #注意,还可以使用crm yes的写法,但这样写的话,如果后面的cib.xml配置有问题   #会导致heartbeat直接重启该服务器,所以,测试时建议使用respawn的写法     #下面是对传输的数据进行 压缩,是可选项  compression     bz2   compression_threshold 2   #注意,v2 style不支持ipfail功能,须使用pingd代替     [root@node1 ~]# scp /etc/ha.d/ha.cf node0:/etc/ha.d/ha.cf #拷贝主配置文件到node0上 2、认证文件(/etc/ha.d/authkeys) [root@node1 resource.d]# vim /etc/ha.d/authkeys auth 1 1 crc #2 sha1 HI! #3 md5 Hello!   #authkeys文件用于设定heartbeat的认证方式,共有三种可用的认证方式:crc、md5和sha1,三种认证方式的安全性依次提高,但是占用的系统资源也依次增加。如果heartbeat集群运行在安全的网络上,可以使用crc方式,如果HA每个节点的硬件配置很高,建议使用sha1,这种认证方式安全级别最高,如果是处于网络安全和系统资源之间,可以使用md5认证方式。无论auth后面指定的是什么数字,在下一行必须作为关键字再次出现,例如指定了“auth 6”,下面一定要有一行“6 认证类型”。最后确保这个文件的权限是600(即-rw-------)。  [root@node1 ~]# scp /etc/ha.d/authkeys node0:/etc/ha.d/authkeys #拷贝认证文件到node0上 3、资源文件[root@node1 ~]# vim /etc/ha.d/haresources node0 IPaddr2::192.168.32.21/24/eth0 ldirectord::ldirectord.cf LVSSy ncDaemonSwap::master #添加VIP,通过ldirectord启动lvs配置  #haresources文件用于指定双机系统的主节点、集群IP、子网掩码、广播地址以及启动的服务等集群资源,文件每一行可以包含一个或多个资源脚本名,资源之间使用空格隔开,参数之间使用两个冒号隔开,在两个HA节点上该文件必须完全一致,此文件的一般格式为:node-name network  <resource-group>  #node-name表示主节点的主机名,必须和ha.cf文件中指定的节点名一致,network用于设定集群的IP地址、子网掩码、网络设备标识等,需要注意的是,这里指定的IP地址就是集群对外服务的IP地址,resource-group用来指定需要heartbeat托管的服务,也就是这些服务可以由heartbeat来启动和关闭,如果要托管这些服务,必须将服务写成可以通过start/stop来启动和关闭的脚步,然后放到/etc/init.d/或者/etc/ha.d/resource.d/目录下,heartbeat会根据脚本的名称自动去/etc/init.d或者/etc/ha.d/resource.d/目录下找到相应脚步进行启动或关闭操作。  [root@node1 ~]# scp /etc/ha.d/haresources node0:/etc/ha.d/haresources #拷贝资源文件到node0上 五、RealServer(node2和node3)配置1、生成负载均衡VIP脚本(node2和node3一样)[root@node2~] # vim /etc/rc.d/init.d/lvsrs   # #!/bin/bash #discription : Start Real Server VIP=192.168.32.21 . /etc/rc.d/init.d/functions case "$1" in   start)   echo "Start LVS of Real Server" /sbin/ ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up   echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore   echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce   echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore   echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce   ;;   stop) /sbin/ifconfig lo:0 down   echo "Close LVS of Director Server"    echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore   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/all/arp_announce   ;;   *)   echo "Usage : $0 {start|stop}"   exit 1 esac   [root@node2~] # chmod a+x /etc/rc.d/init.d/lvsrs   #给脚本增加可执行权限,然后启动并设置为开机启动: 2、生成测试文件[root@node2~] # echo "test"> /var/www/html/test.html  #ldirectord测试页,文件名和内容与ldirectord.cf中定义一样[root@node2~] # echo "I am node2; My Ip:10.160.100.32"> /var/www/html/index.html   [root@node3~] # echo "test"> /var/www/html/test.html  #ldirectord测试页,文件名和内容与ldirectord.cf中定义一样[root@node3~] # echo "I am node3; My Ip:10.160.100.33"> /var/www/html/index.html  六、启动测试1、启动服务[root@node0 ~]# service heartbeat start [root@node0 ~]# chkconfig heartbeat on [root@node1 ~]# service heartbeat start [root@node1 ~]# chkconfig heartbeat on   [root@node2 ~]# service lvsrs start [root@node2 ~]# chkconfig lvsrs on [root@node2 ~]# service httpd start [root@node2 ~]# chkconfig httpd on   [root@node3 ~]# service lvsrs start [root@node3 ~]# chkconfig lvsrs on [root@node3 ~]# service httpd start [root@node3 ~]# chkconfig httpd on 2、测试[root@node0 ~]# ip addr show | grep 192.168.32.21     inet 192.168.32.21/24 brd 192.168.32.255 scope global secondary eth0 #node0的eth0网口已经添加vip   [root@node0 ~]# ipvsadm - lnIP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn TCP  192.168.32.21:80 rr   -> 192.168.32.32:80             Route   1      0          1            -> 192.168.32.33:80             Route   1      0          1        #node0的lvs配置生效  [root@node0 ~]# iptables -A OUTPUT -d 192.168.32.254 -p i cmp -j REJECT  #人为断开网络  [root@node1 ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn TCP  192.168.32.21:80 rr   -> 192.168.32.32:80             Route   1      0          0            -> 192.168.32.33:80             Route   1      0          0          #lvs自动切换到node1上,说明heartbeat双机机制成功 realserver配置测试略,通过ie访问可得到web内容再2s轮询方式切换 http://www.linuxso.com/fuzai/17706.html

这篇关于IPVS-DR+heartbeat+ldirectord实现高可用负载均衡集的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Spring Boot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)

《SpringBoot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)》:本文主要介绍SpringBoot拦截器Interceptor与过滤器Filter深度解析... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现与实

C#实现访问远程硬盘的图文教程

《C#实现访问远程硬盘的图文教程》在现实场景中,我们经常用到远程桌面功能,而在某些场景下,我们需要使用类似的远程硬盘功能,这样能非常方便地操作对方电脑磁盘的目录、以及传送文件,这次我们将给出一个完整的... 目录引言一. 远程硬盘功能展示二. 远程硬盘代码实现1. 底层业务通信实现2. UI 实现三. De

SpringBoot后端实现小程序微信登录功能实现

《SpringBoot后端实现小程序微信登录功能实现》微信小程序登录是开发者通过微信提供的身份验证机制,获取用户唯一标识(openid)和会话密钥(session_key)的过程,这篇文章给大家介绍S... 目录SpringBoot实现微信小程序登录简介SpringBoot后端实现微信登录SpringBoo

使用Vue-ECharts实现数据可视化图表功能

《使用Vue-ECharts实现数据可视化图表功能》在前端开发中,经常会遇到需要展示数据可视化的需求,比如柱状图、折线图、饼图等,这类需求不仅要求我们准确地将数据呈现出来,还需要兼顾美观与交互体验,所... 目录前言为什么选择 vue-ECharts?1. 基于 ECharts,功能强大2. 更符合 Vue

使用WPF实现窗口抖动动画效果

《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后

uniapp小程序中实现无缝衔接滚动效果代码示例

《uniapp小程序中实现无缝衔接滚动效果代码示例》:本文主要介绍uniapp小程序中实现无缝衔接滚动效果的相关资料,该方法可以实现滚动内容中字的不同的颜色更改,并且可以根据需要进行艺术化更改和自... 组件滚动通知只能实现简单的滚动效果,不能实现滚动内容中的字进行不同颜色的更改,下面实现一个无缝衔接的滚动

C#通过进程调用外部应用的实现示例

《C#通过进程调用外部应用的实现示例》本文主要介绍了C#通过进程调用外部应用的实现示例,以WINFORM应用程序为例,在C#应用程序中调用PYTHON程序,具有一定的参考价值,感兴趣的可以了解一下... 目录窗口程序类进程信息类 系统设置类 以WINFORM应用程序为例,在C#应用程序中调用python程序

利用Python实现可回滚方案的示例代码

《利用Python实现可回滚方案的示例代码》很多项目翻车不是因为不会做,而是走错了方向却没法回头,技术选型失败的风险我们都清楚,但真正能提前规划“回滚方案”的人不多,本文从实际项目出发,教你如何用Py... 目录描述题解答案(核心思路)题解代码分析第一步:抽象缓存接口第二步:实现两个版本第三步:根据 Fea

Go语言使用slices包轻松实现排序功能

《Go语言使用slices包轻松实现排序功能》在Go语言开发中,对数据进行排序是常见的需求,Go1.18版本引入的slices包提供了简洁高效的排序解决方案,支持内置类型和用户自定义类型的排序操作,本... 目录一、内置类型排序:字符串与整数的应用1. 字符串切片排序2. 整数切片排序二、检查切片排序状态:

python利用backoff实现异常自动重试详解

《python利用backoff实现异常自动重试详解》backoff是一个用于实现重试机制的Python库,通过指数退避或其他策略自动重试失败的操作,下面小编就来和大家详细讲讲如何利用backoff实... 目录1. backoff 库简介2. on_exception 装饰器的原理2.1 核心逻辑2.2