MFS的使用情况可以用mfscgiserv启动webserver查看,很详细的。
但是如果系统的python版本过低,启动是正常,可是受访后,就挂掉了。
这个可以让程序放置在前台运行:
受访后挂掉,这个是2.3.4的python,会有 NameError: global name 'set' is not defined 的错误。
可以升级到新的python,安装到新的目录即可:
即可成功解决!
但是如果系统的python版本过低,启动是正常,可是受访后,就挂掉了。
这个可以让程序放置在前台运行:
[root@60 sbin]# /Data/apps/mfs/sbin/mfscgiserv -f
starting simple cgi server (host: any , port: 9425 , rootpath: /Data/apps/mfs/share/mfscgi)
Asynchronous HTTP server running on port 9425
Traceback (most recent call last):
File "/Data/apps/mfs/sbin/mfscgiserv", line 419, in ?
loop(server,HTTP)
File "/Data/apps/mfs/sbin/mfscgiserv", line 153, in loop
w = set(w) & set(client_handlers.keys()) # remove deleted sockets
NameError: global name 'set' is not defined
starting simple cgi server (host: any , port: 9425 , rootpath: /Data/apps/mfs/share/mfscgi)
Asynchronous HTTP server running on port 9425
Traceback (most recent call last):
File "/Data/apps/mfs/sbin/mfscgiserv", line 419, in ?
loop(server,HTTP)
File "/Data/apps/mfs/sbin/mfscgiserv", line 153, in loop
w = set(w) & set(client_handlers.keys()) # remove deleted sockets
NameError: global name 'set' is not defined
受访后挂掉,这个是2.3.4的python,会有 NameError: global name 'set' is not defined 的错误。
可以升级到新的python,安装到新的目录即可:
wget http://www.python.org/ftp/python/2.6.4/Python-2.6.4.tgz
tar xfz Python-2.6.4.tgz
cd Python-2.6.4
./configure --prefix=/Data/apps/python
make && make install
/Data/apps/python/bin/python /Data/apps/mfs/sbin/mfscgiserv
tar xfz Python-2.6.4.tgz
cd Python-2.6.4
./configure --prefix=/Data/apps/python
make && make install
/Data/apps/python/bin/python /Data/apps/mfs/sbin/mfscgiserv
即可成功解决!
在虚拟机上对MFS进行测试了一下,方案值得考虑,不过速度可能有点限制。
此笔记记录一些碰到的问题:
1 速度的比较,小文件倒有很大优势的,大文件可能有速度问题
(虚拟机不可靠,仅参考一下,具体数据请看后面资料最后一条,里面有测试数据)
A 实际机器的读写速度
B 虚拟机(vmvare)的读写速度
C 虚拟机组建的MFS
2 fuse的安装,建议用2.7版本的
2.8的在编译时没有fuse.ko内核文件,2.7版本的可以
3 安装时默认支持mfsmount,但需要fuse支持
编译时如果看到这个,就没有办法作为client了
不妨使用yum更新,yum install fuse*
安装前面的fuse也许有帮助?待确认。。
4 必须有1G以上的空余才能写入文件
这个问题挺让人纳闷的,开始的时候为了方便,建立了一个tmpfs作为存储空间,才256M
但一直都无法写入文件,但能够写入文件名称,让人郁闷的
此笔记记录一些碰到的问题:
1 速度的比较,小文件倒有很大优势的,大文件可能有速度问题
(虚拟机不可靠,仅参考一下,具体数据请看后面资料最后一条,里面有测试数据)
A 实际机器的读写速度
[root@gx tmp]# dd if=/dev/zero of=tmp bs=10M count=50
50+0 records in
50+0 records out
524288000 bytes (524 MB) copied, 3.36305 seconds, 156 MB/s
50+0 records in
50+0 records out
524288000 bytes (524 MB) copied, 3.36305 seconds, 156 MB/s
B 虚拟机(vmvare)的读写速度
[root@aslibra Data]# dd if=/dev/zero of=tmp bs=10M count=50
50+0 records in
50+0 records out
524288000 bytes (524 MB) copied, 9.32125 seconds, 56.2 MB/s
50+0 records in
50+0 records out
524288000 bytes (524 MB) copied, 9.32125 seconds, 56.2 MB/s
C 虚拟机组建的MFS
[root@aslibra mfs]# dd if=/dev/zero of=tmp bs=100M count=5
3+0 records in
3+0 records out
314572800 bytes (315 MB) copied, 57.9101 seconds, 5.4 MB/s
3+0 records in
3+0 records out
314572800 bytes (315 MB) copied, 57.9101 seconds, 5.4 MB/s
2 fuse的安装,建议用2.7版本的
2.8的在编译时没有fuse.ko内核文件,2.7版本的可以
wget http://sourceforge.net/projects/fuse/files/fuse-2.X/2.7.5/fuse-2.7.5.tar.gz/download
tar xfz fuse-2.7.5.tar.gz
cd fuse-2.7.5
./configure && make && make install
tar xfz fuse-2.7.5.tar.gz
cd fuse-2.7.5
./configure && make && make install
3 安装时默认支持mfsmount,但需要fuse支持
编译时如果看到这个,就没有办法作为client了
******************************** mfsmount disabled ********************************
* fuse library is too old or not installed - mfsmount needs version 2.6 or higher *
***********************************************************************************
* fuse library is too old or not installed - mfsmount needs version 2.6 or higher *
***********************************************************************************
不妨使用yum更新,yum install fuse*
安装前面的fuse也许有帮助?待确认。。
4 必须有1G以上的空余才能写入文件
这个问题挺让人纳闷的,开始的时候为了方便,建立了一个tmpfs作为存储空间,才256M
但一直都无法写入文件,但能够写入文件名称,让人郁闷的
keepalived可以保证虚拟IP的稳定性,虽然在使用,但没有很详细的了解,试图通过测试能够避免一些未知问题。现在发现的问题是IP接管被奇怪的转移,还有待考察。。。
硬件环境:
两个机器 192.168.1.44(MASTER) 192.168.1.38(BACKUP)
虚拟IP 192.168.1.69
配置(44):
38的配置:
修改 state MASTER 为 state BACKUP
priority 改为 100
web服务器(首页内容要不同)启动后,启动keepalived,开始测试。
查看IP的方式:
也就是现在69的ip是在44的机器上监听着:
[root@aslibra ~]# curl http://192.168.1.69/
44
我们做个脚本,看看切换过程都有哪些问题:
硬件环境:
两个机器 192.168.1.44(MASTER) 192.168.1.38(BACKUP)
虚拟IP 192.168.1.69
配置(44):
[root@localhost ~]# cat /etc/keepalived/keepalived.conf
#! Configuratio File for keepalived
vrrp_script chk_nginx_port {
script "</dev/tcp/127.0.0.1/80" # connects and exits
interval 1 # check every second
weight -20 # default prio: -20 if connect fails
}
global_defs {
notification_email {
root
}
notification_email_from root
smtp_server localhost
smtp_connect_timeout 30
router_id local128
}
vrrp_instance VI_m1 {
state MASTER #主服务器配置
interface eth0 #网卡0
virtual_router_id 110 #router_id 一定要一致
priority 110 #主从征用的权重 主服务器一定要大于从服务器
advert_int 1 #一秒检查一次
authentication { #认证的密码
auth_type PASS
auth_pass WeMoshLzy
}
virtual_ipaddress {
192.168.1.69 label eth0:1 #要切换的ip
}
track_script {
chk_nginx_port # 检查的脚本
}
}
#! Configuratio File for keepalived
vrrp_script chk_nginx_port {
script "</dev/tcp/127.0.0.1/80" # connects and exits
interval 1 # check every second
weight -20 # default prio: -20 if connect fails
}
global_defs {
notification_email {
root
}
notification_email_from root
smtp_server localhost
smtp_connect_timeout 30
router_id local128
}
vrrp_instance VI_m1 {
state MASTER #主服务器配置
interface eth0 #网卡0
virtual_router_id 110 #router_id 一定要一致
priority 110 #主从征用的权重 主服务器一定要大于从服务器
advert_int 1 #一秒检查一次
authentication { #认证的密码
auth_type PASS
auth_pass WeMoshLzy
}
virtual_ipaddress {
192.168.1.69 label eth0:1 #要切换的ip
}
track_script {
chk_nginx_port # 检查的脚本
}
}
38的配置:
修改 state MASTER 为 state BACKUP
priority 改为 100
web服务器(首页内容要不同)启动后,启动keepalived,开始测试。
查看IP的方式:
[root@localhost ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:5d:e9:7b brd ff:ff:ff:ff:ff:ff
inet 192.168.1.44/24 brd 192.168.1.255 scope global eth0
[color=#FF0000]inet 192.168.1.69/32 scope global eth0:1[/color]
inet6 fe80::20c:29ff:fe5d:e97b/64 scope link
valid_lft forever preferred_lft forever
3: sit0: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:5d:e9:7b brd ff:ff:ff:ff:ff:ff
inet 192.168.1.44/24 brd 192.168.1.255 scope global eth0
[color=#FF0000]inet 192.168.1.69/32 scope global eth0:1[/color]
inet6 fe80::20c:29ff:fe5d:e97b/64 scope link
valid_lft forever preferred_lft forever
3: sit0: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
也就是现在69的ip是在44的机器上监听着:
[root@aslibra ~]# curl http://192.168.1.69/
44
我们做个脚本,看看切换过程都有哪些问题:
这篇文章差不多是十年前写的,但也还是可以读一读的。
1 硬盘分区的讲究,其实之前没有这么想
1 硬盘分区的讲究,其实之前没有这么想
引用
2.1 优化的分区
在安装Linux系统之初,就应该考虑怎样使linux系统得到最好的性能。在Linux系统中,我们可以自由地组织磁盘分区。一个优化的分区策略,可以很好地改进Linux系统的性能,减少磁盘碎片,提高磁盘I/O能力。
根据磁盘的特点,我们知道越是靠磁盘外部的柱面,旋转越快,而且每次旋转时,磁盘读写头可以覆盖较多的区域,也就意味着靠外部的柱面可以得到较好的性能。所以在分区时,我们应该考虑将访问频率高的,对系统性能影响相对较大的分区置于磁盘的靠外部分。同时,为了减少磁盘碎片,应将内容经常改变的目录放在单独的分区。从方便备份数据的角度考虑,因为很多备份工具对整个分区进行备份的效率要高,所以我们应将Linux系统的几个主要的目录作为单独的文件系统,为它们各自分配一个区。推荐的分区策略如图一:

在安装Linux系统之初,就应该考虑怎样使linux系统得到最好的性能。在Linux系统中,我们可以自由地组织磁盘分区。一个优化的分区策略,可以很好地改进Linux系统的性能,减少磁盘碎片,提高磁盘I/O能力。
根据磁盘的特点,我们知道越是靠磁盘外部的柱面,旋转越快,而且每次旋转时,磁盘读写头可以覆盖较多的区域,也就意味着靠外部的柱面可以得到较好的性能。所以在分区时,我们应该考虑将访问频率高的,对系统性能影响相对较大的分区置于磁盘的靠外部分。同时,为了减少磁盘碎片,应将内容经常改变的目录放在单独的分区。从方便备份数据的角度考虑,因为很多备份工具对整个分区进行备份的效率要高,所以我们应将Linux系统的几个主要的目录作为单独的文件系统,为它们各自分配一个区。推荐的分区策略如图一:

在公网的服务器不免遭到颇有居心的人尝试登录,以便控制机器,如果你没有做防范工作,那就要注意了。
至少,你可以先看看你的服务器是不是遭人喜欢:
你可以得到类似的结果:
密码的强度要注意
事情可能远比你想象的严重,可以想象,被尝试到正确的密码是多么的危险。
将近7万次的尝试,可以尝试很多组合了,但其实也未必那么轻易能够破解密码的,前提是你不要使用简单的字母组合。
简单的计算一下你用四位密码的强度:
如果单纯用小写字母,那有 26^4=456976 个可能
但小写和大写配合呢? 7311616 个可能
如果加上数字和特殊字符,那可能性是 40960000 以上
如果暴力破解,一秒一个,那可能得多久?
126小时 -> 2000小时 -> 10000小时(1年多!)
其实破解密码也没有那么容易吧?但为了安全性,务必使用复杂的密码,长度足够长~
脚本是如何运行的?
回来简单的说一下脚本,分段说明,比较基础的知识:
至少,你可以先看看你的服务器是不是遭人喜欢:
grep "Failed password for root" /var/log/secure | awk '{print $11}' | awk -F ":" '{print $4}' | sort | uniq -c | sort -nr | more
你可以得到类似的结果:
引用
68906 221.232.131.51
20352 218.78.209.253
19364 202.111.128.225
17704 61.138.179.55
15190 211.68.70.24
14166 221.7.58.101
13670 147.231.252.4
9600 210.77.146.53
7850 219.148.34.17
7668 61.152.201.69
7080 212.107.200.32
6878 202.143.142.198
6644 210.51.4.93
6504 202.30.194.186
6378 60.191.93.125
6254 60.195.250.54
6090 58.247.222.202
5806 60.217.229.228
5640 219.141.223.8
5424 218.94.72.125
5358 61.143.178.194
5292 219.150.161.20
5284 221.130.201.21
5252 211.157.98.65
5052 220.182.6.9
5028 211.142.221.204
4760 203.78.66.213
4672 59.120.111.226
4531 88.84.130.52
20352 218.78.209.253
19364 202.111.128.225
17704 61.138.179.55
15190 211.68.70.24
14166 221.7.58.101
13670 147.231.252.4
9600 210.77.146.53
7850 219.148.34.17
7668 61.152.201.69
7080 212.107.200.32
6878 202.143.142.198
6644 210.51.4.93
6504 202.30.194.186
6378 60.191.93.125
6254 60.195.250.54
6090 58.247.222.202
5806 60.217.229.228
5640 219.141.223.8
5424 218.94.72.125
5358 61.143.178.194
5292 219.150.161.20
5284 221.130.201.21
5252 211.157.98.65
5052 220.182.6.9
5028 211.142.221.204
4760 203.78.66.213
4672 59.120.111.226
4531 88.84.130.52
密码的强度要注意
事情可能远比你想象的严重,可以想象,被尝试到正确的密码是多么的危险。
将近7万次的尝试,可以尝试很多组合了,但其实也未必那么轻易能够破解密码的,前提是你不要使用简单的字母组合。
简单的计算一下你用四位密码的强度:
如果单纯用小写字母,那有 26^4=456976 个可能
但小写和大写配合呢? 7311616 个可能
如果加上数字和特殊字符,那可能性是 40960000 以上
如果暴力破解,一秒一个,那可能得多久?
126小时 -> 2000小时 -> 10000小时(1年多!)
其实破解密码也没有那么容易吧?但为了安全性,务必使用复杂的密码,长度足够长~
脚本是如何运行的?
回来简单的说一下脚本,分段说明,比较基础的知识:
grep "Failed password for root" /var/log/secure |
#取出root登录失败的记录
awk '{print $11}' |
#取出ip段(::ffff:189.19.29.21)
awk -F ":" '{print $4}' |
#取得ip(189.19.29.21)
sort |
#排序
uniq -c |
#计算每条记录的出现次数
sort -nr |
#按出现次数排序
more
#取出root登录失败的记录
awk '{print $11}' |
#取出ip段(::ffff:189.19.29.21)
awk -F ":" '{print $4}' |
#取得ip(189.19.29.21)
sort |
#排序
uniq -c |
#计算每条记录的出现次数
sort -nr |
#按出现次数排序
more
shell的编程有时候比较难懂,语法和工具要结合起来用。
我有一个主机和端口的处理,想用shell循环处理,以便以后可以随意增加要处理的内容。
简单的劳工式代码:
如果 do sth 都是一样的代码,那我们可以整理成循环:
上面的代码很好懂。
首先把要处理的内容写成规律的字符串,端口号和ip用冒号分割,然后用空格串接起来。这样我们可以随意添加而不用修改后面重复的代码,维护起来容易。
关键在于用冒号分割的怎么处理,其实就是搭配awk的处理结果就可以了!看代码就懂。
我有一个主机和端口的处理,想用shell循环处理,以便以后可以随意增加要处理的内容。
简单的劳工式代码:
ip=192.168.1.4
port=80
//do sth
ip=192.168.1.4
port=21
//do sth
ip=192.168.1.40
port=3398
//do sth
port=80
//do sth
ip=192.168.1.4
port=21
//do sth
ip=192.168.1.40
port=3398
//do sth
如果 do sth 都是一样的代码,那我们可以整理成循环:
Forwards="192.168.1.4:3389 192.168.1.40:110 192.168.1.40:25"
for forward in $Forwards
do
Forward_Port=`echo $forward | awk -F":" '{print $2}'`
Forward_IP=`echo $forward | awk -F":" '{print $1}'`
echo " Forward $Forward_IP:$Forward_Port"
//do sth
done
for forward in $Forwards
do
Forward_Port=`echo $forward | awk -F":" '{print $2}'`
Forward_IP=`echo $forward | awk -F":" '{print $1}'`
echo " Forward $Forward_IP:$Forward_Port"
//do sth
done
上面的代码很好懂。
首先把要处理的内容写成规律的字符串,端口号和ip用冒号分割,然后用空格串接起来。这样我们可以随意添加而不用修改后面重复的代码,维护起来容易。
关键在于用冒号分割的怎么处理,其实就是搭配awk的处理结果就可以了!看代码就懂。
今天被linux折腾了一天,折磨了我的笔记本和一台本地服务器。
中午的时候兴奋,要按照ubuntu,因为上次安装在分区的文件,挺不好的,这次决定要安装在分区,打算今后经常用一下它,甚至在viturlBox下用xp弥补windows的需求,可是事与愿违。中午抵着肚子安装了ubuntu,买KFC外卖回来看着,安装好了系统,还满心欢喜,不想前面自己选错了安装方式,小子把我的5G空间调整出来了但又没法用,这5G空间可不小了,疯了。。空间太紧张了,想着要把它弄回来。
分区是三个主分区,一个扩展分区。我选择了共同安装两个系统(本应选择在剩余空间的,错了),然后小子自动帮我调整分区,把我的主分区调整少了5G,可又发生错误,这5G就白白丢了。因为四个分区用完了,这个空白的块是用不了的,可以合并到邻近的分区。中间曾经试图想备份临近的主分区,可一共60G,备份到猴年马月呢。然后或者把临近的扩展分区都删了,重新分。。是个方法。
PQmagic安装了,启动时提示出错,该死的东西。
于是乎我犯了个错误,直接把linux分区删了,扩展分区删了,把剩下的分出扩展分区,分一个空间给windows用,准备剩下的给linux。结果重启就进不了系统了。
解决办法:
修改bios的硬盘为兼容模式(T61或者新的机器可能都有这问题),否则后面会发现不了硬盘。插入xp光盘进入修理台修复。
详细参考前面的笔记《直接删除linux分区导致启动失败的解决办法》
其实也还有另外一个解决方法的,这是我后来在redhat4的升级上折磨出来的。
后来两个方式试图安装ubuntu,都没有提示找到windows的系统了,都是选择重新安装,可把我给纳闷死了。
改天折腾死你。。。弄自己的机器不顺心,我又想起一直要升级但没有升级的局域网服务器。redhat4的系统,我要升级为redhat5,因为没有办法用飞信发短信报警。
放光盘进去,选择升级安装,然后就ok了,还挺顺心了。不知道为啥,我发现机箱后面有灰尘,用布拂打了一下,结果发现正在升级安装的系统停止工作了,也不知道今天碰到什么鬼了。没法,等很久也没用,重启,重新升级,还好,可以继续升级。
终于升级完成,却又来了,到“GRUB Loading stage2...” 死掉了。真折腾啊。。
谢天谢地,网上有解决方案:
所言属实,但会提示是否自动找到系统的,像第一种情况,那这个方案也是可以解决的。
1 进入rescue模式
2 自己mount系统目录到某个目录
3 执行chroot到该目录
4 更新grub
chroot是必须的,如果没有执行,那会提示 /sbin/grub 没有找到还是怎么的。
PS:升级后基本没事,就是named启动失败,看日志知道,“couldn't open pid file '/var/named.pid': Permission denied”
修改named chroot的目录下的var目录的权限即可解决。
参考:GRUB Loading stage2 错误解决
中午的时候兴奋,要按照ubuntu,因为上次安装在分区的文件,挺不好的,这次决定要安装在分区,打算今后经常用一下它,甚至在viturlBox下用xp弥补windows的需求,可是事与愿违。中午抵着肚子安装了ubuntu,买KFC外卖回来看着,安装好了系统,还满心欢喜,不想前面自己选错了安装方式,小子把我的5G空间调整出来了但又没法用,这5G空间可不小了,疯了。。空间太紧张了,想着要把它弄回来。
分区是三个主分区,一个扩展分区。我选择了共同安装两个系统(本应选择在剩余空间的,错了),然后小子自动帮我调整分区,把我的主分区调整少了5G,可又发生错误,这5G就白白丢了。因为四个分区用完了,这个空白的块是用不了的,可以合并到邻近的分区。中间曾经试图想备份临近的主分区,可一共60G,备份到猴年马月呢。然后或者把临近的扩展分区都删了,重新分。。是个方法。
PQmagic安装了,启动时提示出错,该死的东西。
于是乎我犯了个错误,直接把linux分区删了,扩展分区删了,把剩下的分出扩展分区,分一个空间给windows用,准备剩下的给linux。结果重启就进不了系统了。
解决办法:
修改bios的硬盘为兼容模式(T61或者新的机器可能都有这问题),否则后面会发现不了硬盘。插入xp光盘进入修理台修复。
详细参考前面的笔记《直接删除linux分区导致启动失败的解决办法》
其实也还有另外一个解决方法的,这是我后来在redhat4的升级上折磨出来的。
后来两个方式试图安装ubuntu,都没有提示找到windows的系统了,都是选择重新安装,可把我给纳闷死了。
改天折腾死你。。。弄自己的机器不顺心,我又想起一直要升级但没有升级的局域网服务器。redhat4的系统,我要升级为redhat5,因为没有办法用飞信发短信报警。
放光盘进去,选择升级安装,然后就ok了,还挺顺心了。不知道为啥,我发现机箱后面有灰尘,用布拂打了一下,结果发现正在升级安装的系统停止工作了,也不知道今天碰到什么鬼了。没法,等很久也没用,重启,重新升级,还好,可以继续升级。
终于升级完成,却又来了,到“GRUB Loading stage2...” 死掉了。真折腾啊。。
谢天谢地,网上有解决方案:
引用
有一次重新引导Redhat AS4 时就出现了:
linux grub loading stage2 ,然后就停在了这个界面上。
解决办法:
放入第一张光盘,重新启动机器,在boot: linux rescue
按F2也可以看到Linux rescue
选择完一些键盘 字符后就进入救援模式
执行:chroot /mnt/sysimage
再执行:grub-install /dev/sda
linux grub loading stage2 ,然后就停在了这个界面上。
解决办法:
放入第一张光盘,重新启动机器,在boot: linux rescue
按F2也可以看到Linux rescue
选择完一些键盘 字符后就进入救援模式
执行:chroot /mnt/sysimage
再执行:grub-install /dev/sda
所言属实,但会提示是否自动找到系统的,像第一种情况,那这个方案也是可以解决的。
1 进入rescue模式
2 自己mount系统目录到某个目录
3 执行chroot到该目录
4 更新grub
chroot是必须的,如果没有执行,那会提示 /sbin/grub 没有找到还是怎么的。
PS:升级后基本没事,就是named启动失败,看日志知道,“couldn't open pid file '/var/named.pid': Permission denied”
修改named chroot的目录下的var目录的权限即可解决。
参考:GRUB Loading stage2 错误解决






