Lvs+heartbeat高可用高性能web站点的搭建
这是我们公司在实际的生产环境当中使用的一套东西,希望对大家有所帮助(实际的公网ip,我已经做了相应的修改):
说明:每台服务器需要有两块网卡:eth0连接内网的交换机,用私网ip,实现服务器间内部访问;eth1连接公网交换机,供外网访问。如果想节约成本可以只用一个交换机,划分2个vlan分别连接内网和外网也可以,但这样有风险,一旦交换机出问题,内网和外网都不能访问,一定要权衡一下得失。

各个服务器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

看到后面两行表示已经启动完毕,资源加载成功。
3. 观察从日志文件/var/log/ha-log

Lvs+heartbeat高可用高性能web站点的搭建的更多相关文章
- LVS+Heartbeat 高可用集群方案操作记录
之前分别介绍了LVS基础知识和Heartbeat基础知识, 今天这里简单说下LVS+Heartbeat实现高可用web集群方案的操作说明. Heartbeat 项目是 Linux-HA 工程的一个组成 ...
- 【转】构建高性能WEB站点之 吞吐率、吞吐量、TPS、性能测试
内容参考:构建高性能WEB站点.pdf 一.吞吐率 我们一般使用单位时间内服务器处理的请求数来描述其并发处理能力.称之为吞吐率(Throughput),单位是"req/s".吞吐率 ...
- 构建高性能WEB站点之 吞吐率、吞吐量、TPS、性能测试
内容参考: 构建高性能WEB站点.pdf 一.吞吐率 我们一般使用单位时间内服务器处理的请求数来描述其并发处理能力.称之为吞吐率(Throughput),单位是 “req/s”.吞吐率特指Web服务器 ...
- Heartbeat+LVS构建高可用负载均衡集群
1.heartbeat简介: Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统.心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里 ...
- 22.LVS+Keepalived 高可用群集
LVS+Keepalived 高可用群集 目录 LVS+Keepalived 高可用群集 keepalived工具介绍 Keepalived实现原理剖析 VRRP(虚拟路由冗余协议) VRRP 相关术 ...
- 【读书笔记】2016.12.10 《构建高性能Web站点》
本文地址 分享提纲: 1. 概述 2. 知识点 3. 待整理点 4. 参考文档 1. 概述 1.1)[该书信息] <构建高性能Web站点>: -- 百度百科 -- 本书目录: 第1章 绪论 ...
- 构建高性能web站点--读书大纲
用户输入你的站点网址,等了半天..还没打开,裤衩一下就给关了.好了,流失了一个用户.为什么会有这样的问题呢.怎么解决自己站点“慢”,体验差的问题呢. 在这段等待的时间里,到底发生了什么?事实上这并不简 ...
- 构建高性能WEB站点笔记三
构建高性能WEB站点笔记三 第10章 分布式缓存 10.1数据库的前端缓存区 文件系统内核缓冲区,位于物理内存的内核地址空间,除了使用O_DIRECT标记打开的文件以外,所有对磁盘文件的读写操作都要经 ...
- LVS+Keepalived高可用负载均衡集群架构实验-01
一.为什么要使用负载均衡技术? 1.系统高可用性 2. 系统可扩展性 3. 负载均衡能力 LVS+keepalived能很好的实现以上的要求,LVS提供负载均衡,keepalived提供健康检查, ...
随机推荐
- BZOJ 4712 洪水 (线段树+树剖动态维护DP)
题目大意:略 题目传送门 数据结构好题,但据说直接上动态DP会容易处理不少,然而蒟蒻不会.一氧化碳大爷说还有一个$log$的做法,然而我只会$log^{2}$的.. 考虑静态时如何处理,设$f[x]$ ...
- Linux菜鸟成长日记 ( Linux 下的 ftp 文件传输协议 )
https://blog.csdn.net/buster_zr/article/details/80244542 FTP FTP 是 File Transfer Protocol (文件传输协议)的英 ...
- js:Array对象常用方法介绍
前言 在js中,数组作为一个特殊的对象.是我们常用的数据格式.今天就来梳理一下常用的数组方法. 1.基础 几种基础的就简单介绍一下:创建数组 var arr1 = new Array(); //括号可 ...
- C# try-catch-return
正常执行try后才能执行finally,catch中的语句可能会影响finally的执行 使用 finally 块,可以清理在 Try 中分配的任何资源,而且,即使在 try 块中发生异常,您也可以运 ...
- six.moves的用法
six是用来兼容python 2 和 3的,我猜名字就是用的2和3的最小公倍数. six.moves 是用来处理那些在2 和 3里面函数的位置有变化的,直接用six.moves就可以屏蔽掉这些变化 P ...
- 今天又犯了Java/Scala里面substring的错误
每次都误以为是 substring(startIndex, length) 其实是 substring(startIndex, endIndex) 嗯 Java/Scala 跟 C++ 是不一样的.
- plsql解决64位解决办法
plsql解决64位解决办法 设置PLSQL Developer访问本机64位Oracle 由于在本机Windows Server 2008 R2 X64上安装了64位的Oracle 11.2.0.1 ...
- java书籍推荐:《Java SE 6 技術手册》
Java SE 6 技術手册 或 Java SE 6 技術手册 Java SE 6 技術手册 為什麼選擇用 Markdown?仅仅是單純把文件又一次排版太無聊了,不如趁這個機會學些新東西.所以我就藉 ...
- 剑指Offer面试题33(java版):把数组排成最小的数
题目:输入一个正整数数组.把数组里面全部的数字拼接排成一个数,打印能拼接出的全部数字中的一个.比如输入数组{3,32.321}.则打印出这3个数字能排成的最小数字321323. 这个题目最直接的做法应 ...
- ASP.NET—011:JavaScript报错常见问题
相信大家都写过JavaScript.JS由于语法以及自己须要实现的业务的原因,可能在一个页面上要写长篇大论.或者单独写js文件写了好几百K.JS不可否认给Web编程带了很多的方便. 可是假设JS发生了 ...