很久没更新,没用技术,今天稍微geek一下下。给老婆搜索她行业百强公司的具体地点,看看如果换单位的话是否方便出行~代码如下: 继续阅读……
18 Apr 2012 Posted in perl
很久没更新,没用技术,今天稍微geek一下下。给老婆搜索她行业百强公司的具体地点,看看如果换单位的话是否方便出行~代码如下: 继续阅读……
16 Apr 2012 Posted in monitor
18 Mar 2012 Posted in database
pgsql是multi-version concurrency control的,update和delete的操作并不会真正的修改原版本的内容,而只是做一个标记,最后需要用vacuum命令回收失效版本的位置。
vacuum的主要作用:
继续阅读……
17 Mar 2012 Posted in database
主讲人 李元佳 galy 继续阅读……
10 Mar 2012 Posted in nginx
被问到一些关于nginx或者说nginx运维相关的问题,记录下来几个值得思考的。这里面有些是自己曾经想到过但是浅浅的了解下就不放在心上的,有些是根本没想过这会成为一个”有意思”的问题的…… 继续阅读……
29 Feb 2012 Posted in
在微博上看到一款叫做Zen LoadBalancer的负载均衡软件更新新闻。于是决定下载来看看,其官网地址是:http://www.zenloadbalancer.com/web/。具体的说,是基于Debian构建的TCP/UDP负载均衡,通过perl的CGI页面完成对负载均衡的管理和监控,包括cluster功能(类似keepalived双机)。对后端real server的监控通过的是nagios-plugins里提供的check_http/check_smtp/check_ftp等一系列脚本完成的。监控通过SNMP完成,展示图像是rrd和GD::Graph。唯一没法知道的就是做负载均衡核心功能的pen这个东东,因为提供的是iso镜像,安装完后就直接有二进制文件在了,不知道这个pen到底是怎么做的…… 继续阅读……
14 Feb 2012 Posted in perl
因为原先托管wordpress博客的阿里云主机被通管局要求备案,加上通管局早令夕改的浪费我来回的快递费,于是决定搬迁到国外,github page的免费托管就此进入我的视界。 继续阅读……
13 Feb 2012 Posted in cloud
dotcloud是日本的一个PAAS厂商。一年多前因为plack作者的加入推出了对perl的支持。我这几个月没事做,今天想起来试试看。用起来确实蛮舒服的。(注:大部分内容是网上已经有了的,我这只是记录一下自己的步骤) 继续阅读……
27 Dec 2011 Posted in monitor
上一篇提到了shinken,这是一个完全重写过的nagios-like系统,如果想尽可能的在原有nagios知识基础上进行高性能的分布式扩展,那么可以使用mod_gearman模块。这个模块可以从github.com上直接获取使用,地址是: https://github.com/sni/mod_gearman 当然,我们这里依然是直接采用了OMD分发的方式,事实上github上也是建议直接采用omd部署,包括升级也可以直接omd update~~(因为从源代码编译的话,在nagios3.2.2版本之前还需要打个patch才能支持eventhandler,既然都得重编译,直接搞新的得了) 在github的“How it works”和“Common Scenarios”两章节里,详细的用图例说明了mod_gearman的工作原理和各种配置情形。我这里就不重复贴了。大概的说,就是可以把nagios配置检测项中的hosts/services/eventhandlers/hostgroups/servicegroups都单独成队列,然后启动多个worker有针对性的完成队列里的任务,最后也是用单独的result队列回收检测结果。 嗯,从原理上来讲,hosts/services/eventhandlers的队列,属于load balance范围,而hostgroups/servicegroups的队列,属于distribute范围。 (mod_gearman还有send_gearman程序用来load balance接收NSCA分布式监控程序的数据,这里就不说了) 继续阅读……
20 Dec 2011 Posted in monitor
上篇说到OMD的可以通过omd config选择core,有nagios和shinken两个选项。shinken是一个完全重写的监控系统,但是在外部接口上,又是nagios-like的,甚至可以单纯的只用shinken的WebUI给nagios使。所以OMD作为nagios周边的项目,也就把shinken加入到core选项里了。 不过经过试验发现,虽然omd的rpm是针对centos5.5的,代码中调用的有些命令版本却比较高,比如nmap命令使用了–traceroute选项,查ChangeLog发现是4.76版才加上的,而centos5上面的还是4.11版,所以要重新安装: 继续阅读……
20 Dec 2011 Posted in monitor
话接上篇,在su和omd start之后,可以看到挂载的一个目录。其/omd是/opt/omd的软连接。目录结构如下: 继续阅读……
19 Dec 2011 Posted in monitor
OMD,全称Open Monitoring Distribution,是一个围绕Nagios core构建的分布式开源监控集。在nagios基础上融合了NRPE、NSCA、check_mk、mod_gearman、pnp4nagios、nagvis、rrdcached等插件,以完成高性能的、可视化的,分权限管理的监控系统。 (我是在看mod_gearman的安装介绍时看到的,感觉这种一体式的安装很爽) 项目主页是http://omdistro.org,提供了rh、debian、suse和src各种安装模式。 比如在centos5上面,只需要简单的操作即可: 继续阅读……
19 Dec 2011 Posted in perl
这几天ppt看的比较多,一样一样来玩。今天先说OFC,之前有试过amcharts和fusioncharts。amcharts最全最漂亮(尤其是有scroll和map),可惜图上都自动标上了amcharts.com的字样;fusioncharts的free版本,也蛮好用的,虽然scroll怪怪的居然靠的是点击控制。比较相同的一点就是,这两都只提供了php、python等的模块,如果是perl写的网页,那只能通过提供xml/json数据给js控制的办法。稍微一点点遗憾…… 这次在cpan上终于看到一个chart控制的模块,叫Chart::OFC。这个OFC的项目地址如下: http://teethgrinder.co.uk/open-flash-chart/ 其实用法上没什么特殊,无非是省略一点点xml代码,通过OO的方式自动生成而已。让我觉得蛮好玩的是官网上作者的声明。因为他曾经在维护公司一个付费的flash chart项目时,给甲方发信要求修改bug,等了一个月没反应。于是自己现学as语言开始自己搞= =!然后念念不忘的提示说:要重视客户的反馈。。。。。。哈哈 这个项目目前用as3改写,所以新版本叫OFC2了,不过作者自己也说不太稳定,建议继续用OFC1.9.7,所以先不说Chart::OFC2,继续用Chart::OFC好了: 继续阅读……
15 Dec 2011 Posted in dancer
Dancer圣临历中介绍了一个新插件Dancer::Plugin::SimpleCRUD。可以很快的生成对数据库表的create/read/update/delete。大概阅读了一下代码。主要就是使用HTML::FromDatabase模块生成read的页面,用CGI::FormBuilder模块生成create/update/delete的页面,用Dancer::Plugin::Database::Handle模块操作数据库。因为是Simple,所以html代码都是固定的,不甚美观。但是思路可以学习,通过这两个模块,可以自己结合Dancer的template系统做CRUD了。 先来说HTML::FromDatabase模块,这个只涉及select,所以特别简单: 继续阅读……
12 Dec 2011 Posted in nginx
因为空闲时间比较多,所以在CPAN上乱翻,看到了nginx_perl这个项目(原名Nginx::Engine),现在托管在github.com上。地址见: https://github.com/zzzcpan/nginx-perl 继续阅读……
04 Nov 2011 Posted in dancer
因为看到mojo在宣传其内置websocket支持,去CPAN上search了一下,发现Dancer也有plugin做websocket用。稍微看了一下,很显然没看mojo的内嵌代码,而dancer的plugin代码倒是相当简单。 简单的说,就是通过AnyMQ、Plack和Web::Hippie的组合完成。注意的是,因为Web::Hippie使用了AnyEvent::Handle管理websocket的fh,AnyMQ也使用AnyEvent管理message queue,所以在启动plackup的时候,必须使用AnyEvent核心的Twiggy服务器。 Plugin里硬编码很多。比较重要的地方就是”set plack_middlewares_map”,plack_middlewares_map是dancer新加的功能,这里用URLMap来mount ‘/_hippie’到Web::Hippie::Pipe和AnyMQ上。也就是说,使用websocket的访问路径,必须固定为’^/_hippie/.*‘这样。 然后像两个get方法,’/new_listener’和’/message’,这两个访问路径是Web::Hippie里写死的,不能改。好在一般应用也不会直接访问这个。 最后有三个register到Dancer的方法,’ws_on_message’、’ws_on_new_listener’和’ws_send’,前两个用来覆盖上面提到的get的两个route的具体信息,一般不用前面两个,因为这样就意味着页面的js里无法控制websocket了(个人理解,不知道对否?)后面那个类似把websocket改成普通的params方式请求响应(用curl/wget可以请求的那种)。 继续阅读……
04 Nov 2011 Posted in dancer
新浪微博API是通过OAuth方式的。perl上有现成的模块,只需要稍微调一下参数就行了。下午比较闲,试试看。。。
一般网上说的,都还是Net::OAuth模块,这个是1.0a版本的,一看perldoc那个长篇就头疼。这里我用Net::OAuth2模块,简单方便,而且正好配合dancer框架,方便做外部网站应用。
首先是安装模块:
perlcpanm --mirror-only --mirror http://mirrors.163.com/cpan LWP::Protocol::https Net::OAuth2::Client
因为新浪微博的api用的是https协议,所以要加上LWP::Protocol::https模块,这样才能发起443请求。
然后在web/lib/weibo.pm里里添加如下语句:
```perluse Net::OAuth2::Client;
use JSON qw(decode_json); #只需要decode_json,因为dancer自己有from_json和to_json,不要覆盖了
继续阅读……
26 Oct 2011 Posted in perl
25 Oct 2011 Posted in perl
本文纯属练习Template模块使用,是否可以运用到生产,是否有必要运用到生产,都是未知数…… 包括如下文件: ```bash[raocl@localhost tt2-test]$ tree . |– config-cdcgame.net.yml |– config-china.com.yml |– config.tt |– hostconfig.yml |– squid.layout.tt `– tt4squid.pl 继续阅读……
24 Oct 2011 Posted in perl
之前总不重视自己的博客,上回一丢才心疼,现在重视起来,决定定期备份sql。写个小脚本如下: ```perl#!/usr/bin/perl use warnings; use strict; use MySQL::Backup; use Mail::Sender; open my $tmp_sql, ‘>’, “backup.sql”; my $mb = new MySQL::Backup(‘dbname’, ‘localhost’, ‘dbuser’, ‘dbpasswd’, {‘USE_REPLACE’ => 1, ‘SHOW_TABLE_NAMES’ => 1}); print $tmp_sql $mb->create_structure(); print $tmp_sql $mb->data_backup(); close $tmp_sql; my $sender = new Mail::Sender { smtp => ‘smtp.163.com’, from => ‘mailuser@163.com’, 继续阅读……
20 Oct 2011 Posted in
这两天折腾博客宕机问题啊~原本对阿里云的看好大幅下降……几次挂掉,甚至电话告知说数据恢复不了请自行重置……崩溃原因居然解释说“因为你没有修改grub再重启”这种解释,拜托,我要重启还不是因为突然ssh报密码错误而你们“重置密码必须重启”?死循环啊!
对了,我人格保证,作为一个用xen当工作环境一年多的运维,绝对没有犯自行升级内核导致重启失败这种错误的可能。阿里云客服能不能不要把一个客户的缘由安到别的客户头上……
不管如何,结局还是好的。截个监控宝的告警图纪念一下:
继续阅读……
17 Oct 2011 Posted in DNS
闲的无聊,继续研究DNS周边产品,这次盯上了Probind。这是搜索结果中比较常见的bind的web管理工具。其实我是比较希望有个中文的东东方便我偷懒,可惜看sina之前的xbayDNS一直停留在了只支持FreeBSD/MAC的阶段没有更新,汗,不支持linux的项目偶见过的还真不多……
probind最近一次更新也是2003/05/24的事情了。所以也没期待它能多么适应现在的bind体系,不过作为代码看看还是可以的。
创建mysql用户和库,然后把程序解压到webroot目录,然后执行mysql -u named -p named < etc/mktables.sql,这就是install的步骤。但是这个时候访问首页是有一堆报错的,提示你dns服务器的默认配置(外部检测用dns,管理员邮箱等等)没配置。这个需要通过./tools/settings.php去添加——但是首页上没有链接点击,得自己手敲url,汗……
然后,probind更新的时候,估计php还是以version4为主,所以里头用的还是$HTTP_GET_VARS和$HTTP_POST_VARS等全局变量。奇怪的是我把php.ini里的register_global改成On后重启httpd了,页面依然没变,不得已在./inc/lib.inc文件的开头加上了两句
php$HTTP_GET_VARS = &$_GET;
$HTTP_POST_VARS = &$_POST;
才好。
OK,现在正式看到probind的页面了。demo地址:点这里
主要就是一个zone的管理,有add、delete、browse三个页面,前两个就是标准的表单,倒是browse里有个test,蛮好玩的,调用bin/testns脚本,使用perl的Net::DNS模块测试zone内的正/反向解析是否正常。
然后就是record的管理,在browse zones里点进zone就可以编辑record了,主要就是主机名、解析ip。
最后是server的管理,这里管理的是真实的DNS的ip和type(master|slave)——probind在易用和性能之间取了一个平衡,他不是像mysqlbind或者mysql-dlz那样直接从db里取数据做响应,而是每次更新(这里区分开了步骤,update的时候只是更新了db,然后再去bulk update的时候才是真正update dns配置)的时候,从数据库生成文件(bin/mkzonefile),再同步到DNS服务器上(sbin/push.local|remote)并执行rndc reconfig命令。
继续阅读……
30 Sep 2011 Posted in perl
上回分析lbnamed的时候,开玩笑说自己也可以试试在模块基础上加点啥功能。国庆节前最后一天,没啥事情做,就写个小demo续貂。代码如下: 继续阅读……
29 Sep 2011 Posted in dancer
上篇写的页面上,留下一个超链接,查看每条任务的具体情况。现在完成这部分。 首先修改数据库结构,上篇已经建了websync.websync_peer表,现在继续: 继续阅读……