非法入侵 发表于 2018-10-27 14:42:32

小米科技 电商部门 Mongodb sharding Cluster with Replica Set 集群 文档

  转自: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. cpu2
  2. 内存 2
  3. 硬盘 2
   系统设置3
   权限管理4
   软件以及脚本准备4
  1. yum 安装支持软件4
  2. mongodb4
  3. V8引擎4
  4. GYP4
   目录结构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. 配置mongod9
  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 kernelscope linksrc' | 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
页: [1]
查看完整版本: 小米科技 电商部门 Mongodb sharding Cluster with Replica Set 集群 文档