设为首页 收藏本站
查看: 1034|回复: 0

[经验分享] 小米科技 电商部门 Mongodb sharding Cluster with Replica Set 集群 文档

[复制链接]

尚未签到

发表于 2018-10-27 14:42:32 | 显示全部楼层 |阅读模式
  转自: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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-627202-1-1.html 上篇帖子: 【NoSQL】MongoDB服务器相关选型和基础优化参考 下篇帖子: MongoDB文档更新(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表