Rootop 服务器运维与web架构

2013-03-18
发表者 Venus
暂无评论

解决 cannot find freeTDS in known installation directories 及 spprintf.h:40: note: expected ‘char **’ but argument is of type ‘unsigned char 错误

编译安装mssql模块提示错误:

cannot find freeTDS in known installation directories

看错误提示说是找不到freetds,安装freetds。当前版本为freetds-0.91


[root@mail ~]#wget -c ftp://ftp.freetds.org/pub/freetds/stable/freetds-stable.tgz
[root@mail freetds-0.91]# ./configure --prefix=/usr/local/freetds --with-tdsver=7.1
有的资料说是8.0 可是帮助里没有8.0版本,或者直接省略此参数--with-tdsver
[root@mail freetds-0.91]#make && make install

其实安装完freetds,编译mssql的时候这里出现了一个bug。编译报错:

/root/soft/php-5.3.3/ext/mssql/php_mssql.h:68: error: redefinition of typedef ‘LPBYTE’
/usr/local/freetds//include/sqlfront.h:36: note: previous declaration of ‘LPBYTE’ was here
/root/soft/php-5.3.3/ext/mssql/php_mssql.c: In function ‘php_mssql_do_connect’:
/root/soft/php-5.3.3/ext/mssql/php_mssql.c:760: warning: cast from pointer to integer of different size
/root/soft/php-5.3.3/ext/mssql/php_mssql.c: In function ‘php_mssql_get_column_content_without_type’:
/root/soft/php-5.3.3/ext/mssql/php_mssql.c:1105: warning: passing argument 1 of ‘spprintf’ from incompatible pointer type
/usr/include/php/main/spprintf.h:40: note: expected ‘char **’ but argument is of type ‘unsigned char **’
make: *** [php_mssql.lo] Error 1

在这里需要修改freetds源码,修改文件 freetds-0.91/include/sqlfront.h
找到 typedef       BYTE *  LPBYTE;  将其注释掉
/* typedef       BYTE *  LPBYTE; */

删除掉/usr/local/freetds后,重新编译安装 freetds 后再次编译mssql。


[root@mail mssql]# ./configure --with-mssql=/usr/local/freetds && make && make install

模块位于/usr/lib64/php/modules/下。配置php.ini加载即可。

2013-03-15
发表者 Venus
暂无评论

利用memadmin通过web管理memcached

memadmin是一个web管理memcached的php程序,简单易用。
下载地址:
wget -c http://www.junopen.com/memadmin/memadmin-1.0.12.tar.gz
放到服务器上,访问报错:

PHP未安装Memcache扩展
The memcache extension for PHP must be loaded first

这是没有安装memcache模块,在php的拓展包中也没有,属于第三方,可以从 http://pecl.php.net/package/memcache 找到下载。
[root@rhel6www ~]#wget -c http://pecl.php.net/get/memcache-2.2.7.tgz

memcache需要phpize命令生成配置信息等,但是redhat6.0中已经没有php-devel包了,需要单独下载,安装。
[root@rhel6www ~]# wget -c ftp://bo.mirror.garr.it/pub/1/slc/slc60beta/i386/Packages/php-devel-5.3.2-6.el6.i686.rpm
[root@rhel6www ~]# yum install autoconf automake
[root@rhel6www ~]# rpm -ivh php-devel-5.3.2-6.el6.i686.rpm

[root@rhel6www ~]# cd memcache-2.2.7
[root@rhel6www memcache-2.2.7]# phpize
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
[root@rhel6www memcache-2.2.7]# ./configure && make && make install

根据make install 最后的提示,确认memcache.so模块的安装路径,将其复制到/usr/lib/php/modules 中,在32位系统下默认的php模块路径是/usr/lib/php/modules,如果是64位系统为/usr/lib64/php/modules,如果是源码编译,自行安装到相关路径。

编辑php.ini加载模块:
extension_dir = /usr/lib/php/modules    //模块路径
extension = memcache.so                     //模块名称

2013-03-15
发表者 Venus
暂无评论

Linux构建memcached加速web服务

libevent是一个事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制。著名分布式缓存软件memcached也是libevent based,而且libevent在使用上可以做到跨平台,而且根据libevent官方网站上公布的数据统计,似乎也有着非凡的性能。

memcached官网下载:http://memcached.org/

[root@rhel6www ~]# rpm -qa | grep libevent
libevent-1.4.13-1.el6.i686

查看系统已经安装,但是在下面的编译过程中还需要libevent-devel,但是在rhel6.0以后没发现有此包,以后尽量使用centos,便于直接yum安装。
可以从http://rpm.pbone.net中寻找所需要的rpm包。
下载地址:
ftp://ftp.sunet.se/pub/Linux/distributions/scientific/6.0/i386/os/Packages/libevent-devel-1.4.13-1.el6.i686.rpm

这是编译memcached中出现的报错:
checking for libevent directory… configure: error: libevent is required.  You can get it from

http://www.monkey.org/~provos/libevent/

If it’s already installed, specify its path using –with-libevent=/dir/
这就是因为没有安装libevent-devel,安装,重新编译即可。

我这里将系统自带的libevent卸载,重新编译的。

[root@rhel6www ~]# wget -c https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
[root@rhel6www ~]#tar zxvf libevent-2.0.21-stable.tar.gz
[root@rhel6www ~]# cd libevent-2.0.21-stable
[root@rhel6www libevent-2.0.21-stable ~]# ./configure --prefix=/usr/local/libevent
[root@rhel6www libevent-2.0.21-stable ~]#make && make install
[root@rhel6www ~]# cd memcached-1.4.15
[root@rhel6www memcached-1.4.15]# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
[root@rhel6www memcached-1.4.15]#make && make install
测试:
[root@rhel6www bin]# pwd
/usr/local/memcached/bin
[root@rhel6www bin]# ./memcached -d -u root -p 11211 -m 50 -P /tmp/memcached.pid

[root@rhel6www bin]# lsof -i:11211
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
memcached 21471 root   26u  IPv4  33972      0t0  TCP *:memcache (LISTEN)
memcached 21471 root   27u  IPv6  33973      0t0  TCP *:memcache (LISTEN)
memcached 21471 root   28u  IPv4  33976      0t0  UDP *:memcache
memcached 21471 root   29u  IPv6  33977      0t0  UDP *:memcache

已经运行了。

关闭进程:
[root@rhel6www ~]# kill -9 $(cat /tmp/memcached.pid)
加为开机启动,直接写到 /etc/rc.d/rc.local 即可。
可用参数:
-d 选项是启动一个守护进程
-m 是分配给Memcache使用的内存数量,单位是MB
-u 是运行Memcache的用户
-l 是监听的服务器IP地址
-p 是设置Memcache监听的端口
-c 选项是最大运行的并发连接数,默认是1024,按照服务器的负载设定
-P 是设置保存Memcache的pid文件

使用-h查看帮助。

然后编译memcache.so模块,加载到php中,参考:

https://www.rootop.org/pages/1662.html

2013-03-05
发表者 Venus
暂无评论

安装mod-pagespeed模块,加速web服务器。

关于介绍往下看

下载地址:https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_x86_64.rpm

这里先使用rpm包方式安装,直接rpm -ivh mod-pagespeed-stable_current_x86_64.rpm 即可。

在/etc/httpd/conf.d下释放 pagespeed.conf 配置文件,在/usr/lib64/httpd/modules下释放两个模块 mod_pagespeed_ap24.so和mod_pagespeed.so

[root@localhost modules]# chmod 755 /usr/lib64/httpd/modules/mod_pagespeed*   //更改模块文件的权限

现在可以重启apache。

[root@localhost ~]# ll /var/cache/mod_pagespeed/

total 8

drwxr-xr-x 5 apache apache 4096 Mar  5 16:56 http,3A

drwxr-xr-x 9 apache apache 4096 Mar  5 16:42 rname

这是mod-pagespeed的缓存路径,看到内容生成也表示安装成功。

用浏览器访问网站,打开http watch监控。

可以看到客户端检测到已经插入pagespeed,配置生效。

参考资料来源:http://www.ibm.com/developerworks/cn/linux/l-apache-pagespeed/

简介

先决条件要使用 mod_pagespeed,您需要安装可在 Linux 上运行的 Apache 2.2 版本,32 位或 64 位均可,同时安装 mod_deflate 模块。

目前,mod_pagespeed 不支持 Windows 或旧版本的 Apache(根据他们的文档和常见问题解答来看,我认为近期他们不会为这些版本提供支持)。

来自 Google 的 mod_pagespeed Apache 模块被设计为一种 “插入式” 模块,可供 Apache Web 托管商插入其服务器安装,并立即实现页面加载速度的显著提高。 如果您还不确定如何加速您的网站,或者尚未优化您的配置性能,那么此模块就应该是您寻找已久的解决方案。举例来说,对于使用开箱即用配置与安装的 WordPress 博主,此模块能带来很大的改变。

mod_pagespeed 模块在一个模块中结合了优化页面加载速度的最佳实践,并且可自动执行所有必要的步骤。

速度的定义

无论您的 Internet 连接速度如何,您总是希望能够更快地加载您的网页。将页面内容发送给您的 Web 服务器也希望它的速度更快,原因有二:如果企业的服务器速度缓慢,就会导致客户丢失。此外,如果企业为您提供了更快的个别页面加载速度,那么就能将其自己的服务器用于为其他人提供更多页面。您可能每天访问他们的页面一次,但他们每天要为其他客户提供 100,000 次相同的页面。对于这些企业来说,即便是细微的速度提升也有着重大的意义。

就本文的目的而言,我们将从用户的视角定义 “速度”:页面加载时间。能够迅速加载的网页将被视为快速,如 www.google.com,其页面加载时间非常短。相反,如果某个假象站点仅有一台服务器,运行在陈旧的 Pentium II 600 MHz 之上,而且包含 40 个庞大的镜像文件,那么这个站点无疑会非常慢,其页面加载时间非常长。此外,如果一个网页在每天仅有少数人访问时速度较快,在数千名用户都在 10 分钟的时间内访问该网站时,该网站仍然有可能变得极为缓慢。因此,“速度” 定义为使您从 A 点到 B 点所用的时间,其中 A 点 = 您在地址栏中键入某些内容之后按下 “回车键” 的时候,而 B 点 = 页面完全载入浏览器的时间。

从 Web 服务器的角度来看,提高速度(而无需更改硬件)的最佳方法就是更快地发送更少量的数据。更具体地来说,您希望降低机器的延迟(延迟 = 响应时间),并减小传输的数据大小(所传输的数据的物理 Kb 数)。因此,为了 “加速” 一个网站,无论是从 Web 服务的视角,还是从用户的视角来说,您都需要减少服务器的延迟,同时减小所传输的数据大小。

如何提高速度

提高网站速度的全部可行战术可分为五大类:最大化缓存、最小化查找、最小化每条请求的开销、最小化数据大小,以及优化浏览器的呈现。请注意,各分类描述极限行为的方式,例如 “最大化” 或 “最小化”,举例来说,不存在 “打开” 或者 “关闭” 一种特性或者设置的简单解决方案。下面我们来详解各分类,并说明其工作方式。

最大化缓存

浏览器能够在本地缓存文件,因此不必在每次载入页面时从服务器载入这些文件,而是可以使用本地副本。尽管这对于动态 Web 页面本身意义不大(例如博客页面),但对于已经载入页面的全部图像、CSS 文件和 JavaScript 文件来说又会如何呢?这些文件基本不会更改,即便更改,也是非常少的。不必每一次都去服务器中获取相同的 CSS 文件,特别是在为整个站点使用一个 CSS 文件时。用户载入的所有页面均使用相同的 CSS 文件,因此您完全可以使用本地缓存的副本,而不必使用服务器副本,因为它们是完全相同的。

浏览器实际上会接受服务器提供的缓存命令。服务器可以告知浏览器项目是否有效、在多长时间内保持有效。服务器可以将这些命令附加到每一个文件。因此,服务器调用告知浏览器缓存一个 JS 文件、一个 CSS 文件、一个 JPG 文件,但不缓存 HTML 文件或者 TXT 文件。此外,也可以告知浏览器 “CSS 和 JPG 文件在一年内不会过期”。浏览器将解释这些命令,因为服务器告诉它 “这里有一个 JPG 文件,它在一年之内不会发生更改,在此期间,如果我的服务器上的任何页面引用了这个文件,那么您就应该使用本地副本”。

最小化查找

在任意类型的文件从服务器发送至浏览器时,都存在在各文件上建立 HTTP 连接的相关开销。换句话说,需要为各文件在服务器与浏览器之间建立一个通信信道。在大多数常见网站中,有数十个文件需要传输,每次存在这样的开销时,服务器都要花费一定的时间来建立连接。因此,减少查找数量可以减少服务器用于建立连接的时间。

实现此目标的主要方法应该显而易见:减少一个网页上需要传输的文件数量。例如,如果您的一个页面中包含 10 幅图像,那么您就可能需要建立 10 个 HTTP 连接。但您可以将资源整合到数量更少的文件之中,从而减少连接数量,例如将所有 jQuery 插件置于一个文件之中,或者将一个页面中的所有小图像并为一个大的图像文件,随后使用 CSS,仅显示大图像中您需要显示的部分。

最小化每条请求的开销

载入各网页时,浏览器会将某些信息中继至服务器,包括 cookie 以及调用 POST 和 GET 的时间等内容。当然,这需要花费时间,因为每次载入页面时,都必须从客户端向服务器上传 cookie 信息。某些网站会在 cookie 中存储大量信息,需要上传的信息越多,所花费的时间就越长。

更为可取的设计是在 cookie 中存储尽可能少的信息(例如,仅存储用户 ID),并使用这样的信息作为关键字,查找您在数据库中存储的所有必要信息。这能显著缩短此类信息的上传时间。

最小化数据大小

传送 20Kb 的图像文件要比传送 200Kb 的图像文件更快。这个分类包含所有这些相关实践:例如,尽可能使用 GIF 而非 JPG、最大限度地缩小 JavaScript 文件的大小、尽可能发送缩略图图像而非整个图像。

优化浏览器呈现

这个分类是极有挑战性的。其中包含诸如使用优化的 CSS 选取器等实践,但您的站点往往已经完成了设计,而处理 CSS 文件的人员往往不是负责优化服务器性能的人员。此外,这个分类中的要素提供的收益往往并不明显。

理论介绍到此为止,下面让我们来下载并运行产品!无论如何,这种插件的目的在于插入您自己的 Apache 安装,使您不必 再担心提升速度的所有细节。

测试您的 mod_pagespeed 安装

通过几项检查来确保您的 mod_pagespeed 安装工作正常。显然,首先要确保您的 Apache 能正常启动(如果无法正常启动,那么就表示您的 mod_pagespeed 安装/配置存在问题)。随后,检查 “cache” 文件夹,确认 mod_pagespeed 正确写入此处。

现在,访问您正在处理的站点的一个网页(这个网页中应该包含类似于 JS 和 CSS 文件等内容)。访问页面后,检查 “cache” 文件夹。您应在这里看到一些文件,它们应该是可收缩的文件(JS 和 CSS 文件)的 GZipped/压缩版本。这是表明您已正确安装和配置 mod_pagespeed 的第一项证明。

最后一项检查是您从服务器获得的响应标头 (response header)。您可以使用 Firebug 或 Google 自己的 Page Speed 等工具来进行这项检查,甚至可以编写 PHP 代码来查找此标头。在检查响应标头时,请查找对 “Modpagespeed” 的引用,因为 Google 的工具会标记此响应。

祝贺您!成功检查 “cache” 文件夹和响应标头之后,即可确信您已经正确安装和配置了 mod_pagespeed。

2013-02-26
发表者 Venus
暂无评论

Device eth0 does not seem to be present, delaying initialization.

在vmware中安装完redhat6.3启动网络报错:
[root@localhost ~]# service network start
Bringing up loopback interface:                            [  OK  ]
Bringing up interface eth0:  Device eth0 does not seem to be present, delaying initialization.
[FAILED]
网上查到的原因是70-persistent-net.rules中的mac地址配置与实际错误。这里打开看一下:
[root@localhost ~]# vi /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM==”net”, ACTION==”add”, DRIVERS==”?*”, ATTR{address}==”00:0c:29:39:b0:b6″, ATTR{type}==”1″, KERNEL==”eth*”, NAME=”eth0″
# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM==”net”, ACTION==”add”, DRIVERS==”?*”, ATTR{address}==”00:0c:29:c3:9e:23″, ATTR{type}==”1″, KERNEL==”eth*”, NAME=”eth1″
出现了eth0和eth1,实际上我并没有eth1,将下面的eth1改为eth0(也可以直接将70-persistent-net.rules文件删除),重启系统,网络启动了。
[root@localhost ~]# ifconfig | grep eth0
eth0      Link encap:Ethernet  HWaddr 00:0C:29:C3:9E:23
在/etc/udev/rules.d/70-persistent-net.rules的文件中提示了此文件由/lib/udev/write_net_rules脚本生成,查看下。
[root@localhost ~]# vi /lib/udev/write_net_rules
# This script is run to create persistent network device naming rules
# based on properties of the device. 意思说脚本基于设备信息生成固定的网络设备名称规则。


这里又打开vmware确认了网卡地址确实为00:0c:29:c3:9e:23,再次修改70-persistent-net.rules文件,删除行:
SUBSYSTEM==”net”, ACTION==”add”, DRIVERS==”?*”, ATTR{address}==”00:0c:29:39:b0:b6″, ATTR{type}==”1″, KERNEL==”eth*”, NAME=”eth0″
把错误的mac地址这两行删除。