rhrl as4.4 httpd安装mod_bandwidth模块


最近经常有站点流量负载超高导致服务器经常挂掉,就想到用此模块来限制单个站点流量和并发,避免伤及无辜站点,prima就用此模块,现在plesk似乎还没有此功能的限制,只能手工安装mod_bandwidth来做限制了。

官方地址http://www.ivn.cl/apache/ 我们下载最新的版本 Status : Stable
Current Version : v0.8 http://www.ivn.cl/apache/files/source/mod_bw-0.8.tgz

在为apache加装此模块的时候需要用到httpd-devel的开发包。

[root@plesklin5 ~]# wget http://www.ivn.cl/apache/files/source/mod_bw-0.8.tgz

[root@plesklin5 ~]# tar -zxf mod_bw-0.8.tgz

[root@plesklin5 ~]# cd mod_bw

[root@plesklin5 mod_bw]# apxs2 -i -a -c mod_bw.c

[root@plesklin5 mod_bw]#rpm-qa |grep http-deval

发现无此安装包,上传http-deval的rpm包所依赖的安装包

apr-0.9.4-24.5.i386.rpm
apr-devel-0.9.4-24.5.i386.rpm
apr-util-0.9.4-21.i386.rpm
apr-util-devel-0.9.4-21.i386.rpm
httpd-devel-2.0.52-25.ent.i386.rpm
pcre-4.5-3.2.RHEL4.i386.rpm
pcre-devel-4.5-3.2.RHEL4.i386.rpm

都装完之后然后在

[root@plesklin5 mod_bw]# apxs -i -a -c mod_bw.c

即可

chmod 755 /usr/lib/httpd/modules/mod_bw.so

ldconfig -n /usr/lib/httpd/modules
[activating module `bw’ in /etc/httpd/conf/httpd.conf]

LoadModule bw_module /usr/lib/httpd/modules/mod_bw.so

[root@plesklin5 mod_bw]# /etc/init.d/httpd restart
Stopping httpd: [OK ]
Starting httpd: [ OK ]

重新启动就生效了,具体的配置信息我们可以看mod_bw.txt文件。
首先前面要先加入

BandwidthModule On
ForceBandWidthModule On
不然什么设置都是无效的…..

限制后缀为.avi 的速度 文件,问大小大于等于 500K的时候速度最高为10K

LargeFileLimit .avi 500 10240
限制单个IP的速度
BandWidth localhost 0 #不限制本机的IP速度
BandWidth 222.191.251.123 1024 #限制这个IP地址为10K

BandWidth “u:^Mozilla/5(.*)” 10240 # 限制浏览器Mozilla的最大速度为 10K ,
BandWidth “u:wget” 102400 #限制wget的速度

BandWidth all 102400 #限制所有的带宽为 100k
MaxConnection all 60 #限制所有的连接为 60

ErrorDocument 510 /error/maxconnexceeded.html

BandWidthError 510 #设置超出规则的错误信息

4.- Examples

  4.1 - Misc examples

    Limit every user to a max of 10Kb/s on a vhost :

    <Virtualhost *>

      BandwidthModule On

      ForceBandWidthModule On

      Bandwidth all 10240

      MinBandwidth all -1

      Servername www.frsky.net

    </Virtualhost>

    Limit al internal users (lan) to 1000 kb/s with a minimum of 50kb/s , and 

  files greater than 500kb to 50kb/s.

    <Virtualhost *>

      BandwidthModule On

      ForceBandWidthModule On

      Bandwidth all 1024000

      MinBandwidth all 50000

      LargeFileLimit * 500 50000

      Servername www.frsky.net

    </Virtualhost>

    Limit avi and mpg extensions to 20kb/s.

    <Virtualhost *>

      BandwidthModule On

      ForceBandWidthModule On

      LargeFileLimit .avi 1 20000

      LargeFileLimit .mpg 1 20000

      Servername www.frsky.net

    </Virtualhost>

    Using it the "right" way, with output filter by mime type (for text) 

  to 5kb/s:

    <Virtualhost *>

      BandwidthModule On

      AddOutputFilterByType MOD_BW text/html text/plain

      Bandwidth all 5000

      Servername www.frsky.net
    </Virtualhost>

    If you need help on doing more complex setup, you could post it in sf.net 

  forums.

现在对plesk站点下的站进行资源控制,touch /var/www/vhosts/xxxx.com/conf/vhost.conf
然后 插入如下:
BandwidthModule On
ForceBandWidthModule On
BandWidth all 512000
MinBandwidth all 50000
MaxConnection all 600
LargeFileLimit * 1024 50000
BandWidthError 510
ErrorDocument 510 http://frsky.net/error.html
就对这个站点进行了限制。

/usr/local/psa/admin/sbin/websrvmng –reconfigure-vhost –vhost-name=xxxx.com

/etc/init.d/httpd graceful 重新加载下就生效了。

然后测试下下载,放一个大的文件。

wget http://www.xxxxx.com/frsky

0% [ ] 378,280 48.87K/s ETA 4:28:51

ll frsky

-rw-r–r– 1 zxxxxxcom psacln 808656248 Mar 30 2007 frsky



Hishop 数据库登陆失败的解决办法


有个客户数据库出现置疑,最后重新用.mdf文件把数据库恢复成功,但是重新设置密码之后发现网站无法访问,检查日志,发现mssql用户无法登陆导致,修改web.conf文件发现在这修改完全没有作用, 最后查出数据库配置文件是在hishopadministrator\Stat\Config使用加密算法,所以让客户去找程序商,最后得知  让他们修改数据库连接信息居然要收费1000元,明显勒索敲诈,在此写了个修改密码的脚本,方便大家日后使用,把这个updatedb.aspx上传到网站跟目录下,通过www.xxx.com/updatadb.aspx打开,然后就可以在窗口上进行设置了。

frsky.net/updatadb.aspx



解决mysql下使用IP会比localhost慢的问题


发现异常的联机状况该状况在 mysql 下指令

Show Processlist;

可以看到问题该问题如下; : 3436942 : unauthenticated user : 192.168.0.52:49607 : : Connect : : login : : 3436943 : unauthenticated user : 192.168.0.52:49608 : : Connect : : login :

会有非常多的 unauthenticated user 尝试做登入使用 mysql 的情况当这情况在无限制的发生时,就会照成系统的停顿在经过多方测试,以及询问官方原厂的响应下发现这属于官方一个系统上的特殊设定,亦可称呼他为 mysql 的 bug 不管连结的的方式是经过 hosts 或是 IP 的模式,他都会对 DNS 做反查mysqld 会尝试去反查 IP -> dns ,由于反查解析过慢,无法应付快速多量的查询 反查是上层 ISP 所掌控,并不是我们可以解决及要求的在知道问题的症结点后,要解决这个问题就有相对应的方法其方法分为两个步骤,  第一是开启 Mysqld 的时候加入特定的参数启动  第二就是修改 mysql 的联机设定等,如下所示    启动参数; with –skip-name-resolve =>这样就可以关闭反查动作 更改 my.cnf;加强以下设定 [mysqld]

datadir=/services/mysql/

socket=/tmp/mysql.sock

port=3306

set-variable = key_buffer_size=64M

set-variable = max_connections=1024

set-variable = interactive_timeout=30

skip-name-resolve #这样就可以关闭反查动作

[mysqld.server]

user=mysql

basedir=/usr/local

经过以上的设定及重新启动过后,直到现在还没有看到一个 unauthenticated user 的情况发生 。



DDrescue andTestDisk:救回消失的磁盘分去


TestDisk是个体型娇小却功夫了得的磁盘分区检查、抢救专家,不论你是因为手贱误删了磁盘分区,或是因为安装操作系统、停电还是感染病毒而不慎毁损或遗失硬盘分区表,他都有办法帮你救回来! TestDisk不但能够在所有Windows作业系统下执行,还通包了NTFS、FAT、BeFS、BSD、DOS、HFS、JFS、Linux、LVM、UFS…等档案系统。需要注意的是,在以TestDisk回复磁盘分区前,不要进行磁碟分割或磁盘检测,以免造成资料遗失。另外,若磁盘已格式化,就无法用TestDisk找回原本的分区了。

<><><>STEP01. 將下載回來的「testdisk-6.3-WIP.win.zip」解壓縮,找到並執行置於「win」中的「testdisk_win.exe」。以上、下鍵選定硬碟後,選擇「Proceed」後按「Enter」。 02. 進入下一步驟後,選擇該硬碟的檔案系統類型,一般的Windows系統請選擇第一個[ Intel ],最後按「Enter」即可。03. TestDisk除了有「Analyse」選項可以分析現有分區結構和搜尋遺失的分區之外,還有「Advanced」選項可以將分區設定成開機磁區或改變分區類型、「Geometry」選項可以修改分區結構參數及大小、「MBR Code」選項可以將主要開機磁區代碼寫入第一分割區。在此以回復遺失或誤刪的分割區為例,選定「Analyse」後按「Enter」,

04. TestDisk就會幫你找出所有磁碟分區,確定無誤後,以右鍵選擇「Save」後,按下「Enter」,最後再按「Quit」離開程式,重新開機後就可看到原本消失的磁碟分區了。

还有PhotoRec可以配合TestDisk使用,TestDisk用来修复磁盘分区,PhotoRec用来修复文件数据。

官方网站:http://www.cgsecurity.org/

如同dd一样, dd_rescue可以把数据从一个文件或块设备拷贝到另一个地方. dd_rescue主要用于从损坏分区恢复数据. 如果dd读出失败, dd_rescue将尝试读出. 用户也可以随时中断拷贝, 以便任何时间继续. dd_rescue还可以向后拷贝.

dd_rescue的优点

想象一下, 你的某个分区失效, 存在一些硬错误, 你不会想继续写任何数据到这块硬盘. 这时候需要把上面数据拷贝出来. 然而, 通常情况下, 你不能访问文件, 因为文件系统已经损坏.

现在, 你可能会拷贝整个分区到一个文件, 或烧入到一个CD-Rom, 这样将不再丢失任何数据. 你也可以创建一个loop设备, 使用fsck修复损坏的分区, 然后访问上面的数据.

在Un*x系统上使用cat或dd拷贝损坏分区将会失败, 因为它们遇到错误后会终止拷贝. 而dd_rescue将尝试从坏扇区读出数据, 然后继续下面的扇区. 输出文件(output file)会存在有一些错误. 你可以通过写入日志文件看到这些错误的位置.

当遇到错误的时候, dd_rescue的数据丢失率是很低的. 如果你终止当前拷贝, 你不会丢失任何数据. 可在任何地方继续. 输出文件将不断被填充, 而不像其它Un*x工具会有截端.

如果你的分区有一个坏扇区, 你可以考虑从两边拷贝, 这将是一个不错的主意.

两个块大小是一个不错的优化, 更大的块将有更好的优化效果. 但是在硬盘发生错误的情况下, 你想恢复的是每个扇区上的数据. 所以harbs最好设置成硬件扇区大小(通常是512字节), softbs数值会大一些, 缺省是16K.

在Debian上安装dd_rescue

运行下面命令安装ddrescue
#apt-get install ddrescue

在Ubuntu上安装ddrescue

sudo apt-get install ddrescue

ddrescue的语法

dd_rescue [options] infile outfile
现在我们将看到如何使用ddrescue在损坏硬盘上恢复数据

如果你有一块损坏的硬盘/dev/sda1和一块没有任何数据的硬盘/dev/sda2. 现在如果你想把数据从/dev/sda1拷贝到/dev/sda2上, 运行下面命令:
# dd_rescue /dev/sda1 /dev/sda2/backup.img

如果你使用ubuntu linux, 运行下面命令(拷贝sda1所有数据到sda2):
sudo dd_rescue /dev/sda1 /dev/sda2/backup.img

现在你需要检查备份(拷贝)数据的连续性:
#fsck -y /dev/sda2/backup.img

如果你使用ubuntu linux, 运行下面命令:
sudo fsck -y /dev/sda2/backup.img

检查完后, 从加载镜像文件到本地的recoverydata分区:
#mount /dev/sda2/backup.img /mnt/recoverydata

如果你使用ubuntu linux, 运行下面命令:
sudo mount /dev/sda2/backup.img /mnt/recoverydata

你将可以通过加载的分区(/mnt/recoverydata)访问镜像文件(backup.img)上的数据, 然后检查是否有任何问题.

恢复镜像

如果你想恢复镜像到损坏的硬盘, 运行下面命令:
#dd_rescue /dev/sda2/backup.img /dev/sda1

如果你使用ubuntu linux, 运行下面命令:
sudo dd_rescue /dev/sda2/backup.img /dev/sda1

使用SSH拷贝磁盘镜像到远程机器上
如果你想通过ssh拷贝磁盘镜像到远程机器上, 运行下面命令:
#dd_rescue /dev/sda1 - | ssh username@machineip ‘cat /datarecovery/backup.img’

如果你使用ubuntu linux, 运行下面命令:
sudo dd_rescue /dev/sda1 - | ssh username@machineip ‘cat /datarecovery/backup.img’

然后会显示用户口令输入提示, 输入指定用户的口令, 然后dd_rescue开始拷贝, 结束后通过网络拷贝到远程机器上.

可能的错误

如果你在拷贝中遇到下面错误可忽略:
dd_rescue: (warning): output file is not seekable!
dd_rescue: (warning): Illegal seek

如果你需要压缩磁盘镜像文件, 运行下面命令:
#tar zcvf - /dev/sda1 | ssh username@machineip ‘cat@@>/tmp /datarecovery/backup.tar.gz’

如果你使用ubuntu linux, 运行下面命令:
sudo tar zcvf - /dev/sda1 | ssh username@machineip ‘cat@@>/tmp /datarecovery/backup.tar.gz’

更多dd_rescue的参数用法, 你可以参考dd_rescue的man page.


Frsky’s blog . is proudly powered by WordPress and themed by Mukkamu