nginx+php+mysql+heartbeat配置双机热备文档.docx

上传人:b****6 文档编号:7391601 上传时间:2023-01-23 格式:DOCX 页数:35 大小:1.44MB
下载 相关 举报
nginx+php+mysql+heartbeat配置双机热备文档.docx_第1页
第1页 / 共35页
nginx+php+mysql+heartbeat配置双机热备文档.docx_第2页
第2页 / 共35页
nginx+php+mysql+heartbeat配置双机热备文档.docx_第3页
第3页 / 共35页
nginx+php+mysql+heartbeat配置双机热备文档.docx_第4页
第4页 / 共35页
nginx+php+mysql+heartbeat配置双机热备文档.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

nginx+php+mysql+heartbeat配置双机热备文档.docx

《nginx+php+mysql+heartbeat配置双机热备文档.docx》由会员分享,可在线阅读,更多相关《nginx+php+mysql+heartbeat配置双机热备文档.docx(35页珍藏版)》请在冰豆网上搜索。

nginx+php+mysql+heartbeat配置双机热备文档.docx

nginx+php+mysql+heartbeat配置双机热备文档

 

《HA高可用性系统》课程设计

 

题目:

Nginx+PHP+MySQL双机互备、全自动切换方案

专业:

计算机应用技术

年级:

08级

姓名:

古俊杰

学号:

200830706130

指导教师:

陈显龙

时间:

2010年12月20日——22日

地点:

图书馆T603

 

东莞理工学院城市学院计算机与信息科学系制

 

目录

前言3

系统分析7

功能设计7

所遇问题及其分析7

系统特色及关键技术8

测试21

结论28

谢辞28

参考文献28

附一29

附二29

前言

在生产应用中,某台“Nginx+PHP+MySQL”接口数据服务器,扮演的角色十分重要,如果服务器硬件或Nginx、MySQL发生故障,而短时间内无法恢复,后果将非常严重。

为了避免单点故障,我设计了此套方案,编写了jianting.sh脚本和heartbeat,实现了双机互备、全自动切换,故障转移时间只需几十秒。

Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engineX”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器.Nginx是由俄罗斯人IgorSysoev为俄罗斯访问量第二的Rambler.ru站点开发的,它已经在该站点运行超过两年半了。

IgorSysoev在建立的项目时,使用基于BSD许可。

  据说他当初是F5的成员之一,英文主页:

 。

  俄罗斯的一些大网站已经使用它超过两年多了,一直表现不凡,相信想了解nginx的朋友都读过阿叶大哥的利用nginx实现负载均衡.直到2007年4月,俄罗斯大约有20%左右的虚拟主机是由nignx服务或代理的。

Google在线安全博客中统计nginx服务或代理了大约所有Internet虚拟主机的4%。

而netcraft的统计显示,nginx服务的主机在过去的一年里以四倍的速度增长。

短短的几年里,它的排名已跃进第9。

(参见:

 )

   Nginx以事件驱动的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡。

其拥有匹配Lighttpd的性能,同时还没有Lighttpd的内存泄漏问题,而且Lighttpd的mod_proxy也有一些问题并且很久没有更新。

   因此我打算用其替代Apache应用于Linux服务器上。

但是Nginx并不支持cgi方式运行,原因是可以减少因此带来的一些程序上的漏洞。

那么我们必须使用FastCGI方式来执行PHP程序。

   现在,Igor将源代码以类BSD许可证的形式发布。

Nginx因为它的稳定性、丰富的模块库、灵活的配置和低系统资源的消耗而闻名.业界一致认为它是Apache2.2+mod_proxy_balancer的轻量级代替者,不仅是因为响应静态页面的速度非常快,而且它的模块数量达到Apache的近2/3。

对proxy

和rewrite模块的支持很彻底,还支持mod_fcgi、ssl、vhosts,适合用来做mongrelclusters的前端HTTP响应。

 nginx做为HTTP服务器,有以下几项基本特性:

处理静态文件,索引文件以及自动索引;打开文件描述符缓冲.

无缓存的反向代理加速,简单的负载均衡和容错.

FastCGI,简单的负载均衡和容错。

模块化的结构。

包括gzipping,byteranges,chunkedresponses,以及SSI-filter等filter。

如果由FastCGI或其它代理服务器处理单页中存在的多个SSI,则这项处理可以并行运行,而不需要相互等待。

支持SSL和TLSSNI.

 Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率。

它支持内核Poll模型,能经受高负载的考验,有报告表明能支持高达50,000个并发连接数。

 Nginx具有很高的稳定性。

其它HTTP服务器,当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器物理内存耗尽频繁交换,失去响应,只能重启服务器。

例如当前apache一旦上到200个以上进程,web响应速度就明显非常缓慢了。

而Nginx采取了分阶段资源分配技术,使得它的CPU与内存占用率非常低。

nginx官方表示保持10,000个没有活动的连接,它只占2.5M内存,所以类似DOS这样的攻击对nginx来说基本上是毫无用处的。

就稳定性而言,nginx比lighthttpd更胜一筹。

 Nginx支持热部署。

它的启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。

你还能够在不间断服务的情况下,对软件版本进行进行升级。

 Nginx采用master-slave模型,能够充分利用SMP的优势,且能够减少工作进程在磁盘I/O的阻塞延迟。

当采用select()/poll()调用时,还可以限制每个进程的连接数。

 Nginx代码质量非常高,代码很规范,手法成熟,模块扩展也很容易。

特别值得一提的是强大的Upstream与Filter链。

Upstream为诸如reverseproxy,与其他服务器通信模块的编写奠定了很好的基础。

而Filter链最酷的部分就是各个filter不必等待前一个filter执行完毕。

它可以把前一个filter的输出做为当前filter的输入,这有点像Unix的管线。

这意味着,一个模块可以开始压缩从后端服务器发送过来的请求,且可以在模块接收完后端服务器的整个请求之前把压缩流转向客户端。

 Nginx采用了一些os提供的最新特性如对sendfile(Linux2.2+),accept-filter(FreeBSD4.1+),TCP_DEFER_ACCEPT(Linux2.4+)的支持,从而大大提高了性能。

 当然,nginx还很年轻,多多少少存在一些问题,比如:

Nginx是俄罗斯人创建,目前文档方面还不是很完善.因为文档大多是俄语,所以文档方面这也是个障碍.尽管nignx的模块比较多,但它们还不够完善。

对脚本的支持力度不够。

 这些问题,nginx的作者和社区都在努力解决,我们有理由相信nginx将继续以高速的增长率来分享轻量级HTTP服务器市场,会有一个更美好的未来。

Nginx ("enginex")是一个高性能的HTTP和 反向代理 服务器,也是一个IMAP/POP3/SMTP 代理服务器 。

Nginx是由 IgorSysoev 为俄罗斯访问量第二的Rambler.ru 站点开发的,它已经在该站点运行超过四年多了。

Igor将源代码以类BSD许可证的形式发布。

自Nginx发布四年来,Nginx已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。

目前国内各大门户网站已经部署了Nginx,如新浪、网易、腾讯等;国内几个重要的视频分享网站也部署了Nginx,如六房间、酷6等。

新近发现Nginx技术在国内日趋火热,越来越多的网站开始部署Nginx。

Nginx("enginex")是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。

nginx的话其实已经在一些俄罗斯的大型网站上运行多年,相当的稳定,最近才在美国开始知名起来。

而另外一个热门的web服务器软件是Lighttpd,因为运行在Youtube的后台,所以知名度很高。

Lighttpd特色在于它能做Flashstreaming和对fastcgi的支持,这样对于RubyonRails之类的程序提速不少,比起Apache要好很多。

但是nginx要比Lighttpd更稳定,功能上并不弱于Lighttpd,差不多什么都有,而且比Lighttpd对于URLrewrite的支持更完善一点。

不管是nginx还是lighttpd,对于用来提供静态文件都要比Apache好很多很多,主要就是占用的内存小,Apache和这两个小巧的服务器软件来比实在是个庞然大物啊。

PHP独特的语法混合了C、Java、Perl以及PHP自创新的语法。

它可以比CGI或者Perl更快速的执行动态网页。

用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。

PHP具有非常强大的功能,所有的CGI的功能PHP都能实现,而且支持几乎所有流行的数据库以及操作系统。

PHP于1994年由RasmusLerdorf创建,刚刚开始只是一个简单的用Perl语言编写的程序,用来统计他自己网站的访问者。

后来又用C语言重新编写,包括可以访问数据库。

在1995年以PersonalHomePageTools(PHPTools)开始对外发表第一个版本,Lerdorf写了一些介绍此程序的文档,并且发布了PHP1.0。

在这早期的版本中,提供了访客留言本、访客计数器等简单的功能。

以后越来越多的网站使用了PHP,并且强烈要求增加一些特性,比如循环语句和数组变量等等,在新的成员加入开发行列之后,在1995年中,PHP2.0发布了。

第二版定名为PHP/FI(FormInterpreter)。

PHP/FI加入了对mySQL的支持,从此建立了PHP在动态网页开发上的地位。

到了1996年底,有15000个网站使用PHP/FI;1997年中,使用PHP/FI的网站数字超过五万个。

而在1997年中,开始了第三版的开发计划,开发小组加入了ZeevSuraski及AndiGutmans,而第三版就定名为PHP3。

2000年,PHP4.0又问世了,其中增加了许多新的特性。

  PHP的简称原本为PersonalHomePage,是RasmusLerdorf为了要维护个人网页,而用c语言开发的一些CGI工具程序集,来取代原先使用的Perl程序。

最初这些工具程序用来显示RasmusLerdorf的个人履历,以及统计网页流量。

他将这些程序和一些表单直译器整合起来,称为PHP/FI。

PHP/FI可以和数据库连接,产生简单的动态网页程序。

RasmusLerdorf在1995年6月8日将PHP/FI公开释出,希望可以透过社群来加速程序开发与寻找错误。

这个释出的版本命名为PHP2,已经有今日PHP的一些雏型,像是类似Perl的变量命名方式、表单处理功能、以及嵌入到HTML中执行的能力。

程序语法上也类似Perl,有较多的限制,不过更简单、更有弹性。

  在1997年,任职于TechnionIIT公司的两个以色列程序设计师:

ZeevSuraski和AndiGutmans,重写了PHP的剖析器,成为PHP3的基础,而PHP也在这个时候改称为PHP:

HypertextPreprocessor.[5]。

经过几个月测试,开发团队在1997年11月释出了PHP/FI2,随后就开始PHP3的开放测试,最后在1998年6月正式释出PHP3。

ZeevSuraski和AndiGutmans在PHP3释出后开始改写

PHP

PHP的核心,这个在1999年释出的剖析器称为ZendEngine[7],他们也在以色列的RamatGan成立了ZendTechnologies来管理PHP的开发。

  在2000年5月22日,以ZendEngine1.0为基础的PHP4正式释出,2004年7月13日则释出了PHP5,PHP5则使用了第二代的ZendEngine[5]。

PHP包含了许多新特色,像是强化的面向对象功能、引入PDO(PHPDataObjects,一个存取数据库的延伸函数库)、以及许多效能上的增强。

目前PHP4已经不会继续更新,以鼓励用户转移到PHP5。

2008年PHP5成为了PHP唯一的有在开发的PHP版本。

将来的PHP5.3将会加入Latestaticbinding和一些其他的功能强化。

PHP6的开发也正在进行中,主要的改进有移除register_globals、magicquotes和Safemode的功能。

MySQL名字的来历MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQLAB公司,在2008年1月16号被Sun公司收购。

MySQL被广泛地应用在Internet上的中小型网站中。

由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

MySQL最初的开发者的意图是用mSQL和他们自己的快速低级例程(ISAM)去连接表格。

不管怎样,在经过一些测试后,开发者得出结论:

mSQL并没有他们需要的那么快和灵活。

这导致了一个使用几乎和mSQL一样的API接口的用于他们的数据库的新的SQL接口的产生,这样,这个API被设计成允许为用于mSQL而写的第三方代码更容易移植到MySQL。

  MySQL这个名字是怎么来的已经不清楚了。

基本指南和大量的库和工具带有前缀“my”已经有10年以上,而且不管怎样,MySQLAB创始人之一的MontyWidenius的女儿也叫My。

这两个到底是哪一个给出了MySQL这个名字至今依然是个迷,包括开发者在内也不知道。

  MySQL的海豚标志的名字叫“sakila”,它是由MySQLAB的创始人从用户在“海豚命名”的竞赛中建议的大量的名字表中选出的。

获胜的名字是由来自非洲斯威士兰的开源软件开发者AmbroseTwebaze提供。

根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。

Heartbeat项目是Linux-HA工程的一个组成部分,它实现了一个高可用集群系统。

心跳服务和集群通信是高可用集群的两个关键组件,在Heartbeat项目里,由heartbeat模块实现了这两个功能。

下面描述了heartbeat模块的可靠消息通信机制,并对其实现原理做了一些介绍。

随着Linux在关键行业应用的逐渐增多,它必将提供一些原来由IBM和SUN这样的大型商业公司所提供的服务,这些商业公司所提供的服务都有一个关键特性,就是高可用集群

 

系统分析

Nginx+PHP+MySQL双机互备、全自动切换方案

首先Nginx+PHP+MySQL这是一个目前比较流行的web服务器的解决方案。

而一个web服务器对于一间公司来说是十分重要,而我们没有可能24小时都派人守住服务器,以防服务器死机或者web服务出问题。

所以我设计了这个方案来解决这个问题。

只要主服务器死机或服务出错,次服务器就会在一分钟之内接收所有的服务。

这样保证了web服务器的高可用性。

功能设计

由于是做nginx+php+mysql服务器的自动备份和切换,所以我首先使用lnmp一键安装包来安装上述的服务器。

之后我利用rsync进行对web服务目录的同步。

然后对mysql打开同步功能,这样就解决了双机互备的问题。

之后安装heartbeat并进行配置,使主服务器死机了之后次服务器就会自己接替主服务器的工作。

 

所遇问题及其分析

这次课程设计遇到几个大问题,第一个是rsync推送脚本的编写,我参考了张宴老师博客上的许多文章和搜索引擎的资料写出了自己的推送脚本;第二个问题是mysql同步的问题,我在搜索引擎上面找到许多的文章,不过没有一个文章可以实现成功,最终我找到了一遍还算比较完整的文章集合我自己的理解进行了小部分的修改终于完成了这个问题;第三个是heartbeat对虚拟IP的资源问题,通过我无数次的试验终于给我修改出可以顺利自动切换主次服务器和虚拟IP的使用问题。

第四个问题是对web服务的检测和推送方向的问题,这个问题我通过自己编写了一个shell脚本解决了。

 

系统特色及关键技术

在主次服务器上面用一键安装包进行服务器环境的安装。

node01

node02

 

配置主次服务器上面的IP,这里我配置了192.168.203.128为主服务器IP;192.168.203.129为此服务器。

用setup命令设置服务器IP

node01

 

node02

安装并配置rsync服务。

使用yuminstall–yrsync安装rsync服务

按图上配置/etc/rsyncd.conf文件(见附一)

node01

 

node02

在主次服务器都运行/usr/bin/rsync–daemon命令,让rsync在后台运行,并把上面的命令加入到/etc/rc.local文件里,让服务器启动的时候就启动rsync。

用下面的命令建立www用户组,和在www用户组内建立www用户,同时把/home/wwwroot/这个web目录赋权给www用户。

groupaddwww-g48

useradd-u48-gwwwwww

chmod+w/home/wwwroot

chownwww:

www/home/wwwroot

编写推送脚本。

使用下面的脚本推送文件,主次服务器脚本的语句一样,只改变IP地址,这个脚本是用来推送本地web目录里的文件到远程服务器的web目录。

rsync-vzrtopg--delete/home/wwwroot/192.168.203.129:

:

web/1>/dev/null2>&1

配置mysql的同步功能,使主次服务器的mysql互为主次同步服务器。

修改mysql数据配置文件/etc/f下面我贴出我主服务器上的mysql配置文件(见附二)。

次服务器的跟主服务器一样,只把server-id=3改成server-id=2和master-host=192.168.203.129改成master-host=192.168.203.128。

node01

node02

使用mysql–uroot–p5*******(我的mysql密码是5201314)进入mysql,之后运行下面的脚本,次服务器只把IP改成主服务器的IP在次服务器上运行。

mysql>GRANTFILEON*.*TOgjj@'192.168.203.129'IDENTIFIEDBY‘1234’;

mysql>GRANTREPLICATIONSLAVEON*.*TOgjj@192.168.203.129IDENTIFIEDBY'1234';

 

使用下面命令重启主次服务器的mysql服务。

进入使用第二步的命令进入mysql,再使用下面的命令查看两个服务器上的slave状态是否连接成功,如果结果中的Slave_IO_State是Waitingformastertosendevent就证明mysql同步连接成功。

node01

node02

 

安装heartbeat并配置,使虚拟IP192.168.203.135能够自动根据主次服务器的状态切换

在主次服务器上面运行下面的脚本

yum-yinstallheartbeat

yum-yinstalllibnet

安装heartbeat和相应的组件。

在每个节点上修改机器名称

1)、在node01上修改主机名称

#vi/etc/sysconfig/network

HOSTNAME=node01

2)、在node02上修改主机名称

#vi/etc/sysconfig/network

HOSTNAME=node02

在每个节点上修改网络节点信息

#vi/etc/hosts#添加以下内容

192.168.1.88node01

192.168.1.99node02

在每个节点上配置heartbeat

#vi/etc/ha.d/ha.cf#heartbeat主配置文件

logfile/var/log/ha-log

logfacilitylocal0

keepalive2

deadtime30

initdead120

bcasteth0

udpport694

ucasteth0192.168.203.129#次服务器把这个IP改成主服务器的IP

auto_failbackon

nodenode01

nodenode02

 

node01

node02

 

#vi/etc/ha.d/authkeys#heartbeat认证配置文件,主次服务器一样

auth1

1crc

#chmod600/etc/ha.d/authkeys#改变authkeys的权限

#vi/etc/ha.d/haresources#heartbeat高可用资源配置文件,主次服务器一样

node01IPaddr:

:

192.168.203.135

 

用下面的命令启动heartbeat服务,最好先起动次服务器的服务再启动主服务器的服务。

#serviceheartbeatstart

node01

node02

 

编写shell脚本,实现循环监测服务器nginx服务,并按照不同情况调用推送脚本进行文件同步。

在主次服务器都建立文件/check.sh输入脚本内容

#!

/bin/sh

LANG=C

master_ip="192.168.203.128"

slave_ip="192.168.203.129"

master_status="true"

ipip=`hostname-i`

whiletrue

do

status=$(ping-c4${master_ip}|grep'received'|awk-F',''{print$2}'|awk'{print$1}')

if[-f/usr/local/nginx/logs/nginx.pid];then

/usr/share/heartbeat/hb_takeover

echo"web服务器正在运行,主节点接手"

else

/usr/share/heartbeat/hb_standby

echo"web服务器关闭了,次节点接手"

fi

if["${ipip}"=="${master_ip}"];

then

echo"本机是主节点,推送文件到次节点"

rsync-vzrtopg--delete/home/wwwroot/${slave_ip}:

:

web/1>/dev/null2>&1

elif[${status}-eq0];

then

echo"本机是次节点,主服务器当机,本机接手"

/usr/share/heartbeat/hb_takeover

master_status="flase"

elif["${master_status}

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

当前位置:首页 > 经管营销 > 金融投资

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1