关于mongodb 的日志轮询

mongod每天要产生大量的日志,如果不去管它,我这边一周大约有10~20G的日志出来,可见日志轮询是必须的。

mongodb本身支持日志轮询的信号,所以我的日志轮询脚本如下:

#!/bin/sh
log_dir="/var/log/mongo/"
killall -SIGUSR1 mongod
/usr/bin/find ${log_dir} -name 'mongod.log.*' -mtime +5  -exec rm -f {} ;

然后每天零点零分跑一下。

我有6台mongodb,上面的脚本跑了一两个月一直挺正常。但是最近其中一台在做日志轮询的时候可能是产生了死锁,因为我首先收到了读写锁过多的报警,日志轮询没有成功,客户端也连不进去。收到报警后就连到服务器去看,查查日志,确定问题后重启mongodb就正常了。

这个脚本造成服务中断14分钟,mongodb用的是最新的稳定版本1.8.1,mongodb的稳定性还有待提高。

阅读全文

为了更安全和方便的访问在机房服务器,我们在公司和机房间用openvpn建立一个vpn。

公司的内网网段是:192.168.20.0/24 机房的内网网段是:192.168.1.0/24 openvpn用的网段是:10.0.0.0/24 服务器和客户端都是Centos linux 5.x.

  1. openvpn安装: 我是直接用yum从rpmforge库上安装的:
# yum install -y openvpn

客户端和服务器都是这么安装,如果你的机器上没有安装rpmforge,安装之前请先:

# rpm -ivh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

阅读全文

发现网上的Redis管理脚本基于Ubuntu 的发行版上的,在Centos linux 5.x上并不能用,所以自己写了一个。

用这个脚本管理之前,需要先配置下面的内核参数,否则Redis脚本在重启或停止redis时,将会报错,并且不能自动在停止服务前同步数据到磁盘上:

# vim /etc/sysctl.conf
vm.overcommit_memory = 1

然后应用生效:

# sysctl -p

阅读全文

innodb_buffer_pool_size 如果用Innodb,那么这是一个重要变量。相对于MyISAM来说,Innodb对于buffer size更敏感。MySIAM可能对于大数据量使用默认的key_buffer_size也还好,但Innodb在大数据量时用默认值就感觉在爬了。 Innodb的缓冲池会缓存数据和索引,所以不需要给系统的缓存留空间,如果只用Innodb,可以把这个值设为内存的70%-80%。和 key_buffer相同,如果数据量比较小也不怎么增加,那么不要把这个值设太高也可以提高内存的使用率。

innodb_additional_pool_size 这个的效果不是很明显,至少是当操作系统能合理分配内存时。但你可能仍需要设成20M或更多一点以看Innodb会分配多少内存做其他用途。

innodb_log_file_size 对于写很多尤其是大数据量时非常重要。要注意,大的文件提供更高的性能,但数据库恢复时会用更多的时间。我一般用64M-512M,具体取决于服务器的空间。

innodb_log_buffer_size 默认值对于多数中等写操作和事务短的运用都是可以的。如果经常做更新或者使用了很多blob数据,应该增大这个值。但太大了也是浪费内存,因为1秒钟总会 flush(这个词的中文怎么说呢?)一次,所以不需要设到超过1秒的需求。8M-16M一般应该够了。小的运用可以设更小一点。

innodb_flush_log_at_trx_commit (这个很管用) 抱怨Innodb比MyISAM慢 100倍?那么你大概是忘了调整这个值。默认值1的意思是每一次事务提交或事务外的指令都需要把日志写入(flush)硬盘,这是很费时的。特别是使用电池供电缓存(Battery backed up cache)时。设成2对于很多运用,特别是从MyISAM表转过来的是可以的,它的意思是不写入硬盘而是写入系统缓存。日志仍然会每秒flush到硬盘,所以你一般不会丢失超过1-2秒的更新。设成0会更快一点,但安全方面比较差,即使MySQL挂了也可能会丢失事务的数据。而值2只会在整个操作系统挂了时才可能丢数据。

阅读全文

vertica是一个和Sybase IQ,infobright类似的列式数据库,没有用过Sybase IQ,就和infobright 3.4的社区版做了简单对比测试,在同样一个一亿条记录的表中,下面的查询:

select count(*) from c_log group by level;

vertica花了5秒,infobright花了2分20秒。

测试表c_log的结构为:

CREATE TABLE c_log (
  uid varchar(20),
  cash integer,
  gold integer,
  level integer,
  rtime datetime,
  tid varchar(20),
  act varchar(50),
  item varchar(500),
  value integer,
  value2 integer,
  time datetime
);

阅读全文

机房用的都是Dell R710服务器,自带BCM5709网卡。 默认RHEL5.x系统自带的驱动对BCM5709的网卡支持不好,网卡一遇到流量比较大就会hung up。 这个问题涉及到 ACPI 电源管理,当网卡在正常工作的时候,会被 ACPI 误以为他闲着,从而把它给hung up。 在RHEL 5.x或Centos 5.x上,解决办法有两种:

1.用内核自带的驱动,修改内核参数,关闭acpi:

vi /boot/grub/grub.conf
title CentOS (2.6.18-164.6.1.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-164.6.1.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet acpi=off noapic
initrd /initrd-2.6.18-164.6.1.el5.img

参数acpi=off noapic是要加上的,这个解决办法经测试网卡的流量最高跑到300多M没事。

阅读全文

作者的图片

阿辉

容器技术及容器集群等分布式系统研究

容器平台负责人

上海