Heartbeat+DRBD+NFS+Keepalived+Lnmp.docx

上传人:b****1 文档编号:569421 上传时间:2023-04-29 格式:DOCX 页数:38 大小:354.17KB
下载 相关 举报
Heartbeat+DRBD+NFS+Keepalived+Lnmp.docx_第1页
第1页 / 共38页
Heartbeat+DRBD+NFS+Keepalived+Lnmp.docx_第2页
第2页 / 共38页
Heartbeat+DRBD+NFS+Keepalived+Lnmp.docx_第3页
第3页 / 共38页
Heartbeat+DRBD+NFS+Keepalived+Lnmp.docx_第4页
第4页 / 共38页
Heartbeat+DRBD+NFS+Keepalived+Lnmp.docx_第5页
第5页 / 共38页
Heartbeat+DRBD+NFS+Keepalived+Lnmp.docx_第6页
第6页 / 共38页
Heartbeat+DRBD+NFS+Keepalived+Lnmp.docx_第7页
第7页 / 共38页
Heartbeat+DRBD+NFS+Keepalived+Lnmp.docx_第8页
第8页 / 共38页
Heartbeat+DRBD+NFS+Keepalived+Lnmp.docx_第9页
第9页 / 共38页
Heartbeat+DRBD+NFS+Keepalived+Lnmp.docx_第10页
第10页 / 共38页
Heartbeat+DRBD+NFS+Keepalived+Lnmp.docx_第11页
第11页 / 共38页
Heartbeat+DRBD+NFS+Keepalived+Lnmp.docx_第12页
第12页 / 共38页
Heartbeat+DRBD+NFS+Keepalived+Lnmp.docx_第13页
第13页 / 共38页
Heartbeat+DRBD+NFS+Keepalived+Lnmp.docx_第14页
第14页 / 共38页
Heartbeat+DRBD+NFS+Keepalived+Lnmp.docx_第15页
第15页 / 共38页
Heartbeat+DRBD+NFS+Keepalived+Lnmp.docx_第16页
第16页 / 共38页
Heartbeat+DRBD+NFS+Keepalived+Lnmp.docx_第17页
第17页 / 共38页
Heartbeat+DRBD+NFS+Keepalived+Lnmp.docx_第18页
第18页 / 共38页
Heartbeat+DRBD+NFS+Keepalived+Lnmp.docx_第19页
第19页 / 共38页
Heartbeat+DRBD+NFS+Keepalived+Lnmp.docx_第20页
第20页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Heartbeat+DRBD+NFS+Keepalived+Lnmp.docx

《Heartbeat+DRBD+NFS+Keepalived+Lnmp.docx》由会员分享,可在线阅读,更多相关《Heartbeat+DRBD+NFS+Keepalived+Lnmp.docx(38页珍藏版)》请在冰点文库上搜索。

Heartbeat+DRBD+NFS+Keepalived+Lnmp.docx

Heartbeat+DRBD+NFS+Keepalived+Lnmp

双机热备+负载均衡线上方案

(Heartbeat+DRBD+NFS+Keepalived+Lnmp)

对于网站服务器来说,可靠性之重要不用我多说,但要想做到可靠性一般需要昂贵的设备,这里最主要是就是数据同步用的共享磁盘了,磁盘柜+磁盘一共下来是20多万,这对于追求最高性价比的双机负载热备方案来说是极其不靠谱的,尤其是中小型企业,私有企业,一般经理是不会考虑这么高的成本的。

我们通常做都是四台服务器+一个磁盘柜子+千兆交换机,那么这个成本下来将近30万了,而且这个方案有个弊端就是存储依然存在单点故障,除非使用双控制+双电源+双主板设计的磁盘柜,但这种成本实在太高。

那是否有更为廉价的双机方案呢,很明显开源软件帮我们解决了成本问题!

用Heartbeat+DRBD+NFS+Keepalived+Lnmp等开源软件实现双机负载热备架构只需要两台服务器+一台全千兆交换机,这个成本是极其低廉的,我们做运维了就是要用技术来压榨硬件性能,用最低的成本实现最高的效能,不然天天谈论的性能优化有何用?

堆叠硬件不是更好?

那不是我们的目的,下面我们来看看这两台服务器的双机热备+负载均衡是如何实现并且稳定运行的。

这个方案是我给一个论坛做的,论坛15分钟在线8000人,以前放在IIS里面,并发连接6000-7000左右,我给设计的双机热备方案如下图:

图一

2011-10-1211:

43:

32上传

下载附件(62.41KB)

注意:

第三台服务器可要可不要,我这里他由于成本问题,并没有采用第三台服务器,而是一共只有两台

系统环境配置

一,硬件配置:

节点一(centosa):

做主负载点,和主数据库压力负载点,必须高性能高稳定高I/O

配置如下:

CPU:

双CPU(4核+4核)5405级别

内存:

8G组三通道DDR3ECC内存

硬盘:

1块1TB普通硬盘+2块300GSAS15K(15000转)硬盘

网卡:

2块千兆网卡

节点二(centosb):

做分担负载和备服务器,稳定第一

CPU:

双CPU(4核+4核)5405

内存:

8G组三通道DDR3ECC内存

硬盘:

1块1TB普通硬盘+3块300GSAS15K(15000转)硬盘

网卡:

2块千兆网卡

注意:

网卡极力建议用四块,这个架构对网络I/O要求极高,我这里只有两块,没办法,机房做不到,如果你是百兆交换机,拜托,你一定要用四块网卡

二,操作系统配置

1),所有服务器的操作系统版本:

操作系统版本:

CentOS5.764位

操作系统官方下载地址:

http:

//isoredirect.centos.org/centos/5/isos/x86_64/

2),每台服务器的安装要求:

节点一:

分区:

一共三块硬盘,不用组RAID

第一块硬盘:

系统占用一块,分区情况如下:

/boot200MB

/40GB

swap交换分区8GB

/data第一块硬盘的所有剩余空间

第二块硬盘:

不要分区,留给我自己分区

第三块硬盘:

不要分区,留给我自己分区

系统安装安装规范

最小化安装,字符界面安装

去掉所有组件,只需要一个内核

节点二:

分区:

一共三块硬盘,不用组RAID

第一块硬盘:

系统占用一块,分区情况如下:

/boot500MB

/40GB

swap交换分区16GB

/data第一块硬盘的所有剩余空间

第二块硬盘:

不要分区,留给我自己分区

第三块硬盘:

不要分区,留给我自己分区

系统安装要求

最小化安装,字符界面安装

去掉所有组件,只需要一个内核

三,交换机配置:

注意:

有条件最好用两台交换机,内网一台,外网一台

如果只有一台交换机,划分两个VLAN,一个外网使用,一个内网使用

四,目录规划用途

/usr/local/src/lnmp:

用来存放源码工具等等

/data:

用来存放所有数据和NFS以及DRBD的挂载

/data/shell:

用来存放所有管理脚本

/data/mysql:

用来挂载DRBD的mysql资源,以供mysql存放数据库

/data/wwwnfs:

用来挂载DRBD生成的www资源,以供两个节点挂载到各个节点的/data/www目录,以供论坛等程序数据使用

/data/www:

用来挂载NFS资源,用来存放论坛(网站)等程序数据

 

双机热备+负载均衡具体配置

一,先建立用户和目录吧:

useradd-s/sbin/nologinwww

useradd-s/sbin/nologinmysql

mkdir-p/data/mysql

mkdir-p/data/www

mkdir-p/data/wwwnfs

mkdir-p/data/shell

二,架构详解

如果用LVS做均衡器拓扑图如下:

图二

2011-10-1212:

18:

52上传

下载附件(158.59KB)

如果用Nginx做均衡器拓扑图如下:

图三

2011-10-1212:

27:

51上传

下载附件(184.31KB)

我们这里用NGINX做均衡器,因此我用图三来拓扑,来讲讲这个拓扑的工作原理

内网:

1,DRBD网络存储创建出两个资源,一个mysql给mysql数据库同步用,一个www给web(论坛)数据NFS共享挂载用,虚拟出两个虚拟IP,一个是192.168.1.100,用来连接数据库,一个是192.168.1.200,用来给节点挂载NFS

注意:

NFS底下挂载了三次:

DRBD挂载一次,文件系统挂载一次,客户端挂载一次

2,Heartbeat来实现DRBD的HA,同时虚拟出两个内网IP,并管理NFS,MySQL的启动和关闭

外网:

1,两个节点都用Nginx做均衡器,通过内网调度负载两个节点,实现内部均衡

2,DNS配置双IP对应一个域名的方式来实现DNS轮询,实现外网均衡

3,Keepalived使用双主(master)配置虚拟出两个虚拟IP:

节点一12.12.12.100和节点二12.12.12.200,同时共外网访问,两个节点互为主从关系,当某个节点挂掉的时候,另外一个节点将同时是两个资源的master,同时拥有两个虚拟IP,实现资源转移

我们知道DNS的缺点就是生效慢,分配资源不合理,理论上有可能把所有的请求都发送给同一节点,导致均衡不合理导致所有资源不可用,这里我们由于有了NGINX内部负载,就不怕DNS轮询不均衡了,因为NGINX内部有严谨的调度方式,不管那台请求有多少,在内部都能实现理想的调度,这样就能把DNS负载均衡和NGINX完美结合,是硬件资源得到合理的利用,然后利用keepalive保证了每个节点的可靠性,几乎完美!

 

三,LNMP架构配置

两台服务器的一样配置这个我请看我发的这个帖子:

注意一:

这里MYSQL都不要初始化,不要启动!

后面有专门的配置的

注意二:

nginx所有端口都改成8080,因为一会还要安装nginx来做均衡器并对外提供服务,所以不要用默认的80

四,安装配置NFS

兵马未动粮草先行,NFS是网站存放数据实现数据同步的基础,我们先安装上吧

1,安装:

服务器端要安装:

nfs-utils:

NFS主程序

portmap:

RPC主程序

客户端要安装:

nfs-utils:

NFS主程序

portmap:

RPC主程序

由于我们这里一共只用了两台服务器,所以,这里客户端和服务器段是同一台机器,这点要注意了

两个节点同时安装:

1.yum-yinstallportmapnfs-utils

复制代码

2,配置:

生存共享目录vi/etc/exports

输入:

1./data/wwwnfs192.168.1.0/24(rw,sync,anonuid=501,anongid=501)

复制代码

注意:

/data/wwwnfs:

就是给两个节点挂载的目录,所有网站程序都放在这里,实现论坛程序等数据的共享(同步)

anonuid=501,anongid=501:

这个表示客户端上任何用户进入到挂载目录都以uid=501和gid=501身份,我这里这个代表的是www用户

3,启动:

serviceportmapstart

servicenfsstart

切忌,必须先启动portmap

chkconfig--level0123456nfsoff

chkconfig--level0123456portmapon

注意:

portmap服务器必须常驻,且不收heartbeat管理;而nfs这必须要用heartbeat来管理他的启动和关闭,所以这里要关闭nfs开机自动启动

同时要启动锁机制,因为同时有两个节点要使用同一份数据,所以需要有总裁,这个尤其是在NFS给mysql用的时候是必须要用的,对于论坛或网站,要看情况,如果存在对同一文件同时修改的时候必须要启动NFS锁机制,如果没有这种情况,那么建议不要启动,启动了会降低NFS的性能:

/sbin/rpc.lockd

echo"/sbin/rpc.lockd"/etc/rc.local

4,建立NFS的管理脚本

有人奇怪了,nfs用RPM安装的,应该直接用servicenfsstart/stop即可啊,维护还要建立脚本呢,这里由于NFS的启动关闭权要交给heartbeat处理,而默认/etc/init.d/nfs这个启动脚本在heartbeat处理的时候有问题,所以这里自己建立了一个

vinfs

输入:

1.#!

/bin/bash

2.

3.NFSD=/etc/rc.d/init.d/nfs

4.NFSDPID=`/sbin/pidofnfsd`

5.case$1in

6.start)

7.$NFSDstart;

8.;;

9.stop)

10.$NFSDstop;

11.if["$NFSDPID"!

=""];then

12.forNFSPIDin$NFSDPID

13.do/bin/kill-9$NFSPID;

14.done

15.fi

16.;;

17.*)

18.echo"Syntaxincorrect.Youneedoneof{start|stop}"

19.;;

20.esac

复制代码

wq保存退出

chmod+xnfs

OK,NFS服务器端配置完毕。

注意如果你用的是四台服务器或者更多,把均衡器和节点分开的,那么还需要在节点也就是NFS的客户端安装:

1.yum-yinstallportmapnfs-utils

复制代码

并且启动portmap

serviceportmapstart

chkconfig--level35portmapon

注意,客户端必须要启动portmap,且要安装nfs-utils,但不需要启动NFS

我们这里均衡器和节点都在同一台服务器上,所以就免去了这些过程了,不过他同时是客户端,所以要建立挂载脚本

vi/data/shell/mountnfs.sh

输入:

1./bin/mount-tnfs-onosuid,noexec,nodev,rw,nouser,noauto,bg,hard,nointr,rsize=32k,wsize=32k,tcp192.168.10.200:

/data/wwwnfs/data/www

复制代码

chmod+x/data/shell/mountnfs.sh

echo"/data/shell/mountnfs.sh"/etc/rc.local

在另外一台节点centosb上也这样安装

五,安装配置DRBD

1,分区

DRBD可用设备有如下:

(1)一个磁盘,或者是磁盘的某一个分区

(2)一个softraid设备

(3)一个LVM的逻辑卷

(4)一个EVMS(EnterpriseVolumeManagementSystem,企业卷管理系统)的卷

(5)其他任何的块设备

这里我是建立在一个分区上的

查看磁盘信息:

1.fdisk-l

复制代码

Disk/dev/sda:

1000.2GB,1000204886016bytes

255heads,63sectors/track,121601cylinders

Units=cylindersof16065*512=8225280bytes

DeviceBootStartEndBlocksIdSystem

/dev/sda1*164514048+83Linux

/dev/sda265516340957717+83Linux

/dev/sda3516472031638630082Linuxswap/Solaris

/dev/sda472041216019189019355Extended

/dev/sda57204121601918901903+83Linux

Disk/dev/sdb:

300.0GB,300069052416bytes

255heads,63sectors/track,36481cylinders

Units=cylindersof16065*512=8225280bytes

DeviceBootStartEndBlocksIdSystem

Disk/dev/sdc:

300.0GB,300069052416bytes

255heads,63sectors/track,36481cylinders

Units=cylindersof16065*512=8225280bytes

DeviceBootStartEndBlocksIdSystem

三块磁盘:

一块1TB已经分区,安装了操作系统和存放数据

另外两块没有分区,特用来给DRBD用

下面分区:

fdisk/dev/sdb

......

fdisk/dev/sdc

......

分区好后我们得到两个未挂载的分区

/dev/sdb113648129303360183Linux

/dev/sdc113648129303360183Linux

/dev/sdb1用于数据库

/dev/sdc1用于NFS

注意:

先不要挂载

2,安装DRBD

1),下载

DRBD官方网站:

http:

//www.linux-ha.org/DRBD

源码下载地址:

2),安装

DRBD有三种安装模式:

RPM包安装,直接编译进内核或作为一个可加载的内核模块编译。

RPM包安装内核版本必须是2.6.33或高于2.6.33,否则要先升级内核,2.6.33或高于2.6.33内核里面已经集成的有DRBD模块

uname-r可以看到内核版本,我的是

这里我用的是源码编译安装

如果内核版本低于2.6.33那么需要编译模块到内核,且先要安装kernel-devel

yuminstallgccgcc-c++makeglibcflexwgetkernel-devel

cd/src/local/src

wget

tar-zxvfdrbd-8.3.10.tar.gz

cddrbd-8.3.10

./configure--prefix=/--with-km--with-heartbeat

安装完成后会在/etc/ha.d/resource.d目录下生成

drbddiskdrbdupper这两个文件

makeKDIR=/usr/src/kernels/2.6.18-194.el5-i686/

makeinstall

注意:

makeKDIR=/usr/src/kernels/2.6.18-194.el5-i686/这个一定要是你当前加载的内核,如果你内核升级了,一定要去报这个的路径是当前加载的内核版本的路径哦

查看当前加载的内核版本方法是:

uname-r

或着

vi/boot/grub/menu.lst

检查是否安装妥当:

1.ls/lib/modules/`uname-r`/kernel/drivers/block/drbd.ko

复制代码

drbd.ko

看到这个,就说明已经安装完好

加载到内核

1.insmod/lib/modules/`uname-r`/kernel/drivers/block/drbd.ko

复制代码

检查内核是否已经加载了drbd模块

lsmod|grepdrbd

drbd2263522

//有的话表示加载模块成功.

检查安装文件

find/-namedrbd*

3,配置DRBD

DRBD有三种配置文件:

/etc/drbd.conf

/etc/drbd.d/global_common.conf

/etc/drbd.d/*.res

第一个配置文件:

/etc/drbd.conf

vi/etc/drbd.conf

1.#Youcanfindanexamplein/usr/share/doc/drbd.../drbd.conf.example

2.

3.include"drbd.d/global_common.conf";

4.include"drbd.d/*.res";

复制代码

默认就是这个,我们不用管他,默认即可

第二个配置文件:

/etc/drbd.d/global_common.conf

这个是全局配置文件,包括监听,同步速率等等极为重要的参数

vi/etc/drbd.d/global_common.conf

输入:

1.global{

2.#是否参加DRBD使用者统计,默认是yes

3.usage-countno;

4.}

5.

6.common{

7.#使用协议C复制模式

8.protocolC;

9.

10.handlers{

11.#在系统出现什么故障时主服务器采取什么操作,例如挂起

12.#local-io-error"/usr/lib/drbd/notify-io-error.sh;/usr/lib/drbd/notify-emergency-shutdown.sh;echoo>/proc/sysrq-trigger;halt-f"

13.}

14.

15.startup{

16.wfc-timeout0;

17.#启动时连接其他节点的超时时间

18.degr-wfc-timeout120;

19.}

20.

21.disk{

22.#当磁盘有错误时,不连接

23.on-io-errordetach;

24.}

25.

26.net{

27.

28.timeout60;

29.connect-int10;

30.ping-int10;

31.max-buffers2048;

32.max-epoch-size2048;

33.#下面三行一定程度能防止脑裂问题

34.#after-sb-0pridiscard-older-primary;

35.#after-sb-1pricall-pri-lost-after-sb;

36.#after-sb-2pricall-pri-lost-after-sb;

37.#或下面三行也可以

38.after-sb-0pridiscard-zero-changes;

39.after-sb-1pridiscard-secondary;

40.after-sb-2pridisconnect;

41.}

42.

43.syncer{

44.#复制时的网络速度限制

45.rate20M;

46.}

47.}

复制代码

上面是完整的配置文件,你如果理解了,就可以直接复制过去用,不会有问题

注意:

rate表示同步的速率,这里的20M就是20MB,不是20Mb,所以如果你是100M交换机,那么请不要设置这么大,否则,你的交换机会被拖累的无响应的,你可以设置成8M即可,即80Mb,如果你是千M交换机,且是千兆网线和网卡,你可以设置成80M一下,但考虑到数据库,NFS共享等需要大量网络I/O的的应用,这里还是设置20M即可

第三个配置文件:

/etc/drbd.d/mysql.res和/etc/drbd.d/www.res

这里面的文件在第一个配置文件里面定义了

因为我这里要建立两个资源,所以有两个,注意,两个可以写在同一个配置文件里面,我习惯用两个配置文件,我一一来看

vi/etc/drbd.d/mysql.res

定义给mysql用的资源组(注意,名字你可以自己随便取,只要在应用的时候对应上即可,不必苛求)

1.#资源组的名称

2.resourcemysql{

3.

4.#定义主服务器资源

5.oncentosa{

6.#建立块设备文件

7.device/dev/drbd1;

8.#要用于复制的分区

9.disk/dev/sdb1;

10.#定义侦听IP和端口

11.address192.168.1.10:

7788;

12.#metadata信息存放的方式,这里为内部存储,即和真实数据放在一起存储

13.meta-diskinternal;

14.}

15.

16.#定义备服务器资源

17.oncentosb{

18.device/dev/drbd1;

19.disk/dev/sdb1;

20.address192.168.1.20:

7788;

21.meta-diskinternal;

22.}

23.

24.}

复制代码

vi/etc/drbd.d/www.res

定义给web用的资源组(注意,名字你可以自己随便取,只要在应用的时候对应上即可,不必苛求)

1.#资源组的名称

2.resourcewww{

3.

4.#定义主服务器资源

5.oncentosb{

6.#建立块设备文件

7.device/dev/drbd2;

8.#要用于复制的分区

9.disk/dev/sdc1;

10.#定义侦听IP和端口

11.address192.168.1.20:

7789;

12.#meta

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2