阳光部落回国了

阳光部落(http://www.sunbloger.com/)在国外的服务器上漂泊了3年多,如今已回归国内,虽然在回归路上遇到种种艰辛,但还是回来了。希望阿里云不要让我失望,真没精力再搬一次了。

在SVN中进行分支开发的最佳实践

1.在分支上做开发的时候,必须定期使分支与主干同步,避免开发完成后合并(merge)回主干时出现严重冲突(confict)。

2.进行合并前,处理掉工作副本上的所有本地修改,方便合并失败时进行回滚(revert)。

3.进行合并时,特别注意 新增/删除 操作,因为很多冲突都是这类操作引起的。

4.完成一个分支的功能并合并回主干后,抛弃该分支,后续其它功能的开发使用新建的分支。

一个小巧的PHP防注入类

很多 web 开发者没有注意到 SQL 查询是可以被篡改的,因而把 SQL 查询当作可信任的命令。殊不知道,SQL 查询可以绕开访问控制,从而绕过身份验证和权限检查。更有甚者,有可能通过 SQL 查询去运行主机操作系统级的命令。

直接 SQL 命令注入就是攻击者常用的一种创建或修改已有 SQL 语句的技术,从而达到取得隐藏数据,或覆盖关键的值,甚至执行数据库主机操作系统命令的目的。这是通过应用程序取得用户输入并与静态参数组合成 SQL 查询来实现的。下面将会给出一些真实的例子。

由于在缺乏对输入的数据进行验证,并且使用了超级用户或其它有权创建新用户的数据库帐号来连接,攻击者可以在数据库中新建一个超级用户。

下面分享一个用于防注入的PHP类:

阅读更多

MySQL主从(Master-Slave)同步快速部署

Master:192.168.1.1
Slave:192.168.1.2

Master端:

vi /etc/my.cnf

server-id = 1  #master端ID号
binlog-ignore-db = mysql  #不同步mysql库
binlog-ignore-db = test  #同上
binlog-ignore-db = information_schema  #同上

/usr/local/mysql/bin/mysql -uroot -p
mysql>grant replication slave on *.* to slave@’192.168.1.2′ identified by ‘123456’;
mysql>flush privileges;
mysql>flush tables with read lock;  #只读锁表
mysql>show master status;  #获取并记录下当前日志file和position的值,稍后Slave端需要用到
File             | Position  |
+——————+———-
| mysql-bin.000001 | 291392712

另开一个终端窗口,然后执行如下的操作:

tar zcvf /usr/local/mysql/var.tgz /usr/local/mysql/var  //将var目录打包
scp /usr/local/mysql/var.tgz root@192.168.1.2:/usr/local/mysql/var.tgz  //将文件包传至Slave端

完成后回到前一个终端窗口解锁只读。

mysql>unlock tables;

Slave端:

vi /etc/my.cnf
server-id = 2  #Slave的ID号,此处不能与到Master端的ID重复。
保存退出。

service mysqld stop 或 /usr/local/mysql/bin/mysqladmin -uroot -p shutdown

tar zxvf /usr/local/mysql/var.tgz /usr/local/mysql/var

chown -R mysql:mysql /usr/local/mysql/var

service mysqld start

/usr/local/mysql/bin/mysql -uroot -p

mysql>stop slave;

mysql>change master to
>master_host=’192.168.1.1′,
>master_user=’slave’,
>master_password=’123456′,
>master_log_file=’mysql-bin.000001′,    此前记录下的Master端file值
>master_log_pos=291392712;    此前记录下的Master端position值

mysql>start slave;

mysql>show slave status \G

查看上面命令返回的结果,如果Slave_IO_Running: Yes 和Slave_SQL_Running: Yes  2个均为yes,则证明主从同步正常,如果任一个显示NO,则证明同步有问题。

百万级访问量网站的技术准备工作摘录

一、开发语言

一般来说,技术人员(程序员)都是根据自己技术背景选择自己最熟悉的语言,不过不可能永远是一个人写程序,所以在语言的选择上还要是要费些心思。首先明确一点,无论用什么语言,最终代码质量是看管理,因此我们从前期开发成本分析。现在国内流行的适用于网站的语言,大概有java、php、.net、python、ruby这五大阵营。python和ruby因为在国内流行的比较晚,现在人员还是相对难招一些。.net平台的人相对多,但是到后期需要解决性能问题时,对人员技能的要求比较高。剩余的java、php用人可以说是最多的。java和php无法从语言层面做比较,但对于初期,应用几乎都是靠前端支撑的网站来说,php入门简单、编写快速,优势相对大一点。至于后端例如行为分析、银行接口、异步消息处理等,等真正需要时,就要根据不同业务需求来选择不同语言了。

阅读更多

Cacti数据采集周期修改为一分钟一次的方法

Cacti Logo

Cacti 默认的数据采集周期是5分钟一次,这对于监控业务繁忙的系统来说似乎过于漫长了,一些突发状况很难在第一时间发现,所以我们需要缩短这个周期。

首先,先登录 Cacti,进入 console > Settings > Poller 界面,将 Poller Interval Cron Interval 均改为 “Every Minute” 选项,然后点击 Save 按钮保存。

然后,进入 Linux,修改 crontab 中的数据采集脚本运行周期为*/1 * * * *,例如:

*/1 * * * * /usr/local/php/bin/php /htdocs/cacti/poller.php > /dev/null 2>&1

最后,回到 Cacti,进入 console > Data Templates 界面,修改所用到的数据模板,将 Step 设为60,这里的单位是秒。

完成上述三个步骤后,还需要我们手工清理历史数据后 Cacti 才能正常采集数据和显示图表。

进入 console > System Utilities 界面,点击 “Rebuild Poller Cache”

至此我们已经成功将 Cacti 的数据采集周期由5分钟一次修改为1分钟一次了。

如果不能正常显图表,可尝试手工清除 cacti/rra 目录下的 rrd 文件。

转载请注明:阳光部落原创,更多内容请访问http://www.sunbloger.com/

使用Cacti监控Linux服务器网卡流量的配置方法

Cacti Logo

Cacti 是一套基于PHP、MySQL、SNMP和RRDTool开发的网络流量监测图形分析工具。

若希望使用 Cacti 监控 Linux 服务器的网卡流量,需要在被监控的 Linux 服务器上安装 net-snmp-utils 相关软件包,我们可以通过 yum 在线安装,例如:
yum install net-snmp-utils

安装好 net-snmp-utils 后,在被监控的服务器上编辑/etc/snmp/snmpd.conf文档
vi /etc/snmp/snmpd.conf
在其中添加下面这行命令
view systemview included .1.3.6.1.2.1.2

2013-03-27_01

保存并重新 snmpd 服务
service snmpd restart

然后,我们进入cacti,添加被监控的服务器

阅读更多

Memcached连接超时故障排除

在一次例行检查日志的时候,发现Nginx日志中出现了大量的PHP连接Memcached超时的报错信息,如下:

PHP Warning: Memcache::connect(): Can’t connect to 127.0.0.1:11211, Connection timed out (110) in …

连上服务器检查Memcached进程运行正常,然后我用一段测试代码检查Memcached是否能够正常连接,结果也很正常。

于是又仔细分析日志,发现那段报错信息是间隔出现的,说明是有一定几率的。这时我回想起上周因为架构问题刚刚把PHP的Session存储路径指向到了Memcached里,可能是因为这个配置增加了Memcached的负载,从而导致在并发量较高时,Memcached出现连接超时的现象。

找到原因就容易解决了。重新调整Memcached的启动参数,增加-c参数来提高连接数量。默认为1024,可以逐步增加以找到最佳数值。我设置为2048。

启动命令为:
memcached -d -m 256 -c 2048 -l 127.0.0.1 -p 11211 -u root

如果服务器充裕,可以考虑分布式的memcached集群,以降低单个节点上的压力。

转载请注明:阳光部落原创,更多内容请访问http://www.sunbloger.com/

Nginx图片防盗链设置方法

图片盗链行为对网站负载和带宽均会造成不同程度的影响和消耗,有必要对这种行为加以限制,Nginx的防盗链设置非常简单,设置方法如下。

打开nginx.conf,在需要启用防盗链机制的server{}中,加入下面的代码:

location ~ .*\.(bmp|gif|jpg|jpeg|png|swf)$ {
valid_referers none blocked *.youdomain.com youdomain.com;
if ($invalid_referer) {
return 403;
}
}

上面代码中的youdomain.com更换成你的域名即可。