十一月
03今天在hostmonster主机上安装MediaWiki,按照文档要求把config目录更改权限
chmod a+w config
但做初始化配置时出现了500服务器内部错误,非常奇怪,我搜了一下相关信息,发现是config目录权限有问题,还是改回755,之后安装,就没有问题了。
十一月
03今天在hostmonster主机上安装MediaWiki,按照文档要求把config目录更改权限
chmod a+w config
但做初始化配置时出现了500服务器内部错误,非常奇怪,我搜了一下相关信息,发现是config目录权限有问题,还是改回755,之后安装,就没有问题了。
四月
13在Linux下安装Memcached,先要安装libevent,在http://www.monkey.org/~provos/libevent/下载
Memcache在http://www.danga.com/memcached/download.bml下载
可能是我将libevent安装在/usr/local/libevent目录的缘故,在启动memchached时报一个错误
./memcached: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory
我们先运行下面的命令,将libevent的lib目录加入LD_LIBRARY_PATH里
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/libevent/lib
之后再启动memcached就好了。
四月
10今天在Oracle Enterprise Linux上安装Oracle,后面创建数据实例的时候出现了ORA-12547: TNS:lost contact的错误,按理来说,Oracle Enterprise Linux可是就是针对Oracle的,怎么会出现这样的错误,在网上搜索了一下,可能是没有安装libaio包的缘故,我就试试吧。
在安装盘第3张里找到了libaio-0.3.105-2.i386.rpm和libaio-devel-0.3.105-2.i386.rpm,如果身边没有安装盘,可以到http://rpmfind.net上面去搜索一下,安装后,重起电脑,把以前安装过的Oracle卸载掉,重新安装,没有问题了。
以后需要注意,在安装Linux的时候就把这个包选进去。
四月
09先检查Linux是否加载usb模块
lsmod | grep usb
如果没有信息,则执行
modprobe usb-storage
之后把USB的硬盘接上,执行
fdisk -l
可以看到
Disk /dev/sda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 587 4610655 82 Linux swap
/dev/sda3 588 9729 73433115 83 Linux
Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdb doesn’t contain a valid partition table
可以看到/dev/sda是我们已有的硬盘,/dev/sdb就是USB硬盘了,提示改硬盘还没有分区,接下来我们就对/dev/sdb做分区,执行命令
fdisk /dev/sdb
之后会提示
Command (m for help):
可以输入m看一下help,我们输入n,新创建一个分区,之后出现
Command action
e extended
p primary partition (1-4)
输入p,创建主分区,之后
Partition number (1-4):
输入1,会提示
First cylinder (1-121601, default 1):
直接回车,即默认1,也就是从1开始,提示
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-121601, default 121601):
直接回车,因为我把整个硬盘分1个区,所以就用最大值,回车就可以了,提示
Using default value 121601
Command (m for help):
这时候我们可以输入p,看一下分区情况
Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 121601 976760001 83 Linux
Command (m for help):
这时候输入w,写入分区表,这样就完成了,会提示
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
我们再执行fdisk -l看一下情况
Disk /dev/sda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 587 4610655 82 Linux swap
/dev/sda3 588 9729 73433115 83 Linux
Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 121601 976760001 83 Linux
我们已经看到/dev/sdb1了,现在要对/dev/sdb1做一下格式化,在linux上可以将格式化成多种格式,比如ext3 、reiserfs 、ext2 、fat32 、msdos等,我们还是格式化成ext3的默认格式,执行
mkfs.ext3 /dev/sdb1
mke2fs 1.35 (28-Feb-2004)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
122109952 inodes, 244190000 blocks
12209500 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=247463936
7453 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
Writing inode tables: done (在这个地方会等待,直到done)
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information:
直接回车就之后就完成格式化
done
This filesystem will be automatically checked every 30 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
之后我们可以把/dev/sdb1挂载到系统中,比如
mount /dev/sdb1 /u02/oradata1
用df命令看一下
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 72279384 9336512 59271220 14% /
/dev/sda1 101086 8741 87126 10% /boot
none 1553948 0 1553948 0% /dev/shm
/dev/sdb1 961432072 110656 912483416 1% /u02/oradata1
/dev/sdb1已经mount到/u02/oradata1了。
四月
03LVS(Linux Virtual Server)是章文嵩博士创立的开源项目,可以帮助我们建立高可用性和高扩展性的Linux集群,LVS性能非常好,在暂时不能花费巨资购买F5、NetDispatcher之类硬件的时期,LVS还是能够很好的满足需要的。
LVS的Linux组件IPVS在新版本的Linux内核里已经支持,不需要单独再安装,可以通过命令
lsmod |grep ip_vs
检查内核是否支持IPVS。
ipvsadm是LVS的管理软件,在编译安装的时候要注意,先做一个ln连接,类似
ln -s /usr/src/kernels/2.6.9-42.EL-smp-i686 /usr/src/linux
或
ln -s /usr/src/kernels/2.6.18-8.el5-x86_64 /usr/src/linux
keepalived是一个很方便的LVS管理工具,只要需要配置keepalived的配置文件就可以了,不用一条一条的执行ipvsadm命令了。
将keepalived加为服务的方法(keepalived默认安装在/usr/local/etc下)
cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/sbin/keepalived /usr/sbin/
关于虚拟IP与真实服务器IP的端口对应问题
在测试中,发现虚拟IP的端口只能和真实服务器IP的端口对应,比如虚拟IP的端口是80,后面对应的真实服务器的端口也只能是80,不能任意配置,真实服务器的端口,让我非常的不解,是我配置错误?还是LVS或keepalived得问题呢?
在Nginx服务器里也可以实现简单的Load Balance,举例
upstream tomcats {
ip_hash;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server 127.0.0.1:8280 max_fails=3 fail_timeout=30s;
}
server {
location / {
proxy_pass http://tomcats;
}
}
其中,ip_hash的作用在于很据用IP做hash算法,分配到相应的后端服务上,这样的话,用可以基本上固定的分配到某台机子上,就不用担心Session的问题,fail_timeout和max_fails是指在单位时间重试的次数,如果连接不成功,则不会再向其转发请求。
二月
18随着Tomcat的运行,catalina.out文件会越来越大,虽然Tomcat每日会生成一个catalina.ymd.log的文件,但catalina.out主文件仍然不断增加,需要对catalina.out按日切分才好,在网上找了一下,看到一篇《rotating catalina.out in tomcat 5.5 using cronolog》,就用公司的Tomcat配置一下。
cronolog工具已经在服务器上装过,一个对日志切分的小工具,其主页在http://cronolog.org/,我们也用它来切分Apache的日志。
进入Tomcat的bin目录,打开catalina.sh文件,找到tomcat启动的相关行,或者你直接查找catalina.out,一般我们修改下面行中的内容(因为我们一般不会在-security条件下运行),
1 2 3 4 5 6 7 8 9 10 11 12 13 | else “$_RUNJAVA” $JAVA_OPTS $CATALINA_OPTS \ -Djava.endorsed.dirs=”$JAVA_ENDORSED_DIRS” -classpath “$CLASSPATH” \ -Dcatalina.base=”$CATALINA_BASE” \ -Dcatalina.home=”$CATALINA_HOME” \ -Djava.io.tmpdir=”$CATALINA_TMPDIR” \ org.apache.catalina.startup.Bootstrap “$@” start \ >> “$CATALINA_BASE”/logs/catalina.out 2>&1 & if [ ! -z "$CATALINA_PID" ]; then echo $! > $CATALINA_PID fi fi |
修改
org.apache.catalina.startup.Bootstrap “$@” start \
>> “$CATALINA_BASE”/logs/catalina.out 2>&1 &
为
org.apache.catalina.startup.Bootstrap “$@” start 2>&1 \
| /usr/local/sbin/cronolog “$CATALINA_BASE”/logs/catalina.%Y-%m-%d.out >> /dev/null &
同时,上面有一行
touch “$CATALINA_BASE”/logs/catalina.out
可以注释掉,完成之后重起Tomcat就可以了,在logs目录下可以看到catalina.2009-02-18.out的日志,是按日生成的。
二月
18方法一:
1. 执行rpm -i your-package.src.rpm
2. cd /usr/src/redhat/SPECS
3. rpmbuild -bp your-package.specs 一个和你的软件包同名的specs文件
4. cd /usr/src/redhat/BUILD/your-package/ 一个和你的软件包同名的目录
5. ./configure 这一步和编译普通的源码软件一样,可以加上参数
6. make
7. make install
方法二:
1. 执行rpm -i you-package.src.rpm
2. cd /usr/src/redhat/SPECS (前两步和方法一相同)
3. rpmbuild -bb your-package.specs 一个和你的软件包同名的specs文件
这时,在/usr/src/redhat/RPM/i386/ (根据具体包的不同,也可能是i686,noarch等等) 在这个目录下,有一个新的rpm包,这个是编译好的二进制文件。执行:
rpm -i new-package.rpm即可安装完成。
二月
11awstats是一个Apache/Windows IIS的日志分析工具,每次安装的时候都参考车东的《AWStats简介》,这次我把安装步骤记录下来,下次再安装时就比较方便了。
我的Apache安装在/usr/local/apache/,access_log日志文件用cronolog工具按天截断
wget http://nchc.dl.sourceforge.net/sourceforge/awstats/awstats-6.9.tar.gz
tar zxvf awstats-6.9.tar.gz
mv awstats-6.9/wwwroot/cgi-bin /usr/local/apache/cgi-bin/awstats
(wwwroot下还有一些静态文件夹,最后Copy到相应Web目录下)
下面安装GeoIP相关包,GeoIP是一个ip-location的工具,可以根据IP确定位置,包括国家、城市,具体参考其网站 http://www.maxmind.com/app/ip-location
wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP.tar.gz
wget http://geolite.maxmind.com/download/geoip/api/perl/Geo-IP-1.36.tar.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
tar zxvf GeoIP.tar.gz
cd GeoIP-1.4.5
./configure
make
make install
cd ..
tar zxvf Geo-IP-1.36.tar.gz
cd Geo-IP-1.36
perl Makefile.PL(注意,在这里可能出错,是因为找不到GeoIP的包,可以用perl Makefile.PL LIBS=’-L/usr/local/lib’ INC=’-I/usr/local/include’)
make
make install
cd ..
gunzip GeoIP.dat.gz
mv GeoIP.dat /usr/local/apache/cgi-bin/awstats/
gunzip GeoLiteCity.dat.gz
mv GeoLiteCity.dat /usr/local/apache/cgi-bin/awstats/
cd /usr/local/apache/cgi-bin/awstats/
mv awstats.model.conf common.conf
修改common.conf文件,加入
LoadPlugin=”decodeutfkeys”
LoadPlugin=”geoip GEOIP_STANDARD /usr/local/apache/cgi-bin/awstats/GeoIP.dat”
LoadPlugin=”geoip_city_maxmind GEOIP_STANDARD /usr/local/apache/cgi-bin/awstats/GeoLiteCity.dat”
保存退出之后,还在/usr/local/apache/cgi-bin/awstats/目录下
mkdir data
vi awstats.pl
修改里面的内容
$LIMITFLUSH =
50000; # Nb of records in data arrays after how we need to flush data on disk
保存退出
新建你网站的配置文件
vi awstats.domainname.conf
加入内容
Include “common.conf”
LogFile=”/usr/local/apache/logs/domainname-access_log.%YYYY-24%MM-24%DD-24″
SiteDomain=”domainname”
DefaultFile=”index.html”
DirData=”/usr/local/apache/cgi-bin/awstats/data/”
保存退出
执行
./awstats.pl -update -config=domainname -lang=cn
就可以生成domainname的分析报表,通过http://domainname/cgi-bin/awstats/awstats.pl?config=domainname就要可以在web上查看了
需要每日生成的话,写一个crontab的脚本在每天凌晨执行就可以了
二月
11在Linux下如果某个文件夹下的文件非常多,用rm会报参数错误,不能删除,用下面的方法就可以删除了
find /your/full/path -type f -iname “*.*” -exec rm -rf {} \;