Rootop 服务器运维与web架构

2014-03-26
发表者 Venus
暂无评论

shell脚本关闭selinux

#!/bin/bash
CHECK=$(grep SELINUX= /etc/selinux/config | grep -v "#")
if [ "$CHECK" == "SELINUX=enforcing" ]; then
        sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
        setenforce 0
fi
        if [ "$CHECK" == "SELINUX=permissive" ]; then
                sed -i 's/SELINUX=permissive/SELINUX=disabled/g' /etc/selinux/config
                setenforce 0
        fi

                if [ "$CHECK" == "SELINUX=disabled" ]; then
                        exit
                fi
exit

2014-03-26
发表者 Venus
暂无评论

在XenServer6.1下安装centos

在xenserver服务器上右键,选择创建vm:

选择操作系统:

这个地方,需要从windows上共享出一个目录,里面存放系统iso镜像,用来作为SR库。点击“新建iso库”:

选择windows文件共享

共享路径,及访问共享的用户名密码,要有访问权限。

点击完成以后,会自动创建SR库,然后就可以通过下拉菜单看到所有的iso镜像。

点击属性可以更改硬盘大小

回到窗口,点击“控制台”可以像操作本地机器一样。

不过在这里我安装centos6.5出现的字符界面跟以前字符界面不同。

继续安装即可。

2014-03-25
发表者 Venus
暂无评论

安装Citrix XenServer-6.1

XenServer 6.1版提供四个版本,分别是免费版、高级版、企业版和白金版。所有XenServer版本均包含XenCenter管理功能 。

尽管 XenServer 通常部署在服务器级硬件上,但 XenServer 也与很多工作站和便携式计算机型号兼容。XenServer 主机应为专用于托管 VM 的 64 位 x86 服务器级计算机。该计算机应运行经过优化及增强的Linux 分区,并通过支持 Xen 的内核控制面向 VM 的虚拟化设备与物理硬件之间的交互。在安装XenSerer之前,要在主机BIOS中打开Inter-VT或AMD-V功能。

可以从网上下载XenServer安装文件,将其刻录成CD。将主安装 CD 插入主计算机的 DVD 驱动器中。选择从 DVD 驱动器引导。重启计算机,此时会显示初始引导消息和 Welcome to XenServer(欢迎使用 XenServer)界面,在这个界面下,有两个选项:按F1键表示进行标准安装;按F2键表示进行高级设置。

一、选择键盘类型:US。

二、这个是欢迎界面,选择“OK”即可。

三、这个是使用协议,我们必须得接受,否则就不能继续安装了!

四、这个是警告,告诉你XenServer所需要的硬件条件,我们选择“OK”即可。

五、这个是存储设备选择界面,第一个是本地磁盘—sda;第二个是自动精简配置—thin provisioning ,主要是针对XenDesktop MCS,如果想详细了解,可以上查查。我们这里就直接选择本地。

六、这个是安装方式选择界面,一共有三种:本地、HTTP/FTP、NFS,我们这里直接用本地,一般在公司都会用ftp或nfs通过网络安装。

七、提示我们,要不要追加安装补丁包,我们不用就直接选择“NO”。

八、光盘验证,这里提示让我们选择要不要验证我们的安装光盘有没有错,第一为忽略,即直接跳过,第二个为验证安装源,我们的选择跳过即可。

九、这里要我们输入root的密码,一般在企业中,我们的密码最好复杂些并且要记下来。

十、这里为XenServer主机的网络设置,有DHCP自动获取和静态IP两种,具体情况要看个人的安装网络环境。

十一、这里为配置XenServer主机的主机名与DNS。大家可以直接使用google的dns服务器:8.8.8.8

十二、区时选择,我们选择亚洲—“Asia”。

十三、具体时区,我们直接使用上海—“Shanghai”即可。

十四、这个是设置NTP,主要是与校准时钟有关,特别是在服务器集群时,我们所有的服务器时间必须得一致,否则很容易出现一些很奇怪的问题。当然,你也可以都选择第二个,本地时间,就不必设置ntp server了,在安装结束后会让你手动设置时间。

十五、确认安装

十六、安装过程

安装完毕后,光盘自动弹出,并且它会提示让你重启,重新启动后即可完成XenServer6.1的安装。

启动xenserver:

启动完成界面,可以看到状态信息,配置网络,认证等等信息。

通过在windows下,使用XenCenter管理xenserver:

打开浏览器输入XenServer的ip,下载 XenCenter:

自带的为英文版,从百度找了个中文版。

http://pan.baidu.com/share/link?shareid=2777360288&uk=1912661738

启动XenCenter,点击 ADD,输入ip,用户密码,即可开始管理XenServer。

因为XenServer有免费版,也需要申请license导入。

点击tools-license manager :

点击红色标注部分,会打开思杰官网,填写资料申请授权,授权文件会发送到邮箱里,确保邮箱真实有效,然后点击 apply activation key ,找到授权文件导入。默认是授权一年,到期后可以继续申请。

关于系统安装,将在以后介绍。

2014-03-25
发表者 Venus
暂无评论

Jexus web server

Jexus web server for linux 是一款基于mono环境,运行于Linux/unix操作系统之上,以支持ASP.NET为核心功能的高性能WEB服务器。

Jexus V5.5.1有如下功能特点:
1、高性能ASP.NET服务器。这是Jexus的核心功能。不管是稳定性、易用性还是并发承载能力、并行处理速度,Jexus对ASP.NET的支持都是非常优秀的;
2、支持Fast-CGI协议。通Fast-CGI,Jexus能支持包括PHP在内的所有拥有Fast-CGI服务功能的WEB应用;
3、具有强劲的反向代理功能,同时支持多目标负载均衡。灵活运用Fast-CGI以及反向代理,Jexus可以让你的网站与各种不同类型资源(如aspx/php/jsp)实现无缝整合。
4、具备基于正则表达式的强大的URL重写功能;
5、拥有强大的流媒体支持能力,支持FLV/F4V视频文件拖动播放,支持微软平滑流媒体技术;
6、具备可控的“ASP.NET前置缓存”,能大大提升ASP.NET网站的承载能力和响应速度;
7、支持Https,具有SSL加密数据安全传输能力;
8、具有基础而实用的入侵检测功能,能自动终止已被识别的非法请求;
9、安装部署非常简便,操作使用极为简单。

一、安装:

安装前的准备工作:

* 需要libc2.3.2或更高版本的支持(可用ldd –version查询版本情况);如果需要启用https,系统中还需具备libssl库文件,比如libssl.so.0.9.8。
* 系统已经安装好mono 2.10.8.1 或更高版本(当前最新版本是mono 3.2.8。强烈建议使用mono3.2.3以上的版本)。
Mono的官方网址是:www.go-mono.com。
Mono的下载地址:http://www.go-mono.com/mono-downloads/download.html 。
Mono的具体安装办法,请参考 www.linuxdot.net 上的有关文章。

1、下载:
cd /tmp
wget http://www.linuxdot.net/down/jexus-5.5.1.tar.gz

2、解压:
tar -zxvf jexus-5.5.1.tar.gz
cd jexus-5.5.1

3、安装:
分全新安装和升级安装,分另由 install和upgrade两个脚本命令完成对应操作。

A、升级安装:
sudo /usr/jexus/jws stop
sudo ./upgrade
cd /usr/jexus
强调:如果旧版Jexus不是安装在/usr/jexus文件夹而是在其它路径上的,那么,必需在upgrade命令后带上正确的目标路径参数

B、全新安装:
sudo ./install
cd /usr/jexus

二、运行测试
复制完Jexus的文件后,Jexus就可以正常工作了。
所以,如果你的系统只要mono已经成功安装,jexus就可以直接使用,甚至连进一步的配置也完全不需要。

如果是升级安装,你只需要用运行 “sudo ./jws start”即可启动JWS,如果不能正常工作,常常是新版本的配置方式可能有变,你可以查查jws.conf等配置文件。
强调:如果你服务器安装有其它的WEB服务器,而且该服务正在运行,请停止它,以免造成端口冲突而造成Jexus无法启动。

如果是全新安装,请首先建立一个默认的网站文件夹:/var/www/default,并在里面新建一个简单的网页,比如index.html。
然后在Jexus工作文件夹(/usr/jexus/)中执行“sudo ./jws start”命令(需要root身份),启动jexus。
1、用cat log/jws.log,看看jws日志文件有没有什么出错的提示。
2、如果没有错误提示,请访问一下这台服务器,看看是否有jexus的欢迎页,网址是:http://服务器IP地址/info
3、如果已经在网站中放有首页或其它网页,你就可以访问这些网页了。

三、Jexus web server 配置(不是必须的,这儿写出来,是为了用户更好的理解jexus的工作原理):

在 jexus 的工作文件夹中(一般是“/usr/jexus”)有一个基本的配置文件,文件名是“jws.conf”。

jws.conf 中至少有 SiteConfigDir 和 SiteLogDir 两行信息:
SiteConfigDir=siteconf #指的是存放网站配置文件放在siteconf这个文件夹中,可以使用基于jws.exe文件的相对路径
SiteLogDir=log #指的是jexus日志文件放在log这个文件夹中,可以使用基于jws.exe文件的相对路径

重要提示:
必须为Jexus指定并创建两个专用文件夹:一个是用于存放日志文件的“日志文件夹”,一个是存放网站配置文件的“网站配置文件夹”。
日志文件夹必须让jexus系统有写入权,因为它会在这儿写入jexus系统日志、网站访问日志等重要内容,安装程序中已经建了一个文件夹,名字是log。
网站配置文件夹是用存放网站配置文件的地方(安装包中已经建了这个文件夹,名字是siteconf),既使只有一个网站,也必须有这个文件夹,因为jexus启动时会从这个文件夹读取网站配置的内容。
即,默认情况下,Jexus的文件夹结构是:
/usr/jexus #JWS工作目录
/usr/jexus/siteconf #网站配置目录
/usr/jexus/log #日志目录

四、网站配置

Jexus支持多站点,可以用不同的端口、域名、虚拟路径设置任意多的网站。
必须把所有网站配置文件放到jws.conf指定的网站配置文件夹内(这个文件夹常常jws工作目录内的“siteconf”文件夹),这个文件夹除了网站配置文件,不能有其它任何文件,因为jexus会认为这儿的任何一个文件都代表着一个不同的网站。
每个网站有且只有一个配置文件,配置文件的文件名就是这个网站的名称,比如 www.mysite.cn这个网站,配置文件名可以写成“mysite”,当然也可以写成其它文件名,以便管理员容易记忆和识别,但要特别注意:文件名不能有空格!
一个网站可以拥有任意多的域名,不同网站不能有相同的域名,没有域名的网站只能有一个,这个没有域名的网站叫做“默认网站”,而一台服务器最多只能有一个默认网站。

*** 再次强调:
1、网站配置文件的文件名不能有空格;
2、网站配置文件夹中只能有网站配置文件,不能有其它文件文件存在。

下面以www.mysite.cn为例,说说网站的配置
在网站配置文件夹中建立一个文件,这个文件的名称应该有一些意义(至少要能让服务器管理员了解这个配置文件是属于哪一个网站的)
设这个网站的配置文件的文件名为:mysite

sudo miv mysite

A、网站配置的基本内容:
port=80 # jexus WEB服务器侦听端口(必填。当然可以是其它端口)
root=/ /var/www/mysite # 网站URL根路径(虚拟目录)和对应的物理路径,两个路径字串之间必须用空格分开(必填。既使这个网站是一个纯粹的反向代理站,也得填)

#可选项
hosts=mysite.cn,www.mysite.cn # 网站域名(建议填写),可以用泛域名,比如:*.mysite.cn(不填此项或只填一个“*”号表示这是默认网站,一个端口只能有一个默认站)
indexs=index.aspx,index.htm # 首页文件名,可以写多个,用英文逗号分开(可以不填。因为JWS系统含有常用首页名)
addr=0.0.0.0 # 绑定到服务器本机的某个IP地址,默认情况下是所有地址,即“0.0.0.0”。
aspnet_exts=mspx,ttt # 添加新出现的或自定义的ASP.NET扩展名(不建议填。多个扩展名用英文逗号分开,不加点号。系统含有常用扩展名)

B、最简配置示例
最简配置只需port和root两项,如:
port=80
root=/ /var/www/default
注:以上两个条目的含义:“port=80”指本网站的服务端口是80(标准的WEB服务端口);“root=/ /var/www/default”是指该网站的的虚拟根路径是“/”,所对应的物理文件夹的绝对路径是“/var/www/default”,即网站的内容必须放到“/var/www/default”这个文件夹中。

C、网站配置的高级选项 (阅读建议:建议初学者跳过本小节)
网站配置的高级选项全是可选项,应该根据网站的实际需要选填。
灵活使用高级选项,可以架设出一台与众不同的、功能强大的服务器平台或者服务器群组。

1、使用“URL重写”功能
URL重写是指WEB服务器将访问者的请求URL路径资源按指定的匹配规则解释和匹配为另外的一个真实RUL路径资源。

比如,希望别人访问“.php”类型的文件时,服务器返回 /404.html 这个文件:
rewrite=^/.+?\.(asp|php|cgi)$ /404.html
# 格式:
# “rewrite=”的后面是两部分阻成,两部分之间由一个空格分开。
空格前是匹配的条件:用正则表达式描述URL的匹配条件。
空格后是匹配的目标:指的是如果用户访问的路径合乎前面的匹配条件,服务器将以哪个规则回应。

又如:
把“/bbs”解析为“/bbs/index.aspx”,把“/bbs/file-1” 匹配为 “/bbs/show.aspx?id=1”:
rewrite=^/bbs$ /bbs/index.aspx
rewrite=^/bbs/file-([0-9]{1,6})$ /bbs/show.aspx?id=$1
格式解释:rewrite的等号后含有两部分内容,用空隔分开。前半部分是一个正则表达式,用于描述需要URL重写的(用户浏览器中的)url路径样式,后半部分是当用户的URL合乎前面的正则表达式时,JWS应该重写和访问的真实URL路径。

2、禁止或允许某IP或IP段访问网站
A、只允许某些IP地址访问网站(白名单功能)
默认情况下,允许所有IP地址访问。如果手工设置IP地址白名单,那么,白名单之外的IP地址会自动归入黑名单。
配置格式,形如:
allowfrom=1.2.3.*
AllowFrom=2.2.3.3
B、禁止某IP或某IP端访问网站(黑名单功能)
默认情况下,本配置为空。如果手工添加需要禁止访问的IP地址(段),必须合乎一个规则:黑名单必须是白名单的真子集。
配置格式,形如:
denyfrom=111.222.111.*
denyfrom=101.201.1.132

3、禁止访问某文件夹及其子文件夹中的内容
DenyDirs=网站文件夹路径的URL路径,如 “/abcfiles”或 “~/abcfiles”,多个路径,用英文逗号分开

4、是否对请求的URL等进行安全检测
本选项默认是true,即需要检查,除非你的确需要关掉这个选项,否则可以不填,格式如下:
checkquery=false
(关掉本项可以提高服务器速度,但就安全而言,不建议关掉它)

5、NOFILE(无文件)功能
nofile=/mvc/controller.aspx
(注:这是Jexus特有的功能,指的是如果服务器不存在用户要访问的文件,服务器将使用什么文件应答。)
(提示:路由后,原RUL路径会存贮在Jexus特有一个服务器变量“X-Real-Uri”中)
(技巧:用这个功能,或者再加上URL Rewrite功能,你完全可以把URL路径与真实路径隔离开来,达到信息隐藏和简化URL的作用。)

6、NOLOG(无日志)功能
nolog=yes
(注:禁用网站日志功能会提高WEB服务器系统的的处理速度,但不足也是明显的,就是你无法详细了解网站的访问情况了)

7、长连接开关
keep_alive=true
注:V5.5.1版默认值是true,即默认使用长连接,可以不填。

8、反向代理功能
reproxy= /abc/ http://www.xxxx.com:890/abc/
参数的值由本站RUL根路径和目标网站URL根路径两部分组成,之间用空隔分开。
*技巧:反向代量的目标地址可以有多个,用英文逗号分隔,如:
reproxy=/abc/ http://192.168.0.3/abc/,http://192.168.0.4/abc/
这时,当用户访问/abc/时,jexus就会随机选择一台服务器进行访问,达到负载均衡或服务器集群的效果。

9、接受FAST-CGI提供的服务
对于TCP连接:
fastcgi.add=需要fast-cgi处理的文件扩展名|tcp:fast-cgi服务的IP地址:端口
如:fastcgi.add=php,php3|tcp:127.0.0.1:9000
对于unix sockets:
fastcgi.add=需要fcgi处理的文件扩展名|socket:路径
如:fastcgi.add=php,php3|socket:/tmp/phpsvr

10、启用gzip压缩功能
usegzip=true #即UseGzip
解释:启用这个功能后,当用户访问“.htm”“.js”等文件时,Jexus会将这些文件进行GZIP压缩后发送给用户浏览器,这样,可以节约更多的网络带宽。

11、让Jexus的工作进程和网站工作于指定的用户权限(身份)下
在jws.conf中,添加一句:httpd.user=系统中已经存在的一个用户名,如httpd.user=www-data

12、让Jexus的工作进程和ASP.NET网站工作在指定的ASP.NET版本环境中
在jws.conf中,添加一句:Runtime=版本号,如:Runtime=v4.0.30319

13、启用“ASP.NET前置高速缓存”,提高网站ASP.NET应用的反应速度,减小服务器压力
这是Jexus特有的功能。功能很强劲、很实用。
方法是:在需要启用WEB平台级高速缓存的ASPX页面中加入“<%Response.AddHeader(“PageCache-Time”,”60″);%>”一句就行了,其中“60”是超时时间,单位为秒。

14、启用HTTPS进行SSL安全传输
本功能是对服务器与客户之间的数据进行加密传送,提高数据转输过程中的保密性。具体方法请访问www.linuxdot.net。

15、启用多进程并行服务
默认配置下,jexus是以单进程模式工作的,单进程的好处是配置简单,节约内存,但弱点也很明显,比如,难以充分发挥多cpu多核的性能优势,大并发承受力、容灾力较多进程弱等等。
因此,在多CPU(核)的服务器上开启多进程,有利于提高处理速度、大并发承载能力以及服务的稳定性和容错能力。
开启多个工作进程的办法:修改jws.conf文件中的httpd.processes行,去掉前边的#号,并在等于后填上需要开启的进程数量(不超过cpu核数+1,同时,最多不超过8个)。
强调:开启多进程后,ASP.NET网站的Session状态服务不能再使用inproc模式,而应该使用“StateServer”等其它模式并在Web.config中配置“machineKey”,否则会出现Session数据丢失等现象。

16、限制每个工作进程对内存和cpu资源的消耗量
这是5.5版开始启用的参数,在jws.conf中设置,格式是。
httpd.MaxTotalMemory=所有工作进程可消耗的物理内存总量。单位是“兆字节”,可取值范围是256-服务器可用物理内存大小的整数,同时,平均到每个工作进程不能少于128m,0表示由Jexus根据物理内存自动调整。
httpd.MaxCpuTime=单个工作进程可消耗Cpu资源的总时间。单位是“秒”,可取值范围是600-14400的整数。0表示禁用此项

五、操作Jexus:
1、基本操作:
旧版的jws.start等命令在Jexus V5.5.1中已经合并为一个单一命令,即“jws”,这是一个shell脚本文件。

命令参数与对应的功效:
jws start : 启动Jexus;
jws start 网站名 : 启动指定的网站
jws restart : 重启Jexus
jws restart 网站名 : 重启指定的网站
jws stop : 停止Jexus
jws stop 网站名 : 停止指定的网站
jws regsvr : 注册jexus所需要的全局程序集(本命令只在安装或更新jexus后才用,而且必须用一次)。
jws status : Jexus是否在运行中
jws -v : 显示Jexus的版本号

注意,这些脚本的拥有者应该是root,并且拥有可执行权限。

2、让Jexus能随服务器的启动而自动启动:
方法是:在/etc/rc.local文件的加入“/usr/jexus/jws start”一行。注意,路径应该是你系统中JWS的实际路径,不要把路径写错了。

六、卸载:
1、在rc.local文件中删除你手工添加的开机自动启动Jexus的命令行(如果本来就没有添加过,这步操作就不必做了)
2、删除jexus文件夹及全部内容(建议只删除*.exe和*.dll,其它的,比如网站配置文件等不必删除,以便将来重新启用)。

2014-03-25
发表者 Venus
暂无评论

分布式文件系统MFS(moosefs)实现存储共享(第二版)

原文:http://sery.blog.51cto.com/10037/263515/ 本文修正了原作者出现的错别字及命令误写,并添加了其它内容。

前提:关闭全部机器的selinux、iptables,开启iptables需开放相关端口,在文章结尾附上。

由于用户数量的不断攀升,我对访问量大的应用实现了可扩展、高可靠的集群部署(即lvs+keepalived的方式),但仍然有用户反馈访问慢的问题。通过排查个服务器的情况,发现问题的根源在于共享存储服务器NFS。在我这个网络环境里,N个服务器通过nfs方式共享一个服务器的存储空间,使得NFS服务器不堪重负。查看系统日志,全是nfs服务超时之类的报错。一般情况下,当nfs客户端数目较小的时候,NFS性能不会出现问题;一旦NFS服务器数目过多,并且是那种读写都比较频繁的操作,所得到的结果就不是我们所期待的。下面是某个集群使用nfs共享的示意图:

这种架构除了性能问题而外,还存在单点故障,一旦这个NFS服务器发生故障,所有靠共享提供数据的应用就不再可用,尽管用rsync方式同步数据到另外一个服务器上做nfs服务的备份,但这对提高整个系统的性能毫无帮助。基于这样一种需求,我们需要对nfs服务器进行优化或采取别的解决方案,然而优化并不能对应对日益增多的客户端的性能要求,因此唯一的选择只能是采取别的解决方案了;通过调研,分布式文件系统是一个比较合适的选择。采用分布式文件系统后,服务器之间的数据访问不再是一对多的关系(1个NFS服务器,多个NFS客户端),而是多对多的关系,这样一来,性能大幅提升毫无问题。

到目前为止,有数十种以上的分布式文件系统解决方案可供选择,如lustre,hadoop,Pnfs等等。我尝试了PVFS,hadoop,moosefs这三种应用,参看了lustre、KFS等诸多技术实施方法,最后我选择了moosefs(以下简称MFS)这种分布式文件系统来作为我的共享存储服务器。为什么要选它呢?我来说说我的一些看法:

1、 实施起来简单。MFS的安装、部署、配置相对于其他几种工具来说,要简单和容易得多。看看lustre 700多页的pdf文档,让人头昏吧。

2、 不停服务扩容。MFS框架做好后,随时增加服务器扩充容量;扩充和减少容量皆不会影响现有的服务。注:hadoop也实现了这个功能。

3、 恢复服务容易。除了MFS本身具备高可用特性外,手动恢复服务也是非常快捷的,原因参照第1条。

4、 我在实验过程中得到作者的帮助,这让我很是感激。

MFS特性(根据官方网站翻译)

★ 高可靠性(数据能被分成几个副本存储在不同的计算机里)

★ 通过增加计算机或增加新的硬盘动态扩充可用磁盘空间

★ 可以设置删除文件的空间回收时间

[root@mysql-bk serydir]# mfsgettrashtime bind-9.4.0.tar.gz
bind-9.4.0.tar.gz: 600

文件被删除10分钟后(600秒),才真正删除文件,回收磁盘空间。

★ 为文件创建快照

MFS文件系统的组成

1、 元数据服务器。在整个体系中负责管理管理文件系统,目前MFS只支持一个元数据服务器master,这是一个单点故障,需要一个性能稳定的服务器来充当。希望今后MFS能支持多个master服务器,进一步提高系统的可靠性。

2、 元数据日志服务器。备份master服务器的变化日志文件,文件类型为changelog_ml.*.mfs。当元数据服务器数据丢失或者损毁,可从日志服务器取得文件进行恢复。

3、 数据存储服务器chunkserver。真正存储用户数据的服务器。存储文件时,首先把文件分成块,然后这些块在数据服务器chunkserver之间复制(复制份数可以手工指定,建议设置副本数为3)。数据服务器可以是多个,并且数量越多,可使用的“磁盘空间”越大,可靠性也越高。

4、 客户端。使用MFS文件系统来存储和访问的主机称为MFS的客户端,成功挂接MFS文件系统以后,就可以像以前使用NFS一样共享这个虚拟性的存储了。

元数据服务器安装和配置

元数据服务器可以是linux,也可以是unix,你可以根据自己的使用习惯选择操作系统,在我的环境里,我是用freebsd做为MFS元数据的运行平台。GNU源码,在各种类unix平台的安装都基本一致。

(一) 安装元数据服务

1、下载GNU源码

wget http://ncu.dl.sourceforge.net/project/moosefs/moosefs/1.6.11/mfs-1.6.11.tar.gz

2、解包 tar zxvf mfs-1.6.11.tar.gz

3、切换目录 cd mfs-1.6.11

4、创建用户 useradd mfs –s /sbin/nologin


5、配置 ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs

6、编译安装 make ; make install

(二) 配置元数据服务

元数据服务器的配置文件被放置于安装目录/usr/local/mfs/etc。与mfs-1.5.12版本不同的是:mfs-1.6.x版安装完成只有模版文件,其后缀形如mfsmaster.cfg.dist。为了使mfs master正常工作,需要两个配置文件mfsmaster.cfg及mfsexports.cfg,前者为主配置文件,后者为权限控制文件(mfs客户端挂接时使用)。

(1)主配置文件mfsmaster.cfg,可直接从模版文件拷贝而来,打开这个配置文件/usr/local/mfs/etc/mfsmaster.cfg,看看都有哪些内容:

# WORKING_USER = mfs
# WORKING_GROUP = mfs
# SYSLOG_IDENT = mfsmaster
# LOCK_MEMORY = 0
# NICE_LEVEL = -19
# EXPORTS_FILENAME = /usr/local/mfs/etc/mfsexports.cfg
# DATA_PATH = /usr/local/mfs/var/mfs
# BACK_LOGS = 50
# REPLICATIONS_DELAY_INIT = 300
# REPLICATIONS_DELAY_DISCONNECT = 3600
# MATOML_LISTEN_HOST = *
# MATOML_LISTEN_PORT = 9419
# MATOCS_LISTEN_HOST = *
# MATOCS_LISTEN_PORT = 9420
# MATOCU_LISTEN_HOST = *
# MATOCU_LISTEN_PORT = 9421
# CHUNKS_LOOP_TIME = 300
# CHUNKS_DEL_LIMIT = 100
# CHUNKS_WRITE_REP_LIMIT = 1
# CHUNKS_READ_REP_LIMIT = 5
# REJECT_OLD_CLIENTS = 0
# deprecated, to be removed in MooseFS 1.7
# LOCK_FILE = /var/run/mfs/mfsmaster.lock

尽管每行都被注释掉了,但它们却是配置文件的默认值,要改变这些值,需要取消注释,然后明确指定其取值。接下来说明一下其中一些项目的含义。

◆ EXPORTS_FILENAME = /usr/local/mfs/etc/mfsexports.cfg 权限控制文件的存放位置。

◆ DATA_PATH = /usr/local/mfs/var/mfs 数据存放路径,只元数据的存放路径。那么这些数据都包括哪些呢?进目录看看,大致分3种类型的文件:

这些文件也同样要存储在其他数据存储服务器的相关目录。

◆ MATOCS_LISTEN_PORT = 9420 MATOCS–master to chunkserver,即元数据服务器使用9420这个监听端口来接受数据存储服务器chunkserver端的连接。

◆ MATOML_LISTEN_PORT = 9419 MATOML—master to metalogger,用于备份元数据服务器的变化日志。注:Mfs-1.5.12以前的版本没有这个项目。

◆ MATOCU_LISTEN_PORT = 9421 元数据服务器在9421端口监听,用以接受客户端对MFS进行远程挂接(客户端以mfsmount挂接MFS)

◆ 其他部分看字面意思都不难理解。还有几个与时间有关的数值,其单位是秒。

这个配置文件,不必做修改就能工作了。

(2)配置文件/usr/local/mfs/etc/mfsexports.cfg,也可直接从模版文件复制而来。这个文件的内容,十分类似NFS服务器的exports文件.实际配置时,可参照这个文件的默认行来修改以满足自己的应用需求.我的mfsexports.cfg文件的内容为:挂载为root权限

192.168.93.0/24 / rw,maproot=0

(3)复制文件

cp /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs

这是一个8字节的文件,为mfs-1.6.x新增项目。

(三) 元数据服务器master启动

元数据服务器可以单独启动,即使没有任何数据存储服务器(chunkserver)也是能正常工作的,因此当我们安装配置完MFS后,即可启动它。执行命令 /usr/local/mfs/sbin/mfsmaster start ,如果没有意外,元数据库服务器就应该作为一个守护进程运行起来。现在我们可以通过3个方面来检查一下MFS master的运行状况:

1、 检查进程

2、 检查网络状态

3、 检查系统日志

MFS的日志会直接写入系统日志。当我们增加数据存储服务器(chunkserver)或数据存储服务器(chunkserver)处故障时,都能在系统日志找到这些记录。注意,这个日志跟元数据变化日志不是一回事情。

(四)、关闭元数据服务器

关闭元数据服务器,务必使用 /usr/local/mfs/sbin/mfsmaster –s 这种方式,如果直接使用kill杀死进程,将导致下次启动时出现找不到相关文件,而不能正常启动服务器。这个一定要谨慎。当然,如果发生了这个事情,还是可以通过 mfsmetastore 来恢复的。

元数据日志服务器安装和配置

元数据日志服务为mfs 1.6以后版本新增的服务,即可以把元数据日志保留在元数据服务器,也可以单独存储。为保证其可靠性,最好单独放置。需要注意的是,源数据日志守护进程跟元数据服务器(master)在同一个服务器上,备份元数据日志的服务器作为它的客户端,从元数据服务器取得日志文件进行备份。

(一)安装元数据日志服务器metalogger

1、下载GNU源码

wget http://ncu.dl.sourceforge.net/project/moosefs/moosefs/1.6.11/mfs-1.6.11.tar.gz

2、解包 tar zxvf mfs-1.6.11.tar.gz

3、切换目录 cd mfs-1.6.11

4、创建用户 useradd mfs –s /sbin/nologin


5、配置 ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs

6、编译安装 make ; make install

(二)元数据日志服务(metalogger)配置

该服务仅需要一个配置文件,这里我们只需要从模板文件复制一个,然后稍微加以修改即可,下面是我的某个metalogger 的配置文件:

[root@hynfs-2 etc]# more mfsmetalogger.cfg
# WORKING_USER = mfs
# WORKING_GROUP = mfs
# SYSLOG_IDENT = mfsmetalogger
# LOCK_MEMORY = 0
# NICE_LEVEL = -19
# DATA_PATH = /usr/local/mfs/var/mfs
# BACK_LOGS = 50
# META_DOWNLOAD_FREQ = 24
# MASTER_RECONNECTION_DELAY = 5
MASTER_HOST = 192.168.93.18
MASTER_PORT = 9419
# MASTER_TIMEOUT = 60
# deprecated, to be removed in MooseFS 1.7
# LOCK_FILE = /var/run/mfs/mfsmetalogger.lock

这个配置文件,唯一需要修改的地方就是MASTER_HOST,它的值必须是元数据服务器的主机名或者ip地址。另外,为方便大家进一步理解,我把配置文件里其他几个项目简单的说明一下:

(1)SYSLOG_IDENT = mfsmetalogger 元数据日志服务运行时,在系统日志输出的标识,下面给出一段系统日志:

(2)DATA_PATH = /usr/local/mfs/var/mfs 从元数据服务器(master)抓回文件,然后进行存放的路径。

(3)BACK_LOGS = 50 存放备份日志的总个数为50,超出50则轮转。在做元数据恢复时,仅仅需要最近的那个日志文件备份,因此默认的日志个数就足够了,这也保证了日志备份不会写满整个分区。

(4)META_DOWNLOAD_FREQ = 24 元数据备份文件下载请求频率。默认为24小时,即每隔一天从元数据服务器(MASTER)下载一个metadata.mfs.back文件。当元数据服务器关闭或者出故障时,matedata.mfs.back文件将消失,那么要恢复整个mfs,则需从metalogger服务器取得该文件。请特别注意这个文件,它与日志文件一起,才能够恢复整个被损坏的分布式文件系统。

(三)元数据日志服务(metalogger)运行及关闭

1、启动过程为:

/usr/local/mfs/sbin/mfsmetalogger start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmetalogger modules …
mfsmetalogger daemon initialized properly

启动过程如果不能跟元数据服务器进行通信的话,系统会给出错误信息。

2、关闭服务,执行命令 /usr/local/mfs/sbin/mfsmetalogger stop

3、检查服务的运行状况。从两个方面看,一个是元数据服务器,另一个是本身的数据生成情况。

◆察看元数据服务器网络连接,可以看见日志服务器连接到元数据服务器的tcp 9419端口。

◆查看日志服务器的工作目录,正常情况应该看见已经有文件生成了(从元数据服务器获取过来的)。可以手动从元数据服务器复制一个日志文件过来比较文件的内容。

数据存储chunkserver服务器的安装配置

数据存储服务器chunkserver也是可以运行在各种类unix平台的,因此不再多说。一个MFS环境到底能集群多少服务器,作者的说法是上PB容量,个人建议,最好3台以上;并且专门用来做存储,不要把它跟master搞到一个机器(理论上没问题,实现也是可以的,但这不是一个好策略)。因为每个数据存储服务器的安装和配置都是相同的,所以只需按照一个服务器的操作就可以了。

(一)、安装数据存储服务器 chunkserver

1、下载GNU源码

wget http://ncu.dl.sourceforge.net/project/moosefs/moosefs/1.6.11/mfs-1.6.11.tar.gz

2、解包 tar zxvf mfs-1.6.11.tar.gz

3、切换目录 cd mfs-1.6.11

4、创建用户 useradd mfs –s /sbin/nologin


5、配置 ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs

6、编译安装 make ; make install

(二)配置数据存储服务器chunkserver

数据存储服务器有2个配置服务器需要修改,一个是主配置文件 mfschunkserver.cfg ,另一个配置文件是 mfshdd.cfg。每个服务器用来分配给 MFS使用的空间最好是一个单独的硬盘或者一个raid卷,最低要求是一个分区。作者举的例子是创建一个大文件,然后挂接在本地,这不是个好主意,只能用来做实验了。

1、修改配置文件 /usr/local/mfs/etc/mfschunkserver.cfg。下面是修改了的配置文件:

#WORKING_USER = mfs
#WORKING_GROUP = mfs
# DATA_PATH = /usr/local/mfs/var/mfs
# LOCK_FILE = /var/run/mfs/mfschunkserver.pid
# SYSLOG_IDENT = mfschunkserver
# BACK_LOGS = 50
# MASTER_RECONNECTION_DELAY = 30
MASTER_HOST = 192.168.0.19
MASTER_PORT = 9420
# MASTER_TIMEOUT = 60
# CSSERV_LISTEN_HOST = *
# CSSERV_LISTEN_PORT = 9422
# CSSERV_TIMEOUT = 60
# CSTOCS_TIMEOUT = 60
# HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg

这个配置文件里,没有注释符号“#”就是被修改过的项了,接下来是里面某些项的含义说明:

◆ MASTER_HOST = 192.168.0.19 元数据服务器的名称或地址,可以是主机名,也可以是ip地址,只要数据存储服务器能访问到元数据服务器就行。

◆ LOCK_FILE = /var/run/mfs/mfschunkserver.pid 与元数据服务器master的处理完全相同.

◆ CSSERV_LISTEN_PORT = 9422 CSSERV—chunkserver,这个监听端口用于与其它数据存储服务器间的连接,通常是数据复制。

◆ HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg 分配给MFS使用的磁盘空间配置文件的位置。

2、修改配置文件/usr/local/mfs/etc/mfshdd.cfg。在我的服务器上,只有一个1T的SATA硬盘,分了一个800G容量的分区来做为MFS存储服务的组成部分。为了使mfs拥有写目录的权限,需要修改目录的属主。我的服务器的分区挂接点是 /data , 用 chown –R mfs:mfs /data 把属主改变。因为我的每个服务器只需贡献一个分区做为MFS,因此配置文件只需要如下一行内容就可以了:

/data

这个文件默认情况下有好几行,我们最好把它删掉,因为按常规情况用注释符号“#”好像不起作用。

修改数据存放路径后一定要修改权限,否则启动会报错。

(三)启动数据存储服务器chunkserver

在数据存储服务器chunkserver执行命令 /usr/local/mfs/sbin/mfschunkserver start 启动数据存储守护进程.通过以下几种方式来检查chunkserver的运行状态.

1、 查看进程 ps aux | grep mfschunkserver

2、 查看网络状态,正常情况下应该看见9422处于监听状态,如果有其他数据存储服务器chunkserver在同一个元数据服务器master管理下运行的话,应该能看见其他chunkserver跟本机的连接情况:

3、 查看元数据服务器的系统日志,可以看见新增的数据存储服务器chunkserver被加入。

tail -f /var/log/messages
Mar 27 14:28:00 mfs-ctrl mfsmaster[29647]: server 3 (192.168.0.71): usedspace: 65827913728 (61 GB), totalspace: 879283101696 (818 GB), usage: 7.49%

(四) 关闭数据存储服务器

跟元数据服务器master相似,执行命令 /usr/local/mfs/sbin/mfschunkserver –s , chunkserver服务就停下来了。为了使系统重启过程能自动启动chunkserver 服务,可以通过在/etc/rc.local文件追加行 /usr/local/mfs/sbin/mfschunkserver start 来达到这个目的(master的自动重启处理也可同样处理)。

MFS客户端的安装及配置

我的生产环境,只有centos和freebsd两种环境,因此下面的描述,只有centos及freebsd挂接MFS文件系统的情形,其他类型的unix系统,待日后尝试。对比前面的操作过程,客户端挂接后使用MFS集群文件系统才是最费时的事情。

一、centos作为MFS的客户端。

(一) 安装MFS客户端

mfsmount需要依赖FUSE,因此需要先安装好fuse,这里我选用 fuse-2.9.3.tar.gz。

http://cznic.dl.sourceforge.net/project/fuse/fuse-2.X/2.9.3/fuse-2.9.3.tar.gz

1、解包 tar zxvf fuse-2.9.3.tar.gz

2、切换目录 cd fuse-2.9.3

3、配置 ./configure

4、编译安装 make;make install

如果系统已经安装了fuse,则跳过这个步骤。

◆安装MFS客户端程序

1、修改环境变量文件/etc/profile ,追加下面的行,然后再执行命令source /etc/profile使修改生效。

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

如果不执行这个操作,在后面安装MFS的过程中,执行命令

./configure –enable-mfsmount时可能出现”checking for FUSE… no  configure: error: mfsmount build was forced, but fuse development package is not installed”这样的错误,而不能正确安装MFS客户端程序。

2、解包 tar zxvf mfs-1.6.11.tar.gz

3、切换目录 cd mfs-1.6.11

4、创建用户 useradd mfs –s /sbin/nologin


5、配置 ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --enable-mfsmount

6、编译安装 make ; make install

◆检查MFS客户端安装的结果。通过查看目录/usr/local/mfs/bin目录的文件,应该发现如下文件:

(二)客户端挂载和使用MFS文件系统

1、创建挂接点 mkdir /mnt/mfs

2、挂接MFS /usr/local/mfs/bin/mfsmount /mnt/mfs -H 192.168.0.19 .注意,所有的MFS都是挂接同一个元数据服务器master,而不是其他数据存储服务器chunkserver !

3、通过查看磁盘使用情况来检查是否被挂接成功。

[root@mysql-bk ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda1 19G 2.7G 16G 15% /
/dev/hda7 51G 180M 48G 1% /backup
/dev/hdc1 145G 6.4G 131G 5% /data
/dev/hda5 19G 173M 18G 1% /home
/dev/hda3 24G 217M 23G 1% /var
/dev/hda2 29G 1.6G 26G 6% /usr
tmpfs 1.7G 0 1.7G 0% /dev/shm
mfs#192.168.0.19:9421 2.5T 256G 2.2T 11% /mnt/mfs

4、 进入目录/mnt/mfs,上传一个文件,看是否正常?接着在手动用touch 创建一个文件,然后再删除它们,看是否可以正常操作。

5、 设置文件副本数量,建议以3份为佳。

设置副本数目
mfsrsetgoal 3 /mnt/mfs
查看设置是否如我所愿
mfsgetgoal /mnt/mfs/serydir/bind-9.4.0.tar.gz
/mnt/mfs/serydir/bind-9.4.0.tar.gz: 3

6、设置删除文件后空间回收时间。默认的回收时间为1天(86400秒,原作者说是7天)

修改回收时间为10分钟mfssettrashtime 600 /mnt/mfs

6、 把挂载命令追加到文件/etc/rc.local,可实现开机自动启动挂接MFS

破坏性测试

、测试数据存储服务器

我用5个服务器组成了MFS的存储平台,其中一个是master,其余四个服务器是chunkserver.先停止一个chunkserver服务,然后在某个MFS客户端往挂接点的目录(/mnt/mfs)里复制数据或者创建目录/文件、或者读取文件、或者删除文件,观察操作是否能正常进行。再停止第2个chunkserver,重复执行上述操作;然后再停止第3个服务器,执行类似的文件读些操作。减少chunkserver试验后,我们再来逐步增加chunkserver服务器,然后对MFS执行读写等相关访问操作,检验其正确性。

通过增减chunkserver服务器的测试,服务的可靠性确实不错,哪怕只剩下最后一个服务器,也能正常提供存储访问服务。

二、测试元数据服务器

元数据服务器最重要的文件在目录 /usr/local/mfs/var/mfs ,MFS每一个数据的变化,都被记录在这个目录的文件里,我们可以通过备份这个目录的全部文件,来保障整个MFS文件系统的可靠性.在正常情况下,元数据服务器的改变日志文件(changelogs) 实时地、自动地复制到所有的数据存储服务器,并且以changelog_csback.*.mfs的形式命名。换句换说,即使元数据服务器报废了,也能再部署一个元数据服务器,然后从数据存储服务器chunkserver取得恢复所需要的文件。

(一)本地测试

1、停止元数据服务 /usr/local/mfs/sbin/mfsmaster

2、备份元数据服务器数据 cd /usr/local/mfs/var; tar czvf mfs.tgz mfs

3、删除目录 mv mfs mfs.bk 或 rm –rf mfs

4、启动元数据服务 ../sbin/mfsmaster start 启动失败,提示不能初始化数据。

5、解包 tar zxvf mfs.tgz

6、执行恢复操作 .. /sbin/mfsmetarestore –a

7、启动元数据服务 ../sbin/mfsmaster start

8、在MFS客户端检查MFS存储的数据是否跟恢复前一致?能否正常访问等等。

(二) 迁移测试

1、 安装新的MFS元数据服务器。

2、 从当前的元数据服器(master)或日志备份服务器(mfsmetalogger)复制备份文件 metadata.mfs.back/metadate_ml.mfs.back到新的元服务器目录(metadata.mfs.back需要定时用crontab备份).

3、 从当前的元数据服器(master)或日志备份服务器(mfsmetalogger)复制元数据服务器数据目录(/usr/local/mfs/var/mfs)到这个新的元数据服务器。

4、 停止原先的那个元数据服务器(关闭计算机或停止它的网络服务)。

5、 更改新的元数据服务器的ip为原来那个服务器的ip.

6、 执行数据恢复操作,其命令为:mfsmetarestore -m metadata.mfs.back -o metadata.mfs changelog_ml.*.mfs 恢复成功后再执行启动新的元数据服务操作。

7、 启动新的元数据服务 /usr/local/mfs/sbin/mfsmaster start

8、 在MFS客户端检查MFS存储的数据是否跟恢复前一致?能否正常访问等等。

在元服务器中(mfsmaster)中有一个图形监控,通过mfscgiserv开启。

[root@localhost ~]# /usr/local/mfs/sbin/mfscgiserv start
starting simple cgi server (host: any , port: 9425 , rootpath: /usr/local/mfs/share/mfscgi)
[root@localhost ~]# lsof -i:9425
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
python 31969 root 3u IPv4 43434 0t0 TCP *:9425 (LISTEN)
占用了9425端口,记得在防火墙中开启。
然后直接在浏览器中输入http://IP:9425 即可看到master及chunkserver情况。

PS:  开启iptables时,所需开放的端口:

元服务器:
9419 用于日志服务器连接
9420 用于chunkserver连接
9421 用于客户端挂载

这里我写了一个sh脚本,开放元服务器如果你有其它端口手动加进去:

#!/bin/bash
iptables -F
iptables -X
iptables -Z

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 9419 -j ACCEPT
iptables -A INPUT -p tcp --dport 9420 -j ACCEPT
iptables -A INPUT -p tcp --dport 9421 -j ACCEPT

service iptables save
service iptables restart
exit

日志服务器不需做改动

chunkserver:
9422 用于chunkserver之间同步数据

脚本:

#!/bin/bash
iptables -F
iptables -X
iptables -Z

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 9422 -j ACCEPT

service iptables save
service iptables restart
exit