| Subcribe via RSS

Firefox Download Day

5月 29th, 2008 | 1 Comment | Posted in 生活随笔 < by Johnny Woo >

update:2008-06-03
Download Day 2008
Firefox3就快到来了
而Firefox的市场推广准备将这一天申报吉尼斯纪录
作为一直等待ff3的用户
我也希望这一天能够早点到来

越来越近咯
FF3的RC2版本最近也泄出了.
ftp://ftp.mozilla.org/pub/firefox/nightly/2008-05-29-08-firefox3.0rc2-l10n/firefox-3.0.zh-CN.win32.installer.exe
正式RC2将会在6月6日发布
而MOZILLA的开发组内部会议讨论
正式版将会在6月的第二周发布

阅读内文

Windows下ramdisk

5月 29th, 2008 | No Comments | Posted in 应用软件 < by Johnny Woo >

也有类似的产品叫做Ramdisk
但是这个产品一是收费
二是不支持windows2003
下面这个软件解决了这两个问题
而且运行稳定
对于内存大到不知道该用来干嘛的
可以用它来保存一些常用的数据
但是注意不要把重要数据放在里面
否则一关机你就完蛋了.
ramdisk

阅读内文

从盖茨退出而引出的软件开发模式的变化

5月 28th, 2008 | No Comments | Posted in 团队管理 < by Johnny Woo >

互联网不光具有传统的网络效应,而且它是分布式的,是以节点为中心的。
对应的商业模式和技术路线,必然导向个性化、定制化。这就是WEB2.0的特点。
微软已经改不过来了,因为工业化生产方式的烙印,已经从盖茨到整个团队,深深嵌入了。
其一,它是一个以生产者为中心的公司,它只能有限地以消费者为中心,而不可能象谷歌那样,从生产方式本身上就是以消费者为中心的;
其二,以生产者为中心,必须导致集中计算模式的技术路线。微软现在还在坚持操作系统升级的思路,沿着惯性在发展,而这种技术路线,与搜索引擎、P2P等格格不入;
其三,集中到操作系统进行计算的模式,已经产生了一种大型化的利益模式,如WINTEL联盟这样的利益模式,这种模式不可承受生命中个性化之轻,没有几十亿的利益,根本不值得为之启动什么正经项目。

这段话阐明了WEB 2.0时代的软件业格局的变化
以及今后软件公司需要应对的局面
如果还停留在生产者的状态
并且无法对用户的需求做出及时反应
则软件供应商很容易被用户抛弃
近几年的开发模型的变化,例如极限编程等等的崛起
以及表现出高速开发的重要性了.
在面向普通用户市场时
BUG已经显得不是非常重要了.只要能够及时修复即可
网游以及网站程序的开发模式
已经能够为很多用户所接受
而一成不变的软件,除非用于专业领域
否则将越来越赶不上这个时代的趟.
人们几乎无法接受一个3个月都没有更新的软件
而开源软件的开发模式
也是对应了这个时代的需求
快发布,快更新,快响应
软件测试人员的工作
也将慢慢转由最终用户来做.
原来的一部分软件测试人员
将升级成为DEBUG程序员.

阅读内文

项目拯救之道

5月 28th, 2008 | 2 Comments | Posted in 团队管理 < by Johnny Woo >

项目失败的原因:
1.对项目的现状没有清晰的了解,都是估计或者猜测
2.对于项目状况过度乐观
3.无法控制项目的进度情况
4.项目定义过于潦草,没有清晰的项目目标
5.项目先期预估存在重大偏差

项目拯救步骤:
1.暂停项目
2.评估项目现状
3.重组项目团队
4.重设项目目标
5.设置项目监控
6.重启项目

项目拯救必须条件:
1.高层的绝对支持和明确表态
2.合格的评估者,评估者的专业水平以及客观性影响拯救结果
3.制定完整计划并且严格遵守,防止启动后的拯救计划同项目原先一样延期.

阅读内文

linux sysctl.conf中相关重要设定的详细说明

5月 26th, 2008 | 1 Comment | Posted in Linux < by Michael Field >

  net.ipv4.tcp_syncookies = 1
表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
  net.ipv4.tcp_tw_reuse = 1
表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
  net.ipv4.tcp_tw_recycle = 1
表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
  net.ipv4.tcp_fin_timeout = 30
表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
  net.ipv4.tcp_keepalive_time = 1200
表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
  net.ipv4.ip_local_port_range = 1024 ? ?65000
表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
  net.ipv4.tcp_max_syn_backlog = 8192
表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
  net.ipv4.tcp_max_tw_buckets = 5000
表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。

陆续整理添加中

阅读内文

实例Discuz BBS站:nginx+php(FastCGI)+memcache+discuz+Zend安装文档

5月 26th, 2008 | 3 Comments | Posted in Nginx < by Michael Field >

所有源代码安装打包下载地址:nginx_php_source.zip

二进制包下载地址:nginx-php-fullbin-centos4(直接解压在linux根目录下, 所有完成编译后的文件在/nginx目录中)

一、安装PHP 5.2.5(FastCGI模式)
1、编译安装PHP 5.2.5所需的支持库:(libiconv/freetype2/libpng/jpeg-6b/libxml/libmcrypt/gb/Zend/)

tar zxvf libiconv-1.11.tar.gz
cd libiconv-1.11/
./configure –prefix=/nginx/libiconv
make
make install
cd ../

tar zxvf freetype-2.3.5.tar.gz
cd freetype-2.3.5/
./configure –prefix=/nginx/freetype2
make
make install
cd ../

tar zxvf libpng-1.2.20.tar.gz
cd libpng-1.2.20/
./configure –prefix=/nginx/libpng
make
make install
cd ../

tar zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b/
./configure –enable-static –enable-shared –prefix=/nginx/jpeg-6b
make
make install
make install-lib
cd ../
tar zxvf libxml2-2.6.30.tar.gz
cd libxml2-2.6.30/
./configure –prefix=/nginx/libxml
make
make install
cd ../

tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8/
./configure –prefix=/nginx/libmcrypt
make
make install
/sbin/ldconfig
cd libltdl/
./configure –enable-ltdl-install –prefix=/nginx/libmcrypt/libltdl
make
make install
cd ../../

tar zxvf mhash-0.9.9.tar.gz
cd mhash-0.9.9/
./configure –prefix=/nginx/mhash
make
make install
cd ../

cp /nginx/libmcrypt.* /usr/lib
ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2

tar zxvf mcrypt-2.6.6.tar.gz
cd mcrypt-2.6.6/
./configure –prefix=/nginx/mcrypt
make
make install
cd ../

tar zxvf gd-2.0.35.tar.gz
cd gd-2.0.35
./configure –prefix=/nginx/gd2 –with-jpeg=/nginx/jpeg-6b –with-png=/nginx/libpng –with-zlib=/nginx/zlib –with-freetype=/nginx/freetype2
make
make install
cd ../

2、mysql5.1安装
tar zxvf mysql-5.1.23-rc-linux-i686-glibc23.tar.gz
mv mysql-5.1.23-rc-linux-i686-glibc23 /nginx/mysql
cd /nginx/mysql
groupadd mysql
useradd -g mysql mysql -s /sbin/nologin
chown mysql:root . -R
chown mysql:mysql data -R
scripts/mysql_install_db –user=mysql
cp support-files/my-medium.cnf /etc/my.cnf
bin/mysqld_safe –user=mysql &

cp /nginx/mysql/lib/libmysqlclient* /usr/lib/

以上支持库安装完毕后

3、编译安装PHP5.2.5
tar zxvf php-5.2.5.tar.gz
cd php-5.2.5
./configure –prefix=/nginx/php –with-config-file-path=/nginx/php/etc –with-mysql=/nginx/mysql/ –with-iconv-dir=/nginx/libiconv –with-freetype-dir=/nginx/freetype2 –with-jpeg-dir=/nginx/jpeg-6b –with-png-dir=/nginx/libpng –with-zlib-dir=/nginx/zlib –with-libxml-dir=/nginx/libxml –with-gd=/nginx/gd2 –enable-xml –disable-debug –disable-rpath –enable-discard-path –enable-bcmath –enable-shmop –enable-sysvsem –enable-inline-optimization –with-curl –with-curlwrappers –enable-mbregex –enable-fastcgi –enable-force-cgi-redirect –enable-mbstring –with-mcrypt=/nginx/libmcrypt –enable-zend-multibyte –enable-sockets –enable-maintainer-zts –enable-inline-optimization
make
make install
cp php.ini-dist /nginx/php/etc/php.ini

二、安装PHP扩展模块
[memcache]
tar zxvf memcache-2.2.1.tgz
cd memcache-2.2.1/
/nginx/php/bin/phpize
./configure –with-php-config=/nginx/php/bin/php-config –prefix=/nginx/memcache/ –with-zlib-dir=/nginx/zlib/
make
make install
cd ../

[ZendOptimizer]
tar zxvf ZendOptimizer-3.3.0a-linux-glibc21-i386.tar.gz
cd ZendOptimizer-3.3.0a-linux-glibc21-i386
./install.sh
文字图形界面-同意安装协议-选择Zend安装目录-选择php.ini所在目录-不使用apache web server-installing-finished

修改php.ini
vi /nginx/php/etc/php.ini
修改如下:
extension_dir = “/nginx/php/lib/php/extensions/no-debug-zts-20060613″
并增加一条记录:
extension=”memcache.so”
保存退出

三、增加用户nginx和组/发布主目录/创建nginx日志目录
groupadd nginx -g 88
useradd -u 88 -g nginx nginx -s /sbin/nologin
mkdir /nginx/htdocs
chmod +w /nginx/htdocs/
chown nginx:nginx /nginx/htdocs/ -R
mkdir /var/log/nginx
chown nginx:nginx /var/log/nginx -R
chmod +w /var/log/nginx

四、设定fast-cgi
将lighttpd编译后的spawn-fcgi,复制到php/bin目录中,用以启动php-cgi。
tar zxvf lighttpd-1.4.13.tar.gz
cd lighttpd-1.4.13
./configure –prefix=/opt/lighttpd/
make
make install
cp /opt/lighttpd/bin/spawn-fcgi /nginx/php/bin
chmod +x /nginx/php/bin/spawn-fcgi

启动php-cgi进程,监听127.0.0.1的10080端口,进程数为64(如果服务器内存小于4GB,最好只开启25个进程),用户为nginx:
/nginx/php/bin/spawn-fcgi -a 127.0.0.1 -p 10080 -C 64 -u nginx -f /nginx/php/bin/php-cgi
注:本次安装启动后发生如下问题:(这里总结一个问题的发生原因;)
spawn-fcgi.c.215: child signaled: 11
(启动时发生故障,结果为mamcache的php模块路径设定出错,导致php工作异常,无法启动php-cgi)
修正php.ini中的extensions_dirs参数后故障修复;

注:安装成功后php -m模块组显示如下:
[PHP Modules]
bcmath
ctype
curl
date
dom
filter
gd
hash
iconv
json
libxml
mbstring
mcrypt
memcache
mysql
pcre
PDO
pdo_sqlite
posix
Reflection
session
shmop
SimpleXML
sockets
SPL
SQLite
standard
sysvsem
tokenizer
xml
xmlreader
xmlwriter
Zend Optimizer
zlib

[Zend Modules]
Zend Extension Manager
Zend Optimizer

五、安装和设定Nginx 0.6.31
tar zxvf nginx-0.6.31.tar.gz
cd nginx-0.6.31
./configure –user=nginx –group=nginx –prefix=/nginx –with-http_stub_status_module
make
make install

创建nginx配置文件(实例bbs站配置,供参考)
cp /nginx/conf/nginx.conf /nginx/conf/nginx.conf.bak
vi /nginx/conf/nginx.conf

下载: nginx.conf
user? nginx nginx;
worker_processes 10;

error_log? /var/log/nginx/nginx_error.log? crit;
pid??????? /var/log/nginx/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;

events
{
????? use epoll;
????? worker_connections 51200;
}

http
{
????? include?????? mime.types;
????? default_type? application/octet-stream;
????? charset? gb2312;?????
????? server_names_hash_bucket_size 128;
?????
????? #sendfile on;
????? #tcp_nopush???? on;

????? keepalive_timeout 60;
????? tcp_nodelay on;

????? gzip on;
????? gzip_min_length? 1k;
????? gzip_buffers???? 4 8k;
????? gzip_http_version 1.1;
????? gzip_types?????? text/plain application/x-javascript text/css text/html application/xml;

????? server
????? {
????????????? listen?????? 80;
????????????? server_name? bbs.xxxxx.com;
????????????? index index.html index.htm index.php;
????????????? root? /nginx/htdocs/new/;
????????????? error_page 404 http://www.xxxxx.com/error.html;
????????????? error_page 500 http://www.xxxxx.com/error.html;

????????????? if (-d $request_filename)
????????????? {
?????????????????? rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
????????????? }
????????????????????????????
????????????? location ~ .*\.php?$
????????????? {
?????????????????? include fast-cgi.conf;?????
?????????????????? fastcgi_pass? 127.0.0.1:10080;
?????????????????? fastcgi_index index.php;
????????????? }

#????????????? location /log/ #alias设定
#????????????? {
#????????????????? alias /var/log/nginx/;
#????????????????? index err.html;
#????????????? }

????????????? log_format? access? '$remote_addr - $remote_user [$time_local] "$request" '
????????????????????????????????? '$status $body_bytes_sent "$http_referer" '
????????????????????????????????? '"$http_user_agent" $http_x_forwarded_for';
????????????? access_log /var/log/nginx/nginx_access.log access;
????? }
}

设定fast-cgi.conf可参考nginx的conf目录下的fastcgi_params文档
vi /nginx/conf/fast-cgi.conf

fastcgi_param? GATEWAY_INTERFACE? CGI/1.1;
fastcgi_param? SERVER_SOFTWARE??? nginx;

fastcgi_param? QUERY_STRING?????? $query_string;
fastcgi_param? REQUEST_METHOD???? $request_method;
fastcgi_param? CONTENT_TYPE?????? $content_type;
fastcgi_param? CONTENT_LENGTH???? $content_length;

fastcgi_param? SCRIPT_FILENAME??? $document_root$fastcgi_script_name;
fastcgi_param? SCRIPT_NAME??????? $fastcgi_script_name;
fastcgi_param? REQUEST_URI??????? $request_uri;
fastcgi_param? DOCUMENT_URI?????? $document_uri;
fastcgi_param? DOCUMENT_ROOT????? $document_root;
fastcgi_param? SERVER_PROTOCOL??? $server_protocol;

fastcgi_param? REMOTE_ADDR??????? $remote_addr;
fastcgi_param? REMOTE_PORT??????? $remote_port;
fastcgi_param? SERVER_ADDR??????? $server_addr;
fastcgi_param? SERVER_PORT??????? $server_port;
fastcgi_param? SERVER_NAME??????? $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
# fastcgi_param? REDIRECT_STATUS??? 200;

六、设定自动启动脚本及系统优化
将以下语句写入开机自动启动脚本rc.local中:(内存4G以下的请设定php-cgi进程数25 就是以下的-C参数)
ulimit -SHn 51200
/nginx/php/bin/spawn-fcgi -a 127.0.0.1 -p 10080 -C 64 -u nobody -f /nginx/php/bin/php-cgi #启动fast-cgi
/nginx/sbin/nginx -c /nginx/conf/nginx.conf #启动nginx

相关内核参数优化写入/etc/sysctrl.conf
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 5000??? 65000

执行 /sbin/sysctl -p生效

阅读内文

发现一个不错的JS框架-jQuery

5月 25th, 2008 | No Comments | Posted in JavaScript < by Johnny Woo >

其实不是很喜欢框架性的东西
恰巧这个框架
其实算是个封装的SDK吧
jQuery其实是很早就出来的东西
但是最近稍微看了一下
它能满足可用性的要求
EXT JS的东西数据都从json来
所以不能满足可用性的要求
万一JS不能执行
就完全挂了
而jQuery的官方首页的一个例子
渐变显示文字
即便是JS不能运行.也可以访问到隐藏的文字

而在slickspeed的测试中
ext js在IE下进行的测试
有些项目是返回error的
而jQuery在FF和IE下均没有ERROR出现
说明浏览器兼容性比较好

再有一点
jQuery非常的小
压缩以后的大小在20k以内
这和EXT JS压缩后也有近500k简直天壤之别
轻型小型的js框架是我一直想要找到的

当然没有一个框架是十全十美的
即便是现在比较热的jQuery也有其不足的方面
不过就大方向来说
他比较适合我当前的选择条件
类似的轻小型JS框架
应该也是今后前端JS的发展方向(ppk也认为胖客户端的JS没有发展前途)

阅读内文

nginx0.6.31+php(fast-cgi)5.2.5+discuz试运行上线

5月 25th, 2008 | 3 Comments | Posted in Nginx, 网站架构 < by Michael Field >

之前看了网上关于nginx的介绍,倍受鼓舞和感召,决定在公司的论坛进行一下尝试和试运行,以实际结果来验证网上所公布的数据是否真的那么神奇和有效率;

周五用了一天的时间,进行了nginx+php架构的编译和部署工作;(稍后公布编译文档和相关软件包二进制包下载)

实测结果并不像网上描述的那样有效率,不过在高并发的情况下,nginx却是再有一定的优势,但领先的性能优势也只是在10%左右而已;系统资源的占用较apache稍低。(测试数据待公布)

在测试中发现为更好的配合nginx和discuz的工作方式,在fast-cgi开启在24个线程的时候处理的速度是最快的任务是最多的,且占用的系统资源也是最为合理的,并非与内存多少或者是越多越好。但彼此性能的差距并不明显。

实际运行服务器配置:

CPU:Xeon 2.8×2
Mem:4G
Harddisk:73G×2 (Raid1)

使用webbench压力测试工具:
测试服务器二台:分别使用apache和nginx

根据现有运营环境的5台web架构为 1台nginx+4台apache;实际运行结果还需要继续观察;

?

阅读内文

对网站架构进行建议-YSlow

5月 24th, 2008 | 2 Comments | Posted in FireFox < by Johnny Woo >

一看名字就知道又是Yahoo的作品
这是一个Firebug的插件
可以自动对访问的网站结果进行分析
然后给出相应的优化建议
对于自己没法进行大量测试又想优化网站的
比较有指导意义
http://developer.yahoo.com/yslow/
由此看来
FireFox越来越成为网站开发者不可或缺的平台了

阅读内文

教育领导的问题

5月 24th, 2008 | 1 Comment | Posted in 团队管理 < by Johnny Woo >

在很多情况下
指挥一线工作者的人(一般是主管层以上)
往往不会拥有更多的专业知识
相反
越高层的领导.专业知识越薄弱
但是最终决策者
却是他们
如何教育领导
让他们按照专业的思考方法去思考问题
就是所有摆在一线工作人员面前的问题了.
这种情况下.建议不要和他们谈理论.用一些实际来说明
比如进行一次可用性测试
当领导发现实际用户完全不是按照他们的想法来评论他们的理念的时候.
他们才会知道自己的意见并非那么好.

阅读内文

周六高中同学会

5月 23rd, 2008 | 4 Comments | Posted in 生活随笔 < by Johnny Woo >

update:2008-05-25
周六下午2点 唐韵茶坊(衡山路店) 地址: 徐汇区衡山路199号(高安路乌鲁木齐路间)
人正好凑齐了打大怪路子
呵呵.再次证明了新手狗运理论
最新手的人.往往牌运最好.所以说老天还是公平的
让我牌大的没话说.

八卦了很多同学.
也不知道他们在家里会不会打喷嚏呢.
表怪我们哦…
因为都是在金山这个小圈子
所以聊来聊去.都是些认识的人
感觉世界真小呢..

晚上说说笑笑.很快的就聊到了10点
时间真的是很快.8小时一晃眼就过去了
就好像一晃眼间.我们都快有10年没见了
曾经的少年郎
如今也都成家立业,成了这个社会的中流砥柱了.

人虽然不多,但是一样很快乐.
从没有聊的这么开心了.
在那8个小时内.身上的那些压力忽然全然不见了.
仿佛回到了当年少儿郎时那种纯真和与世无争.

阅读内文

VSFTP开放PASV模式

5月 22nd, 2008 | No Comments | Posted in Linux < by Johnny Woo >

port_enable=YES
pasv_min_port=port number
pasv_max_port=port number

阅读内文

MySQL Proxy读写分离实战

5月 21st, 2008 | 11 Comments | Posted in MySQL < by Johnny Woo >

先使用一台作为读写,一台作为只读

mysql-proxy --proxy-address=192.168.210.133:3306 --proxy-read-only-backend-addresses=192.168.210.132:3306 --proxy-backend-addresses=192.168.210.131:3306 --proxy-lua-script=/usr/local/share/mysql-proxy/rw-splitting.lua > /var/log/mysql-proxy/mysql-proxy.log &

现在使用一台作为读写.两台作为只读

mysql-proxy --proxy-address=192.168.210.133:3306 --proxy-read-only-backend-addresses=192.168.210.131:3306 --proxy-read-only-backend-addresses=192.168.210.132:3306 --proxy-backend-addresses=192.168.210.134:3306 --proxy-lua-script=/usr/local/share/mysql-proxy/rw-splitting.lua > /var/log/mysql-proxy/mysql-proxy.log &

总结
1.同一个IP不同的session的情况下,Proxy将算作一个client,也就是每个IP是一个CLIENT.而不是实际连接数.
2.控制触发读写分离的参数位于 /usr/local/share/mysql-proxy/rw-splitting.lua 脚本min_idle_connections.当客户端的连接数超过此值时,Proxy的读写分离开始执行.(max_idle_connections参数暂时实验出来没有特殊作用)
3.–proxy-read-only-backend-addresses可以增加多条.但是测试始终是连接到第一条增加的服务器上.不会产生自动分发请求的效果.

阅读内文

8w同时连接数的DISCUZ论坛结构改进

5月 21st, 2008 | 4 Comments | Posted in 网站架构 < by Johnny Woo >

魔力游的论坛达到8w同时连接数
原有的架构已经无法满足如此巨大的访问请求
原有结构
原有结构
前端使用F5进行负载均衡
将负载分摊至4台WEB SERVER
然后WEB SERVER同时连接后端的MYSQL服务器
瓶颈很明显在于MYSQL服务器

第1次改进
使用LVS和NFS进行MYSQL负载分摊
增加两台WEB SERVER
由于WEB的CPU负载也非常高.所以增加WEBserver的量来分摊CPU LOAD.
在后端使用LVS分发读写请求到后面的两台MYSQL服务器
然后MYSQL的表数据从同一的集中存储中获取
这次改进的问题很明显
锁表
由于MYSQL在执行写操作时会进行锁表
所以运行没多久,MYSQL的库文件就损坏了

第2次改进
改进后的结构
接下来我们考虑过使用NDB作为存储后端代替NFS
但是由于数据库量太大
在进行数据导入时,超出内存
无法将原有的数据库导入到NDB中
所以我们只能使用Mysql proxy + master/slave的方式
进行读写分离
以求分摊负载
由于没有时间进行discuz的程序段的改造
所以只能使用对程序透明的mysql proxy方式进行负载分摊
这次改进的缺点在于对于只读服务器的分摊仍旧是在配置里手工写的
而不能通过程序来进行自动分发.

第3次改进
LVS+PROXY
由于考虑到服务器的自动维护性
以及服务器数量的限制
我们把LVS加在两台read only的mysql服务器上
加上heat beat之后.任何一个只读节点的故障都不会影响
今后如果扩展mysql的IO能力
只要在mysql机群内加入新的mysql slave服务器
加入LVS之后便可以了

阅读内文

VBS:Windows指定系统服务自动重启(多台)

5月 21st, 2008 | No Comments | Posted in VBS < by John.Lv >
下载: reset.vbs
'指定系统服务名称
servicename=chr(39)&amp;"系统服务名称"&amp;chr(39)
'指定日期
mydate=now
? my_day = day(mydate)
? my_month = month(mydate)
? my_year=year(mydate)
my_date = my_year &amp;? my_month &amp; my_day
'指定分区(系统第二的磁盘分区)
Set fso = CreateObject("Scripting.FileSystemObject")?
if fso.DriveExists("d:\")="True" then
getfso=fso.GetDrive("d:")
else
getfso=fso.GetDrive("e:")
end if
'指定log目录
if fso.folderExists(getfso&amp;"\log")=Flase then
fso.CreateFolder(getfso&amp;"\log")
end if
'log文件名
if fso.fileExists(getfso&amp;"\log\service_"&amp;my_date&amp;".log")=Flase then
fso.CreateTextFile(getfso&amp;"\log\service_"&amp;my_date&amp;".log")
set objNF=fso.OpenTextFile(getfso&amp;"\log\service_"&amp;my_date&amp;".log",8)
else
set objNF=fso.OpenTextFile(getfso&amp;"\log\service_"&amp;my_date&amp;".log",8)
end if
'判断hosts列表是否存在
if fso.fileExists("hosts")=Flase then
msgbox "无法读取服务器列表"
wscript.quit
end if
Const ForReading = 1
'读取Serverlist like linux /etc/hosts
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("hosts", ForReading)
set objlocator=createobject("wbemscripting.swbemlocator")
Do Until objFile.AtEndOfStream
strLine= objFile.ReadLine
'定义#不读取和ip以192.开始的
? If left(strLine,1)&lt;&gt;"#" and left(strLine,4)="192." Then
? strComputer=strLine
? objNF.writeline "server:"&amp;ComputerName&amp;" ip:"&amp;strComputer&amp;"? starttime:"&amp;now
? objNF.writeline ""

'关闭Services
Set objWMIService = objlocator.connectserver(strComputer ,"root\cimv2")
Set colListOfServices1 = objWMIService.ExecQuery _
("Select * from Win32_Service Where? State = 'Running' and Name = "&amp;servicename)
For Each objService1 in colListOfServices1
objService1.StopService()
Next
'开启Services
Set colListOfServices = objWMIService.ExecQuery _
("Select * from Win32_Service Where? State &lt;&gt; 'Running' and Name = "&amp;servicename)
For Each objService in colListOfServices
objService.ChangeStartMode "Automatic" 'Manual,Automatic,Disabled
objService.StartService()
Next
end if
Loop

objFile.Close
objNF.close
msgbox "Services Restart Complete"
阅读内文

mysql proxy 编译安装文档 by CentOS up

5月 21st, 2008 | No Comments | Posted in MySQL < by Michael Field >

完整mysql-proxy 0.6.1 二进制包下载:(包含lua5.1、glib2.7.7、libevent1.4、check0.9.3)

mysql-proxy 0.6.1?

请直接解压在根目录下:

tar zxvf mysqlproxy-0.6.1-fullbin-centos4-lua-x86-scripts-32bit.tar.gz -C /

其中/root/mysql-proxy 为启动脚本,请自行修改其中的IP地址。

以下内容是该二进制档的编译过程,供参考:

mysql-proxy install relation tar ball in the CentOS4.4 system:
glib >= 2.6, libevent, libcheck, lua
if the system already has those pkg, no need to install them any more, but on my?CentOS4/RHEL4 box I have to install them all.

1
glib >= 2.7.7
get it from http://www.gtk.org/ (Note: newer version need newer pkg-config 0.15)
here is a short instuction to install glib 2.7.7
./configure –prefix=/opt/glib27
make
make install

2
libevent 1.x or higher (1.4.1 or later is preferred)
you can get lib event from http://monkey.org/~provos/libevent/
./configure –prefix=/opt/libevent
make
make install

3 check
get the lib from http://check.sourceforge.net/
check 0.9.3 successed in CentOS 4.4
./configure –prefix=/opt/check
make
make install

4
lua 5.1.x or higher
“lua” can be found @ http://www.lua.org/
and the latest version of lua is Lua 5.1.3
here is a short instruction to install lua
a) update the Make file change line “INSTALL_TOP= /usr/local” to “INSTALL_TOP= /opt/lua”
b) then “make linux” (you can just type make to get a list of supported platform)
c) “make install”

5
mysql 5.1.23 client version is enough
get the?source ball?from http://www.mysql.com/
tar zxvf mysql-5.1.23-rc-linux-i686-glibc23.tar.gz
ln -s mysql-5.1.23-rc-linux-i686-glibc23 mysql
cd mysql
groupadd mysql
useradd -g mysql mysql -s /sbin/nologin
chown mysql:root . -R
chown mysql:mysql data -R
scripts/mysql_install_db –user=mysql

6
mysql-proxy 0.6.1 the latest version
export LUA_CFLAGS=”-I/usr/local/include”
export LUA_LIBS=”-L/usr/local/lib -llua -ldl”
export LDFLAGS=”-lm”
export GLIB_CFLAGS=”-I/opt/glib27/include/glib-2.0 -I/opt/glib27/lib/glib-2.0/include”
export GLIB_LIBS=”-L/opt/glib27/lib -lglib-2.0″
export CPPFLAGS=”$CPPFLAGS -I/opt/libevent/include”
export CFLAGS=”$CFLAGS -I/opt/libevent/include”
export LDFLAGS=”$LDFLAGS -L/opt/libevent/lib -lm”
./configure –prefix=/usr/local/mysql-proxy –with-mysql=/usr/local/mysql –with-check=/opt/check

7
running
cp /usr/local/mysql-proxy/sbin/mysql-proxy /usr/sbin/
help command:
mysql-proxy –help-all
configure run:
mysql-proxy \
–proxy-backend-addresses=192.168.3.91:3306 \
–proxy-backend-addresses=192.168.3.92:3306
Note that the default port number of the proxy server is 4040
so you can connect to the proxy server the port 4040

8
testing
mysql -uroot -h 192.168.3.99 -P 4040 -p123456

9
For example, mysql Write/Read splitting configure running:
LUA_PATH=”/usr/local/mysql-proxy/share/mysql-proxy/?.lua” \
/usr/sbin/mysql-proxy \
–proxy-address=127.0.0.1:3306 \
–proxy-backend-addresses=192.168.3.91:3306 \
–proxy-read-only-backend-addresses=192.168.3.92:3306 \
–proxy-lua-script=/usr/local/mysql-proxy/share/mysql-proxy/rw-splitting.lua > /var/log/mysql-proxy.log &

具体实施过程请参看blog内其他文档。

相关技术交流请发邮件或msn

field2000@msn.com

阅读内文

欢迎Field加入

5月 21st, 2008 | 2 Comments | Posted in 生活随笔 < by Johnny Woo >

本来只是一个个人BLOG
也曾想过邀请更多的人加入来共同组建一个资源共享的BLOG
正好Field最近在CentOS 4.4上去实作MySQL Proxy
由于资料共享的缘故
就正好将他一起拉进来
今后这个BLOG将是多人BLOG了.
希望能有更多的人进来

阅读内文

FireFox 3.0 rc1的Web Developer组件无法安装问题

5月 20th, 2008 | 1 Comment | Posted in FireFox < by Johnny Woo >

MOZILLA官方网站上的WEB DEVELOPER组件无法通过安全检测
但是Web Developer官方网站的组件可以之间安装
http://chrispederick.com/work/web-developer/
直接下载组件并且安装即可

2008-05-20:
Web Developer已经更新到1.1.6
已经解决了RC1从官方无法正常安装的BUG了
而FIREBUG
可以从FIREBUG的官方页面,去安装1.1 BETA

阅读内文

为5.12地震死难者默哀

5月 19th, 2008 | 2 Comments | Posted in 生活随笔 < by Johnny Woo >

每当我打开一个网站
看到黑白的LOGO
心中便有一阵的酸楚
那些曾经鲜活的生命
像这些曾经斑斓的LOGO一般
失去了灿烂的色彩
纪念逝去者最好的方法
便是记录下些什么
我无法赶去灾区
但是在网上,仍旧可以感受到这一份悲痛
保存下这些LOGO
也是一种纪念
让我们永远记住这一天
有无数人离去的这一天
在数年之后
当我们再看到这些图标的时候
能回忆起这份沉重

逝去的人们
愿你们在天国里幸福!!!

阅读内文

AJAX由于PHP.INI配置问题导致XMLHTTP对象出错

5月 19th, 2008 | No Comments | Posted in JavaScript, PHP < by Johnny Woo >

在IE下报错
系统错误:-1072896658
跟踪到JS下面应该是创建XMLHttpResponse之后调用出错
原因是在PHP.INI下
default_charset=”utf8″
使用了这个配置后便会出错.
改为正确的utf-8后
问题解决.

阅读内文