|
转自:http://blog.csdn.net/ylqmf/article/details/7958804
本文提供下载:http://wenku.baidu.com/view/d57d1d1e227916888486d7a9.html
mongodb分片群集(sharding cluster)
目录
mongodb分片群集(sharding cluster) 1
 变更记录 2
 硬件说明 2
1. cpu 2
2. 内存 2
3. 硬盘 2
 系统设置 3
 权限管理 4
 软件以及脚本准备 4
1. yum 安装支持软件 4
2. mongodb 4
3. V8引擎 4
4. GYP 4
 目录结构 4
1. Mongodb所在的目录4
a) /opt/soft/mongo-2.2.04
2. 数据目录 4
3. 日志文件以及集群中间目录5
 架构图 5
 安装配置流程 5
1. 创建mongodb用户6
2. 创建安装目录 6
3. 软件准备 8
4. 需要在/etc/hosts中设置127.0.0.1 servername9
5. 配置mongod 9
6. 配置mongos config11
7. 测试分片 12
8. 测试V8引擎 13
 维护命令 13
 注意事项 16
 备注 16
附1:op同学提供的iptables脚本,很好很强大。 16
附2:test.js 21
 变更记录
日期 作者 版本说明
2012-09-08 袁立强1.0 初稿-小米电商DBA组
2012-09-12 袁立强1.0.1 采纳运维建议后更新
原文链接:http://blog.csdn.net/ylqmf/article/details/7958804
 硬件说明
1. cpu
a) cpu情况为2 cpu 8 core 16 process。
b) 使用numactl来增强mongo对多核架构的利用效率,将每个服务器上的2个mongod实例分配到不同的cpu node 上,将arbiter、config 和 mongos分配到所有core上。
2. 内存
a) 内存64GB
b) 正测试使用/etc/security/limits.conf做限制,防止多实例争抢内存。
3. 硬盘
a) mongo的bson文件系统极其耗费磁盘空间、journal local moveChunk 目录下的文件操作读写频繁而数据基本不增长。
b) 放置mongodb数据文件所在的磁盘做raid 5,大小4.2TB。
c) 放置journal local moveChunk 目录放置在系统盘下做raid 1+0,大小300GB。
 系统设置
操作系统:CentOS6.0 2.6.32-220.el6.x86_64 GNU/Linux
文件系统:
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
/dev/sdb1 on /data type ext4 (rw)
/dev/sda5 on /data1 type ext4 (rw)
因mongo集群中需要频繁的建立tcp连接,所以这里对tcp进行优化
cat >> /etc/sysctl.conf db.system.profile.stats()
23. #重新开启profiling
turn off profiling => db.setProfilingLevel(0);
drop the collection => db.system.profile.drop()
start again profiling => db.setProfilingLevel(1); / db.setProfilingLevel(2);
24. #As an example, to see output without $cmd (command) operations, invoke:
db.system.profile.find( function() { return this.info.indexOf('$cmd') 1 && o.waitingForLock==true) db.killOp(o.opid) })
 注意事项
1. Mongodb sharding cluster 自动平衡性能非常差,而且非常缓慢,服务器长期忙于平衡数据。建议对sharded为false的表进行手动切片操作,先关闭自动平衡,这样切分效果和对数据影响较小。
2. 切换replica set 的主从时,原主库数据会rollback,应当避免在大量写入数据的时候做类似的操作。
 备注
附1:op同学提供的iptables脚本,很好很强大。
#!/bin/sh
#
export LANG=C
#
#
/etc/init.d/iptables stop >/dev/null 2>&1
#
arptables -F
#
# reset the default policies in the filter table.
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
#
# reset the default policies in the nat table.
#
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t nat -P OUTPUT ACCEPT
#
# reset the default policies in the mangle table.
#
/sbin/iptables -t mangle -P PREROUTING ACCEPT
/sbin/iptables -t mangle -P OUTPUT ACCEPT
#
# flush all the rules in the filter and nat tables.
#
/sbin/iptables -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
#
# erase all chains that's not default in filter and nat table.
#
/sbin/iptables -X
/sbin/iptables -t nat -X
/sbin/iptables -t mangle -X
#Zero counters in all chains
/sbin/iptables -Z
/sbin/iptables -t nat -Z
/sbin/iptables -t mangle -Z
# flush all the rules in the filter and nat tables.
#
/sbin/iptables -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
#
#echo '1255350' > /proc/sys/net/ipv4/ip_conntrack_max
#
if [ "$1" = 'stop' ]
then
/etc/init.d/iptables stop >/dev/null 2>&1
#
arptables -F
exit 0
fi
#
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_conntrack_pptp
/sbin/modprobe ip_conntrack_proto_sctp
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_nat_pptp
#
/sbin/sysctl -q -w net.ipv4.ip_forward=1
#
#arp filter
test `ip addr list dev em2 | grep -c 'inet 192.168.'` -eq 0 && arptables -A IN -i em2 -d 192.168.0.0/16 -j DROP
test `ip addr list dev em2 | grep -c 'inet 10.'` -eq 0 && arptables -A IN -i em2 -d 10.0.0.0/8 -j DROP
test `ip addr list dev em2 | grep -c 'inet 172.'` -eq 0 && arptables -A IN -i em2 -d 172.16.0.0/12 -j DROP
#
/sbin/iptables -A INPUT -i em2 -m state --state> #
#tcp accept
#
/sbin/iptables -A INPUT -i em2 -p tcp -m tcp --dport 5666 -m state --state NEW -j ACCEPT
/sbin/iptables -A INPUT -i em2 -p tcp -m tcp --dport 199 -m state --state NEW -j ACCEPT
/sbin/iptables -A INPUT -i em2 -p tcp -m tcp -s 10.100.2.116/32 --dport 27001 -m state --state NEW -j ACCEPT
/sbin/iptables -A INPUT -i em2 -p tcp -m tcp -s 10.100.2.200/32 --dport 27001 -m state --state NEW -j ACCEPT
/sbin/iptables -A INPUT -i em2 -p tcp -m tcp -s 10.100.2.204/32 --dport 27001 -m state --state NEW -j ACCEPT
/sbin/iptables -A INPUT -i em2 -p tcp -m tcp -s 10.100.2.207/32 --dport 27001 -m state --state NEW -j ACCEPT
/sbin/iptables -A INPUT -i em2 -p tcp -m tcp -s 10.100.2.117/32 --dport 29000:29003 -m state --state NEW -j ACCEPT
/sbin/iptables -A INPUT -i em2 -p tcp -m tcp -s 10.100.2.118/32 --dport 29000:29003 -m state --state NEW -j ACCEPT
/sbin/iptables -A INPUT -i em2 -p tcp -m tcp -s 10.100.2.119/32 --dport 29000:29003 -m state --state NEW -j ACCEPT
/sbin/iptables -A INPUT -i em2 -p tcp -m tcp -s 180.186.32.0/24 --dport 22 -m state --state NEW -j ACCEPT
/sbin/iptables -A INPUT -i em2 -p tcp -m tcp -s 58.68.247.0/27 --dport 22 -m state --state NEW -j ACCEPT
/sbin/iptables -A INPUT -i em2 -p tcp -m tcp -s 58.68.235.0/27 --dport 22 -m state --state NEW -j ACCEPT
/sbin/iptables -A INPUT -i em2 -p tcp -m tcp -s 58.68.235.64/26 --dport 22 -m state --state NEW -j ACCEPT
/sbin/iptables -A INPUT -i em2 -p tcp -m tcp -s 211.103.219.162/32 --dport 22 -m state --state NEW -j ACCEPT
/sbin/iptables -A INPUT -i em2 -p tcp -m tcp -s 59.108.40.194/32 --dport 22 -m state --state NEW -j ACCEPT
/sbin/iptables -A INPUT -i em2 -p tcp -m tcp -s 10.237.0.0/16 --dport 22 -m state --state NEW -j ACCEPT
/sbin/iptables -A INPUT -i em2 -p tcp -m tcp -s 10.100.2.0/24 --dport 22 -m state --state NEW -j ACCEPT
#
/sbin/iptables -I FORWARD -i ppp+ -t mangle -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1280
/sbin/iptables -I FORWARD -i tun+ -t mangle -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1360
#
#default block tcp
/sbin/iptables -A INPUT -i em2 -p tcp -m tcp -m state --state NEW -j DROP
#
#udp accept
#
/sbin/iptables -A INPUT -i em2 -p udp -m udp --dport 53 -m state --state NEW -j ACCEPT
/sbin/iptables -A INPUT -i em2 -p udp -m udp --dport 1000:3000 -m state --state NEW -j ACCEPT
/sbin/iptables -A INPUT -i em2 -p udp -m udp --dport 5000:65535 -m state --state NEW -j ACCEPT
/sbin/iptables -A INPUT -i em2 -p udp -m udp --dport 465 -m state --state NEW -j ACCEPT
/sbin/iptables -A INPUT -i em2 -p udp -m udp --dport 123 -m state --state NEW -j ACCEPT
/sbin/iptables -A INPUT -i em2 -p udp -m udp --dport 161 -s 180.186.32.213 -m state --state NEW -j ACCEPT
#
#default block tcp
/sbin/iptables -A INPUT -i em2 -p udp -m udp -m state --state NEW -j DROP
#
#
#icmp accept
#
/sbin/iptables -A INPUT -i em2 -p icmp -m icmp --icmp-type 8 -m state --state NEW -j ACCEPT
#
#default block icmp
/sbin/iptables -A INPUT -i em2 -p icmp -j DROP
#
/sbin/iptables -I POSTROUTING -t nat -o em2 -s 192.168.0.0/16 -j MASQUERADE
/sbin/iptables -I POSTROUTING -t nat -o em2 -s 172.16.0.0/12 -j MASQUERADE
/sbin/iptables -I POSTROUTING -t nat -o em2 -s 10.0.0.0/8 -j MASQUERADE
#
#temp for re-form
####
###/sbin/iptables -I POSTROUTING -t nat -o eth1 -j MASQUERADE
###/sbin/iptables -I POSTROUTING -t nat -o eth1 -s 192.168.0.0/16 -j RETURN
###/sbin/iptables -I POSTROUTING -t nat -o eth1 -s 10.2.0.0/16 -j RETURN
#############for Mi***
#########
########tunlist=`ip route | grep 'dev tunl' | grep 'proto kernel scope link src' | awk '{ print $3 }'`
########if [ -z "$tunlist" ]
########then
######## echo "`date` INFO: IPIP tunnel no exist."
########else
######## for onetunl in $tunlist
######## do
######## if [ "$onetunl" == 'tunl1' ]
######## then
######## echo "`date` INFO: skipped IPIP tunnel $onetunl"
######## continue;
######## fi
######## onetunlip=`ip route | grep "dev $onetunl" | awk -F'src' '{ print $2 }' | awk '{ print $1 }'`
######## if [ -z "$onetunlip" ]
######## then
######## echo "`date` WARNING: IPIP tunnel $onetunl ip no found."
######## continue;
######## fi
######## stra=`echo $onetunlip | awk -F'.' '{ print $1 }'`
######## strb=`echo $onetunlip | awk -F'.' '{ print $2 }'`
######## strc=`echo $onetunlip | awk -F'.' '{ print $3 }'`
######## snatip="$stra.$strb.$strc.100-$stra.$strb.$strc.200:5000-65000"
######## /sbin/iptables -I POSTROUTING -t nat -o $onetunl -j MASQUERADE
######## /sbin/iptables -I POSTROUTING -t nat -p icmp -o $onetunl -j MASQUERADE
######## #/sbin/iptables -I POSTROUTING -t nat -o $onetunl -p udp -j RETURN
######## #/sbin/iptables -I POSTROUTING -t nat -o $onetunl -p tcp -j RETURN
######## /sbin/iptables -I POSTROUTING -t nat -o $onetunl -p udp -j SNAT --to-source $snatip
######## /sbin/iptables -I POSTROUTING -t nat -o $onetunl -p tcp -j SNAT --to-source $snatip
######## done
########fi
#########
#
附2:test.js
function dotest() {
var str = "xxxxxxxxxxxxxxxxx0000000000";
var data = str + str + str + str;
var data = data + data + data + data;
var max = 10000;
var arr = [];
var total = 0;
for(var a=0; a |
|
|