存档

2007年10月 的存档

庆祝一下,MT安装成功!

2007年10月29日 1 条评论

经过两天的努力,终于把mt4安装成功了。

装了几个插件,汉化了部分界面,mt默认的界面不是太好看,但是没有太多时间来弄MT的模板,所以暂且先用着吧,

不过还是要庆祝一下!

分类: OpenSource 标签:

resin配置引出Perl 正则表达式

2007年10月27日 评论已被关闭

在处理resin3的host regexp匹配泛解析域名时,用到了perl的正则表达式

如:([^.]+) ,所以搜集了一下perl的正则表达式。(转)

——-

阅读提示:正则表达式是 Perl 语言的一大特色,也是 Perl 程序中的一点难点,不过如果大家能够很好的掌握他,就可以轻易地用正则表达式来完成字符串处理的任务,当然在 CGI 程序设计中就更能得心应手了。下面我们列出一些正则表达式书写时的一些基本语法规则。

1 正则表达式的三种形式

首先我们应该知道 Perl 程序中,正则表达式有三种存在形式,他们分别是:

匹配:m// (还可以简写为 // ,略去 m)

替换:s/

//

转化:tr/ //

这三种形式一般都和 =~ 或 !~ 搭配使用(其中 “=~” 表示相匹配,在整条语句中读作 does,”!~” 表示不匹配,在整条语句中读作 doesn’t),并在左侧有待处理的标量变量。如果没有该变量和 =~ !~ 操作符,则默认为处理 $_ 变量中的内容。举例如下:

$str = “I love Perl”;

$str =~ m/Perl/; # 表示如果在 $str 中发现 “Perl” 字符串,则返回 “1” 否则返回 “0”。

$str =~ s/Perl/BASH/; # 表示将变量 $str 中的 “Perl” 字符串替换为 “BASH”,如果发生此替换则返回 “1”,否则返回 “0”。

$str !~ tr/A-Z/a-z/; # 表示将变量 $str 中的所有大写字母转化为小写字母,如果转化发生了则返回 “0”,否则返回 “1”。另外还有:

foreach (@array) { s/a/b/; } # 此处每次循环将从 @array 数组中取出一个元素存放在 $_ 变量中,并对 $_ 进行替换处理。

while () { print if (m/error/); } # 这一句稍微复杂一些,他将打印 FILE 文件中所有包含 error 字符串的行。

Perl 的正则表达式中如果出现 () ,则发生匹配或替换后 () 内的模式被 Perl 解释器自动依次赋给系统 $1, $2 …… 请看下面的例子:

$string = “I love perl”;

$string =~ s/(love)/<$1>/; # 此时 $1 = “love”,并且该替换的结果是将 $string 变为 “I perl”

$string = “i love perl”;

$string =~ s/(i)(.*)(perl)/<$3>$2<$1>/; # 这里 $1 = “i”,$2 = ” love “,$3 = “perl”,并且替换后 $string 变为 “

love 替换操作 s/

// 还可以在末尾加上 e 或 g 参数,他们的含义分别为:s/

//g 表示把待处理字符串中所有符合 的模式全部替换为 字符串,而不是只替换第一个出现的模式。

s/ //e 表示将把 部分当作一个运算符,这个参数用的不多。比如下面的例子:

$string = “i:love:perl”;

$string =~ s/:/*/; #此时 $string=”i*love:perl”;

$string = “i:love:perl”;

$string =~ s/:/*/g; #此时 $string=”i*love*perl”;

$string =~ tr/*/ /; #此时 $string=”i love perl”;

$string = “www22cgi44”;

$string =~ s/(d+)/$1*2/e; # (/d+)代表 $string 中的一个或多个数字字符,将这些数字字符执行 *2 的操作,因此最后 $string 变成了 “www44cgi88″。

下面给出一个完整的例子:

#!/usr/bin/perl

print”请输入一个字符串!n”;

$string = ; # 代表标准输入,会让使用者输入一字符串

chop($string); # 将$string最后一个换行的字符n删除掉

if($string =~ /perl/){

print(“输入的字符串中有 perl 这个字符串!n”;

}

如果输入的字符串含有 perl 这个字符串的话,就会显示后面的提示信息。

2 正则表达式中的常用模式

下面是正则表达式中的一些常用模式。

/pattern/ 结果

. 匹配除换行符以外的所有字符

x? 匹配 0 次或一次 x 字符串

x* 匹配 0 次或多次 x 字符串,但匹配可能的最少次数

x+ 匹配 1 次或多次 x 字符串,但匹配可能的最少次数

.* 匹配 0 次或一次的任何字符

.+ 匹配 1 次或多次的任何字符

{m} 匹配刚好是 m 个 的指定字符串

{m,n} 匹配在 m个 以上 n个 以下 的指定字符串

{m,} 匹配 m个 以上 的指定字符串

[] 匹配符合 [] 内的字符

[^] 匹配不符合 [] 内的字符

[0-9] 匹配所有数字字符

[a-z] 匹配所有小写字母字符

[^0-9] 匹配所有非数字字符

[^a-z] 匹配所有非小写字母字符

^ 匹配字符开头的字符

$ 匹配字符结尾的字符

d 匹配一个数字的字符,和 [0-9] 语法一样

d+ 匹配多个数字字符串,和 [0-9]+ 语法一样

D 非数字,其他同 d

D+ 非数字,其他同 d+

w 英文字母或数字的字符串,和 [a-zA-Z0-9] 语法一样

w+ 和 [a-zA-Z0-9]+ 语法一样

W 非英文字母或数字的字符串,和 [^a-zA-Z0-9] 语法一样

W+ 和 [^a-zA-Z0-9]+ 语法一样

s 空格,和 [ntrf] 语法一样

s+ 和 [ntrf]+ 一样

S 非空格,和 [^ntrf] 语法一样

S+ 和 [^ntrf]+ 语法一样

b 匹配以英文字母,数字为边界的字符串

B 匹配不以英文字母,数值为边界的字符串

a|b|c 匹配符合a字符 或是b字符 或是c字符 的字符串

abc 匹配含有 abc 的字符串

(pattern) () 这个符号会记住所找寻到的字符串,是一个很实用的语法。第一个 () 内所找到的字符串变成 $1 这个变量或是 1 变量,第二个 () 内所找到的字符串变成 $2 这个变量或是 2 变量,以此类推下去。

/pattern/i i 这个参数表示忽略英文大小写,也就是在匹配字符串的时候,不考虑英文的大小写问题。

如果要在 pattern 模式中找寻一个特殊字符,如 “*”,则要在这个字符前加上 符号,这样才会让特殊字符失效

下面给出一些例子:

范例 说明

/perl/ 找到含有 perl 的字符串

/^perl/ 找到开头是 perl 的字符串

/perl$/ 找到结尾是 perl 的字符串

/c|g|i/ 找到含有 c 或 g 或 i 的字符串

/cg{2,4}i/ 找到 c 后面跟着 2个到 4个 g ,再跟着 i 的字符串

/cg{2,}i/ 找到 c 后面跟着 2个以上 g ,再跟着 i 的字符串

/cg{2}i/ 找到 c 后面跟着 2个 g,再跟着 i 的字符串

/cg*i/ 找到 c 后面跟着 0个或多个 g ,再跟着 i 的字符串,如同/cg{0,1}i/

/cg+i/ 找到 c 后面跟着一个以上 g,再跟着 i 的字符串,如同/cg{1,}i/

/cg?i/ 找到 c 后面跟着 0个或是 1个 g ,再跟着 i 的字符串,如同/cg{0,1}i/

/c.i/ 找到 c 后面跟着一个任意字符,再跟着 i 的字符串

/c..i/ 找到 c 后面跟着二个任意字符,再跟着 i 的字符串

/[cgi]/ 找到符合有这三个字符任意一个的字符串

/[^cgi]/ 找到没有这三个字符中任意一个的字符串

/d/ 找寻符合数字的字符,可以使用/d+/来表示一个或是多个数字组成的字符串

/D/ 找寻符合不是数字的字符,可以使用/D+/来表示一个或是更多个非数字组成的字符串

/*/ 找寻符合 * 这个字符,因为 * 在常规表达式中有它的特殊意思,所以要在这个特殊符号前加上 符号,这样才会让这个特殊字符失效

/abc/i 找寻符合 abc 的字符串而且不考虑这些字符串的大小写

3 正则表达式的八大原则

如果在 Unix 中曾经使用过 sed、awk、grep 这些命令的话,相信对于 Perl 语言中的正则表达式(Regular Expression)不会感到陌生。Perl 语言由于有这个功能,所以对字符串的处理能力非常强。在Perl语言的程序中,经常可以看到正则表达式的运用,在 CGI 程序设计中也不例外。

正则表达式是初学 Perl 的难点所在,不过只要一旦掌握其语法,你就可以拥有几乎无限的模式匹配能力,而且 Perl 编程的大部分工作都是掌握常规表达式。下面给大家介绍几条正则表达式使用过程中的 8 大原则。

正则表达式在对付数据的战斗中可形成庞大的联盟——这常常是一场战争。我们要记住下面八条原则:

· 原则1:正则表达式有三种不同形式(匹配(m/ /),替换(s/ / /eg)和转换(tr/ / /))。

· 原则2:正则表达式仅对标量进行匹配( $scalar =~ m/a/; 可以工作; @array =~ m/a/ 将把@array作为标量对待,因此可能不会成功)。

· 原则3:正则表达式匹配一个给定模式的最早的可能匹配。缺省时,仅匹配或替换正则表达式一次( $a = ‘string string2’; $a =~ s/string/ /; 导致 $a = ‘string 2’)。

· 原则4:正则表达式能够处理双引号所能处理的任意和全部字符( $a =~ m/$varb/ 在匹配前把varb扩展为变量;如果 $varb = ‘a’ $a = ‘as’,$a =~ s/$varb/ /; 等价于 $a =~ s/a/ /; ,执行结果使 $a = ” s” )。

· 原则5:正则表达式在求值过程中产生两种情况:结果状态和反向引用: $a=~ m/pattern/ 表示 $a 中是否有子串 pattern 出现,$a =~ s/(word1)(word2)/$2$1/ 则“调换”这两个单词。

· 原则6:正则表达式的核心能力在于通配符和多重匹配运算符以及它们如何操作。$a =~ m/w+/ 匹配一个或多个单词字符;$a =~ m/d/” 匹配零个或多个数字。

· 原则7:如果欲匹配不止一个字符集合,Perl使用 “|” 来增加灵活性。如果输入 m/(cat|dog)/ 则相当于“匹配字符串 cat 或者 dog。

· 原则8:Perl用 (?..) 语法给正则表达式提供扩展功能。(这一点请同学们课后看相关资料)

想要学习所有这些原则?我建议大家先从简单的开始,并且不断的尝试和实验。实际上如果学会了 $a =~ m/ERROR/ 是在 $a 中查找子串ERROR,那么你就已经比在 C 这样的低层语言中得到了更大的处理能力。

分类: others 标签:

resin3的host配置优化

2007年10月26日 评论已被关闭

配置resin.conf中的host部分。

定义日志目录,格式化输出,web发布目录,错误码定义等等。

在resin2.x中可以定义 <classpath id=’WEB-INF/classes’ source=’src’ compile=’true’/>

来自动编译源码,但是在resin3.x中没有这个用法,只能放到WEB-INF/classes目录下。

具体如下:

<host id=”www.2hei.net“>

  <stdout-log path=’/root/soft/resin/log/stdout.log’ rollover-period=’1W’/>

  <stderr-log path=’/root/soft/resin/log/stdout.log’ rollover-period=’1W’/>

  <access-log path=’/root/soft/2hei/logs/access.log’>

  <format>%h`%l`%u`%{%Y-%m-%d %H:%M:%S}t`%r`%s`%b`%{Referer}i`%{User-Agent}i`%{X-Up-Calling-Line-ID}i</format>

      <rollover-period>1D</rollover-period>

      <archive-format>%Y-%m-%d.access.test.log</archive-format>

    </access-log>

    <root-directory>/root/soft/2hei</root-directory>

      <web-app id=”/” root-directory=”httpdocs”/>

      <!–

      <classpath id=’WEB-INF/classes’ source=’src’ compile=’true’/>

      –>

    <session-config>

    <!– 2 hour timeout –>

     <session-timeout>120</session-timeout>

     <session-max>4096</session-max>

     <enable-url-rewriting>true</enable-url-rewriting>

    </session-config>

    <error-page>

     <error-code>404</error-code>

     <location>/file_not_found.jsp</location>

    </error-page>

    </host>

分类: others 标签:

resin3.1.3下域名泛解析及URL重定向

2007年10月26日 评论已被关闭

原理:

配置resin的host虚拟主机的相关配置,利用正则表达式来泛解析三级域名。

参考了anotherbug的配置。

host设置虚拟主机的具体用法详见:

http://www.caucho.com/resin-3.1/doc/host-tags.xtp

2、环境 resin3.1.3

  URL重定向插件 urlrewritefilter-2.6-src

地址为: http://tuckey.org/urlrewrite/

具体配置:

A http 发布目录的 WEB-INF/web.xml,添加

<!– Begin filter 设置   –>

        <filter>

            <filter-name>UrlRewriteFilter</filter-name>

            <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>

            <init-param>

                <param-name>logLevel</param-name>

                <param-value>WARN</param-value>

            </init-param>

        </filter>

        <filter-mapping>

            <filter-name>UrlRewriteFilter</filter-name>

            <url-pattern>/*</url-pattern>

        </filter-mapping>

<!– End  filter 设置   –>

B、发布目录的 WEB-INF/urlrewrite.xml

指定规则:把 view.jsp?U=$1 转到静态地址 /blog/username

        <rule>

            <from>/blog/(b)</from>

            <to>/view.jsp?U=$1</to>

        </rule>

C   resin.conf  相应部分的配置

本例设置了blog.*.2hei.net 的泛解析

<!– 设置主机 –>

<host regexp=”blog.([^.]+).2hei.net”>

  <host-name>blog.${host.regexp[2]}.2hei.net</host-name>

  <host-alias>blog.2hei.net</host-alias>

  <root-directory>/root/soft/2hei</root-directory>

  <web-app id=”/” document-directory=”httpdocs”/>

</host>

如果设置泛解析二级域名  *.2hei.net

需要先在dns加A 把 *.2hei.net 指定到 IP地址

然后配置如下:

<host id=”2hei.net”>

  <host-alias-regexp>([^.]+).2hei.net</host-alias-regexp>

  <host-name>${host-alias-regexp.regexp[1]}.2hei.net</host-name>

      <root-directory>/root/soft/2hei</root-directory>

      <web-app id=”/” root-directory=”httpdocs”/>     

</host>

在配置*.blog.2hei.net的时候始终无法找到主机,好像是dns的问题,努力解决中。

分类: others 标签:

lvs-dr安装笔记-by 2hei

2007年10月16日 评论已被关闭

一、准备测试环境,如下图:

#               ________

#              |        |

#              | client |

#              |________|

#                  | CIP=eth0 192.168.1.117

#                  | GW=192.168.1.1

#                  |       __________

#                  |      |          |

#                  |——| director |

#                  |      |__________|

#                  |  VIP=eth0:199 192.168.1.199/32

#                  |  DIP=eth0   192.168.1.191

#                  |

#                  |

#         ——————-

#         |                 |

#         |                 |

#   ______________    ______________

#  |              |  |              |

#  | realserver1  |  | realserver2  |

#  |______________|  |______________|

#     RIP1=eth0         RIP2=eth0

#    192.168.1.192       192.168.1.193

最少需要三台linux机器。

二、软件环境

操作我使用的是 Linux Ad4 kernel:2.6.9-5.ELsmp

需要的软件:

Net-DNS-0.60.tar.gz   http://www.perl.com

configure-lvs_0.9.4.tar.gz  http://www.austintek.com/LVS/configure-lvs/configure-lvs_0.9.4.tar.gz

heartbeat-1.0.4.tar.gz

httpd-2.2.4.tar.bz2

ipvsadm-1.24.tar.gz http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz

mon-0.99.2.tar.gz

linux-2.6.10.tar.gz http://www.kernel.org/

hidden-2.6.9-1.diff.txt  从http://www.ssi.bg/~ja/ 得到hidden修正包,不同的核心使用相应的版本.请参考下表

Patch        Linux 2.4        Created

hidden-2.4.28-1.diff         2.4.28 – 2.4.30         November 18, 2004

hidden-2.4.26-1.diff         2.4.26 – 2.4.27         February 28, 2004

hidden-2.4.25-1.diff         2.4.25         February 19, 2004

hidden-2.4.20pre10-1.diff         2.4.20pre10 – 2.4.24         October 12, 2002

hidden-2.4.19pre5-1.diff         2.4.19pre5 – 2.4.20pre9         April 7, 2002

hidden-2.4.5-1.diff         2.4.5 – 2.4.19pre4         June 2, 2001

hidden-2.4.4-1.diff         2.4.4         April 29, 2001

Patch        Linux 2.6        Created

hidden-2.6.9-1.diff         2.6.9 – 2.6.11         October 19, 2004

hidden-2.6.4-1.diff         2.6.4 – 2.6.8         March 12, 2004

hidden-2.6.3-1.diff         2.6.3         February 19, 2004

hidden-2.5.67-1.diff         2.5.67 – 2.6.2         April 9, 2003

重新编译内核,修正arp problem

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

注意事项:

要用干净的内核,不要发布版的,或者商业版本

一定要使用redhat网站上的内核,否则,哈哈

1. Kernel,IPVS,IPVSadm,ARP hidden之间的版本必须对应。

2. 自己编译内核时,从http://www.kernel.org/下载标准内核源文件,不要使用发行版的内核源文件。

3. Kernel 2.4.28和2.6.10及以上版本已内置IPVS,有些Linux发行版也在其内核里编译了IPVS。

4. ARP hidden可以用arp_ignore/arp_announce或者arptables_jf代替

patch -p1 < hidden-2.6.9-1.diff

三、具体配置顺序:

1、从http://www.kernel.org/下载新内核2.6.10

解压到 /usr/src/

内核文件夹重命名为linux

2、打ARP补丁

cd /usr/src/linux

patch -p1 < hidden-2.6.9-1.diff

3、编译内核:

编译2.6.10的内核 时

#

#make mrproper

#make menuconfig

找到lvs的配置,基本不用修改。

#make clean

#make

#make modules_install

#make install

4、使用新内核:

vi /boot/grub/grub.conf

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE:  You have a /boot partition.  This means that

#          all kernel and initrd paths are relative to /boot/, eg.

#          root (hd0,0)

#          kernel /vmlinuz-version ro root=/dev/sda6

#          initrd /initrd-version.img

#boot=/dev/sda

default=0

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title Red Hat Enterprise Linux AS (2.6.10)

        root (hd0,0)

        kernel /vmlinuz-2.6.10 ro root=LABEL=/

        initrd /initrd-2.6.10.img

title Red Hat Enterprise Linux AS (2.6.9-5.ELsmp)

        root (hd0,0)

        kernel /vmlinuz-2.6.9-5.ELsmp ro root=LABEL=/

        initrd /initrd-2.6.9-5.ELsmp.img

title Red Hat Enterprise Linux AS-up (2.6.9-5.EL)

        root (hd0,0)

        kernel /vmlinuz-2.6.9-5.EL ro root=LABEL=/

        initrd /initrd-2.6.9-5.EL.img

5、重新启动系统,使用新的内核

#uname -a

Linux lvs-director 2.6.10 #1 SMP Mon Oct 15 14:22:45 EDT 2007 i686 i686 i386 GNU/Linux

6、安装ipvsadm软件

cd ipvsadm-1.24

make

make install

7、配置 director 和realserver

下载configure文件,运行时需要perl的支持。

我在使用时提示出

Can’t locate Net/DNS.pm in @INC (@INC contains:

说明perl缺少了 Net::DNS模块

#perl -MCPAN -e “shell”

按照提示进行即可

cpan>install Net::DNS

我在安装perl的dns模块没有成功,

t/08-online…………….NOK 57#     Failed test (t/08-online.t at line 109)

Failed Test   Stat Wstat Total Fail  Failed  List of Failed

——————————————————————————-

t/08-online.t    4  1024    93    6   6.45%  57-58 92-93

3 tests and 20 subtests skipped.

Failed 1/25 test scripts, 96.00% okay. 4/1181 subtests failed, 99.66% okay.

make: *** [test_dynamic] Error 255

  /usr/bin/make test — NOT OK

Running make install

  make test had returned bad status, won’t install without force

超时,一直没有make test成功

没有办法,我从http://www.perl.com 上下载了perl的Net-dns模块Net-DNS-0.60.tar.gz单独安装

tar -zxvf Net-DNS-0.60.tar.gz

#cd Net-DNS-0.60

#perl Makefile.PL

#make

#make test

#make install

cp -r lib/Net/DNS* /usr/lib/perl5/5.8.5/Net

8、下载configure脚本configure-lvs_0.9.4.tar.gz  http://www.austintek.com/LVS/configure-lvs/configure-lvs_0.9.4.tar.gz,然后执行配置文件

cd configure-lvs_0.9.4

./configure lvs_dr.conf

运行的时候先要执行loader端的脚本。

#以下是在director端的配置

#lvs_dr.conf

#format is (C) 2000-2001 Joseph Mack jmack@wm7d.net

#edited by yu2hei@gmail.com

#released under GPL.

#single network director VS-DR.

#VIP,real-servers on 192.168.1.0/24 on eth0

#There is no router in this setup, all hosts are on the same network

#————————————————————

#

#IPs can be resolvable names (e.g. in /etc/hosts)

#Here’s my /etc/hosts

#

#VIP, the IP the clients connect to.

#192.168.1.199 lvs

#

#DIP is the IP on the director in the real-server network

#192.168.1.191 dip

#

#GW, my test client 

#GW 192.168.1.1

#192.168.1.117 client

#

#real-servers

#192.168.1.192 RS1

#192.168.1.193 RS2

#————————————————————-

#setup:

#This script installs the VIP.

#The CIP, DIP and RIPs must be already installed,

#machines must be connected and be able to ping each other.

#CIP, RIPs usually are primary IPs on an interface.

#VIP, DIP are secondary (alias) IPs.

#

#

#               ________

#              |        |

#              | client |

#              |________|

#                  | CIP=eth0 192.168.1.117

#                  |

#                  |       __________

#                  |      |          |

#                  |——| director |

#                  |      |__________|

#                  |  VIP=eth0:199 192.168.1.199/32

#                  |  DIP=eth0   192.168.1.191

#                  |

#                  |

#         ——————-

#         |                 |

#         |                 |

#   ______________    ______________

#  |              |  |              |

#  | realserver1  |  | realserver2  |

#  |______________|  |______________|

#     RIP1=eth0         RIP2=eth0

#    192.168.1.192       192.168.1.193

#

#           all realservers

#       VIP=lo:199=192.168.1.199 #

#

#———-lvs_dr.conf—————————————-

—— LVSCONF_FORMAT=1.1

—— LVS_TYPE=VS_DR

—— INITIAL_STATE=on

—— CLEAR_IPVS_TABLES=yes

—— #VIP line format – device[:alias] IP netmask broadcast

—— #To help avoid namespace collisions with other VIPs, I set alias=last number of VIP (here 110).

—— #note: for VS-DR, VS-Tun, the IP is in a /32 network

—— VIP=eth0:110 lvs 255.255.255.255 lvs

—— #DIP line format – device[:alias] IP network netmask broadcast

—— DIP=eth0:9 dip 192.168.1.0 255.255.255.0 192.168.1.255

—— #no DIRECTOR_GW for VS-DR or VS-Tun

—— #DIRECTOR_GW=

—— #SERVICE line format – proto port scheduler IP[,weight] [IP[,weight]]

—— SERVICE=t telnet rr RS1 RS2

—— #SERVICE=t ftp rr RS1,1 RS2,2

—— SERVICE=t http rr RS1 RS2

—— SERVER_VIP_DEVICE=lo:110

—— SERVER_NET_DEVICE=eth0

—— #SERVER_GW – packets with src_addr=VIP, dst_addr=0/0 are sent to SERVER_GW

—— #to be forwarded to the outside world.

—— #For standard VS-DR,VS-Tun, this must _NOT_ be the director.

—— #For Julian’s martian modification (see the HOWTO), it will be the director.

—— #If you don’t know about the martian modification, you aren’t using it.

—— #The script will not neccesarily set up the SERVER_GW as the real-servers’s default gw.

—— SERVER_GW=client

#———-end lvs_dr.conf————————————

#——- my lvs_dr.conf in 192.168.1.191——————

LVSCONF_FORMAT=1.1

LVS_TYPE=VS_DR

INITIAL_STATE=on

CLEAR_IPVS_TABLES=yes

#VIP line format – device[:alias] IP netmask broadcast

#To help avoid namespace collisions with other VIPs, I set alias=last number of VIP (here 110).

#note: for VS-DR, VS-Tun, the IP is in a /32 network

VIP=eth0:199 192.168.1.199 255.255.255.255 192.168.1.199

#DIP line format – device[:alias] IP network netmask broadcast

DIP=eth0 192.168.1.191 192.168.1.0 255.255.255.0 192.168.1.255

#no DIRECTOR_GW for VS-DR or VS-Tun

#DIRECTOR_GW=

#SERVICE line format – proto port scheduler IP[,weight] [IP[,weight]]

#SERVICE=t telnet rr 192.168.1.192 192.168.1.193

#SERVICE=t ftp rr 192.168.1.192,1 192.168.1.193,2

SERVICE=t http rr 192.168.1.192 192.168.1.193

SERVER_VIP_DEVICE=lo:199

SERVER_NET_DEVICE=eth0

#SERVER_GW – packets with src_addr=VIP, dst_addr=0/0 are sent to SERVER_GW

#to be forwarded to the outside world.

#For standard VS-DR,VS-Tun, this must _NOT_ be the director.

#For Julian’s martian modification (see the HOWTO), it will be the director.

#If you don’t know about the martian modification, you aren’t using it.

#The script will not neccesarily set up the SERVER_GW as the real-servers’s default gw.

SERVER_GW=192.168.1.1

#——- end of my lvs_dr.conf in 192.168.1.191——————

9、在lvs-dr端配置启动脚本

#—————mini-rc.lvs_dr-director in ldr 192.168.1.191————————#

#!/bin/bash

#mini_rc_lvs_dr.sh

#set ip_forward OFF for lvs-dr director (1 on, 0 off)

#(there is no forwarding in the conventional sense for LVS-DR)

cat       /proc/sys/net/ipv4/ip_forward

echo “0” >/proc/sys/net/ipv4/ip_forward

#director is not gw for realservers: leave icmp redirects on

echo ‘setting icmp redirects (1 on, 0 off) ‘

echo “1” >/proc/sys/net/ipv4/conf/all/send_redirects

cat       /proc/sys/net/ipv4/conf/all/send_redirects

echo “1” >/proc/sys/net/ipv4/conf/default/send_redirects

cat       /proc/sys/net/ipv4/conf/default/send_redirects

echo “1” >/proc/sys/net/ipv4/conf/eth0/send_redirects

cat       /proc/sys/net/ipv4/conf/eth0/send_redirects

#add ethernet device and routing for VIP 192.168.1.199

/sbin/ifconfig eth0:110 192.168.1.199 broadcast 192.168.1.199 netmask 255.255.255.255

/sbin/route add -host 192.168.1.199 dev eth0:199

#listing ifconfig info for VIP 192.168.1.199

/sbin/ifconfig eth0:199

#check VIP 192.168.1.199 is reachable from self (director)

/bin/ping -c 1 192.168.1.199

#listing routing info for VIP 192.168.1.199

/bin/netstat -rn

#setup_ipvsadm_table

#clear ipvsadm table

/sbin/ipvsadm -C

#installing LVS services with ipvsadm

#add telnet to VIP with round robin scheduling

/sbin/ipvsadm -A -t 192.168.1.199:http -s rr

#forward telnet to realserver using direct routing with weight 1

/sbin/ipvsadm -a -t 192.168.1.199:http -r 192.168.1.192 -g -w 1

#check realserver reachable from director

ping -c 1 192.168.1.192

#forward telnet to realserver using direct routing with weight 1

/sbin/ipvsadm -a -t 192.168.1.199:http -r 192.168.1.193 -g -w 1

#check realserver reachable from director

ping -c 1 192.168.1.193

#displaying ipvsadm settings

/sbin/ipvsadm

#not installing a default gw for LVS_TYPE vs-dr

#—————mini-rc.lvs_dr-director————————#

#mini-rc.lvs_dr-director 简单的配置 in 192.168.1.191

#/bin/sh

# lv-dr.sh in 192.168.1.191 in simple

# set ip_forward OFF for vs-dr director (1 on, 0 off)

echo 0 > /proc/sys/net/ipv4/ip_forward

echo “1” > /proc/sys/net/ipv4/conf/all/send_redirects

echo “1” > /proc/sys/net/ipv4/conf/default/send_redirects

echo “1” > /proc/sys/net/ipv4/conf/eth0/send_redirects

ifconfig eth0:0 192.168.1.199 netmask 255.255.255.255 broadcast 192.168.1.255 up

route add -host 192.168.1.199 dev eth0:199

ipvsadm -C

ipvsadm -A -t 192.168.1.199:80 -s rr

# Set Real Server

ipvsadm -a -t 192.168.1.199:80 -r 192.168.0.192 -g

ipvsadm -a -t 192.168.1.199:80 -r 192.168.0.193 -g

ipvsadm -Ln

==============================

在loader上执行

[root@lvs-director Net]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.1.199:80 rr

  -> 192.168.1.193:80             Route   1      0          0        

  -> 192.168.1.192:80             Route   1      0          0 

10、realserver的配置

#以下是realserver 端的配置及脚本

#多个realserver的配置都是一样

#realserver的其他前提配置: 需要解决arp的问题和重新编译内核(跟lvs-dr的),配置好http服务。

#!/bin/bash

#———-mini-rc.lvs_dr-realserver——————

#installing default gw 192.168.1.1 for vs-dr

/sbin/route add default gw 192.168.1.1

#showing routing table

/bin/netstat -rn

#checking if DEFAULT_GW 192.168.1.1 is reachable

ping -c 1 192.168.1.1

#set_realserver_ip_forwarding to OFF (1 on, 0 off).

echo “0” >/proc/sys/net/ipv4/ip_forward

cat       /proc/sys/net/ipv4/ip_forward

#looking for DIP 192.168.1.191

ping -c 1 192.168.1.191

#looking for VIP (will be on director)

ping -c 1 192.168.1.199

#install_realserver_vip

/sbin/ifconfig lo:199 192.168.1.199 broadcast 192.168.1.199 netmask 0xffffffff up

#ifconfig output

/sbin/ifconfig lo:199

#installing route for VIP 192.168.1.199 on device lo:199

/sbin/route add -host 192.168.1.199 dev lo:199

#listing routing info for VIP 192.168.1.199

/bin/netstat -rn

#hiding interface lo:199, will not arp

echo “1” >/proc/sys/net/ipv4/conf/all/hidden

cat       /proc/sys/net/ipv4/conf/all/hidden

echo “1” >/proc/sys/net/ipv4/conf/lo/hidden

cat       /proc/sys/net/ipv4/conf/lo/hidden

===========================

11、测试

client使用浏览器访问: http://192.168.1.199

会有如下的页面出现,如图(需要在realserver端配置httpd服务,设置好不同的显示页面):

192.jpg193.jpg

使用不同浏览器或者间隔段时间测试,显示不同的页面则说明配置成功。

安装中仔细阅读 LVS-mini-HOWTO 基本的问题都可解决。

一般来说,为了是负载均衡能够有高可用性,loader需要使用两台,配置heartbeat,等配置成功了弄上来,一起分享。

分类: others 标签:

shell遍历目录及目录下的所有文件

2007年10月4日 评论已被关闭

#!/bin/sh

# 定义一个方法

foreachd(){

# 遍历参数1

for file in $1/*

do

# 如果是目录就打印处理,然后继续遍历,递归调用

        if [ -d $file ]

        then

                #echo $file

                foreachd $file

        elif [ -f $file ]

        then

                echo $file

                foreachd $file

        fi

done

}

# 执行,如果有参数就遍历指定的目录,否则遍历当前目录

if ($0 > 0)

then

    foreachd “$1”

else

    foreachd “.”

fi

分类: others 标签: