Lvs+heartbeat高可用高性能web站点的搭建

简介:

 这是我们公司在实际的生产环境当中使用的一套东西,希望对大家有所帮助(实际的公网ip,我已经做了相应的修改):

说明:每台服务器需要有两块网卡:eth0连接内网的交换机,用私网ip,实现服务器间内部访问;eth1连接公网交换机,供外网访问。如果想节约成本可以只用一个交换机,划分2个vlan分别连接内网和外网也可以,但这样有风险,一旦交换机出问题,内网和外网都不能访问,一定要权衡一下得失。

clip_image002

各个服务器ip配置如下:

主ha  eth1:1.1.1.14   eth0:192.168.1.8(心跳)

从ha  eth1:1.1.1.15   eth0:192.168.1.30(心跳)

real1:eth1:1.1.1.16 eth0:192.168.1.9

real1:eth1:1.1.1.16 eth0:192.168.1.10

real1:eth1:1.1.1.16 eth0:192.168.1.11

real1:eth1:1.1.1.16 eth0:192.168.1.12

一. 主ha的配置:

1. hosts文件的内容如下(如果有自己的DNS的话,也可以用DNS做解析):

127.0.0.1 primary.fantong.com localhost.localdomain localhost 
::1  localhost6.localdomain6 localhost6 
1.1.1.14  primary.fantong.com 
192.168.1.8  primary.fantong.com 
1.1.1.15  backup.fantong.com 
192.168.1.30  backup.fantong.com

2.修改主机名: 编辑/etc/sysconfig/network

HOSTNAME=primary.fantong.com

3. 用命令修改一下主机名:

#hostname primary.fantong.com

4. 安装软件

yum -y install libnet

yum -y install heartbeat-*

yum -y install heartbeat(如果报错,再安装一次就ok了)

yum  -y install ipvsadm

如果是redhat系统没有yum源的话,可以参考我的一篇博客文章来更改yum的一些设置: http://gehailong.blog.51cto.com/765312/610127

5. 软件安装完成以后会生成目录/etc/ha.d,该目录下存放heartbeat 的配置文件,验证文件,资源文件(脚本,注意:在heartbeat中,脚本都被称为资源)等,这三个文件是必不可少的,本文中这三个文件都是我手工写的。

1). Heatbeat的主配文件:/etc/ha.d/ha.cf/ha.cf

logfile /var/log/ha-log 
debugfile /var/log/ha-debug 
logfacility     local0  
keepalive 2 #主从切换的保持时间 
deadtime 30 #宣布对方死亡时间 
warntime 10 #警告时间 
udpport 694 #主从之间的通信端口 
ucast eth0 192.168.1.30  #采用单播方式探测心跳,bcast是广播方式;后面的地址是对端地址 
auto_failback on #自动恢复,就是说如果主从故障中恢复会抢回主的位置 
node    primary.fantong.com #主节点主机名 
node    backup.fantong.com #从节点主机名 
ping 192.168.1.30 
ping_group lbgroup 1.1.1.14 1.1.1.15 
ping_group lbgroup 192.168.1.8 192.168.1.30 
respawn hacluster /usr/lib64/heartbeat/ipfail  #如果是32位系统,则目录应该为/usr/lib/heartbeat/ipfail 
apiauth ipfail gid=haclient uid=hacluster #验证用的用户和组ID(已经自动建好了)

2). 资源列表 /etc/ha.d/haresources后面跟的是资源名(脚本),要保证跟backup的内容完全一致。

primary.fantong.com lvs ldirectord

3). 验证文件 /etc/ha.d/authkeys 主从验证 testlab验证密码 ,要保证跟backup的内容一致,否则主从验证失败。注意:改为该文件权限必须为600

auth1 
1 sha1 testlab

6. 在安装heatbeat-*的时候会安装一个叫heartbeat-ldirectord 的文件,他的作用是管理后端的realserver。比如后端某个realserver死掉了,他会自动从列表当中删除该资源,当该资源恢复后再自动添加进去。配置文件是:/etc/ha.d/ldirectord.cf ,内容如下(是我自己手工写的):

# Global Directives监控realserver 
checktimeout=3 #realserver超时时间 
checkinterval=1 #检查的间隔时间 
fallback=127.0.0.1:80 #如果所有realserver宕机,由谁来承担 
autoreload=yes 
logfile="/var/log/ldirectord.log" 
emailalert="ftyw@fantong.com" #出问题发邮件给谁(可以定义邮件组) 
emailalertfreq=3600 
emailalertstatus=all 
quiescent=no #如果realserver出问题,立即从资源列表删除 
# Sample for an http virtual service 
virtual=1.1.1.13:80  #(注意这个文件的格式,下面的内容必须至少空4格) 
   real=1.1.1.16:80 gate #gate表示采用的是lvs中DR模式,有关lvs的模式和工作原理大家可以查找相关资料来了解一下。 
     real=1.1.1.17:80 gate 
real=1.1.1.18:80 gate

real=1.1.1.19:80 gate 
fallback=127.0.0.1:80 gate 
service=http 
scheduler=wrr #realserver的调动方法:加权轮训 
persistent=5 #客户端连接的持久时间 
protocol=tcp 
checktype=connect 
   checkport=80

7. 该脚本的作用是启动资源 /etc/init.d/lvs

#!/bin/bash 
# description: start LVS of DirectorServer 
#Written by :NetSeek http://www.linuxtone.org GW=192.168.1.254 
# website director vip. 
GW=1.1.1.13  #网关地址千万不要填错了,否则你的辅助(浮动)ip是无法访问的。 
WEB_VIP=1.1.1.13 
WEB_RIP1=1.1.1.16 
WEB_RIP2=1.1.1.17 
WEB_RIP3=1.1.1.18

WEB_RIP3=1.1.1.19 
. /etc/rc.d/init.d/functions 
logger $0 called with $1 
case "$1" in 
start) 
# Clear all iptables rules. 
/sbin/iptables –F #这个地方要注意一下,如果公司最外端有防火墙,就可以清空iptables内容(都做允许,或者停止),把改行注释掉;如果没有就需要有防火墙了,自己写策略或者写脚本。 
# Reset iptables counters. 
/sbin/iptables –Z #同上 
# Clear all ipvsadm rules/services. 
/sbin/ipvsadm -C 
#set lvs vip for dr 
/sbin/ipvsadm --set 30 5 60 
/sbin/ifconfig eth1:0 $WEB_VIP broadcast $WEB_VIP netmask 255.255.255.255 up 
/sbin/route add -host $WEB_VIP dev eth1:0 
/sbin/ipvsadm -A -t $WEB_VIP:80 -s wrr -p 3 
/sbin/ipvsadm -a -t $WEB_VIP:80 -r $WEB_RIP1:80 -g -w 1 
/sbin/ipvsadm -a -t $WEB_VIP:80 -r $WEB_RIP2:80 -g -w 1

/sbin/ipvsadm -a -t $WEB_VIP:80 -r $WEB_RIP3:80 -g -w 1

/sbin/ipvsadm -a -t $WEB_VIP:80 -r $WEB_RIP4:80 -g -w 1

touch /var/lock/subsys/ipvsadm >/dev/null 2>&1 
# set Arp 
/sbin/arping -I eth1 -c 5 -s $WEB_VIP $GW >/dev/null 2>&1 
;; 
stop) 
/sbin/ipvsadm -C 
/sbin/ipvsadm -Z 
ifconfig eth1:0 down 
route del $WEB_VIP >/dev/null 2>&1 
rm -rf /var/lock/subsys/ipvsadm >/dev/null 2>&1 
/sbin/arping -I eth1 -c 5 -s $WEB_VIP $GW 
echo "ipvsadm stoped" 
;; 
status) 
if [ ! -e /var/lock/subsys/ipvsadm ];then 
echo "ipvsadm is stoped" 
exit 1 
else 
ipvsadm -ln 
echo "..........ipvsadm is OK." 
fi 
;; 
*) 
echo "Usage: $0 {start|stop|status}" 
exit 1 
esac

exit 0

8.  做一下两步操作:

chmod 755 /etc/init.d/lvs 

     ln -s  /etc/init.d/lvs  /etc/ha.d/resource.d  #启动ldirectord的时候它会从/etc/init.d 和/etc/ha.d/resource.d 目 录里面搜索资源(脚本)。

9. 让heartbeat开机自启动。

chkconfig   heartbeat  on

二.  backup上面的配置

1.安装软件包,同primary

2. 把primary上所有的脚本拷贝到backup上面,包括hosts文件,/etc/ha.d/*里面的所有的内容。

3.修改/etc/ha.d/ha.cf。其他文件的内容与主的保持一致就可以。

ucast eth0 192.168.1.8  #采用单播方式探测心跳,bcast是广播方式;后面的地址是对端地址(主的ip) 
.........

ping 192.168.1.8

4. chkconfig heartbeat  on

三. realserver的配置

1. 编写脚本/root/real.sh,主要作用是屏蔽arp,否则的话会与其他realserver和ha的地址发生冲突,脚本内容如下:

#/bin/sh 
VIP=1.1.1.13 
source /etc/rc.d/init.d/functions 
case "$1" in 
start) 
echo "start LVS of RealServer" 
/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 RealServer" 
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 "wrong,please use start|stop" 
exit 1 
esac

2. 修改一下脚本权限:chmod 755 real.sh

3. 启动脚本/root/real.sh start

4. 加入启动项:

修改/etc/rc.local在最后写入一行

/root/real.sh  start

四. 测试。

1. 在主从上面分别启动heartbeat。(注意:先主后从)

service heartbeat start

2. 观察主日志文件/var/log/ha-log

clip_image004

看到后面两行表示已经启动完毕,资源加载成功。

3. 观察从日志文件/var/log/ha-log

clip_image006



本文转自 gehailong 51CTO博客,原文链接:http://blog.51cto.com/gehailong/693717,如需转载请自行联系原作者

相关文章
|
5月前
|
Java 应用服务中间件 Shell
Nginx+Keepalived+Tomcat 实现Web高可用集群
Nginx+Keepalived+Tomcat 实现Web高可用集群
165 0
|
2月前
|
缓存 前端开发 JavaScript
构建高性能与用户体验并重的现代Web应用
构建高性能与用户体验并重的现代Web应用
50 5
|
5月前
|
监控 前端开发 Serverless
现代化 Web 应用构建问题之观测站点的PV、UV和API异常等指标如何解决
现代化 Web 应用构建问题之观测站点的PV、UV和API异常等指标如何解决
65 2
|
5月前
|
数据可视化 NoSQL Serverless
现代化 Web 应用构建问题之Serverless架构的Web站点费用计算如何解决
现代化 Web 应用构建问题之Serverless架构的Web站点费用计算如何解决
59 1
|
5月前
|
Rust 安全 开发者
惊爆!Xamarin 携手机器学习,开启智能应用新纪元,个性化体验与跨平台优势完美融合大揭秘!
【8月更文挑战第31天】随着互联网的发展,Web应用对性能和安全性要求不断提高。Rust凭借卓越的性能、内存安全及丰富生态,成为构建高性能Web服务器的理想选择。本文通过一个简单示例,展示如何使用Rust和Actix-web框架搭建基本Web服务器,从创建项目到运行服务器全程指导,帮助读者领略Rust在Web后端开发中的强大能力。通过实践,读者可以体验到Rust在性能和安全性方面的优势,以及其在Web开发领域的巨大潜力。
54 0
|
5月前
|
UED 存储 自然语言处理
【语言无界·体验无疆】解锁Vaadin应用全球化秘籍:从代码到文化,让你的应用畅游世界每一个角落!
【8月更文挑战第31天】《国际化与本地化实战:构建多语言支持的Vaadin应用》详细介绍了如何使用Vaadin框架实现应用的国际化和本地化,提升用户体验和市场竞争力。文章涵盖资源文件的创建与管理、消息绑定与动态加载、日期和数字格式化及文化敏感性处理等方面,通过具体示例代码和最佳实践,帮助开发者构建适应不同语言和地区设置的Vaadin应用。通过这些步骤,您的应用将更加灵活,满足全球用户需求。
70 0
|
5月前
|
API 数据库 UED
全面解析构建高性能API的秘诀:运用Entity Framework Core与异步编程提升Web应用响应速度及并发处理能力的详细指南与实践案例
【8月更文挑战第31天】本文详细介绍了如何利用 Entity Framework Core (EF Core)的异步编程特性构建高性能 API。通过创建基于 EF Core 的 .NET Core Web API 项目,配置数据库上下文,并定义领域模型,文章展示了如何使用异步方法进行数据查询、加载相关实体及事务处理。具体代码示例涵盖了 GET、POST、PUT 和 DELETE 操作,全面展示了 EF Core 异步编程的优势,有助于提升 API 的响应速度和处理能力。
67 0
|
5月前
|
监控 Java API
Spring Boot中的异步革命:构建高性能的现代Web应用
【8月更文挑战第29天】Spring Boot 是一个简化 Spring 应用开发与部署的框架。异步任务处理通过后台线程执行耗时操作,提升用户体验和系统并发能力。要在 Spring Boot 中启用异步任务,需在配置类上添加 `@EnableAsync` 注解,并定义一个自定义的 `ThreadPoolTaskExecutor` 或使用默认线程池。通过 `@Async` 注解的方法将在异步线程中执行。异步任务适用于发送电子邮件、数据处理、外部 API 调用和定时任务等场景。最佳实践中应注意正确配置线程池、处理返回值和异常、以及监控任务状态,确保系统的稳定性和健壮性。
47 0
|
5月前
|
运维 Serverless API
Serverless痛点解决问题之编写并部署一个弹性高可用的 Web API如何解决
Serverless痛点解决问题之编写并部署一个弹性高可用的 Web API如何解决
76 0
|
6月前
|
数据库 开发者 Python
实战指南:用Python协程与异步函数优化高性能Web应用
【7月更文挑战第15天】Python的协程与异步函数优化Web性能,通过非阻塞I/O提升并发处理能力。使用aiohttp库构建异步服务器,示例代码展示如何处理GET请求。异步处理减少资源消耗,提高响应速度和吞吐量,适用于高并发场景。掌握这项技术对提升Web应用性能至关重要。
98 10