iptables问题小记

ip_conntrack: table full, dropping packet.
ip_conntrack: table full, dropping packet.
ip_conntrack: table full, dropping packet.

修改如下参数:

net.ipv4.netfilter.ip_conntrack_max = 120000
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 300

 

查看iptables跟踪的各个连接数
cat /proc/net/ip_conntrack|awk ‘/^tcp/ {++s[$4]}END{for(a in s)print a,s[a]}’
查看iptables表使用情况
cat /proc/slabinfo|grep conn

 

在有条件的情况下,还是上硬件防火墙吧。开着iptables会影响性能

两个脚本

 监控相应进程,在进程死掉后,将进程重启并发邮件告知管理员

知识点:

多重变量的引用

eval ha=”${${a}}”

下面这样定义变量会出错。。。

php-pm=”/usr/local/php5.3.25/sbin/php-fpm”

小记

一.服务器发送邮件采用轻量级的mutt+msmtp

/etc/Muttrc

……

sendmail=/usr/local/msmtp/bin/msmtp

 

mkdir /usr/local/msmtp/etc

vi /usr/local/msmtp/etc/msmtprc

account default
host smtp.163.com
port 25
fromshijingbo0108@163.com
auth login
tls off
usershijingbo0108@163.com
password XXXXXX
logfile /var/log/msmtp.log

二. lvs+keepalived相关

1. 防火墙设置

iptables -p vrrp -j ACCEPT

2. lvs相关脚本


 

#!/bin/bash
VIP=XXXXXXXXX

/etc/rc.d/init.d/functions
case “$1″ in
start)
    echo ” start tunl port”
    ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP up
    echo “2”>/proc/sys/net/ipv4/conf/all/arp_announce
    echo “1”>/proc/sys/net/ipv4/conf/all/arp_ignore
    echo “2”>/proc/sys/net/ipv4/conf/lo/arp_announce
    echo “1”>/proc/sys/net/ipv4/conf/lo/arp_ignore
    ;;
stop)
    echo ” stop tunl port”
    ifconfig lo:0 down
    echo “0”>/proc/sys/net/ipv4/conf/all/arp_announce
    echo “0”>/proc/sys/net/ipv4/conf/all/arp_ignore
    echo “0”>/proc/sys/net/ipv4/conf/lo/arp_announce
    echo “0”>/proc/sys/net/ipv4/conf/lo/arp_ignore
    ;;

*)
    echo “Usage: $0 {start|stop}”
    exit 1
esac

3.相关架构

两台lvs做双主热备,各自有自己的VIP,当宕机后,VIP移到对方接管

4.

mysql replication小记

有必要新开一个mysql replication分类。在看replication options时。看到一个参数:

–replicate-rewrite-db=from_name->to_name

Command-Line Format –replicate-rewrite-db=old_name->new_name
Option-File Format replicate-rewrite-db
  Permitted Values
Type string

Tells the slave to translate the default database (that is, the one selected by USE) to to_name if it was from_name on the master. Only statements involving tables are affected (not statements such as CREATE DATABASE, DROP DATABASE, and ALTER DATABASE), and only if from_name is the default database on the master. This does not work for cross-database updates. To specify multiple rewrites, use this option multiple times. The server uses the first one with a from_name value that matches. The database name translation is done before the –replicate-* rules are tested.

If you use this option on the command line and the “>” character is special to your command interpreter, quote the option value. For example:

shell> mysqld –replicate-rewrite-db=”olddb->newdb

 

适用情况:

比如,master与slave同步hacker这个库,但因为需要slave需要将hacker改名为hackers,master不能改,就需要这个参数

在my.cnf中加入

binlog-do-db=hacker

replicate-rewrite-db=hacker->hackers
重启mysql,在master的hacker库修改东西,看slave的hackers库是否已经修改。查看show slave status是否正常。

 

总结一下:slave修改库名,master不变的情况下

 

 

题外话:在遇到slave query 同步错误时,可以使用如下方法解决:

slave stop;

set global sql_slave_skip_counter=1;

slave start;

不过有可能会丢失数据。先看清楚是因为什么导致的错误。

mysql问题小记

/usr/local/mysql/bin/mysqld_safe –user=mysql –defaults-file=/etc/my.3307.cnf &

 

看出来上面一条启动mysql的命令有什么问题了吗?问题大了。。。读取不了/etc/my.3307.cnf的配置。。搜了半天需要把–defaults-file放在第一个参数才可以。。我了个去。。

/usr/local/mysql/bin/mysqld_safe –defaults-file=/etc/my.3307.cnf  –user=mysql &

 

由于需要运行不同版本,指定–mysqld不管用。不管用。。不管用。。管用。。用。。

指定–mysqld和–basedir还管点用。。。这个PO东西。。

/usr/local/mysql/bin/mysqld_safe –defaults-file=/etc/my.3307.cnf  –mysqld=/usr/local/mysql/bin/mysqld&

 

uwsgi编译问题

这几边一直在搞python环境的搭建,nginx+uwsgi搭建。。

1.CentOS5.4自带python2.4

2.自己编译python2.7

步骤:

1.未升级python之前编译uwsgi

2.升级python到2.7

问题:

程序总是跑不对,细看了一下,怀疑uwsgi使用的是python2.4而不是python2.7,程序打印出python版本号,果然是2.4,找到问题了,可是我已经升级python到2.7了。为什么uwsgi还是使用的2.4。。

解决方法:

经过苦苦编译N遍python。折腾了半天nginx。。灵光一现。想起是不是需要先升级python再编译uwsgi。uwsgi依赖python库?于是再次编译uwsgi。我了个去。。解决了。。oh my god。。以后一定要注意步骤。步骤。步骤。步。。。骤。。

 

PS:

题外话题:

nginx基于IP的虚拟主机我设置为

server{

      listen      192.168.1.123:80;

       server_name   192.168.1.123;

……………………

}
后果。。所有基于域名的虚拟主机都匹配这个配置了。。。。。。再测试找一下。。

x86_64机器上编译php

在x86_64机器上编译php5.3.5。加上了–with-mysql。出现如下,但是我的mysql,mysql-devel都是安装好的。

checking for MySQL UNIX socket location… no
checking for mysql_close in -lmysqlclient… no
checking for mysql_error in -lmysqlclient… no
configure: error: mysql configure failed. Please check config.log for more information.

 

找不到mysqlclient库。。在/usr/lib64/mysql中有库文件。加下以下参数解决问题:

–with-libdir=/lib64

x86_64机器上需要加以上参数。

php5.3.5 编译bin下没有php-cgi

今天编译了一个最新的php5.3.5,编译参数如下:

./configure –prefix=/usr/local/php5.3.25 –enable-fpm –with-openssl –with-pcre-regex –with-zlib –with-bz2 –with-curl –with-gd –with-gettext –enable-mbstring –with-mcrypt –with-mysql –with-pdo-mysql –enable-zip –with-pear

make

make install

开了php-fpm,运行php-fpm也正常。。nginx在前端访问phpinfo也可以。。但是ps aux|grep php-cgi的时候没有发现php-cgi进程。只有php-fpm进程,纳闷了。。。google后得到结论

以前的版本中需要–enable-fastcgi来开启fastcgi支持,会生成php-cgi文件,而到5.3以后则在内核中支持fastcgi。。解惑了。。

查找死链接

grep ‘(2: No such file or directory)’ error.log.20110311|sed ‘s/”//g’|awk ‘{if($7 ~ /(html|php)$/){if($0 !~ /guolu.xxxx.cn/){if ($0 ~ /refer/ ) print $7″ “$(NF);else print $7}}}’|sort|uniq > /tmp/err_result.log

日志内容如下:

2011/03/11 11:05:47 [error] 5487#0: *46064 open() “/data/www/gamebox/htdocs/game/sounds/frozen_explode.mp3″ failed (2: No such file or directory), client: 222.135.246.133, server: www.xxxx.cn, request: “GET /game/sounds/frozen_explode.mp3 HTTP/1.1″, host: “www.xxxx.cn“, referrer: “http://flash.xxxx.cn/flashcn/162/258/z697351283261850.swf

要求:

1.过滤guolu.xxxx.cn这个站点的错误信息

2.有referrer的话。记录referrer

3.只记录死链接为html和php的页面