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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
日志服务 SLS,月写入数据量 50GB 1个月
简介:

 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]# grouadd -g 694 haclient  
#添加heartbeat运行需要的haclient组
 
[root@node1 heartbeat-2.1.3]# useradd -u 694 -g 694 hacluster  
#添加heartbeat运行需要的hacluster用户
 
#heartbeat的安装包中默认包含ldirectord插件,该插件主要用于管理负载均衡,为保证ldirectord可用还行安装perl-Mailtools
 
[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/modules/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
checktimeout=3   #检测超时时间
checkinterval=1  #检测时间
autoreload=yes   #配置文件改动时是否自动加载
logfile="/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          #连接会话保持时间
        protocol=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的日志存放位置。
 
#crm 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 gid=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 LVSSyncDaemonSwap::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 -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          1         
  -> 192.168.32.33:80             Route   1      0          1       
#node0的lvs配置生效
 
[root@node0 ~]# iptables -A OUTPUT -d 192.168.32.254 -p icmp -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轮询方式切换
 
本文转自netsword 51CTO博客,原文链接:http://blog.51cto.com/netsword/769156

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
4月前
|
负载均衡 NoSQL 应用服务中间件
搭建高可用及负载均衡的Redis
【7月更文挑战第10天】
142 1
|
4月前
|
负载均衡 安全 Cloud Native
云上负载均衡:构建高可用、高性能的网络应用架构
与云原生技术深度融合:随着云原生技术的普及和发展未来的云上负载均衡将更加紧密地与云原生技术相结合。例如与Kubernetes等容器编排平台集成实现自动化的服务发现和路由管理;与Serverless架构结合提供无缝的流量接入和请求处理能力。 安全性能提升:面对日益严峻的网络安全威胁云上负载均衡将更加注重安全性能的提升。通过引入加密传输、访问控制、DDoS防护等安全措施确保网络流量的安全性和隐私性;同时还将建立完善的安全监控和应急响应机制以应对各种安全事件和突发事件。 支持多协议和多场景:未来的云上负载均衡将支持更多种类的网络协议和应用场景以满足不同用户和业务的需求。例如支持HTTP/2、
243 0
|
4月前
|
负载均衡 算法 Java
实现高可用和可扩展的负载均衡系统的Java方法
实现高可用和可扩展的负载均衡系统的Java方法
|
5月前
|
负载均衡 应用服务中间件 开发工具
技术笔记:nginx和keeplive实现负载均衡高可用
技术笔记:nginx和keeplive实现负载均衡高可用
|
6月前
|
负载均衡 算法 应用服务中间件
面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
字节跳动面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
131 0
|
6月前
|
负载均衡 应用服务中间件 API
Nginx配置文件详解Nginx负载均衡Nginx静态配置Nginx反向代理
Nginx配置文件详解Nginx负载均衡Nginx静态配置Nginx反向代理
173 4
|
5月前
|
缓存 负载均衡 算法
解读 Nginx:构建高效反向代理和负载均衡的秘密
解读 Nginx:构建高效反向代理和负载均衡的秘密
122 2
|
4月前
|
负载均衡 算法 应用服务中间件
nginx自定义负载均衡及根据cpu运行自定义负载均衡
nginx自定义负载均衡及根据cpu运行自定义负载均衡
94 1
|
4月前
|
运维 负载均衡 算法
SLB与NGINX的异同是什么
SLB与NGINX的异同是什么
466 2
|
6月前
|
负载均衡 应用服务中间件 nginx
解决nginx配置负载均衡时invalid host in upstream报错
在Windows环境下,配置Nginx 1.11.5进行负载均衡时遇到问题,服务无法启动。错误日志显示“invalid host in upstream”。检查发现上游服务器列表中,192.168.29.128的主机地址无效。负载均衡配置中,两个服务器地址前误加了&quot;http://&quot;。修正方法是删除上游服务器列表和proxy_pass中的&quot;http://&quot;。问题解决后,Nginx服务应能正常启动。
517 4
解决nginx配置负载均衡时invalid host in upstream报错
下一篇
无影云桌面