Freebsd解决ARP欺骗问题

1.不安装软件的方法。
首先要重启,确保你拿到的网关地址是正确的。
步骤如下:

ifconfig

显示类似如下内容

bge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=1b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING>
inet 192.168.0.5 netmask 0xffffffc0 broadcast 192.168.0.1
ether 00:17:08:2a:13:88
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
plip0: flags=108810<POINTOPOINT,SIMPLEX,MULTICAST,NEEDSGIANT> mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet 127.0.0.1 netmask 0xff000000

我们把网关的信息存到一个文件里。

echo 192.168.0.1 00:17:08:2a:13:88 > /etc/ipmac

接着使用crontab -e编辑系统定时排程(计划任务)让它按照设定时间循环执行

*/5 * * * * /usr/sbin/arp -f /etc/ipmac

这样就每5分钟更新一次网关MAC地址,保证正确。 Continue reading

一个自动检测服务器网络状态的脚本

最近服务器总是莫明奇妙的网络不通。我在上一篇文章里写了一个自动检测网卡状态的脚本:http://blog.haohtml.com/archives/11827.但发现服务器仍然出现此问题.但服务器内部运行正常.这里基本可以确认是与外网不通的原因.就写了一个脚本,用来检测网络状态,在不通的情况就重启服务器了.此解决办法相当的变态.最好不要使用.

1.创建新文件 /data/check_net_status.sh,内容如下

#!/bin/bash
if [ $# -ne 1 ]
then
echo 'ip address not defined!'
exit
fi

ip=$1
log_file="$(date +%Y%m%d).log"

ret=`ping -c 10 $ip | grep ttl  | wc -l`
if [ $ret -lt 2 ]; then
echo "$(date +%H:%M:%S) ===== reboot" >> $log_file
shutdown -r now
fi

添加执行权限

chmod +x /data/check_net_status.sh

2.创建定时检测shell脚本,实现5分钟自动检查是否与网关的连接状态,如果不通,则自动重启本服务器.

编辑/etc/crontab文件在现有行 */2 * * * * root /data/check_net.sh > /dev/null 后面新添加一行

*/5 * * * * root /data/check_net_status.sh 61.158.162.1 > /dev/null 2>&1

 

php客户端memcached的安装教程

我们在上篇文章里(http://blog.haohtml.com/archives/6051)介绍了LNMP的安装方法.只安装了memcache客户端.有些用户可能需要memcached这种客户端的.这里介绍一种php客户端memcached的安装方法.

之前在安装memcache时有提到memcached客户端是叫memcache,其实还有一个基于libmemcached的客户端叫memcached,据说性能更好,功能也更多。参考:http://blog.haohtml.com/archives/392

memcache的官方主页:http://pecl.php.net/package/memcache
memcached的官方主页:http://pecl.php.net/package/memcached

以下是我安装Memcached版本的PHP模块的过程记录: Continue reading

MySQL 数据库性能优化之缓存参数优化[转载]

在平时被问及最多的问题就是关于 MySQL 数据库性能优化方面的问题,所以最近打算写一个MySQL数据库性能优化方面的系列文章,希望对初中级 MySQL DBA 以及其他对 MySQL 性能优化感兴趣的朋友们有所帮助。

这是本系列的第一篇文章:MySQL 数据库性能优化之缓存参数优化

数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作。而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级。所以,要优化数据库,首先第一步需要优化的就是 IO,尽可能将磁盘IO转化为内存IO。本文先从 MySQL 数据库IO相关参数(缓存参数)的角度来看看可以通过哪些参数进行IO优化

  • query_cache_size/query_cache_type (global)

Query cache 作用于整个 MySQL Instance,主要用来缓存 MySQL 中的 ResultSet,也就是一条SQL语句执行的结果集,所以仅仅只能针对select语句。当我们打开了 Query Cache 功能,MySQL在接受到一条select语句的请求后,如果该语句满足Query Cache的要求(未显式说明不允许使用Query Cache,或者已经显式申明需要使用Query Cache),MySQL 会直接根据预先设定好的HASH算法将接受到的select语句以字符串方式进行hash,然后到Query Cache 中直接查找是否已经缓存。也就是说,如果已经在缓存中,该select请求就会直接将数据返回,从而省略了后面所有的步骤(如 SQL语句的解析,优化器优化以及向存储引擎请求数据等),极大的提高性能。 Continue reading

FreeBSD下自动检查网卡状态并自动启用网卡

#/bin/bash

log_file=`date +%Y%m%d`
log_file=$log_file".log"
check_date=`date +%H:%M:%S`
#status=`ifconfig bge0 | grep status | awk '{print $2}'`
status=`ifconfig bge0 | awk '/status/{print $2}'`

if [ $status != 'active' ]; then
        status='down'
        ifconfig bge0 up
else
        echo 'ok'
fi

check_date=${check_date}" =========== "${status}
echo $check_date >> $log_file

另一处写法,其实一样的:

#!/bin/bash
log_file="$(date +%Y%m%d).log"

status=$(ifconfig bge0 | awk '/status/{print $2}')
if [ "X${status}" != "Xactive" ]; then
  ifconfig bge0 up
fi

echo "$(date +%H:%M:%S) ===== ${status}" >> $log_file

dd 命令用来测试硬盘读写速度(转)

dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

1. 命令简介

dd 的主要选项:
指定数字的地方若以下列字符结尾乘以相应的数字:
b=512, c=1, k=1024, w=2, xm=number m

if=file
输入文件名,缺省为标准输入。

of=file
输出文件名,缺省为标准输出。

ibs=bytes
一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。

obs=bytes
一次写 bytes 个字节(即一个块大小为 bytes 个字节)。 Continue reading

FreeBSD/Linux检测硬盘坏道

Linux检测硬盘坏道

badblocks

功能说明:检查磁盘装置中损坏的区块。

语法:badblocks [-svw][-b ][-o ][磁盘装置][磁盘区块数][启始区块]

补充说明:执行指令时须指定所要检查的磁盘装置,及此装置的磁盘区块数。

参数:

-b 指定磁盘的区块大小,单位为字节。

-o 将检查的结果写入指定的输出文件。

-s 在检查时显示进度。

-v 执行时显示详细的信息。

-w 在检查时,执行写入测试。

[磁盘装置] 指定要检查的磁盘装置。

[磁盘区块数] 指定磁盘装置的区块总数。

[启始区块] 指定要从哪个区块开始检查。

badblocks 检测磁盘坏块

1)$badblocks -s //显示进度 -v //显示执行详细情况 /dev/sda1

2)读写方式检测 未挂载的磁盘设备或分区

$badblocks -s //显示进度 -w //以写去检测 -v //显示执行详细情况 /dev/sda2

========================= Continue reading

FreeBSD下的fsck命令

对文件系统进行检查,并对损害的文件系统进行修复。
fsck的语法如下:
fsck (-F fstype) (-v) (-m) (-special…)
fsck (-F fstype) (-v) (-y|Y|n|N)
(-o fstype options) (special…)
其中:
-F fstype : 说明被检查的文件系统的类型
-v : 返回完成的命令行,但不运行
-y|Y: 对所有问题均回答Yes
-n|N: 对所有问题均回答No
-m: 对文件系统进行检查,不修复文件系统,
如果文件系统经检查后是可安装的,则显示
ufs fsck : sanity check : /dev/rdsk/c0t0d0s0 okay.
-o: 文件系统类型选项,选项由逗号分隔,  Continue reading

遍历memcache中的key和value

什么是memcache

memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的网站采用。目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。

为什么要遍历

目前,用到memcache的公司和网站也越来越多。Memcache的客户端操作一般都只提供了get,set等简单的操作,这些操作都是非常高效的。   虽然memcache是个key-value存储的系统,但是在某些时候,我们可能需要遍历memcache的数据。
通过使用memcache 内置方法Memcache::getExtendedStats,首先获得items信息。

最后得到的解决类似与

<php
$memcache = new Memcache();
$all_items = $memcache->getExtendedStats('items');
var_export($all_items);
?>

其中$all_items中的key“192.168.0.110:11211” 就是memcache的host和port。
Continue reading

memcache的addServer的故障转移机制

如果有多台memcached服务器端(当然其他支持memcache协议的服务前端都可以,比如Tokyo Tyrant),最好使用$memcache->addServer 来连接服务前端。

连接示例:

$mem_conf = array(
    array('host'=>'192.168.0.11', 'port'=>'11211'),
    array('host'=>'192.168.0.12', 'port'=>'11211'),
    array('host'=>'192.168.0.13', 'port'=>'11211')
);

$memcache = new Memcache ( );
foreach ( $mem_conf as $v ) {
    $memcache->addServer ( $v ['host'], $v ['port'] );
}

使用$memcache->addServer 而不是 $memcache->connect 去连接 Memcached 服务器,是因为当 Memcache 客户端使用 addServer 服务器池时,是根据“crc32(key) % current_server_num”哈希算法将 key 哈希到不同的服务器的,PHP、C 和 python 的客户端都是如此的算法。

如:

$mem = new Memcache;
$mem->addServer('192.168.0.71', 11211);
$mem->addServer('192.168.0.72', 11211);
$mem->addServer('192.168.0.73', 11211);
for($i=0; $i < 100; $i++)
	$mem->set('key'.$i, md5($i).'This is a memcached test!', 0, 60);
}

然后我们通过memadmin工具可以看到上面的key被分布存储在这三台Memcached上了(根据算法自动计算).

Memcache 客户端的 addserver 具有故障转移机制,当 addserver 了2台 Memcached 服务器,而其中1台宕机了,那么 current_server_num 会由原先的2变成1。(2011-10-11个人测试的时候发现无法实现此功能,第二台Memcached不可用的时候,会造成正常要保存到这台server的数据会丢失的现象)

引用 memcached 官方网站和 PHP 手册中的两段话:
引用
http://www.danga.com/memcached/
If a host goes down, the API re-maps that dead host's requests onto the servers that are available.

http://cn.php.net/manual/zh/function.Memcache-addServer.php
Failover may occur at any stage in any of the methods, as long as other servers are available the request the user won't notice. Any kind of socket or Memcached server level errors (except out-of-memory) may trigger the failover. Normal client errors such as adding an existing key will not trigger a failover.

二、repcached实现memcached的复制功能

repcached是日本人开发的实现memcached复制功能,它是一个单 master单 slave的方案,但它的 master/slave都是可读写的,而且可以相互同步,如果 master坏掉, slave侦测到连接断了,它会自动 listen而成为 master;而如果 slave坏掉, master也会侦测到连接断,它就会重新 listen等待新的 slave加入

安装:先安装memcached(我安装的1.2.8)

有两种方式:

方式一、下载对应的repcached版本

#wget http://downloads.sourceforge.net/repcached/memcached-1.2.8-repcached-2.2.tar.gz
#tar zxf memcached-1.2.8-repcached-2.2.tar.gz
#cd memcached-1.2.8-repcached-2.2

方式二、下载对应patch版本

#wget http://downloads.sourceforge.net/repcached/repcached-2.2-1.2.8.patch.gz
#gzip -cd ../repcached-2.2-1.2.8.patch.gz | patch -p1
#./configure --enable-replication
# make
# make install

启动:

启动master

#memcached -v -l 192.168.50.240 -p 11211 -u root
replication: listen (master监听)启动salve
#memcached -v -l 192.168.50.241 -p 11213 -u root -x 127.0.0.1 -X 11212
replication: connect (peer=192.168.50.240:11212)
replication: marugoto copying
replication: start启动正常后,master将accept。

测试:

操作master

#telnet 192.168.50.240 11211
#set key1 0 0 3

111查看slave

#telnet 192.168.50.241 11213
#get key1如果正常表示,配置成功应用:

可以实现cache冗余注意:如果master down机,slave接管并成为master,这时down机的master只能启用slave,他们之间互换角色,才能保持复制功能。换句话说,master没有抢占功能。

相关教程:

Memcache基础教程:http://blog.haohtml.com/archives/8986