获取造价百强公司的真实位置

18 Apr 2012 Posted in  perl

很久没更新,没用技术,今天稍微geek一下下。给老婆搜索她行业百强公司的具体地点,看看如果换单位的话是否方便出行~代码如下: 继续阅读……


弹性集群监控中的配置自动生效问题研究

16 Apr 2012 Posted in  monitor

最近跟@画圈圈的星星 聊天,说到nagios在大规模集群运用中一个比较严重的瓶颈:修改配置需要重启进程。
听起来似乎不是什么问题,我个人之前对nagios的追求,也都放在怎么样提供一个及时高效的监控和数据展示上面—-这两个问题在 mod_gearmanpnp4nagios 的协助下已经很给力了。 继续阅读……


PostgreSQL中国用户会DBA2000培训计划北京第二课笔记

18 Mar 2012 Posted in  database

运行维护

vacuum命令

pgsql是multi-version concurrency control的,update和delete的操作并不会真正的修改原版本的内容,而只是做一个标记,最后需要用vacuum命令回收失效版本的位置。
vacuum的主要作用: 继续阅读……


PostgreSQL中国用户会DBA2000培训计划北京第一课笔记

17 Mar 2012 Posted in  database

PostgreSQL及中国用户会简介

主讲人 李元佳 galy 继续阅读……


加强了解nginx的几个问题

10 Mar 2012 Posted in  nginx

被问到一些关于nginx或者说nginx运维相关的问题,记录下来几个值得思考的。这里面有些是自己曾经想到过但是浅浅的了解下就不放在心上的,有些是根本没想过这会成为一个”有意思”的问题的…… 继续阅读……


perl函数返回值引起的误会

04 Mar 2012 Posted in  perl

在微博上偶然看到有位@南唐古韵童鞋发了一条关于perl的: 继续阅读……


ZenLoadBalancer试用(一)

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到底是怎么做的…… 继续阅读……


从wordpress博客迁移到github记录

14 Feb 2012 Posted in  perl

因为原先托管wordpress博客的阿里云主机被通管局要求备案,加上通管局早令夕改的浪费我来回的快递费,于是决定搬迁到国外,github page的免费托管就此进入我的视界。 继续阅读……


dotcloud试用

13 Feb 2012 Posted in  cloud

dotcloud是日本的一个PAAS厂商。一年多前因为plack作者的加入推出了对perl的支持。我这几个月没事做,今天想起来试试看。用起来确实蛮舒服的。(注:大部分内容是网上已经有了的,我这只是记录一下自己的步骤) 继续阅读……


OMD系列(四)mod_gearman配置与运行

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分布式监控程序的数据,这里就不说了) 继续阅读……


OMD系列(三)shinken的discovery配置与运行

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版,所以要重新安装: 继续阅读……


OMD系列(二)基础配置和目录介绍

20 Dec 2011 Posted in  monitor

话接上篇,在su和omd start之后,可以看到挂载的一个目录。其/omd是/opt/omd的软连接。目录结构如下: 继续阅读……


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上面,只需要简单的操作即可: 继续阅读……


Chart::OFC试用

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好了: 继续阅读……


Dancer::Plugin::SimpleCRUD模块学习

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,所以特别简单: 继续阅读……


nginx_perl试用

12 Dec 2011 Posted in  nginx

因为空闲时间比较多,所以在CPAN上乱翻,看到了nginx_perl这个项目(原名Nginx::Engine),现在托管在github.com上。地址见: https://github.com/zzzcpan/nginx-perl 继续阅读……


websocket体验

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可以请求的那种)。 继续阅读……


用perl调用新浪微博API小实验

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,不要覆盖了 继续阅读……


一个perl扩展正则表达式

26 Oct 2011 Posted in  perl

今天傍晚,莫言在Q群里贴了一个他写的正则表达式,回来翻了翻perlre文档,基本算是看懂,赶紧记录下来: perlmy $ip = "192.168.0.1|192.168.0.2|192.168.0.1"; if ( $ip =~ / ^ (?: ((?:\d{1,3}\.){3}\d{1,3}) (?= (?: \|(?!\1)(?1) )* \z ) \| )* (?1) $ /x ) { print "match\n"; } 根据perlre文档的说明,一点一点解释。 继续阅读……


用Template::Tookit给squid.conf写模板

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 继续阅读……


blog备份脚本

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当工作环境一年多的运维,绝对没有犯自行升级内核导致重启失败这种错误的可能。阿里云客服能不能不要把一个客户的缘由安到别的客户头上…… 不管如何,结局还是好的。截个监控宝的告警图纪念一下: 继续阅读……


ProBIND体验笔记

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命令。 继续阅读……


一个ddns的demo

30 Sep 2011 Posted in  perl

上回分析lbnamed的时候,开玩笑说自己也可以试试在模块基础上加点啥功能。国庆节前最后一天,没啥事情做,就写个小demo续貂。代码如下: 继续阅读……


写个同步分发系统(三)

29 Sep 2011 Posted in  dancer

上篇写的页面上,留下一个超链接,查看每条任务的具体情况。现在完成这部分。 首先修改数据库结构,上篇已经建了websync.websync_peer表,现在继续: 继续阅读……