Bash的字符串匹配共有6种形式

Bash的字符串匹配共有6种形式:

1. ${variable#pattern}
如果pattern匹配variable的开始部分,从variable的开始处删除字符直到第一个匹配的位置,包括匹配部分,返回剩余部分。

2. ${variable##pattern}
如果pattern匹配variable的开始部分,从variable的开始处删除字符直到最后一个匹配的位置,包括匹配部分,返回剩余部分。

3. ${variable%pattern}
如果pattern匹配variable的结尾部分,从variable的结尾处删除字符直到第一个匹配的位置,包括匹配部分,返回剩余部分。

4. ${variable%%pattern}
如果pattern匹配variable的结尾部分,从variable的结尾处删除字符直到最后一个匹配的位置,包括匹配部分,返回剩余部分。

5. ${variable/pattern/string}
6. ${variable//pattern/string}
最后这两种用法用于匹配替换。因为我没用到,先不说了。(busybox 1.0.1 不支持最后这两种语法。)

举例:
str=tftp://hostname.com/onepath/anotherpath

echo ${str#*/}
输出:/hostname.com/onepath/anotherpath

echo ${str##*/}
输出:anotherpath

echo ${str%/*}
输出:tftp://hostname.com/onepath

echo ${str%%/*}
输出:tftp:/

——————–
下面说一说具体怎么用。

假设在某个系统中没有sed和awk, 只有grep,tr和cut。
如果要取得网卡的mac地址,可以:

mac_addr=$(ifconfig eth0 | grep HWaddr | cut -d’ ‘ -f11 | tr -d : )
echo $mac_addr
输出:0150BF9886BF

后面再说为什么我要把冒号去掉。这种方式在cut时要经过实验才知道我们要的是第11个field。现在换另一种方式:

mac_addr=$(ifconfig eth0 | grep HWaddr | tr -d ‘ :’)
echo $mac_addr
输出:eth0LinkencapEthernetHWa

ddr0150BF9886BF
然后:
mac_addr=${mac_addr#*HWaddr}
echo $mac_addr
输出:0150BF9886BF

现在要求写一个程序,接受命令行给定一个网址去下载一个文件,要求根据网址的协议的不同,采用不同的程序下载。如果给定的网址以.xml结尾,则认为要下载的文件已经在给定的网址中指定,否则要下载的文件名为本机的mac地址加.xml扩展名,不包括mac中的冒号。

例如给定 tftp://host/file.xml,则要用tftp命令下载host上的file.xml文件。
如果给定 http://host/path,则要用wget命令下载host/path上的0150BF9886BF.xml文件。

先取网址的协议,采用从右向左最大匹配”://”:
url=$1
proto=${url%%://*}

再判断文件名是否已经给定, 采用从左向右最大匹配”.xml”:
[ -z "${url##*.xml}" ] || url=$url/$mac_addr.xml

如果 $proto = “http” 或者 “ftp”
则执行
wget $url -O local_file

如果 $proto = “tftp”,这个有点麻烦,因为tftp的用法是:

tftp -g -r remote_file -l local_file host

所以还要把remote_file和host从url中提取出来。

先把url中的tftp://去掉:
tmp=${url#*://}

再从右向左最大匹配”/”得到host:
host=${tmp%%/*}

再从左向右最小匹配”/”得到路径和文件名:
remote_file=${tmp#*/}

使用cfengine来实现服务器的自动化配置(5)-配置工作方式

(四)工作方式一

在完成了对工作方式二的配置之后,它的基础上我们来配置工作方式一,这种工作方式是由服务器运行cfrun连接远程客户端的cfservd,激活远程主机的cfagent程序。相比第二种方式而言,这种做法实现了集中控制.例如现在有个配置需要立刻更改,而现在还没到客户端定时运行的时间,如果我们一台台的登录到客户机来执行cfagent,显然是十分麻烦的,而且很费时间。有了cfrun就可以在中央机上对所有的客户发出指令让他们立即运行cfagent。

1.配置客户机上的cfservd.conf

在之前的update.conf里面,我们可以看到我们已经在远程客户端上开启了cfservd进程.只是并没有为它们写配置文件,要做也其实很简单,将服务器的cfservd.conf复制过来,然后做适当修改就可以了

# cfservd.conf

# yahoon 2007.11.1

control:

   cfrunCommand = ( "/var/cfengine/bin/cfagent" ) 只需要加入这一句就可以了

    domain = ( yahoon.org )

    AllowConnectionsFrom = ( 192.168.0.0/24 )

    TrustKeysFrom = ( 192.168.0.0/24 )

    AllowUsers = ( root )

    MaxConnections = ( 150 )

    MultipleConnections = ( true )

    #AllowMultipleConnectionsFrom = ( 192.168.0 )

############################################

admit:

#/var/cfengine/rpc_out *.$(domain) 128.39.73

#/file *.$(domain) 128.39.73

    /masterfile/inputs    192.168.0.

    /var/cfengine         192.168.0.

然后重启客户机的cfservd进程

2.编辑服务器上的cfrun.hosts客户端列表

在服务器上写配置文件cfrun.host,只需要把客户机的ip加进去,这里我们先只把115加进去

# This is the host list for cfrun

192.168.0.115

3.在服务器上运行cfrun

现在就可以在服务器上运行cfrun –v

…(部分略)…

Loaded /var/cfengine/ppkeys/localhost.priv

Loaded /var/cfengine/ppkeys/localhost.pub

Looking for a source of entropy in /var/cfengine/randseed

cfrun(0):         ………. [ Hailing 192.168.0.115 ] ……….

Connecting to server 192.168.0.115 to port 0 with options

Loaded /var/cfengine/ppkeys/root-192.168.0.115.pub

Connect to 192.168.0.115 = 192.168.0.115 on port 5308

Loaded /var/cfengine/ppkeys/root-192.168.0.115.pub

………………………………………………………

cfrun:yahoon.org: Strong authentication of server=192.168.0.115 connection confirmed

192.168.0.115 replies..

Connection with 192.168.0.115 completed

到客户机115上查看cfagent的日志文件cfengine.centos2.runlog

Sat Nov 3 07:06:37 2007:Lock removed normally :pid=24784:lock.cfagent_conf.centos2.copy._masterfile_inputs__var_cfengine_inp

uts_192_168_0_114_4831:

Sat Nov 3 07:06:39 2007:Lock removed normally :pid=24784:lock.cfagent_conf.centos2.processes.proc_cfservd__var_cfengine_bin_

cfservd_1704:

Sat Nov 3 07:06:39 2007:Lock removed normally :pid=24784:lock.cfagent_conf.centos2.processes.proc_cfenvd__var_cfengine_bin_c

fenvd__H_4223:

Sat Nov 3 07:06:39 2007:Lock removed normally :pid=24784:lock.cfagent_conf.centos2.tidy._var_cfengine_outputs_3686:

Sat Nov 3 07:06:39 2007:Lock removed normally :pid=24784:lock.cfagent_conf.centos2.shellcommand._bin_echo_Danger__Will_hello

_____Robison______2889:

Sat Nov 3 07:06:39 2007:Lock removed normally :pid=24784:no_active_lock:

按照115的方法将另外一台客户机116也配置好,并加入到cfrun.hosts文件里面,同样执行cfrun –v就可以看到两台主机都运行了.

4.注意:

1)cfrun是读取cfrun.hosts里面的主机列表,一个主机完成之后再连接下一台主机

2)如果现在有多台主机,我现在有紧急情况要运行其中一台的cfagent,例如115这台机,当然你可以ssh到这台主机上直接执行cfagent –v,但是有了cfrun,你只需要在服务器上执行cfrun 192.168.0.115 –v,注意输出的第一行显示Skipping host 192.168.0.116,很明显,它会跳过116来执行。

3)如果客户机的cfservd.conf从服务器拷贝过来后未增加cfrunCommand = ( "/var/cfengine/bin/cfagent" ),那么在服务器执行cfrun –v的时候会报错,同样以115为例,那么cfrun –v的输出会有:

Loaded /var/cfengine/ppkeys/root-192.168.0.115.pub

………………………………………………………

cfrun:yahoon.org: Strong authentication of server=192.168.0.115 connection confirmed

192.168.0.115 replies..

Host authentication failed. Did you forget the domain name or IP/DNS address registration (for ipv4 or ipv6)?cfrun:yahoon.org: Couldn’t recv

cfrun:yahoon.org: recv

Connection with 192.168.0.115 completed

五、小结

1、通过客户机本身的cfexecd 和 服务器的cfrun如果是同时执行cfagent会不会出现冲突?答案是不会,cfengine有很好的锁的机制来避免这种情况的发生.通常来说,客户机定时执行cfexecd来单独激活自己的cfagent和服务器执行cfrun集中激活客户机这两种方式在实际中都会使用,只是场合不同:

定时执行:作为客户机的一种例行的工作安排进行设置,属于日常任务。

集中执行:一般用于特殊情况,要临时激活某些或者所有的客户机执行cfagent,例如临时更改某个主机的配置等。

2、cfengine本身并没有客户机服务器的严格区分,每一台主机同时可以是服务器,也可以当作客户机.这与windows域的概念有些相似,只要客户端上安装了域管理工具,就可以进行域管理的工作.cfengine也是这种概念.当然,一般来讲方便于集中控制,我们会选定一台机作为服务器,例如本文的centos1,其余的机都用作客户机。

3、cfengine的日志系统:cfengine 的日志是相当丰富的,例如在centos1上,在/var/cfengine目录里面cfengine.centos1.runlog,这是cfagent进程的运行日志, cfengine.localhost.runlog这是cfenvd进程的日志.特别注意的是outputs这个目录下面,有很多文件,每次cfexecd运行一次,就会写入一个文件,文件的内容就是cfagent执行的结果.outputs这个目录包括下面的文件都是由cfexecd程序所产生的。

4、 inputs outputs 目录,这两个目录十分容易搞混,上面已经说了 outputs 目录的作用,inputs相对而言就重要得多,它是 cfengine 默认的当前有效配置文件所在的目录.我们之前创建的 *.conf 之类的文件都是在这个目录下。

5、cfengine 的所有程序都带有-v参数,用于详细的输出,这对我们排错调试带来了很大方便.而且对于cfagent程序,-n参数是十分有用的.对于一个刚刚建立的策略文件直接执行是十分危险的,-n参数是模拟执行,所以带上它来运行cfagent就给我们带来很大的安全性,特别是调试的时候.所以首先应该使用

cfagent –n –v

6、cfengine的文档是十分丰富的,我这里也只是仅仅安装上去,告诉大家基本的使用方法,更详细的使用说明可以查阅其官方网站的文档。

使用cfengine来实现服务器的自动化配置(3)-测试运行/排错

2)测试运行

为了安全我们一般使用cfagent -v –n ,带上了-n参数的意思是只是测试,而不会真的执行.

…(部分略)…

Looking for an input file /var/cfengine/inputs/update.conf

Cfengine input file had no explicit version string

Finished with update.conf

———————————————————————

Looking for remote method collaborations

———————————————————————

Finished with RPC

Accepted domain name: yahoon.org

cfagent -n: Running in “All talk and no action” mode

LogDirectory = /var/cfengine

Loaded /var/cfengine/ppkeys/localhost.priv

Loaded /var/cfengine/ppkeys/localhost.pub

Checksum database is /var/cfengine/checksum_digests.db

Default binary server seems to be centos2

*********************************************************************

Update Sched: copy pass 1 @ Fri Nov 2 00:58:17 2007

*********************************************************************

Checking copy from 192.168.0.114:/masterfile/inputs to /var/cfengine/inputs

Connect to 192.168.0.114 = 192.168.0.114 on port 5308

Loaded /var/cfengine/ppkeys/root-192.168.0.114.pub

………………………………………………………

cfengine:centos2: Strong authentication of server=192.168.0.114 connection confirmed

Need this: /var/cfengine/inputs/cfagent.conf wasn’t at destination (copying)

Performance(Copy(192.168.0.114:/masterfile/inputs > /var/cfengine/inputs)): time=0.2393 secs, av=0.2927 +/- 0.1537

*********************************************************************

Update Sched: processes pass 1 @ Fri Nov 2 00:58:17 2007

*********************************************************************

cfengine:centos2: Running process command /bin/ps auxw

Defining classes

DoSignals(cfservd)

Existing restart sequence found (/var/cfengine/bin/cfservd)

cfengine:centos2: Executing shell command: /var/cfengine/bin/cfservd

Defining classes

DoSignals(cfenvd)

Existing restart sequence found (/var/cfengine/bin/cfenvd -H)

cfengine:centos2: Executing shell command: /var/cfengine/bin/cfenvd -H

*********************************************************************

Update Sched: tidy pass 1 @ Fri Nov 2 00:58:17 2007

*********************************************************************

…(部分略)…

说明整个的执行过程是没问题的.粗体部分是连接服务器复制文件的过程.

上面是测试 我们现在不带-n来执行cfagent –v

…(部分略)…

Accepted domain name: yahoon.org

LogDirectory = /var/cfengine

Loaded /var/cfengine/ppkeys/localhost.priv

Loaded /var/cfengine/ppkeys/localhost.pub

Checksum database is /var/cfengine/checksum_digests.db

Default binary server seems to be centos2

*********************************************************************

Update Sched: copy pass 1 @ Fri Nov 2 01:03:31 2007

*********************************************************************

Checking copy from 192.168.0.114:/masterfile/inputs to /var/cfengine/inputs

Connect to 192.168.0.114 = 192.168.0.114 on port 5308

Loaded /var/cfengine/ppkeys/root-192.168.0.114.pub

………………………………………………………

cfengine:centos2: Strong authentication of server=192.168.0.114 connection confirmed

Performance(Copy(192.168.0.114:/masterfile/inputs > /var/cfengine/inputs)): time=0.2774 secs, av=0.2847 +/- 0.1080

Saving the setuid log in /var/cfengine/cfagent.centos2.log

…(部分略)…

*********************************************************************

Main Tree Sched: shellcommands pass 1 @ Fri Nov 2 01:03:33 2007

*********************************************************************

cfengine:centos2:

Executing script /bin/echo Danger,Will Robison!…(timeout=0,uid=-1,gid=-1)

(Setting umask to 77)

cfengine:centos2:/bin/echo Dange: Danger,Will Robison!

cfengine:centos2: Finished script /bin/echo Danger, Will Robison!

Performance(Exec(/bin/echo Danger,Will Robison!)): time=0.0434 secs, av=0.0472 +/- 0.0217

———————————————————————

可以看到已经成功的下载了cfagent.conf文件,并成功运行了

查看这个目录ls /var/cfengine/inputs 确实已经有了cfagent.conf

如果我们立刻再执行一次cfagent –v ,会发现输出有这么一句

cfengine:centos2: Nothing promised for [shellcommand./bin/echo Danger, Will Robison!] (0/1 minutes elapsed)

这句话的意思是这个配置没超过1分钟就执行过,执行的频率太快,cfengine这次是不会执行的。

如果对服务器上的配置文件做了修改,例如

shellcommands:

"/bin/echo Danger, ======Will Robison!" 我只是在这个地方加了几个等号输出.

然后在客户机上执行cfagent –v输出确实是多了===,不过细心的你会发现inputs目录下多了个文件

cfagent.conf.cfsaved

也就是说当cfagent成功下载了最新版本的配置文件后,会将原来的做个备份.

3.设为开机启动

最后我们需要做的就是将cfengine的程序设为自动启动。客户机和服务器上

#vi /etc/rc.d/rc.local    //加上下面这两行

/var/cfengine/bin/cfservd

/var/cfengine/bin/cfenvd –H

然后让cfagent定期执行,也就是定期到服务器上去下载最新的配置文件来执行。运行

#crontab -e

加上下面这句话

0,15,30,45 * * * * /var/cfengine/bin/cfexecd -F

4.排错:

1).原来我想的是本地子网没有域名,以为用ip就够了,就没有给出domain,在客户端运行cfagent –v输出如下

*********************************************************************

Update Sched: copy pass 1 @ Thu Nov 1 21:52:20 2007

*********************************************************************

Checking copy from 192.168.0.114:/masterfiles/inputs to /var/cfengine/inputs

Connect to 192.168.0.114 = 192.168.0.114 on port 5308

cfengine:centos2: Undefined domain name

cfengine:centos2: Id-authentication for centos2.undefined.domain failed

cfengine:centos2: Unable to establish connection with 192.168.0.114 (failover)

Saving the setuid log in /var/cfengine/cfagent.centos2.log

可以看到连接是失败的.因为cfservd要求连接上来的机器必须有DNS记录.

2)如果设置了domain,但是在/etc/hosts中没有连接的客户机的记录的话(也就是说只是在配置文件里面定义了域,而实际查不到dns记录)那么会有下面的错误

*********************************************************************

Update Sched: copy pass 1 @ Thu Nov 1 22:49:42 2007

*********************************************************************

Checking copy from 192.168.0.114:/masterfiles/inputs to /var/cfengine/inputs

Connect to 192.168.0.114 = 192.168.0.114 on port 5308

Loaded /var/cfengine/ppkeys/root-192.168.0.114.pub

………………………………………………………

cfengine:centos2: Strong authentication of server=192.168.0.114 connection confirmed

cfengine:centos2: Server returned error: Host authentication failed. Did you forget the domain name or IP/DNS address registration (for ipv4 or ipv6)?

cfengine:centos2: Can’t stat /masterfiles/inputs in copy

Saving the setuid log in /var/cfengine/cfagent.centos2.log

另外在cfservd.conf和update.conf中,服务器上用于拷贝的目录路径必须正确,否则也会报这个错误的我这里是:/masterfiles/inputs

使用cfengine来实现服务器的自动化配置(4)-测试新加入一台客户机

5.新加入一台客户机

现在新加入一台客户端机器名centos3 ip 地址 192.168.0.116;

在它上面安装好cfengine,好准备工作:禁用服务,拷贝程序;

要让它能连上服务器的cfservd,那么必须在服务器上添加它的dns记录,在服务器上

#Vi /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1               centos1 localhost.localdomain localhost

::1             localhost6.localdomain6 localhost6

192.168.0.115   centos2.yahoon.org

192.168.0.116   centos3.yahoon.org 加上粗体的这行.

然后从centos2上拷贝update.conf到新客户端上,当然是使用sftp是最快的

先切换到inputs目录下

cd /var/cfengine/inputs

运行sftp(过程如下:粗体部分是输入的命令)

sftp 192.168.0.115

Connecting to 192.168.0.115…

The authenticity of host ‘192.168.0.115 (192.168.0.115)’ can’t be established.

RSA key fingerprint is 62:ef:31:0b:ee:89:74:f8:94:4d:ec:11:ee:fa:18:79.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘192.168.0.115’ (RSA) to the list of known hosts.

root@192.168.0.115’s password: 输入115的密码

sftp> cd /var/cfengine/inputs

sftp> dir

cfagent.conf             cfagent.conf.cfsaved     cfservd.conf             update.conf             

sftp> get update.conf

Fetching /var/cfengine/inputs/update.conf to update.conf

/var/cfengine/inputs/update.conf                      100% 774     0.8KB/s   00:00   

sftp> bye

现在就可以测试运行了

[root@centos3 inputs]# cfagent -v -n

输出报错

Checking copy from 192.168.0.114:/masterfile/inputs to /var/cfengine/inputs

Connect to 192.168.0.114 = 192.168.0.114 on port 5308

cfengine:centos3: BAD: keys did not match

cfengine:centos3: Authentication dialogue with 192.168.0.114 failed

cfengine:centos3: Unable to establish connection with 192.168.0.114 (failover)

看来是key的问题, 从服务器和客户端上删掉相关的公钥文件(/var/cfengine/ppkeys目录下)

服务器上删掉root-192.168.0.116.pub

客户端上删掉root-192.168.0.114.pub

重新执行cfagent –v –n

Checking copy from 192.168.0.114:/masterfile/inputs to /var/cfengine/inputs

Connect to 192.168.0.114 = 192.168.0.114 on port 5308

cfengine:centos3: Trusting server identity and willing to accept key from 192.168.0.114=192.168.0.114

Saving public key /var/cfengine/ppkeys/root-192.168.0.114.pub

cfengine:centos3: /var/cfengine/inputs/cfagent.conf wasn’t at destination (copying)

cfengine:centos3: Copying from 192.168.0.114:/masterfile/inputs/cfagent.conf

cfengine:centos3: Object /var/cfengine/inputs/cfagent.conf had permission 600, changed it to 700

cfengine:centos3: Object /var/cfengine/inputs had permission 755, changed it to 700

Performance(Copy(192.168.0.114:/masterfile/inputs > /var/cfengine/inputs)): time=0.4462 secs, av=0.4462 +/- 0.0316

Saving the setuid log in /var/cfengine/cfagent.centos3.log

运行成功!

接下来的工作就又很简单了,加入启动项,加入crontab等.

从加入第二台机器的排错过程,我们可以看到,在cfservd建立连接的时候,有一个交换key的过程

一般在安装好了后在/var/ppkey的目录下已经有了localhost.priv和localhost.pub

上面所说的客户端115连到服务器114的过程就是:

115将自己的localhost.pub给114,

114将其改名为root-192.168.0.115.pub;

同样:114将自己的localhost.pub给115,

115将其改名为root-192.168.0.114.pub

不信的话可以查看115上的localhost.pub与114上的root-192.168.0.115.pub,内容是一样的。

小结:

要跟cfservd建立连接需要两个过程:首先是交换和验证公钥(如果是第一次连接没有对方的公钥就要交换,以后的连接就只需要验证就可以了),然后是服务器对客户机做DNS反向查询(文档里面说的是两次)

使用cfengine来实现服务器的自动化配置(2)-下载安装配置过程

四、配置过程

(一)下载安装

cfengine的文档里面都是采用源码安装的,经本人测试后发现源码安装经常会出现莫名奇妙的错误,而使用rpm包则是省时省力的方式。

装 cfengine 需要 openssl 和 Berkely DB 这两个依赖性的包,所以在正式安装cfengine前,必须确认你的系统已经安装了db4, db4-devel,一般来说都是系统自带安装好的.然后就可以下载cfengine了, 下载地址http://dag.wieers.com/rpm/packages/cfengine/cfengine-2.2.2-1.el5.rf.i386.rpm

安装也很简单,rpm –ivh cfengine-2.2.2-1.el5.rf.i386.rpm即可,接下来我们就要着手配置了

(二) 准备工作

在服务器和客户端将cfengine安装完成后,要做下面一些准备工作:

为了完全使用源码方便控制,将服务都禁用掉.

[root@centos1 inputs]# chkconfig cfservd off

[root@centos1 inputs]# chkconfig cfenvd off

[root@centos1 inputs]# chkconfig cfexecd off

然后查看会看到所有cfengine的相关服务都禁用了

[root@centos1 inputs]# chkconfig –list|grep cf

将cfengine的程序复制到bin目录下

mv /var/cfengine/bin/cfagent /var/cfengine/bin/cfagent.link///将原来的链接文件重命名///

cp /usr/sbin/cfagent /var/cfengine/bin

cp /usr/sbin/cfenvd /var/cfengine/bin

cp /usr/sbin/cfexecd /var/cfengine/bin

cp /usr/sbin/cfservd /var/cfengine/bin

(三)工作方式二

我这里先说工作方式二的原因是它的过程简单,而且很能体现cfengine的本质工作流程时需要的条件是:

服务器运行cfservd (这里当然是需要有cfservd.conf配置文件)。然后还有一个正确的策略文件cfagent.conf供客户机下载

客户机使用cfagent运行update.conf的配置,连接到服务器的cfservd进程,下载cfagent.conf来运行。所以我们接下来要在服务器和客户端上创建所需的配置文件:

服务器上:cfservd.conf cfagent.conf

客户端上:update.conf

我们这里将centos1作为服务器(192.168.0.114,为了简洁,文中会简称为114),centos2作为客户端,文中简称为115

1.对服务器端进行配置

1)创建配置文件cfservd.conf

在/var/cfengine/inputs下创建cfservd.conf

# cfservd.conf

# yahoon 2007.11.1

control:

    domain = ( yahoon.org )

    AllowConnectionsFrom = ( 192.168.0.0/24 )

    TrustKeysFrom = ( 192.168.0.0/24 )

    AllowUsers = ( root )

    MaxConnections = ( 150 )

    MultipleConnections = ( true )

    #AllowMultipleConnectionsFrom = ( 192.168.0 )

############################################

admit:

#/var/cfengine/rpc_out *.$(domain) 128.39.73

#/file *.$(domain) 128.39.73

    /masterfile/inputs    192.168.0.

    /var/cfengine         192.168.0.

然后我们就可以启动cfservd服务,执行

/var/cfengine/bin/cfservd –v

同样带上-v参数来查看详细的输出,利于排错

…(部分略)…

Listening for connections …

cfservd: cfservd starting Fri Nov 2 18:54:49 2007

显示是成功的,进一步查看fservd监听的tcp 5308端口

[root@centos1 inputs]# netstat -an|grep 5308

tcp        0      0 :::5308                     :::*                        LISTEN

2)创建策略文件cfagent.conf

这就是我们即将要发布给客户机运行的策略文件,路径同样是在/var/cfengine/inputs下创建,内容如下

control:

actionsequence = ( shellcommands )

shellcommands:

"/bin/echo Danger, Will Robison!"

3)测试

执行cfagent –v (如果不需要真正执行,可以加上-n参数)

…(部分略)..

cfengine:centos1:

Executing script /bin/echo Danger, Will Robison!…(timeout=0,uid=-1,gid=-1)

(Setting umask to 77)

cfengine:centos1:/bin/echo Dange: Danger, Will Robison!

cfengine:centos1: Finished script /bin/echo Danger, Will Robison!

Performance(Exec(/bin/echo Danger, Will Robison!)): time=0.0529 secs, av=0.0536 +/- 0.0231

———————————————————————

Alerts

———————————————————————

++++++++++++++++++++++++++++++++++++++++

Summary of objects involved

++++++++++++++++++++++++++++++++++++++++

    global

    update

    main

cfengine:centos1: Outcome of version (not specified): Promises still kept 0%, Promises repaired 100%, Promises not kept 0%

运行完全正常,那么就可以将其复制到要发布的目录里面/masterfile/inputs

4)DNS解析

cfservd在做文件传输的时候需要对连接上来的客户机做DNS解析,所以必需要有域名,如果是内部网没有dns服务,就利用/etc/hosts,将客户端加入进来.这里我们选用的域名为yahoon.org,编辑/etc/hosts文件

[root@centos1 inputs]# vi /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1               centos1 localhost.localdomain localhost

::1             localhost6.localdomain6 localhost6

192.168.0.115   centos2.yahoon.org

粗体的部分即为加上的对客户机115的解析,要测试是否成功解析了centos2.yahoon.org十分简单,服务器上ping这个域名就可以了..

[root@centos1 inputs]# ping centos2.yahoon.org

centos2.yahoon.org (192.168.0.115) 56(84) bytes of data.

64 bytes from centos2.yahoon.org (192.168.0.115): icmp_seq=1 ttl=64 time=3.74 ms

64 bytes from centos2.yahoon.org (192.168.0.115): icmp_seq=2 ttl=64 time=1.61 ms

2.对客户端进行配置

1)创建配置文件update.conf

在/var/cfengine/inputs下创建 update.conf

# update.conf

# yahoon 2007.11.1

control:

    actionsequence = ( copy processes tidy )

    domain = ( yahoon.org )

    #policyhost = ( my_policy_host )

    policyhost = ( 192.168.0.114 )

    master_cfinput = ( /masterfile/inputs )

    workdir = ( /var/cfengine )

copy:

    $(master_cfinput) dest=$(workdir)/inputs

                      r=inf

                      mode=700

                      type=binary

                      server=$(policyhost)

                      trustkey=true

processes:

#    "cfservd" restart /var/cfengine/bin/cfservd

#    "cfenvd" restart "/var/cfengine/bin/cfenvd"

    "cfservd" signal=term restart /var/cfengine/bin/cfservd

    "cfenvd" signal=kill restart "/var/cfengine/bin/cfenvd -H"

tidy:

    $(workdir)/outputs pattern=* age=7

# End

使用cfengine来实现服务器的自动化配置(1)-工作环境及论论知识

之前我写了一篇nagios监控软件的文章,得到大家的关注,能够将自己的知识分享给大家确实十分高兴。这篇文 章是我最近使用的一个软件cfengine,如果说nagios主要是监控的监(监视)的话,那么cfengine则着重于控。很遗憾国内相关的文章很 少,我就自己尝试写了这篇,希望得到大家的建议。

目录

一、概述
二、工作环境

三、理论知识
(一)cfengine的程序结构及配置文件
(二)cfengine的工作方式

四、配置过程

(一)下载安装
(二) 准备工作
(三)工作方式二

1.对服务器端进行配置
2.对客户端进行配置
3.设为开机启动
4.排错:
5.新加入一台客户机

(四)工作方式一

1.配置客户机上的cfservd.conf
2.编辑服务器上的cfrun.hosts客户端列表
3.在服务器上运行cfrun
4.注意:

五、小结

正文内容:

一、概述

cfengine是一个功能强大的自动化系统管理工具.引用其官网的说法"cfengine是一种 UNIX 管理工具,其目的是使简单的管理的任务自动化,使困难的任务变得较容易。它的目标是使系统从任何状态收敛到一种理想状态。依照它的作者 Mark Burgess 所说,cfengine 总是使您的系统更接近于您所定义的配置; 它决不会使系统变得更糟。

“确实十分的拗口,也难以理解.简单的跟大家说说我的理解,很简单,就是你想你的系统应该是十分样子,你就可以使用cfengine来实现,它可以 保证你的系统总是维持你所希望的那个状态。也就是说有黑客进来了修改了某个重要的配置文件的内容或者权限,也会被cfengine自动修复!

还有一种经常遇到的情况,有少则几台多则成千上万台机器,现在需要临时的改变其一个配置,例如删掉某个帐号,停掉某个服务,一般我们只能不厌其烦的登到每一台机器上重复的完成这些动作,但是有了cfengine,一个命令就可以搞定了.是不是很诱人?

cfengine大概的功能有:

·检查和配置网络接口
·编辑系统和用户的文本文件
·维护符号链接
·检查和设置文件的权限
·删除垃圾文件
·检查重要文件和文件系统的存在
·控制用户脚本和shell命令的执行
·基于类的判定结构
·进程管理

为了节省篇幅,我这里就不一一介绍了,大家可以访问它的官方网站,里面的文档十分丰富

http://www.cfengine.org/

而且它还十分的人性化,给出了中文主页

http://www.cfengine.org/china.phtml

二、工作环境

主机名

操作系统

ip地址

centos1

centos 5

192.168.0.114

centos2

centos 5

192.168.0.115

centos3

centos 5

192.168.0.116

注:centos5 是redhat enterprise 5的重编译开源版本.功能使用与企业版几乎一样.

三、理论知识(一)cfengine的程序结构及配置文件

Cfengine是一个用于设置和维护计算机系统的工具,包含了以下几个组件:

·cfagent 自动配置代理(必须),其配置文件为cfupdate.conf和 cfagent.conf

·cfservd 文件服务和远程激活服务(推荐),其配置文件为cfservd.conf

·cfexecd 计划和报告服务(建议)

·cfenvd 异常检测服务(强烈建议)

·cfrun 远程激活cfagent的方法(需要的时候用这个),其配置文件为cfrun.hosts

·cfshow 检查有帮助的数据库的内容的方法(辅助)

·cfenvgraph 异常检测服务cfenvd的附属工具(辅助)

·cfkey 密匙生成工具(每台主机运行一次)。

在下一节分析cfengine的工作方式的时候会解释几个关键程序及其配置文件的作用

(二)cfengine的工作方式

cfengine有两种工作方式:

服务器激活方式:这是一种集中控制的方式,上图详细给出了整个流程.

1)服务器上运行cfrun,cfrun会根据cfrun.hosts中的主机列表来连接到某个客户机的cfservd程序

2)客户机上cfservd调用本机的cfagent程序

3)客户机上cfagent程序执行update.conf,连接到中央机的cfservd复制下载策略文件cafagent.conf

4)客户机下载成功后执行最新版本的策略文件,不成功就执行旧版本的.

注:update.conf的内容一般为一些非常简单的固定操作:下载策略文件,清理日志,重启服务,基本上这个文件创建好了之后就不会更改了.在下载策略文件的时候如果下载成功,会将原策略文件改名,加上.cfsaved后缀

客户端自主激活方式:相比上一种要简单一些,客户机独立执行cfagent (可以是定期执行,例如加入cron中)。样的情况下,客户机就不需要有cfservd程序了,整个流程也简化为图中的第3,4步。

GlusterFS学习手记05-gluster和NFS测试

本文作者:深夜的蚊子
本文链接:http://wenzizone.cn/?p=22
版权所有。转载时请以链接形式注明作者和原始出处及本声明,谢谢

对于Glusterfs学习也有了几天了,但对于性能上的评价目前关注的比较少,今天主要才测测Glusterfs和NFS的性能比,但由于手头上条件有限,只能通过虚拟机来测试,数据仅供参考,如有人可以在真实环境测试,还希望发出来供大家参考

我的环境
vmware6.0模拟两个linux

linux01 256MB内存,8G硬盘,centos5,ip:192.168.211.128,用作NFSserver端和Glusterfs的server端
linux02 256MB内存,8G硬盘,centos5,ip:192.168.211.129,用作client

下面就来看下我的测试结果

这张图是NFS的读取测试结果

下面这张是NFS的写入测试结果

然后我把两台虚拟机重启,并启用Glusterfs模式

第一张图是Glusterfs的读取结果

第二张图是写入的测试结果

由上面的结果看,Glusterfs仅仅用于NFS这种模式的情况下,写入速度并不太理想

但Glusterfs的功能不仅仅提供共享存储来用,而是一个存储的聚合,当然以上测试结果未必就很准确,毕竟我的测试条件不行,不过也仅仅是给各位一个启示,请有条件的同志继续完成测试工作吧

官方的glusterfs和NFS的测试结果请看
http://www.gluster.org/docs/index.php/GlusterFS_1.2.1-BENKI_Aggregated_I/O_vs_NFSv4_Benchmark

GlusterFS学习手机06-基于glusterfs的web应用[原创]

本文作者:深夜的蚊子
本文链接:http://wenzizone.cn/?p=37
版权所有。转载时请以链接形式注明作者和原始出处及本声明,谢谢

看glusterfs的东西也有段时间了,不过一直一来也是停留在对这个分布式系统的学习,当然对于一个软件的学习不能仅仅停留在对这个软件的熟 悉,还要考虑它所适用的范围。最近就在思考,到底对于我们的什么应用合适,我这边接触的比较多的结构就是N台Web+单个NFS。我就再想,既然 glusterfs是个聚合分布式文件系统,而且支持HA的功能,是不是可以使用glusterfs来替换NFS,既可以达到共享文件的用途,有可以解决 了单点的问题。

先来看下我预计的拓扑结构

下面来解释一下这个拓扑,前端的web应用,每台web上的应用都放置在glusterfs共享出来的硬盘上,尽管我图上画的是一个 diskpool,但实际的容量大小是几台web中glusterfs共享空间最小的那个大小。而且对于上面这个拓扑的应用,我并不需要独立的NAS来做 共享,完全可以使用每台web服务器上未用的硬盘空间(注:当然你可以选择使用NAS来进行存储,在存储量很大的情况下)。

接下来就来看下实现的方式:
web01:192.168.220.128 共享出来的地址:/var/app
web02:192.168.220.129 共享出来的地址:/var/app
两台机器都事先安装好glusterfs和fuse(安装方法可以参考我前几篇文章)
首先来配置web01的server端

cat /etc/glusterfs/server.vol

volume brick
type storage/posix # POSIX FS translator
option directory /var/app # Export this directory
end-volume

volume locker
type features/posix-locks
subvolumes brick
end-volume

### Add network serving capability to above brick.
volume server
type protocol/server
option transport-type tcp/server
option listen-port 6996 # Default is 6996
subvolumes locker
option auth.addr.brick.allow * # Allow access to "brick" volume
option auth.addr.locker.allow *
end-volume

web02上的server端配置相同cat /etc/glusterfs/server.vol

volume brick
type storage/posix # POSIX FS translator
option directory /var/app # Export this directory
end-volume

volume locker
type features/posix-locks
subvolumes brick
end-volume

### Add network serving capability to above brick.
volume server
type protocol/server
option transport-type tcp/server
option listen-port 6996 # Default is 6996
subvolumes locker
option auth.addr.brick.allow * # Allow access to "brick" volume
option auth.addr.locker.allow *
end-volume

服务器端配置完毕,接下来就是client端的配置,因为两台机器互为对方的sever又同时是自己的server所以两台上都需要配置client端。首先看下web01上的配置cat /etc/glusterfs/replicate.vol

volume client0
type protocol/client
option transport-type tcp/client
option remote-host 127.0.0.1 # IP address of the remote brick
option remote-port 6996 # default server port is 6996
option remote-subvolume locker # name of the remote volume
end-volume

volume client1
type protocol/client
option transport-type tcp/client
option remote-host 192.168.211.129
option remote-port 6996
option remote-subvolume locker
end-volume

volume bricks
type cluster/replicate
subvolumes client0 client1
option read-subvolume client0
end-volume

再来看下web02上的配置cat /etc/glusterfs/replicate.vol

volume client0
type protocol/client
option transport-type tcp/client
option remote-host 127.0.0.1 # IP address of the remote brick
option remote-port 6996 # default server port is 6996
option remote-subvolume locker # name of the remote volume
end-volume

volume client1
type protocol/client
option transport-type tcp/client
option remote-host 192.168.211.128
option remote-port 6996
option remote-subvolume locker
end-volume

volume bricks
type cluster/replicate
subvolumes client0 client1
option read-subvolume client0
end-volume

到此,配置就已经完成了,接下来就可以测试咯,首先两台机器上需要加载fuse modprobe fuse 如果没有报错,说明fuse模块加载完毕,然后在两台机器上启动server端和client端web01上执行

启动服务端
glusterfsd -f /etc/glusterfs/server.vol

启动client端
glusterfs -f /etc/glusterfs/replicate.vol /usr/local/nginx/html/blog

web02上如法炮制然后就可以在web01上的/mnt上放置web的内容了,web02上可以自动的看到相应的内容,并不需要人为的干预,没台机器上都会有一份 web应用的拷贝,这样无论那台web宕机,web的提供的服务是不会中断,也不会受到影响的,从而避免了,单点NFS故障导致服务中断,同时避免了,双 NFS数据同步的问题。同时每台web优先读取自己硬盘上的copy,所以可以减少网络负载。但这个方案还不是最完美的,因为这种方案对于写频繁的应用来说是存在问题的,如果出现同时写一个文件的情况,就会造成数据的不一致,所以如果 web应用是读频繁的话,还是很有优势的,而且如果后台人员需要对应用进行更新,只需要更新第一台server的就行,默认情况下replicate的应 用,subvolumes client0 client1 中的一个就是主server,这里只要对于client0上的数据进行更新就可以做到同步了。

GlusterFS学习手记03-cluster/Replicate 的学习

本文作者:深夜的蚊子
本文链接:http://wenzizone.cn/?p=10
版权所有。转载时请以链接形式注明作者和原始出处及本声明,谢谢

今天主要把我学习的文件复制功能写出来

Replicate

type cluster/replicate

Replicate(前身是AFR)为glusterfs提供了类似RAID-1的功能。Replicate会复制文件或者文件夹到各个 subvolumes里。因此,如果replicate部分设置了4个subvolume,那就会4分的文件或者文件夹的拷贝副本。replicate同 样提供了高可用,比如如果其中的一个subvolume down掉了(或者说一台存储服务器坏了,网络连接出现问题)replicate依然可以使用冗余的拷贝副本来提供服务。
Replicate同样提供了自动修复功能,比如,如果一台crash掉的服务器恢复了,这台服务器上存储的过期的文件或者文件夹就会被更新成最新的版本。Replicate使用了后端文件系统的扩展功能来跟踪文件或者文件夹的版本来提供自动恢复的功能

volume replicate-example
type cluster/replicate
subvolumes brick1 brick2 brick3
end-volume

上面的例子将会把所有文件都复制到brick1 brick2 brick3中

所有读的操作都会从第一台活着的sbuvolume进行。如果三个sub-volume都是启用的状态,就从brick1读;如果brick1 down了,就从brick2读。如果读的操作刚刚完成brick1就down了,复制就会传递给brick2.

概念讲完了,下面就来说下配置吧

模拟环境:
vmware6.0 两个linux server:192.168.211.128 client:192.168.211.129
两个存储node,一个client

先来看看server上的配置
cat /etc/glusterfs/glusterfs-server0.vol

### Export volume “brick” with the contents of “/home/export” directory.

volume brick
type storage/posix # POSIX FS translator
option directory /home/dir1 # Export this directory
end-volume

volume locker
type features/posix-locks
subvolumes brick
end-volume

### Add network serving capability to above brick.
volume server
type protocol/server
option transport-type tcp/server
option bind-address 192.168.211.128 # Default is to listen on all interfaces
option listen-port 6996 # Default is 6996
subvolumes locker
option auth.addr.brick.allow * # Allow access to “brick” volume
option auth.addr.locker.allow *
end-volume

cat /etc/glusterfs/glusterfs-server1.vol

### Export volume “brick” with the contents of “/home/export” directory.
volume brick
type storage/posix # POSIX FS translator
option directory /home/dir2 # Export this directory
end-volume

volume locker
type features/posix-locks
subvolumes brick
end-volume

### Add network serving capability to above brick.
volume server
type protocol/server
option transport-type tcp/server
option bind-address 192.168.211.128 # Default is to listen on all interfaces
option listen-port 6997 # Default is 6996
subvolumes locker
option auth.addr.brick.allow * # Allow access to “brick” volume
option auth.addr.locker.allow *
end-volume

然后是client端的配置
cat /etc/glusterfs/replicate-client.vol

### Add client feature and attach to remote subvolume
volume client0
type protocol/client
option transport-type tcp/client
option remote-host 192.168.211.128 # IP address of the remote brick
option remote-port 6996 # default server port is 6996
option remote-subvolume locker # name of the remote volume
end-volume

volume client1
type protocol/client
option transport-type tcp/client
option remote-host 192.168.211.128
option remote-port 6997
option remote-subvolume locker
end-volume

volume bricks
type cluster/replicate
subvolumes client0 client1
end-volume

到此,配置就都完成了
接下来启动服务
server端

glusterfsd -f /etc/glusterfs/glusterfs-server0.vol
glusterfsd -f /etc/glusterfs/glusterfs-server1.vol
当然启动的时候可以加上-l /dir/glusterfs.log参数,把日志加入
然后通过ps fax查看进程如下
2206 ? Ssl 0:00 glusterfsd -f /etc/glusterfs/glusterfs-server1.vol
2396 ? Ssl 0:00 glusterfsd -f /etc/glusterfs/glusterfs-server0.vol
说明,服务正常启动起来了

client端

modprobe fuse
glusterfs -l /tmp/glustfs.log -f /etc/glusterfs/replicate-client.vol /mnt
通过df -h查看是否服务正常启动,如下
[root@contos5-1-4 mnt]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 7.1G 2.5G 4.3G 37% /
/dev/sda1 190M 11M 170M 7% /boot
tmpfs 125M 0 125M 0% /dev/shm
glusterfs 7.1G 2.9G 3.9G 43% /mnt
如果没有如上红色标记的,请查看日志然后进行排查

接下来就是测试阶段
首先在/mnt目录下touch 1空文件
然后在server端ls /home/*查看如下

[root@contos5-1-1 home]# ls *
dir1:
1

dir2:
1

可以看到dir2中已经同步了1这个文件
然后现在我么在server上把dir1这个进程kill掉

2206 ? Ssl 0:00 glusterfsd -f /etc/glusterfs/glusterfs-server1.vol
2396 ? Ssl 0:00 glusterfsd -f /etc/glusterfs/glusterfs-server0.vol
kill -9 2396
这时client端/mnt应该只会挂载dir2了

这是/mnt中的文件是0字节的

[root@contos5-1-4 mnt]# ll
total 0
-rw-r–r– 1 root root 0 Feb 17 12:42 1

现在我们echo “123456789″ >1中
cat 1返回如下
[root@contos5-1-4 mnt]# cat 1
123456789

再来看下server上dir1中的1
[root@contos5-1-1 home]# ll /home/dir1
total 8
-rw-r–r– 1 root root 0 Feb 17 12:42 1
可以发现是0字节

dir2中的1
[root@contos5-1-1 home]# ll /home/dir2/
total 8
-rw-r–r– 1 root root 10 Feb 17 12:42 1
可以看到是10字节

如此看来,dir1被我们模拟down机后,修改等请求都已经传送到dir2上了,现在让我们来恢复dir1,看下效果

glusterfsd -f /etc/glusterfs/glusterfs-server0.vol
在client上cat 1的内容
[root@contos5-1-4 mnt]# cat 1
123456789
然后看下server上dir1的情况
[root@contos5-1-1 home]# ll /home/dir1/
total 8
-rw-r–r– 1 root root 10 Feb 17 12:42 1
dir1上已经同步成10字节了

由以上测试可以证明,复制操作是正常进行的,至于性能方面还需要进一步的测试,这个放到稍后进行

开头概念解释属于自己翻译的官方文档

具体请参看 http://www.gluster.org/docs/index.php/User_Guide中的replicate部分

GlusterFS学习手记04-Performance Translators翻译及学习

performance translaters(高性能转换器)

Read Ahead 预读

配置文件写法 预读转换器在每次

type performace/read-ahead

读取操作前就预先抓取数据。这个有利于应用频繁持续性的访问文件,当应用完成当前数据块读取的时候,下一个数据块就已经准备好了。
额外的,预读转换器也可以扮演读聚合器,许多小的读操作被绑定起来,当成一个大的读请求发送给服务器
预读处理有page-size和page-count来定义,page-size定义了,一次预读取的数据块大小,page-count定义的是被预读取的块的数量
预读最好被使用在使用InfiniBand卡(或使用ib-verbs传输)的系统上。在快速以太网或者千兆以太网络环境中,就算不使用预读,Glusterfs也可以达到网卡最大连接的吞吐量,所以使用预读配置就是多余的

需要注意的是,预读操作只会发生在读的请求是完全连续的。如果应用访问数据很随机,那使用预读实际上将造成性能的损失,因为预读操作会拿一些应用并不会用到的数据块。

Options:
page-size <n> (256KB) #每次预读取的数据块大小
page-count <n> (2) #每次预读取数据块的数量
force-atime-update [on|off|yes|no] (off|no)
#是否强制在每次读操作时更新文件的访问时间,不设置这个,访问时间将有些不精确,这个将影响预读转换器读取数据时的那一时刻而不是应用真实读到数据的那一时刻。

Write Behind(后写)

type performance/write-behind

后写转换器改善了了写操作的延时。它会先把写操作发送到后端存储,同时返回给应用写操作完毕,而实际上写的操作还正在执行。使用后写转换器就可以像流水线一样把写请求持续发送。这个后写操作模块更适合使用在client端,以期减少应用的写延迟。

后写转换器同样可以聚合写请求。如果aggregate-size选项设置了的话,当连续的写入大小累积起来达到了设定的值,就通过一个写操作写入到存储上。这个操作模式适合应用在服务器端,以为这个可以在多个文件并行被写入磁盘时降低磁头动作。

aggregate-size选项的默认值是128KB。尽管这个默认值对于大多数的用户来讲已经可以很好的工作了,但还是希望你根据实际环境经过不断调整数值试验,以达到最大的性能。这是因为后写的性能依赖于你的连接情况,RAM的大小以及工作的负载情况

aggregate-size <n> (128KB) #当累积达到这个值才进行实际的写操作
flush-behind [on|yes|off|no] (off|no)

IO Threads(IO 线程)

type performance/io-threads

IO线程转换器试图增加服务器后台进程对文件元数据读写I/O的处理能力。由于GlusterFS服务是单线程的,使用IO线程转换器可以较大的提高性能。这个转换器最好是被用于服务器端,而且是在服务器协议转换器后

面被加载。

IO线程操作会将读和写操作分成不同的线程。同一时刻存在的总线程是恒定的并且是可以配置的

thread-cout <n> (1) #线程使用的数量
cache-size <n> (64MB) #被允许放置在一个线程中的最大数据量

IO Cache(IO缓存)

type performance/io-cache

IO缓存转换器可以缓存住已经被读过的数据。这个对于多个应用对同一个数据多次访问,并且如果读的操作远远大于写的操作的话是很有用的(比如,IO缓存很适合用于提供web服务的环境,大量的客户端只会进行简单的读取文件的操作,只有很少一部分会去写文件)。

IO缓存转换器读数据一次读page-size设置的大小的数据,并把读到的数据缓存起来指到cache-size设置的大小。缓存以以最新近被访问的列表来作为优先保持的,cache文件的优先级是可以通过user-specified参数来配置的。

当IO缓存转换器检测到有写操作的时候,它就会把相应的文件从缓存中删除。

IO缓存转换器会定期的根据文件的修改时间来验证缓存中相应文件的一致性。验证超时时间是可以配置的。

page-size <n> (128KB) #一条记录的大小
cache-size (n) (32MB) #可以缓存的最大数据量
force-revalidate-timeout <n> (1) #强制缓存一致性检测超时时间,单位秒
priority <pattern> (*:0) #文件匹配列表及其设置的优先级

Booster(加速器)

type performance/booster

加速器给应用和GlusterFS间的对写请求提供了一个快速通道。不适用加速器的情况,应用到GlusterFS的所有请求都会先经过FUSE。 使用加速器模块之后使得Glusterfs和加速器的共享库相结合,应用就可以直接把读写的请求发给Glusterfs的子进程而跳过FUSE。

Booster结构由两部分组成:Booster translator和booster共享库,bootster translator最好是在客户端加载,通常被配置在translator树的根上。booster共享库被应用以LD_PRELOADed的方式使用。

以上翻译均来自Glusterfs user guide,本人水平有限,请参考原文http://www.gluster.org/docs/index.php/User_Guide中相应的部分