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更换成你的域名即可。

在Godaddy购买VPS心得

由于无法继续忍受和千军万马共挤虚拟主机。近日,我为阳光部落(http://www.sunbloger.com/)从Godaddy(http://www.godaddy.com/)上购买了VPS主机,下面是我在购买和使用中的一些感受和心得。

在Godaddy主页的All Products菜单中,选择Hosting & Servers,再在弹出的菜单中选择VPS项目,就可以进入VPS主机的选购页面了,后面的购买和付款流程与买虚拟主机没有区别,就不详细说了。但需要注意的是机房会被默认到Godaddy新加坡数据中心,从这几年的经验来看,新加坡机房的效果不如美国本土好。

vps01

目前Godaddy的VPS提供三种操作系统供用户选择,分别是CentOS、Fedora和Windows,对于服务器来说,特别是打算用Linux作为服务器操作系统时,CentOS是最好的选择。

vps02

购买后的VPS需要在Godaddy上开通,在开通过程中需要提供一个账号和密码,用于通过SSH登录到服务器上。但Godaddy的VPS不支持直接root登录,需要以预先设置的账号登录后,再su切换到root。

我购买的CentOS系统的VPS十分精简,如果喜欢自己编译安装的方式去部署一些软件,经常会遇到提示缺少某某组件,直接通过yum安装所需组件即可。

在我安装并启动Nginx时,提示我80端口已被占用,用netstat –tulpn命令查询后发现VPS中已经安装有httpd,占用了80端口。停掉httpd,再次启动Nginx,一切正常了!

基于 RHEL 的 CentOS 6.4 发布

CentOS Logo

CentOS(Community ENTerprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。

CentOS 6.4 功能改进:

  • 支持Parallel NFS (pNFS)
  • 增强了Vmware和Hyper-V的虚拟机支持及性能
  • 增强了身份管理
  • 支持cgroups及PMU
  • 更多的新工具等

软件包的变化:

  • 增加了Haproxy
  • 引入Samba4作为技术预览
  • 增加了 Keepalived(无需在EPEL里找了)
  • SystemTap升级到1.8
  • 增加了lscpu和chcpu用于CPU操作
  • 增加了SciPy
  • 增加了libjpeg-turbo、redhat-lsb-core,并升级了createrepo等

官方网址:http://www.centos.org/

Nginx构建负载均衡集群的配置方法

假设我们有3台服务器,IP地址分别为:
192.168.0.1 / 192.168.0.2 / 192.168.0.3

我们将192.168.0.1作为前端主服务器,192.168.0.2和192.168.0.3作为负载均衡的后端服务器。

下面是192.168.0.1主服务器上Nginx的配置方法:
worker_processes 1;

events {
worker_connections 1024;
}

http {
upstream serverlist {
server 192.168.0.2:8000 weight=3 max_fails=3 fail_timeout=20s;
server 192.168.0.3:8000 weight=7 max_fails=3 fail_timeout=20s;
}

server {
listen 80;
server_name www.sunbloger.com;
location / {
proxy_pass         http://serverlist;
proxy_set_header   HOST             $host;
proxy_set_header   X-Real-IP        $remote_addr;
proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
}
}
}

配置说明:
upstream serverlist{}可以理解为一个服务器池,通过proxy_pass http://serverlist命令,可将访问www.sunbloger.com的请求分配给位于池内的服务器192.168.0.2和192.168.0.3。
weight=3和weight=7为服务器的权重,权重越高,被分配到的请求就越多。
max_fails=3和fail_timeout=20s的含义是,当请求失败次数达到3次时,这个服务器将被暂时下线20秒。

技巧:主服务器可负责静态内容,将所有php的请求分配到后端服务器处理。

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

PHP官方框架 Zend Framework 2.1 发布

Zend Framework

Zend Framework (简写ZF)是由 Zend 公司支持开发的完全基于 PHP5 的开源PHP开发框架,可用于开发 Web 程序和服务,ZF采用 MVC(Model–View-Controller) 架构模式来分离应用程序中不同的部分方便程序的开发和维护。

在2012年9月5日正式发布了2.0版本,简称为ZF2,该版本的主打口号则是“高性能”。目前的最新版本为 Zend Framework 2.1,是ZF2里的首个正式版本。最新版本除了对原有组件功能进行大幅提升外,还新添两个新成员:

  • ZendService_Apple_Apns:专为iOS系统提供通知功能。
  • ZendService_Google_Gcm:为Android提供通知功能。

继续阅读

开源社区九大最不想承认的事实

你可能认为,一群聪明人不会有什么忌讳藏着掖着,比如像自由和开源软件(FOSS)社区的成员。你还可能觉得,这样一群知识分子不会觉得什么想法是禁止讨论的或让人不舒服的;但要是你果真这么想,那就大错特错了。

与任何亚文化一样,FOSS也是由共同的信念维系在一起。共同的信念有助于形成一种共同的归属感,这意味着对这些信念提出质疑,无异于对这个归属感提出质疑。

其中一些忌讳话题可能会颠覆20年或更长时间以来秉承的公理。另一些忌讳话题则是新的,质疑公认的真理。不过,尽管细细打量忌讳可能让人不舒服,但 这么做往往是必要的。许多信念已不再适用,或者已经沦为半真半假的话之后,还流行很长一段时间。有时考虑一下无法想象的事情大有意义,只有这样才能让信念 重新接受现实的考验。

基于这个道理,我列出了个人针对当下开源社区的九点看法;至于这些看法正确与否,有待各位评论。 继续阅读

PHP 5.4 内置Web服务器使用说明

PHP

PHP是一种脚本语言,它需要PHP解释器来分析运行PHP文件。当把PHP做为CGI服务Web请求时,它需要被嵌入到某种Web服务器里,最常见的是集成到Apache或IIS里,这就是说,在使用PHP前,你需要安装Apache或IIS,并且正确的配置它们和PHP集成的参数。虽然这种配置已经很规范,文档非常丰富,但我们还是经常在安装Apache和PHP集成时遇到问题,而且,有时候我们只想测试一个简单的PHP特征,不想就为此安装、启动Apache服务。

但据官方文档上说,这个内置的Web服务器只是提供开发测试使用,不推荐使用中生产环境中。因为这个服务器接受处理请求时顺序执行的,不能并发处理。 继续阅读

PHP重置JPG图片尺寸的函数

代码如下:

<?php
/**
 * 重置Jpg图片尺寸
 * 
 * @param string $path
 * @param string $filename 源文件名
 * @param int $maxwidth
 * @param int $maxheight
 * @param string $newname 新文件名
 */
function reSizeJpg($path, $filename, $maxwidth, $maxheight, $newname)
{
    $jpg = imagecreatefromjpeg($path.'/'.$filename);
    if ($jpg) {
        $width = imagesx($jpg);
        $height = imagesy($jpg);
    } else {
        return false;
    }
    
    if (($maxwidth && $width > $maxwidth) || ($maxheight && $height > $maxheight)) {
        if ($maxwidth && $width > $maxwidth) {
            $widthratio = $maxwidth / $width;
            $resize_width = true;
        }
        if ($maxheight && $height > $maxheight) {
            $heightratio = $maxheight / $height;
            $resize_height = true;
        }
        if ($resize_width && $resize_height) {
            if ($widthratio < $heightratio) {
                $ratio = $widthratio;
            } else {
                $ratio = $heightratio;
            }
        } elseif ($resize_width) {
            $ratio = $widthratio;
        } elseif ($resize_height) {
            $ratio = $heightratio;
        }
        $newwidth = $width * $ratio;
        $newheight = $height * $ratio;
        if (function_exists("imagecopyresampled")) {
            $newim = imagecreatetruecolor($newwidth, $newheight);
            imagecopyresampled($newim, $jpg, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
        } else {
            $newim = imagecreate($newwidth, $newheight);
            imagecopyresized($newim, $jpg, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
        }
        imagejpeg($newim, $path.'/'.$newname);
        imagedestroy($newim);
    } else {
        imagejpeg($jpg, $path.'/'.$newname);
    }
    imagedestroy($jpg);
    return true;
}
?>

分享PHP为图片添加水印的函数

代码如下:

<?php
/**
 * 追加水印
 * 
 * @param string $source_img 原始图片url
 * @param string $water_map 水印图片url
 */
function addWaterMap($source_img, $water_map)
{
    $img = imagecreatefromjpeg($source_img); //读取原图
    $img_x = imagesx($img); //原图宽
    $img_y = imagesy($img); //原图高
    imagealphablending($img, true);//设置为混合填色模式
    //$img_water_map = imagecreatefromjpeg($water_map); //读取水印图片
    $img_water_map = imagecreatefrompng($water_map);
    $water_x = imagesx($img_water_map); //水印宽
    $water_y = imagesy($img_water_map); //水印高
    $wimg_x = $img_x - $water_x - 10; //水印x坐标
    $wimg_y = $img_y - $water_y - 10; //水印y坐标
    imagecopy($img, $img_water_map, $wimg_x, $wimg_y, 0, 0, $water_x, $water_y); //分别为原图,水印,水印x坐标,水印y坐标,水印图片横轴开始点,水印图片纵轴开始点,水印横轴结束,水印纵轴结束
    imagejpeg($img, $source_img, 95); //输出到目标文件
    imagedestroy($img); //销毁内存数据流
    imagedestroy($img_water_map); //销毁内存数据流
    return true;
}
?>

通过索引优化MySQL语句的实现方法(转载)

使用索引,可以优化含有ORDER BY的MySQL语句,下文就将为您详细介绍这种优化MySQL语句的方法,希望对您学习MySQL语句优化方面有所帮助。

关于建立索引的几个准则:

1、合理的建立索引能够加速数据读取效率,不合理的建立索引反而会拖慢数据库的响应速度。

2、索引越多,更新数据的速度越慢。

3、尽量在采用MyIsam作为引擎的时候使用索引(因为MySQL以BTree存储索引),而不是InnoDB。但MyISAM不支持Transcation。

4、当你的程序和数据库结构/SQL语句已经优化到无法优化的程度,而程序瓶颈并不能顺利解决,那就是应该考虑使用诸如memcached这样的分布式缓存系统的时候了。

5、习惯和强迫自己用EXPLAIN来分析你SQL语句的性能。 继续阅读