按月归档: 9月 2013

NGINX userid 分析、解码

生成userid的代码在 http/modules/ngx_http_userid_filter_module.c 大概550行左右。
uid_set 是4个uint32构成的,其中比较有用的是第二个unit32,是userid的生成时间。第四个是一个递增值 以 0x03030302 为初始值,每次递增0x100。

default: /* AF_INET */
                sin = (struct sockaddr_in *) c->local_sockaddr;
                ctx->uid_set[0] = sin->sin_addr.s_addr;
                break;
            }

        } else {
            ctx->uid_set[0] = htonl(conf->service);
        }

        ctx->uid_set[1] = htonl((uint32_t) ngx_time());
        ctx->uid_set[2] = htonl(start_value);
        ctx->uid_set[3] = htonl(sequencer_v2);
        sequencer_v2 += 0x100;
        if (sequencer_v2 < 0x03030302) {
            sequencer_v2 = 0x03030302;
        }
// 用PHP解码nginx userid
$str = $_REQUEST["uid"] ?: $_COOKIE['uid'];

function nginx_userid_decode($str)
{
        return  unpack('N*', base64_decode(str_replace(' ', '+', $str)));
}

$hash = nginx_userid_decode($str);
var_dump($hash);
date_default_timezone_set("UTC");
var_dump(date("Y-m-d H:i:s", $hash[2]));

参考文章:
http://www.lsproc.com/blog/nginx_userid_decode/

Read: 2836

CentOS Linux 6 NFS 配置

yum install nfs nfs-utils rpcbind
service rpcbind start
chckonfig rpcbind on

cat "/shared_dir 192.168.1.200(rw,async,all_squash,anonuid=500,anongid=500)" > /etc/exports
參數 參數功能 預設參數
fg
bg
當執行掛載時,該掛載的行為會在前景 (fg) 還是在背景 (bg) 執行? 若在前景執行時,則 mount 會持續嘗試掛載,直到成功或 time out 為止,若為背景執行, 則 mount 會在背景持續多次進行 mount ,而不會影響到前景的程序操作。 如果你的網路連線有點不穩定,或是伺服器常常需要開關機,那建議使用 bg 比較妥當。 fg
soft
hard
如果是 hard 的情況,則當兩者之間有任何一部主機離線,則 RPC 會持續的呼叫,直到對方恢復連線為止。如果是 soft 的話,那 RPC 會在 time out 後『重複』呼叫,而非『持續』呼叫, 因此系統的延遲會比較不這麼明顯。同上,如果你的伺服器可能開開關關,建議用 soft 喔! hard
intr 當你使用上頭提到的 hard 方式掛載時,若加上 intr 這個參數, 則當 RPC 持續呼叫中,該次的呼叫是可以被中斷的 (interrupted)。 沒有
rsize
wsize
讀出(rsize)與寫入(wsize)的區塊大小 (block size)。 這個設定值可以影響用戶端與伺服器端傳輸資料的緩衝記憶容量。一般來說, 如果在區域網路內 (LAN) ,並且用戶端與伺服器端都具有足夠的記憶體,那這個值可以設定大一點, 比如說 32768 (bytes) 等,提升緩衝記憶區塊將可提升 NFS 檔案系統的傳輸能力! 但要注意設定的值也不要太大,最好是達到網路能夠傳輸的最大值為限。 rsize=1024
wsize=1024
mount -t nfs -o bg,soft,rsize=32768,wsize=32768 192.168.1.100:/shared_dir /mount_point

Mac系统下挂载NFS有一点特别,需要加几个参数
不加resvport在mac下会挂载不了,不加nolockd的话给文件加锁的时候会提示nfs server lockd not responding

mount -t nfs -o resvport,rw,nolockd 192.168.1.100:/www /www

Read: 163

强大的 轻量级 Linux服务器监控系统 Monitorix

Monitorix 是一个开源的、轻量的 Linux/Unix 服务器监控工具。安装配置简单,图表功能丰富。

官方网站:http://www.monitorix.org

安装方法:

# perl-HTTP-Server-Simple 需要从EPEL安装
rpm -ivh http://mirrors.yun-idc.com/epel/6/x86_64/epel-release-6-8.noarch.rpm

# 安装依赖
yum install rrdtool rrdtool-perl perl-libwww-perl perl-MailTools perl-MIME-Lite perl-CGI perl-DBI perl-XML-Simple perl-Config-General perl-HTTP-Server-Simple

# 安装Monitorix
yum install monitorix

# 启动服务
service monitorix start

博主最近要监控一台线上服务器,用cacti又嫌太麻烦,在看了《比cacti更好的linux单机监控——Monitorix的安装与配置》 之后决定采用Monitorix。

在使用的过程中博主发现一个问题,当刷新报表页面的时候会有一个进程 netstat -nl –tcp 消耗掉大量的CPU,而且报表页面载入非常的慢。根据分析 Network port traffic (port.rrd),和 Nginx statistics (nginx.rrd) 两个脚本都会执行这个命令,而且不止一次。通过google搜索,我找到了解决方案——采用ss替代netstat命令。

修改方法:

在/usr/lib/monitorix 下面找到nginx.pm和port.pm,修改其中执行netstat 命令的部分替换为ss即可。

关于ss的介绍在这里:《篡权的ss》

如果需要监控温度、电压情况需要安装lm_sensors,可以通过yum安装。安装lm_sensors之后还要运行sensors-detect来检测生成/etc/sysconfig/lm_sensors文件。

Read: 2683