在不太了解linux的情况下,安装pvfs是一件比较痛苦的事情。也遇到比较多的问题。认为在总任何一个工程之前,最好是先了解它的原理。虽然这可能比较耗时或者有些痛苦,但是不了解它去运用它,也会遇到各种各样的问题,在解决了这些问题之后,你发现其中的原理。这实际是走了弯路。在安装pvfs之前,我对linux系统的基本命令还不是很熟悉,只是按照说明书的内容做,没有理解每一句的具体含义。结果怎么也装不明白。在请教了师兄和不断的摸索下,明白 pvfs实现原理。顺利将它安装上。虽然这不是一件难的问题,但是我在这个过程中确实有太多的东西要学习的。
1.将下载下来的pvfs安装文件放到/usr/src/目录下。我下载的pvfs2-2.6.3.tar.gz。
2. tar -zxf pvfs2-2.6.3.tar.gz
3. ln -s pvfs2-2.6.3(解压出来的目录) pvfs2(新建目录pvfs2为链接文件,指向解压出来的目录)
4. [root@testhost /usr/src]# cd pvfs2
[root@testhost /usr/src/pvfs2-XXX]# ./configure
[root@testhost /usr/src/pvfs2-XXX]# make
[root@testhost /usr/src/pvfs2-XXX]# make install
5. 配置服务器
/usr/bin/pvfs2-genconfig /etc/pvfs2-fs.conf /etc/pvfs2-server.conf
第一句是使用该目录下的pvfs2-genconfig可执行文件,后面两个是使用该可执行文件形成的两个配置文件。将下面要输入的信息写入这两个配置文件中。
/etc/pvfs2-fs.conf这个文件是服务器的相关信息,主要是服务器的配置。
/etc/pvfs2-server.conf这个文件记录服务器的名称以及监听的端口号等信息。打开看看就明白了。
**********************************************************************
Welcome to the PVFS2 Configuration Generator:
This interactive script will generate configuration files suitable
for use with a new PVFS2 file system. Please see the PVFS2 quickstart
guide for details.
**********************************************************************
You must first select the network protocol that your file system will use.
The only currently supported options are "tcp", "gm", and "ib".
* Enter protocol type [Default is tcp]:
Choose a TCP/IP port for the servers to listen on. Note that this
script assumes that all servers will use the same port number.
* Enter port number [Default is 3334]:
Next you must list the hostnames of the machines that will act as
I/O servers. Acceptable syntax is "node1, node2, ..." or "node{#-#,#,#}".
* Enter hostnames [Default is localhost]: testhost
Now list the hostnames of the machines that will act as Metadata
servers. This list may or may not overlap with the I/O server list.
* Enter hostnames [Default is localhost]: testhost
Configured a total of 1 servers:
1 of them are I/O servers.
1 of them are Metadata servers.
* Would you like to verify server list (y/n) [Default is n]?
Choose a file for each server to write log messages to.
* Enter log file location [Default is /tmp/pvfs2-server.log]:
Choose a directory for each server to store data in.
* Enter directory name: [Default is /pvfs2-storage-space]:
Writing fs config file... Done.
Writing 1 server config file(s)... Done.
Configuration complete!
上面的配置基本上是采用默认的,那个testhost。这个必须填写你服务器对应的主机名,可以填多个。
第一个* Enter hostnames [Default is localhost]: testhost,是填写的IO服务器。这个如果配置集群的话,一般是多个,分别对应他们的主机名即可。用“,”隔开。
第二个* Enter hostnames [Default is localhost]: testhost,填写的是元数据服务器。这个一般填写一个。也是主机名 。其余的基本上就是默认了。当然端口号可以自己设定。
6. 创建数据存放目录:/usr/sbin/pvfs2-server /etc/pvfs2-fs.conf /etc/pvfs2-server.conf-testhost -f
这个是使用/usr/sbin/下面的pvfs2-server的可执行文件,利用后面两个配置文件的信息。开动服务器,这个过程主要生成IO服务器数据所要写入的目录。生成这个目录,如果这个目录已经存在,那么将出现错误。这一般它检验目录的建立时间属性,如果与当前系统不一致,将出错。这个错误比较难找。无比注意(在系统的服务管理中,发现这样的信息:pvfs2-server已死,**进程被锁)。基本上就是这个原因了。
7. 启动服务器:/usr/sbin/pvfs2-server /etc/pvfs2-fs.conf /etc/pvfs2-server.conf-testhost
以上完成手工启动服务器,也就是每次启动服务器的时候需要使用上面的命令启动pvfs服务,如果自动开启的话,使用下面的命令。
8. 自动启动服务器配置说明
bash-2.05b# cp /usr/src/pvfs2/examples/pvfs2-server.rc /(紧接着下一行)
/etc/rc.d/init.d/pvfs2-server
bash-2.05b# chmod a+x /etc/rc.d/init.d/pvfs2-server
bash-2.05b# chkconfig pvfs2-server on
chmod 命令修改pvfs2-server的访问属性
chkconfig 是系统启动的时候加载的服务名称,开启之后,在系统启动后,自动启动这项服务。
bash-2.05b# /etc/rc.d/init.d/pvfs2-server start
bash-2.05b# /etc/rc.d/init.d/pvfs2-server stop
这两条命令就是自动开启和停止服务的命令。
以上是完成单机的服务器配置过程,如果是多个服务器,还需要以下过程。
scp /etc/pvfs2-server.conf-cluster/${i} cluster/${i}:/etc/
> scp /etc/pvfs2-fs.conf cluster/${i}:/etc/
> scp /usr/src/pvfs2/examples/pvfs2-server.rc /
cluster/${i}:/etc/rc.d/init.d/pvfs2-server
> ssh cluster/${i} /sbin/chkconfig pvfs2-server on
scp命令,是将该文件拷贝到cluster{i}服务器上的/etc/目录下面。
最后一句话的意思是将cluster{i}的pvfs自动开启。这对应是将一台机器上的 配置文件传给其他的服务器。而其他的服务器需要已经安装了pvfs。
以上完成了所有的系统配置,整体系统的原理在我的blog中已经有了介绍,这要是一个元数据服务器,多个IO服务器。他们之间协同工作。而客户端的意思就是将自己的文件上传到这些服务器上,对客户端是透明的。下面介绍客户端的配置。
客户端上安装上pvfs
9.在/etc/目录下新建pvfs2tab文件,将“tcp://testhost:3334/pvfs2-fs /mnt/pvfs2 pvfs2 default,noauto 0 0”这个话写入该文件保存,注意那个testhost因该改成一个IO服务器对应的主机名称。
[root@testhost /root]# mkdir /mnt/pvfs2
[root@testhost /root]# touch /etc/pvfs2tab
[root@testhost /root]# chmod a+r /etc/pvfs2tab
/mnt/pvfs2/这个目录主要是挂载服务器用的目录
10.查看系统配置cat /proc/version
11. cd /usr/src/pvfs2/
12. ./configure --with-kernel=/usr/src/kernels/linux-2.6.0/
后面的语句的意思就是kernel的所在的位置,一般在/usr/src/kernles/下面。指定该位置
13. make kmod
14. mkae kmod_install
15. insmod /usr/src/pvfs2/src/kernel/linux-2.6/pvfs2.ko
16. ``lsmod''检查上面的语句的正确性。
17. cd /usr/src/pvfs2/src/apps/kernel/linux/
18. ./pvfs2-client -f -p ./pvfs2-client-core
启动挂载服务进程。显示
pvfs2-client starting
Spawning new child process
About to exec ./pvfs2-client-core
Waiting on child with pid 17731
如果配置正确的华,上面的信息显示出来。
19.mount -t pvfs2 -o noreservation tcp://testhost:3334/pvfs2-fs /mnt/pvfs2
将本地的/mnt/pvfs2/以noreservation(可以提高性能)挂载到远程。
20. 这个时候就可以使用linux自带的命令进行对目录进行读写操作。可以产看效率的问题。
21.结束方法:
gil:~# umount /mnt/pvfs2
gil:~# killall pvfs2-client
gil:~# rmmod pvfs2
注意:在系统的安装过程中,需要在个服务器和客户端上的网络进行配置,将主机名与IP地址对应的信息写入配置文件中。而且要检查防火墙是否开同这个端口号了,如果没开通的话,将端口号添加进去。效率的问题,有几个方法解决,在我的blog中记录这些方法,对照进行设置。但是效果如何,不敢说。
每次开机之后,需要重新执行客户端的配置,这个加载的模块在重新启动之后就消失了。而加载的语句为insmod /usr/src/pvfs2/src/kernel/linux-2.6/pvfs2.ko,也就是说每次开机之后,只需要从这步开始执行就好了。
如果客户端使用的FC7,则需要打个补丁。如果没有打不定则会在make kmod这个步骤出错,在pvfs的网站上下载pvfs2-lkv21-patch。放到pvfs2目录下,执行命令patch -p0< pvfs2-lkv21-patch命令。完毕之后,在执行make kmod命令。
如果服务器重新配置的话,一般不能在客户端直接使用insmod命令,应该从configure重新编译。
如果安装了三台服务器,而这个时候只启动了两台,如果你检查pvfs2-ping命令的时候,可能提示失败,主要原因是没有开启第三台服务器。将配置文件(/etc/pvfs2-fs.conf)中的没有开动的服务器配置信息去掉,这个命令就会正常了。
1.将下载下来的pvfs安装文件放到/usr/src/目录下。我下载的pvfs2-2.6.3.tar.gz。
2. tar -zxf pvfs2-2.6.3.tar.gz
3. ln -s pvfs2-2.6.3(解压出来的目录) pvfs2(新建目录pvfs2为链接文件,指向解压出来的目录)
4. [root@testhost /usr/src]# cd pvfs2
[root@testhost /usr/src/pvfs2-XXX]# ./configure
[root@testhost /usr/src/pvfs2-XXX]# make
[root@testhost /usr/src/pvfs2-XXX]# make install
5. 配置服务器
/usr/bin/pvfs2-genconfig /etc/pvfs2-fs.conf /etc/pvfs2-server.conf
第一句是使用该目录下的pvfs2-genconfig可执行文件,后面两个是使用该可执行文件形成的两个配置文件。将下面要输入的信息写入这两个配置文件中。
/etc/pvfs2-fs.conf这个文件是服务器的相关信息,主要是服务器的配置。
/etc/pvfs2-server.conf这个文件记录服务器的名称以及监听的端口号等信息。打开看看就明白了。
**********************************************************************
Welcome to the PVFS2 Configuration Generator:
This interactive script will generate configuration files suitable
for use with a new PVFS2 file system. Please see the PVFS2 quickstart
guide for details.
**********************************************************************
You must first select the network protocol that your file system will use.
The only currently supported options are "tcp", "gm", and "ib".
* Enter protocol type [Default is tcp]:
Choose a TCP/IP port for the servers to listen on. Note that this
script assumes that all servers will use the same port number.
* Enter port number [Default is 3334]:
Next you must list the hostnames of the machines that will act as
I/O servers. Acceptable syntax is "node1, node2, ..." or "node{#-#,#,#}".
* Enter hostnames [Default is localhost]: testhost
Now list the hostnames of the machines that will act as Metadata
servers. This list may or may not overlap with the I/O server list.
* Enter hostnames [Default is localhost]: testhost
Configured a total of 1 servers:
1 of them are I/O servers.
1 of them are Metadata servers.
* Would you like to verify server list (y/n) [Default is n]?
Choose a file for each server to write log messages to.
* Enter log file location [Default is /tmp/pvfs2-server.log]:
Choose a directory for each server to store data in.
* Enter directory name: [Default is /pvfs2-storage-space]:
Writing fs config file... Done.
Writing 1 server config file(s)... Done.
Configuration complete!
上面的配置基本上是采用默认的,那个testhost。这个必须填写你服务器对应的主机名,可以填多个。
第一个* Enter hostnames [Default is localhost]: testhost,是填写的IO服务器。这个如果配置集群的话,一般是多个,分别对应他们的主机名即可。用“,”隔开。
第二个* Enter hostnames [Default is localhost]: testhost,填写的是元数据服务器。这个一般填写一个。也是主机名 。其余的基本上就是默认了。当然端口号可以自己设定。
6. 创建数据存放目录:/usr/sbin/pvfs2-server /etc/pvfs2-fs.conf /etc/pvfs2-server.conf-testhost -f
这个是使用/usr/sbin/下面的pvfs2-server的可执行文件,利用后面两个配置文件的信息。开动服务器,这个过程主要生成IO服务器数据所要写入的目录。生成这个目录,如果这个目录已经存在,那么将出现错误。这一般它检验目录的建立时间属性,如果与当前系统不一致,将出错。这个错误比较难找。无比注意(在系统的服务管理中,发现这样的信息:pvfs2-server已死,**进程被锁)。基本上就是这个原因了。
7. 启动服务器:/usr/sbin/pvfs2-server /etc/pvfs2-fs.conf /etc/pvfs2-server.conf-testhost
以上完成手工启动服务器,也就是每次启动服务器的时候需要使用上面的命令启动pvfs服务,如果自动开启的话,使用下面的命令。
8. 自动启动服务器配置说明
bash-2.05b# cp /usr/src/pvfs2/examples/pvfs2-server.rc /(紧接着下一行)
/etc/rc.d/init.d/pvfs2-server
bash-2.05b# chmod a+x /etc/rc.d/init.d/pvfs2-server
bash-2.05b# chkconfig pvfs2-server on
chmod 命令修改pvfs2-server的访问属性
chkconfig 是系统启动的时候加载的服务名称,开启之后,在系统启动后,自动启动这项服务。
bash-2.05b# /etc/rc.d/init.d/pvfs2-server start
bash-2.05b# /etc/rc.d/init.d/pvfs2-server stop
这两条命令就是自动开启和停止服务的命令。
以上是完成单机的服务器配置过程,如果是多个服务器,还需要以下过程。
scp /etc/pvfs2-server.conf-cluster/${i} cluster/${i}:/etc/
> scp /etc/pvfs2-fs.conf cluster/${i}:/etc/
> scp /usr/src/pvfs2/examples/pvfs2-server.rc /
cluster/${i}:/etc/rc.d/init.d/pvfs2-server
> ssh cluster/${i} /sbin/chkconfig pvfs2-server on
scp命令,是将该文件拷贝到cluster{i}服务器上的/etc/目录下面。
最后一句话的意思是将cluster{i}的pvfs自动开启。这对应是将一台机器上的 配置文件传给其他的服务器。而其他的服务器需要已经安装了pvfs。
以上完成了所有的系统配置,整体系统的原理在我的blog中已经有了介绍,这要是一个元数据服务器,多个IO服务器。他们之间协同工作。而客户端的意思就是将自己的文件上传到这些服务器上,对客户端是透明的。下面介绍客户端的配置。
客户端上安装上pvfs
9.在/etc/目录下新建pvfs2tab文件,将“tcp://testhost:3334/pvfs2-fs /mnt/pvfs2 pvfs2 default,noauto 0 0”这个话写入该文件保存,注意那个testhost因该改成一个IO服务器对应的主机名称。
[root@testhost /root]# mkdir /mnt/pvfs2
[root@testhost /root]# touch /etc/pvfs2tab
[root@testhost /root]# chmod a+r /etc/pvfs2tab
/mnt/pvfs2/这个目录主要是挂载服务器用的目录
10.查看系统配置cat /proc/version
11. cd /usr/src/pvfs2/
12. ./configure --with-kernel=/usr/src/kernels/linux-2.6.0/
后面的语句的意思就是kernel的所在的位置,一般在/usr/src/kernles/下面。指定该位置
13. make kmod
14. mkae kmod_install
15. insmod /usr/src/pvfs2/src/kernel/linux-2.6/pvfs2.ko
16. ``lsmod''检查上面的语句的正确性。
17. cd /usr/src/pvfs2/src/apps/kernel/linux/
18. ./pvfs2-client -f -p ./pvfs2-client-core
启动挂载服务进程。显示
pvfs2-client starting
Spawning new child process
About to exec ./pvfs2-client-core
Waiting on child with pid 17731
如果配置正确的华,上面的信息显示出来。
19.mount -t pvfs2 -o noreservation tcp://testhost:3334/pvfs2-fs /mnt/pvfs2
将本地的/mnt/pvfs2/以noreservation(可以提高性能)挂载到远程。
20. 这个时候就可以使用linux自带的命令进行对目录进行读写操作。可以产看效率的问题。
21.结束方法:
gil:~# umount /mnt/pvfs2
gil:~# killall pvfs2-client
gil:~# rmmod pvfs2
注意:在系统的安装过程中,需要在个服务器和客户端上的网络进行配置,将主机名与IP地址对应的信息写入配置文件中。而且要检查防火墙是否开同这个端口号了,如果没开通的话,将端口号添加进去。效率的问题,有几个方法解决,在我的blog中记录这些方法,对照进行设置。但是效果如何,不敢说。
每次开机之后,需要重新执行客户端的配置,这个加载的模块在重新启动之后就消失了。而加载的语句为insmod /usr/src/pvfs2/src/kernel/linux-2.6/pvfs2.ko,也就是说每次开机之后,只需要从这步开始执行就好了。
如果客户端使用的FC7,则需要打个补丁。如果没有打不定则会在make kmod这个步骤出错,在pvfs的网站上下载pvfs2-lkv21-patch。放到pvfs2目录下,执行命令patch -p0< pvfs2-lkv21-patch命令。完毕之后,在执行make kmod命令。
如果服务器重新配置的话,一般不能在客户端直接使用insmod命令,应该从configure重新编译。
如果安装了三台服务器,而这个时候只启动了两台,如果你检查pvfs2-ping命令的时候,可能提示失败,主要原因是没有开启第三台服务器。将配置文件(/etc/pvfs2-fs.conf)中的没有开动的服务器配置信息去掉,这个命令就会正常了。