工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.wdlinux.cn 注册 | 登陆
浏览模式: 标准 | 列表全部文章

XEN故障与解决方法汇总

1、Hint to configure libvirt without bothering qemu errors in xen 
This is not a bug, but annoying
Since I have xen and no kvm the qemu dirvers report errors all the time - This may help everyone with the same setup.

libvir: QEMU error : connect: /usr/local/var/run/libvirt/qemud-sock: No such file or directory 
libvir: warning : Failed to find the network: Is the daemon running ?
libvir: error : library call virConnectNumOfNetworks failed, possibly not supported libvir: error : library call virConnectNumOfDefinedNetworks failed, possibly not supported 
[..]
The last two lines are printed every second!
To "unconfigure" qemu and therefore prevent these message flooding use
./configure --without-qemu
simple but useful ;-)

2、系统日志中大量如下警告:
Dec 2 16:11:08 gamebbs2 snmpd[1056]: Received SNMP packet(s) from UDP: [192.168.239.93]:-13093
Dec 2 16:11:08 gamebbs2 kernel: audit(1228205468.528:120): avc: denied { read append } for pid=1056 comm="snmpd" name="snmpd.log" dev=dm-0 ino=3717987 scontext=system_u:system_r:snmpd_t:s0 tcontext=user_u:object_r:var_log_t:s0 tclass=file
Dec 2 16:11:08 gamebbs2 snmpd[1056]: Received SNMP packet(s) from UDP: [192.168.239.93]:-13092
Dec 2 16:11:08 gamebbs2 kernel: audit(1228205468.940:121): avc: denied { read append } for pid=1056 comm="snmpd" name="snmpd.log" dev=dm-0 ino=3717987 scontext=system_u:system_r:snmpd_t:s0 tcontext=user_u:object_r:var_log_t:s0 tclass=file
Dec 2 16:16:15 gamebbs2 snmpd[1056]: Received SNMP packet(s) from UDP: [192.168.239.93]:-12384
原因是开启了selinux,snmp的日志文件因受selinux保护,snmp不能正常写入,解决方法有几种:
(1)停止snmpd,删除snmpd日志文件,再启动snmpd即可恢复,不过此方法处理后可能在下次重启系统后仍然会出现这个情况。
(2)直接关闭selinux(setenforce 0)
(3)修改selinux的策略(selinux不熟,哪位高手提供一下方法)

3、网卡lo流量很高
   初步估计与IPv6有关,关闭IPv6支持,重启系统后恢复
   vi /etc/modprobe.conf 加入下面两行
alias net-pf-10 off
alias ipv6 off

4、ssh远程连接到服务器后进行操作会停顿,在控制台相接操作没有此情况
   初步估计与IPv6有关,关闭IPv6支持,重启系统后恢复
   vi /etc/modprobe.conf 加入下面两行
alias net-pf-10 off
alias ipv6 off
   另可能与网卡流量限制有关,查看网卡流量限制
tc qdisc show dev eth0

5、在rh5u2前的系统上安装Fedora10作为DomU不成功
   可能是python-virtinst包版本过低,可以尝试更新此包再安装。

6、在XEN主机上,写在/etc/init.d/network上的路由不生效,但是改为非虚拟系统的时候正常
   因XEN系统中启动网络的方法与非虚拟主机系统有些不同,具体可以参考XEN相关文档,将路由写到/etc/init.d/xend中即可正常生效

7、ssh连接domU可以正常连接,使用xm console domname连接domU的控制台的时候报如下错误:
xenconsole: Could not read tty from store: No such file or directory
某些客户机还可能出现无法启动的现象。
可能是xend进程有问题,可以考虑重启xend进程:
/etc/init.d/xend restart

8、安装domU过程中,在输入客户机IP后不能获取到安装源的数据,使用DHCP获取不到地址
查看dom0中网络配置情况,检查是否domU连接到了错误的网桥上
brctl show
如果是,修正vif连接到的网桥,用brctl命令进行删除和添加
例如:
#brctl show   #查看网络连接情况
#xm list   #查看该DomU所的ID来确定vif号码(ID号与vif号相同)
#brctl delif virbr0 vifx.0 #从错误的网桥中删除vifx.0(x.0中x为ID编号,0表示第一块网卡,下同)
#brctl addif xenbr0 vifx.0 #在正确的网桥中加入vifx.0
#brctl show   #检查最终结果

9、安装客户机过程中跨网段安装失败
   首先检查安装客户机的时候配置的网络,客户机网络与主机网络应该相同,同时主机与安装服务器够连通,并且客户机设置的网关应该为该客户机所配置网段连通安装服务器的路由网关,可能不是默认网关,对于系统安装服务器与xen主机之间跨网段的情况网关设置非常重要。如果使用DHCP来安装客户机,通常可能会遇到此情况。

10、64位的RHEL5U2机器,安装客户机,重启客户机等都会卡住,在check image附近
初步估计为在有客户机运行期间,主机的时间跟实际时间有较大的差距的情况下运行了ntpdate的原因,如果已经运行了该命令,暂时未发现较好的解决方法,只能重启物理服务器。
如果还未运行客户机,可考虑先关闭客户机,再运行ntpdate校准,然后再启动客户机。

11、在单台物理XEN主机上同时进行两个虚拟客户机的安装可能会出现冲突,导致系统无响应

12、用virt-install安装客户机的时候报如下错误:
virDomainCreateLinux() failed XML description for domain is not well formed or invalid
Domain installation may not have been
successful. If it was, you can restart your domain
by running 'virsh start new216'; otherwise, please
restart your installation.
Mon, 09 Mar 2009 14:57:22 ERROR    virDomainCreateLinux() failed XML description for domain is not well formed or invalid
Traceback (most recent call last):
File "/usr/sbin/virt-install", line 502, in ?
    main()
File "/usr/sbin/virt-install", line 462, in main
    dom = guest.start_install(conscb,progresscb)
File "/usr/lib/python2.4/site-packages/virtinst/Guest.py", line 813, in start_install
    return self._do_install(consolecb, meter)
File "/usr/lib/python2.4/site-packages/virtinst/Guest.py", line 834, in _do_install
    self.domain = self.conn.createLinux(install_xml, 0)
File "/usr/lib64/python2.4/site-packages/libvirt.py", line 573, in createLinux
    if ret is None:raise libvirtError('virDomainCreateLinux() failed', conn=self)
libvirtError: virDomainCreateLinux() failed XML description for domain is not well formed or invalid
出现此报错应该是主机系统在启动的时候有起libvirtd服务,但是后来关闭了,而virt-install工具在进行客户机系统安装的时候错误地将客户机的网卡连接到libvirtd服务起的网桥virbr0上,此时libvirtd是关闭的,所以virbr0也不存在了,就出现了上面的错误信息。
解决方法有两个:
(1)、启动libvirtd服务后重新用原来的virt-install命令安装客户机操作系统;
#/etc/init.d/libvirtd start
(2)、在原来的virt-install命令后面加-b参数指定需要连接的网桥,如果未调整网络,一般默认的网桥应该为xenbr0
要查看网桥的名称可以使用brctl命令查看
#brctl show
[root@XenHost ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
xenbr0          8000.feffffffffff       no              vif5.0
                                                        vif4.0
                                                        vif3.0
                                                        vif2.0
                                                        peth0
                                                        vif0.0
此处我们已经关闭了libvirtd服务,剩下的网桥的名称为xenbr0(如果创建了多个网桥,选择自己需要的网桥名称)
#virt-install -n kiro-test -r 256 --vcpus=1 -f /data/rh5 --nographics -p -d -l "http://192.168.0.1" -b xenbr0

squid cache-dir

cache_dir scheme directory size L1 L2 [options]
这个选项可以说是squid.conf中最重要的参数设定之一了。所以必须要吃透它!

 

Scheme:
可以从编译参数—enable-storeio=LIST 中指定,默认为ufs。其他有:aufs, diskd, coss, null

Directory:
存储缓存对象的目录,建议将一个缓寸目录放在单独的分区中,另外最好放在一个单独的物理磁盘来使用。

Size:
没有上限,一般建议是整个分区的90%以下,因为还有10%要给swap.state和一些临时文件使用。
下限可以自己测试,先设一个比较小的值,比如100M,并且设置可以用满,等待一周,如果分区满了,那么你就要适当的调大。
Inodes也是一个相当重要的标准,如果inode用完的话,就算磁盘空间还有很多空余也是浪费。
可以通过df -ik来察看,另外一些创建文件系统的命令(newfs,mkfs)也有相应的参数,一般是-i。

磁盘空间和进程大小之间的关系:
每一个在磁盘上的缓存对象都会占有一小块内存。Squid用这些内存来建立磁盘上的缓存数据的索引,以便快速找到。如果要增加一个新的cache目录或者增加磁盘空间的大小,先要确认有足够的内存。如果Squid进程占有的太大导致内存不够,Squid的性能会降低的非常明显。
每个在缓存目录中的对象都将会根据系统的不同而占有76或者112个字节。其中在32位的Inter架构上的占有76个字节。可以通过cache manager察看多少内存被使用了。

L1 and L2:
Squid会建立2级目录树在缓存目录。L1指定第一层,L2指定第二层各是多少目录数。默认为16和256。真正的缓存目录放在二级目录下,并且数据存放是按次序的,Squid有一套算法storeUfsDirFullPath( )实现一组页面的数据存储在相同的二级目录中。而且从实际情况来看,数据都是按顺序一个目录一个目录存放下去的。

Options: (read-only max-size)
read-only:用在当你将缓存目录下面的内容移动到其他硬盘上,并且还需要这些数据的时候。如果不加read-only,Squid的hit率会急剧下降。等运行一段时间后再去掉这个选项即可。
max-size:指定最大缓存的数据大小。单位是字节。

dz messages

$post['message'] = str_replace('','thread-'.$tid.'-'.$page.'-1.html<br>',discuzcode(

awk e1

awk '$2~/url/{a+=$3}END{print $a}' filename

Xen CentOS 5.5 vif0.0 received packet with own address as source address

用CentOS5.5构建的Xen domain-0突然发现连接不上网络。用ifup eth0一试,出现以下错误:

Device eth0 has different MAC address than expected, ignoring

把/etc/sysconfig/network-scripts/ifcfg-eth0里的HWADDR那一行comment out后,出现以下信息:

vif0.0 received packet with own address as source address

最后,把/etc/sysconfig/network-scripts/ifcfg-eth0里的

HWADDR=00:xx:xx:xx….
改成
MACADDR=00:xx:xx:xx…

再运行/etc/rc.d/init.d/network restart重启网络服务后,终于可以正常连接网络。

#之后,原来是想再现这个错误,却发现把MACADDR改回HWADDR也可以连接上网络

apache rewrite规则全攻略

大家好,今天51开源给大家介绍apache rewrite规则。apache的重写规则主要通过apache的mod_rewrite模块来实现。

(1) 认识规则重写

   规则重写就是Web服务器会改写客户机符合特定规则的URL,用于实现资源重定向。Apache中文手册中所言,Apache的mod_rewreit模块是提供了强大URL操作的杀手级模块。可以实现几乎所有你梦想的URL操作类型,但其复杂性让很多初学者望而止步,对于apache rewrite规则需要你长时间的实践与理解。手册中有句话,我觉得很有意思。“对于mod_rewrite,或者是打退堂鼓永不再用,或是喜欢它并一生受用。”真的,apache rewrite比你想象的更有用。apache rewrite的实用性和灵活性会让你对它痴迷,51开源给大家加气,不要退缩。

(2) 规则重写的配置命令

-rewriteengine  on/off

  设置apache是否启用重写引擎

  -rewriterule

  作用: 为重写引擎定义重写规则

  格式: rewriterule 正则表达式  替代字符串 [标记]

  正则表达式元字符:

          .           任意一个单字符

         [chars]     字符类: "chars"中的任意一个字符

         [^chars]    字符类: 不在"chars"中的字符

         text1|text2 选择: text1 或 text2

         ?           前面的字符出现 0 或 1 次

         *           前面的字符出现 0 或 N 次(N > 0)

         +           前面的字符出现 1 或 N 次(N > 1)

         ^           锚定到行首

         $           锚定到行尾

         \字符       转义字符

   标记: C  链接到下一条件规则

         F  强制禁止URL

         G  强制废弃URL

         L  结尾规则

         N  跳转到开头、从开再来

         NC 忽略大小写

         P  强制为代理

         R  强制为重定向

   实例:rewriterule ^/$    http://bbs.51osos.com [R,L]

        //对网站根目录的访问请求全转向http://bbs.51osos.com

   -rewritecond

   作用:定义重写发生的条件

   格式:rewritecond  字符串   正则表达式  [标记]

   字符串所包含一些特殊字符:

        a. $N  反向rewriterule中的分组

        b. %N  反向rewritecond中的分组

        c. 服务器变量

           %{HTTP_USER_AGENT}   客户机信息,包括操作系统和浏览器信息

           %{HTTP_HOST} 请求的主机名 

           %{REMOTE_ADDR}  客户机IP地址

           %{REMOTE_HOST}  客户机的主机名

           %{REMOTE_PORT}  客户机连接服务器所有端口

           %{REQUEST_METHOD}  客户机的请求方法

           %{REQUEST_FILENAME} 客户机的请求的文件名

           %{REQUEST_URI}  客户机请求URI

           %{DOCUMENT_ROOT} 服务器的站点主目录

           %{SERVER_NAME}  服务器的名称

           %{SERVER_ADDR}  服务器的IP地址

           %{SERVER_PORT}  服务器的端口号

    特殊比较符号:

          <  小于

          >  大于

          =  等于

          -d  判断是不是存在的目录

          -f  判断是不是存在的普通文件

          -s  判断是不是为非空的普通文件

          -x  判断是不是为可执行的文件

          -l  判断是不是为链接文件

          -U  判断是不是有效的URL

      标记:

          -NC   忽略大小写

          -OR   或

      实例:rewritecond %{REMOTE_ADDR} ^192.168.3.1

    -rewritebase

  作用:设置目录级重写的基准URL

  格式:rewritebase  URL-PATH

   (3) 规则重写的应用案例

     -移动站点主目录到站点的/bbs路径下

     rewriteengine on

     rewriterule  ^/$    /bbs [R,L]

     -利用规则重写实现基于域名的虚拟主机

    RewriteEngine on

    RewriteCond   %{HTTP_HOST}    ^www\.abc\.com$

    RewriteRule   ^(.+)     %{HTTP_HOST}$1   [C]

    RewriteRule   ^www\.abc\.com(.*) /web/abc$1

 

    RewriteCond   %{HTTP_HOST}    ^www\.51osos \.com$

    RewriteRule   ^(.+)     %{HTTP_HOST}$1   [C]

    RewriteRule   ^www\.51osos\.com(.*) /web/51osos$1

“带宽”和“速度”的分别

 所谓 1M 宽带,其实是指 1Mbps (兆比特每秒),亦即 1 x 1024 / 8 = 128KB/sec,但这只是理论上的速度,实际上则要再扣约 12% 的信息头标识等各种控制讯号,故其传输速度上限应为 112KB/sec 左右。这里列出了各个速度单位之间的关系:1 Byte = 8 bits 1 Kb = 1024 bits 1 KB = 1024 bytes 1 Mb = 1024 Kb 1 MB = 1024 KB在这里要注意的是传输单位的写法上,B 和 b 分别代表 Bytes 和 bits,两者的定义是不同的,千万不要混淆了。

  所以各种宽带的极限下载值也可以轻易的计算出来。

  1 M =112 KB/s 2 M =225 KB/s 8 M =901 KB/s 10 M =1126 KB/s Mbps实际上是一个带宽单位,而非速度单位,在"Mbps"单位中的"b"是指"Bit(位)".而真正的速度单位应为MB/s,其中的"B"是指"Byte(字节)".因为数据是按字节传输的,而并非按位。

Nginx 并发连接数控制 Limit Zone Limit simultaneous connections

ngx_http_limit_zone_module

Limit Zone Limit simultaneous connections from a client.

本模块可以针对条件,进行会话的并发连接数控制。(例如:限制每个IP的并发连接数。)

__配置示例__

http { : limit_zone   one  $binary_remote_addr  10m;  : ...  : server {  : ...  : location /download/ { : limit_conn   one  1; : }

指令

  • [#limit_zone limit_zone]
  • [#limit_conn limit_conn]

 

limit_zone

语法: limit_zone zone_name $variable the_size

默认值: no

作用域: http

本指令定义了一个数据区,里面记录会话状态信息。
$variable 定义判断会话的变量;the_size 定义记录区的总容量。

例子:

limit_zone   one  $binary_remote_addr  10m;

定义一个叫“one”的记录区,总容量为 10M,以变量 $binary_remote_addr 作为会话的判断基准(即一个地址一个会话)。


您可以注意到了,在这里使用的是 $binary_remote_addr 而不是 $remote_addr。

$remote_addr 的长度为 7 至 15 bytes,会话信息的长度为 32 或 64 bytes。而 $binary_remote_addr 的长度为 4 bytes,会话信息的长度为 32 bytes。

当区的大小为 1M 的时候,大约可以记录 32000 个会话信息(一个会话占用 32 bytes)。


 

limit_conn

语法: limit_conn zone_name the_size

默认值: no

作用域: http, server, location

指定一个会话最大的并发连接数。当超过指定的最发并发连接数时,服务器将返回 "Service unavailable" (503)。

例子:

limit_zone   one  $binary_remote_addr  10m;  : server { : location /download/ { : limit_conn   one  1; : }

定义一个叫“one”的记录区,总容量为 10M,以变量 $binary_remote_addr 作为会话的判断基准(即一个地址一个会话)。限制 /download/ 目录下,一个会话只能进行一个连接。简单点,就是限制 /download/ 目录下,一个IP只能发起一个连接,多过一个,一律503。

原文:http://wiki.nginx.org/ChsHttpLimitZoneModule