切换到hexo

新的一年马上开始了,我的博客程序也有一个新到开始。 从原来到octopress换为了hexo

hexo采用nodejs开发,速度上比octopress到ruby有很大优势。

原来每次发布都要等很久,更换到hexo后快了很多。

同时也希望我2015年能多写点博客,2014年基本很少有时间写下自己到技术文章,2015加油!

nginx通过http/1.1访问upstream

Nginx在做upstream的负载均衡的时候,默认请求后端应用服务器使用的是http/1.0协议。

单位有个应用在采用nginx做负载均衡后,经常出现一个10s卡住现象。而用浏览器直接访问后端则没有这个问题。通过在后端应用上tcpdump抓包分析,发现nginx提交过来的请求都是http/1.0协议,而浏览器直接过来的是http/1.1协议。

Nginx初期不支持通过http/1.1协议访问后端应用,直到1.1.4版本后才支持http/1.1协议访问后端。采用http/1.1协议后,因为支持keepalive,可以减少Nginx到后端的连接数。

启用http/1.1协议访问upstream

只要在想要启用http/1.1访问的location段加入proxy_http_version和proxy_set_header两项即可。

1
2
3
4
5
6
location / {
proxy_pass http://upstream_domain;
proxy_http_version 1.1;
proxy_set_header Connection "";
}

CentOS 5.10安装报磁盘空间错误

今天单位的一台HP DL380 G7安装CentOS 5.10的时候出现错误。 因为服务器配了7块1T的磁盘,做了个Raid5以后,大约3.8T。所有采用了GPT分区,安装的时候直接报错了,提示GTP分区问题。 参考了如下网站 http://blog.endpoint.com/2013/11/installing-centos-5-on-3tb-drive.html http://oliverpelz.blogspot.it/2010/09/how-to-install-centos-55-on-any-gpt.html http://richardjh.org/blog/install-centos-large-partitions-using-gpt-disk-layout/

操作步骤都比较麻烦。因为必须安装CentOS5 不然CentOS 6可以很顺利的。。。

既然GTP分区不行,就用smart盘引导后重新创建Raid。将一个300G空间创建为逻辑卷,剩下的3T空间另外创建一个。 然后将操作系统安装在300G空间内,系统安装成功后再通过parted对3T磁盘分区。

结果这次安装过成功又报了如下错误:An error occurred transferring the install image to your hard drive. You are probably out of disk space.

果断采用ctrl+alt+F3切到命令界面,发现有如下提示:CRITICAL: error transferring stage2.img: [Errno 5] Input/output err

发现这个错误后,已经可以知道不是因为GTP分区引起的了。而是在stage2.img这个文件传输过程中出现错误。 更换安装介质后,问题得到了解决。

linux-rescan-scsi

最近单位一台服务器在连接EMC DD 640的时候,没有识别出来对应的scsi设备。这里记录下解决办法,其实就是linux如何在不重启的情况下重新扫描scsi设备。 比如HBA卡插上光纤后,无法识别。或者插上新的scsi盘无法识别,都可以用这个方法解决。

1、先查看有哪些HBA卡的主机号

1
ls /sys/class/fc_host/

2、让系统重新扫描FC总线,大约15秒后可以生效

1
echo 1 >/sys/class/fc_host/host0/issue_lip

3、重新扫描host0下的scsi设备

1
echo “- – -” > /sys/class/scsi_host/host0/scan

验证

1
2
fdisk -l
tail -f /var/log/message
1
# ls /sys/class/scsi_host

自定义zabbix inventory界面

Zabbix报警后,点击报警的主机会出现一个host inventory连接。进入host inventory后,可以查看报警主机的一些信息。而Overview内的信息并不多,Details栏内信息又太多了。 我想通过自定义这个Overview将比较关系的操作系统,联系人,硬件位置等信息显示在此页面中.

通过查看代码,最终发现此页面对应/usr/share/zabbix/include/views目录下的inventory.host.view.php模板文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// inventory (OS, Contact, , Hardware, Location)
if ($this->data['host']['inventory']) {
if ($this->data['host']['inventory']['os']) {
$overviewFormList->addRow(
$this->data['tableTitles']['os']['title'],
new CSpan(zbx_str2links($this->data['host']['inventory']['os']), 'text-field')
);
}
if ($this->data['host']['inventory']['contact']) {
$overviewFormList->addRow(
$this->data['tableTitles']['contact']['title'],
new CSpan(zbx_str2links($this->data['host']['inventory']['contact']), 'text-field')
);
}
if ($this->data['host']['inventory']['hardware']) {
$overviewFormList->addRow(
$this->data['tableTitles']['hardware']['title'],
new CSpan(zbx_str2links($this->data['host']['inventory']['hardware']), 'text-field')
);
}
if ($this->data['host']['inventory']['location']) {
$overviewFormList->addRow(
$this->data['tableTitles']['location']['title'],
new CSpan(zbx_str2links($this->data['host']['inventory']['location']), 'text-field')
);
}
}

其中每一个if段,对应一个信息。我这里分别显示os,contact,hardware和location

owncloud打包zip下载文件名乱码

最近在单位部署了一套owncloud使用。感觉作为内部网盘使用,效果还是挺好的。 不过今天同事发现,选择多个文件一起下载的时候,会出现乱码问题。 多个文件下载会自动打包成一个zip文件进行下载,下载后的文件在windows机器打开就出现文件名乱码了。

解决办法

网站搜索了下解决办法,基本上是因为打包zip的时候,文件名编码处理问题造成的。

打包zip主要调用了/var/www/html/owncloud/lib/private/files.php文件

修改下这个文件,将文件名转为windows可以识别的GBK编码就ok了。

69行附近

1
2
3
4
5
6
7
8
9
10
11
12
foreach ($files as $file) {
$file = $dir . '/' . $file;
if (\OC\Files\Filesystem::is_file($file)) {
$tmpFile = \OC\Files\Filesystem::toTmpFile($file);
self::$tmpFiles[] = $tmpFile;
$u8filename=iconv("UTF-8","GBK",basename($file)); //for utf8
//$zip->addFile($tmpFile, basename($file));
$zip->addFile($tmpFile,$u8filename);
} elseif (\OC\Files\Filesystem::is_dir($file)) {
self::zipAddDir($file, $zip);
}
}

200行附近

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static function zipAddDir($dir, $zip, $internalDir='') {
$dirname=basename($dir);
$dirname=iconv("UTF-8","GBK",$dirname); //for utf8
$zip->addEmptyDir($internalDir.$dirname);
$internalDir.=$dirname.='/';
$files=OC_Files::getDirectoryContent($dir);
foreach($files as $file) {
$filename=$file['name'];
$file=$dir.'/'.$filename;
if(\OC\Files\Filesystem::is_file($file)) {
$tmpFile=\OC\Files\Filesystem::toTmpFile($file);
OC_Files::$tmpFiles[]=$tmpFile;
$filename=iconv("UTF-8","GBK",$filename); //for utf8
$zip->addFile($tmpFile, $internalDir.$filename);
}elseif(\OC\Files\Filesystem::is_dir($file)) {
self::zipAddDir($file, $zip, $internalDir);
}
}
}

zabbix概念

Zabbix有很多自己的术语和概念,在使用zabbix前需要先搞清楚这些内容。

术语

host host表示你想监控的网络设备(可以是服务器、网络设备等)。通过IP或者域名监控。

host group host group 表示逻辑上属于一组的host设备。可以包含主机或者模版。在权限配置里可以将host group授权给某个用户组访问。

dig排查dns问题

最近单位的某些域名在用联通3g访问的时候,经常有无法解析域名的情况。后来是采用dig逐步排查,解决了问题的。

解决问题的思路

1、通过ping、dig命令,先判断域名是否可以被解析。

2、如果只是某些机器不正常,就通过@参数指定dns服务器查询。

3、如果查询不到解析,就+tcp 采用tcp协议尝试下。

4、采用+trace通过递归查询,看看那个节点出现的问题

5、大招,这招还不行就放弃吧

1
dig +trace +recurse +all +qr -t NS xinlogs

Read More

多电脑同步octopress

采用markdown编写博客文章,然后通过octopress发布到github上。感觉写博客就像编程一样有意思。 但是当我们有多台电脑的时候,如何同步呢?或者家里有了octopress环境,单位如何写博客呢? 下面是我常用的方法

Read More

zabbix介绍

Zabbix是一套企业级开源分布式监控软件。可以用来监控网络和服务器的可用性和性能。Zabbix可以根据事件灵活配置邮件和短信报警。Zabbix将监控数据采集到数据库,通过web界面进行展示。

Zabbix支持被动(polling)和主动(trapping)两种方式获取数据。Zabbix的参数配置、报表、数据展示全部通过web界面完成。

Zabbix是免费软件,基于GPL v2协议发布。

zabbix

Read More