登录 |

shorewall限速

2011年08月28日 下午 57:49 | 作者:

根据规则控制分配优先级/带宽占用。

  1. tcdevices 设备总带宽
    #INTERFACE      IN-BANDWIDTH    OUT-BANDWIDTH
    #eth1为外网访问接口,常用的还有ppp0这样的拨号连接
    eth1            4mbit           4mbit
  2. tcrules 规则
    #MARK   SOURCE          DESTINATION     PROTOCOL        PORT(S) SOURCE PORT(S)
    # MARK就是编号,设定规则source:port -> dest:port
    1       0.0.0.0/0       0.0.0.0/0       tcp             22
    1       0.0.0.0/0       0.0.0.0/0       udp             22
    2       0.0.0.0/0       0.0.0.0/0       tcp             53
    2       0.0.0.0/0       0.0.0.0/0       udp             53
    3       0.0.0.0/0       0.0.0.0/0       tcp             110
    3       0.0.0.0/0       0.0.0.0/0       udp             110
    4       0.0.0.0/0       0.0.0.0/0       tcp             80,443
  3. tcclasses 设置优先级/带宽
    #INTERFACE      MARK    RATE    CEIL            PRIORITY        OPTIONS
    #tcclasses针对tcrules里面对应的MARK,设定优先级Priority,带宽(最小RATE->最大CEIL)
    #full代表总带宽,full/2就是一半,full*50/100也是一半,可以用表达式,RATE初始带宽应该不高于100% full。
    eth1            1       2*full/100      full    1
    eth1            2       20*full/100     full    2
    eth1            3       10*full/100     full    3
    eth1            4       64*full/100     full    4
    eth1            5       4*full/100      full    5               default

参考文献:

http://www.shorewall.net/traffic_shaping.htm

http://www.shorewall.net/traffic_shaping.htm#perIP 每ip限速

http://wiki.nginx.org/NginxHttpCoreModule#limit_rate  Nginx 每个连接限速

http://www.ckollars.org/shaping.html

eth1            0mbit           3mbit

用u盘装ubuntu?Failed to determine codename for release

2011年08月26日 下午 03:41 | 作者:

2010年12月20日, 3:09:56

月黑风高的晚上,回学校重装服务器,历经9×9=81难,先是机房被锁,请开锁师傅花了50大洋,然后又遇到服务器光驱坏了,用1G小u盘刻录ubuntu.iso安装,然后遇到了“Failed to determine codename for release”君,战了一通宵;今天清理桌面,把安装要点笔记加注释:

  1. 先用ultraiso以hdd+模式刻录iso到u盘
  2. 删除pool文件夹(如果你u盘大,也可以不删除,主要是为了第3步留出空间)
  3. 再把iso拷贝到u盘根目录
  4. 从u盘启动
  5. 安装过程中,会报错“Failed to determine codename for release”!解决办法就是把iso重新挂载到光驱:
    1. alt+f2  切换到cmd模式
    2. 检查当前设备名 ls /dev/sd*,以下假设u盘挂载后的设备名为sdb1
    3. 挂载iso到光驱设备:
      1. mkdir /mnt/sdb1
      2. mount /dev/sdb1 /mnt/sdb1
      3. mount -o loop -t iso9660 /mnt/sdb1/ubuntu-10.04-server-amd64.iso /cdrom
  6. alt+f1返回安装界面
  7. 选择”Load Installer Components from an ISO Image”
  8. The end.

webgrind支持dot生成流程图了!

2011年08月20日 下午 27:41 | 作者:

webgrind已经更换到github了,https://github.com/jokkedk/webgrind

终于更新了一下下,

* Generate a call graph using gprof2dot.py // 使用gprof2dot.py生产流程图

安装dot

sudo apt-get install graphviz

配置dot路径

vim config.php

static $dotExecutable = ‘/usr/local/bin/dot’;

static $dotExecutable = ‘/usr/bin/dot’;

查看流程图

 

btw,xhprof的web_gui早就支持dot了。

https://github.com/facebook/xhprof

http://mirror.facebook.net/facebook/xhprof/doc.html

shorewall转发

2011年08月18日 下午 49:46 | 作者:

REDIRECT

用途:本机端口转发,不能转发到别的机器上(需要NAT地址转换);

SOURCE:PORT(S)  ==PROTO==> DEST:PORT(S)

源域:端口             ==协议==>    目的域:端口

DEST PORT列,在转发(REDIRECT)行为时,其实指的是SOUCE PORT。

—-

#ACTION  SOURCE DEST                PROTO DEST    SOURCE  ORIGINAL
#                                         PORT    PORT(S) DEST

# $FW:80/443 转发到 $FW:3128,不指定DEST的interface就使用SOURCE的!
REDIRECT $FW    3128                tcp   http,https

# net:80/443 转发到 net:3128
REDIRECT net    3128                tcp   www

# net:80/443 转发到 $FW:3128,注意用::port
REDIRECT net    $FW::3128           tcp   www

# net:80/443 随机转发到 $FW::81-90端口
REDIRECT net    $FW::81-90:random   tcp   www
---

DNAT

用途:同样是端口转发,能转发到别的机器上;

启用IP转发

vim /etc/sysctl.conf

net.ipv4.ip_forward=1

sysctl -p

—-

#ACTION SOURCE DEST               PROTO  DEST      SOURCE  ORIGINAL RATE
#                                        PORT      PORT(S) DEST     LIMIT

# net:22/80 转发到 loc:192.168.1.3:22/80,不指定DESC PORT默认同SOURCE PORT
DNAT    net    loc:192.168.1.3    tcp    ssh,http 

# net:80/443 转发到 loc:192.168.1.3:22/80,限速:3秒最多10个burst
DNAT    net    loc:192.168.1.3    tcp    http      -       -        3/sec:10  

# 只转发net域来自130.252.100.69的80端口请求到192.168.1.3:80
DNAT    net    loc:192.168.1.3    tcp    80        -       130.252.100.69

# 转发net:2222请求到192.168.1.3:22
DNAT    net    loc:192.168.1.3:22 tcp 2222
---

参考文档:http://www.shorewall.net/manpages/shorewall-rules.html

 

 

MySQL:查询IN(1,9,3)按输入的id号顺序(1,9,3)输出

2011年08月11日 下午 31:47 | 作者:

如果使用in查询的话,输出的结果是重新排序的,而不按输入的id顺序输出的

1、可以使用FIND_IN_SET建立一个排序列

2、自己构建一个顺序id表,左连接IN查询结果集

3、使用UNION

onofish

2011年08月10日 上午 34:51 | 作者:

安装软件

apt-get install memcached redis-server php5-fpm php5-cli php5-memcache shorewall-common shorewall-shell

创建帐号

 

安装最新版本redis

http://redis.io/download

$ wget http://redis.googlecode.com/files/redis-2.2.12.tar.gz
$ tar xzf redis-2.2.12.tar.gz
$ cd redis-2.2.12
$ make
$ make install

flash-policy认证hack

networking.c的readQueryFromClient函数内加入:

if ( nread == 23 && strcmp(c->querybuf,”<policy-file-request/>”) == 0 ) {
redisLog(REDIS_VERBOSE, “policy-file-request”);
addReplyString(c, “<?xml version=\”1.0\”?><!DOCTYPE cross-domain-policy SYSTEM \”http://www.adobe.com/xml/dtds/cross-domain-policy.dtd\”><cross-domain-policy><allow-access-from domain=\”*\” to-ports=\”*\” /></cross-domain-policy>\0″,203);
c->flags |= REDIS_CLOSE_AFTER_REPLY;
resetClient(c);
return;
}

#此行之前
processInputBuffer(c);

修改启动脚本

sudo vim /etc/init.d/redis-server

DAEMON=/usr/local/bin/redis-server

sudo vim /etc/redis/redis-server

#bind 127.0.0.1 监听所有端口

配置sharewall防火墙

sudo cp /usr/share/doc/shorewall-common/examples/one-interface/* /etc/shorewall/

设置843/443端口映射

vim /etc/sharewall/rules

ACCEPT      net     $FW     tcp     ssh,http,https,843
REDIRECT    net     6379    tcp   https,843

设置开机自启动

vim /etc/default/shorewall

startup=1

php-redis扩展

https://github.com/nicolasff/phpredis

phpize

./configure

make

make install

安装mysql

优化配置

[mysqld]

# character-set
skip-character-set-client-handshake
init-connect =’SET NAMES utf8′
default-character-set = utf8
#
# * Fine Tuning
#
key_buffer = 1M
max_allowed_packet = 16M
thread_stack = 1M
thread_cache_size = 16
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover = BACKUP
max_connections = 1024
thread_concurrency = 16

table_cache = 1024
table_open_cache = 1024
table_definition_cache = 1024
max_heap_table_size = 128M
tmp_table_size = 512M
#
# * Query Cache Configuration
#
query_cache_limit = 16M
query_cache_size = 512M
query_cache_min_res_unit = 1k
#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_log_buffer_size = 4M
innodb_flush_log_at_trx_commit = 2
innodb_thread_concurrency = 8
innodb_flush_method = O_DIRECT

创建数据库/账户/密码

onofish/onofish/)n)fish

导入sql

mysql < onofish.sql

修改hosts

vim /etc/hosts

127.0.0.1 db.onofish

删除innodb日志文件

修改了默认innodb_log_file_size文件大小,需要删除ib_logfile,mysql重启时自动重建新的ib_logfile,否则会导致:innodb引擎无法启动

rm /var/lib/mysql/ib_logfile*

php-fpm

sudo cp  /etc/php5/fpm/pool.d/www.conf /etc/php5/fpm/pool.d/onofish.conf

修改fastcgi进程池名称+端口

vim /etc/php5/fpm/pool.d/onofish.conf

[onofish]

listen = 127.0.0.1:9001

php-libevent

sudo apt-get install libevent-dev

sudo pecl install libevent-0.0.4

vim /etc/php5/cli/php.ini

enable_dl = On

自动运行

crontab -e

0 * * * * echo ‘update usr set money=1000 where money<10’ | /usr/bin/mysql -uonofish -p”)n)fish” onofish

* * * * * flock -xn /tmp/fish.world.lock -c ‘cd ~/onofish/trunk/redtamarin/src && /usr/bin/php FishServer.php 25’
* * * * * flock -xn /tmp/fish.boom.lock -c ‘cd ~/onofish/trunk/redtamarin/src && /usr/bin/php FishBoom.php’
* * * * * flock -xn /tmp/fish.online.lock -c ‘cd ~/onofish/trunk/redtamarin/src && /usr/bin/php FishOnline.php’