MySQL/MongoDB DBA (t.sina.com.cn/realzyy)

MongoDB RPM打包spec文件一枚

December 22nd, 2011

Name: mongodb
Version: 1.8.1
Release: 12
Summary: MongoDB is a high-performance, schema-free, document-oriented database written in the C++.
Group: Applications/Databases
URL: realzyy.com
Packager: realzyy
License: GPL
Vendor: 10gen
Source: mongodb-1.8.1.tar.gz
BuildRoot: /tmp/test/mongodb
BuildRequires: js >= 1.7 pcre-devel >= 6.6 readline-devel >= 5.1
Requires: js >= 1.7 pcre-devel >= 6.6 readline-devel >= 5.1

%description
MongoDB is a high-performance, schema-free, document-oriented database written in the C++.

%prep
%setup

%build
scons -j 8 –extralib=ncurses,readline all

%install
scons –prefix=$RPM_BUILD_ROOT/usr/ -j 8 –extralib=ncurses,readline –full install

%post
mkdir /u01/mongodb
mkdir /u01/mongodb/data
mkdir /u01/mongodb/log
mkdir /u01/mongodb/tmp
mkdir /u01/mongodb/run
touch /u01/mongodb/mongodb.cnf
chown -R mongo:dba /u01/mongodb

echo “#Directory and relavent set” > /u01/mongodb/mongodb.cnf
echo “dbpath = /u01/mongodb/data” >> /u01/mongodb/mongodb.cnf
echo “logpath = /u01/mongodb/log/mongodb.log” >> /u01/mongodb/mongodb.cnf
echo “repairpath = /u01/mongodb/tmp” >> /u01/mongodb/mongodb.cnf
echo “pidfilepath = /u01/mongodb/run/mongodb.pid” >> /u01/mongodb/mongodb.cnf
echo “directoryperdb = true” >> /u01/mongodb/mongodb.cnf
echo “#sysinfo = true” >> /u01/mongodb/mongodb.cnf
echo “#verbose = true” >> /u01/mongodb/mongodb.cnf
echo “logappend = true” >> /u01/mongodb/mongodb.cnf
echo “#cpu = true” >> /u01/mongodb/mongodb.cnf
echo “#Network and security set” >> /u01/mongodb/mongodb.cnf
echo “noauth = true” >> /u01/mongodb/mongodb.cnf
echo “port = 27015″ >> /u01/mongodb/mongodb.cnf
echo “maxConns = 1024″ >> /u01/mongodb/mongodb.cnf
echo “fork = true” >> /u01/mongodb/mongodb.cnf
echo “#Management” >> /u01/mongodb/mongodb.cnf
echo “#nohttpinterface = true” >> /u01/mongodb/mongodb.cnf
echo “rest = true” >> /u01/mongodb/mongodb.cnf
echo “quota = true” >> /u01/mongodb/mongodb.cnf
echo “quotaFiles = 1024″ >> /u01/mongodb/mongodb.cnf
echo “nssize = 16″ >> /u01/mongodb/mongodb.cnf
echo “syncdelay = 5″ >> /u01/mongodb/mongodb.cnf
echo “#replication” >> /u01/mongodb/mongodb.cnf
echo “#replSet = \”\”" >> /u01/mongodb/mongodb.cnf
echo “oplogSize = 10240″ >> /u01/mongodb/mongodb.cnf

%clean

%files
%defattr(0755, root, root)
/usr/bin
/usr/lib64
/usr/include

新家

December 16th, 2011

搬到新家一个多月了,前几天天毛毛班长提醒我上传几张照片。好吧,那就传上来得瑟一下,毕竟是忙了大半年搞出来的,不晒一下自己觉得有些可惜。
入门过道和衣橱(左手边是次卧和次卫,右手边还隐藏了书房):

厨房(左手边那个窗是老婆最满意的地方……):


Read the rest of this entry »

服务器批量部署Tips

December 16th, 2011

无可否认,如果手头只有各位数的服务器,无论怎么弄人力都不成问题。
然而当规模上升到一定层次的时候,这种重复性的问题就让人变得很烦躁。

三年多前,我在淘宝的工作就是负责安装调试MySQL。一开始业务量很小,我很开心地在每台服务器上运行configure&&make&&make install。看着编译输出跑满整个屏幕,很有一种matrix的感觉。手工编辑my.cnf,手工启动MySQL。一切都那么美好。

半年过去了,随着业务量的增长,我发现曾经最享受的简单劳动变成了压榨剩余时间的怪兽。在多方咨询之后,我做了一个简单的安装脚本,只要在目标主机上运行它,不需要任何干涉就能跑完。所以我的工作变成了打开很多个窗口,并行执行这个脚本。事情又变得美好起来了。
Read the rest of this entry »

网卡升级和TCP超时

December 12th, 2011

最近OceanBase的ups网卡从千兆升级到了万兆,结果在代码和压力都没有变的情况下,访问低峰期间出现了主备ups的commit log传输超时。大家百思不得其解,硬件更好了,怎么地也不应该表现更差才对。在检查了OB版本、客户端版本、应用代码、甚至网卡驱动版本之后,核心系统组的同事将目光投向了Linux网络相关的参数上来。
经过验证发现/etc/sysctl.conf的配置确实有问题,更改后如下:
#default
kernel.sysrq = 0
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296

#user define
#FS
fs.file-max = 131072

#NET
net.core.somaxconn = 2048
net.core.netdev_max_backlog = 10000
net.core.rmem_default = 16777216
net.core.wmem_default = 16777216
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1

#VM
vm.swappiness = 0
解决超时问题的参数是net.core下面的缓冲区大小设置。
在TCP的接收端,OS只有一个core缓冲区来缓存所有需要分发的网络包。在使用千兆网卡的时候,发送端通过发送n多小包向接收端同步数据;升级到万兆网卡后,接收端处理能力仍然足够,但是缓存区没有办法缓存发送端发出的大包(万兆网卡将多个小包合起来发送),所以就产生了问题。