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

[经验分享] mongodb学习之一(搭建集群+分片)

[复制链接]

尚未签到

发表于 2015-12-22 15:10:15 | 显示全部楼层 |阅读模式
个人理解:搭建集群是为了数据的热机备份,保证了数据的安全。也就是说在一台数据库挂掉的情况下,在没有人为的干预下就能自动的启动从机继续提供数据库服务。保证了数据的持续写入和读取,不会对业务造成影响。分片的目的有两个,一是在数据写入压力过大的时候,分片能起到分担写入压力的作用;二是在数据库的硬盘不足的时候分片可以实现动态扩容的意义。
       下面我们开始我们的mongodb探索之旅吧!!
        准备了六台linux服务器,系统centos。vmware虚拟机ok

        下载了mongodb的安装包mongodb-linux-x86_64-2.6.5.gz,该安装包解压即可使用,不需要安装。六台机器命名为server-1/server-2/server-3/server-4/server-5/server-6(这样命名为了下面便于理解)
        1、配置机器server-1的ip配置
            >vi /etc/sysconfig/network-scripts/ifcfg-eth0
            修改为:
            DEVICE=eth1
HWADDR=00:0C:29:3E:A0:4D
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
            #此处为你的ip地址

IPADDR=192.168.136.74  
NETMASK=255.255.255.0
GATEWAY=192.168.136.254
   
            保存退出
            重启机器(如果ip未改变成功,确认一下HWADDR修改的是否是本机的mac,命令ifcfg -a
        (其他五台服务器同理)
        2.集群设计方案
            把server-1/server-2/server-3设置为shard1
            把server-4/server-5/server-6设置为shard2
            把server-1和server-4设置为primary(主)
            把server-2和server-5设置为secondary(从)
            把server-3和server-6设置为arbiter     (投票决策者)
        
            需要在server-1、server-2、server-3上面分别设置路由机制mongos和控制mongo-config
        3、开始配置
            解压缩后的目录修改为mongodb(方便后面配置)

            在解压的mongodb的根目录下创建一个配置文件目录
            
                   >mkdir conf
            同理需要建立数据data和日志log的存储目录(这个是因为mongodb无法自己创建目录)
                   mkdir -p /data
                   mkdir -p /data/log
              
        shard1的三台机器都按下面写配置文件(vi shard11.conf)
        Shard11.conf
        replSet=shard1
        port=11721
        dbpath=../data/shard11
        logpath=..data/log/shard11.log
        logappend=true
        fork=true
        oplogSize=100
        shardsvr=true
        directoryperdb=true

            然后:
            启动:./mongod -f ../conf/shard11.con
            
             在shard2的所有的机器都如此处理,其中的端口号需要不同
               
            当所有的机器都启动了之后,我们需要将片中的机器关联起来

            连接shard1中的任一机器(端口号为你在shard1中设置的端口)

            执行命令
                       ./mongo 127.0.0.1:11721/admin
            输入:config={_id:'shard1',members:[{_id:0,host:"192.168.136.74:11721",priority:2},{_id:1,host:"192.168.136.76:11721",priority:1},{_id:2,host:"192.168.136.78:11721",arbiterOnly:true}]}
  



      初始化,执行
            rs.initiate(config)
            绑定成功(server-1/server-2/server-3)

            同理将shard2搞定

            然后我们要配置mongos和mongos config
               
               
    Shard1 配置config server  三台都配
    Vi config.conf
    dbpath=/root/mongodb/data/config
          configsvr = true
          port = 40000
          logpath =/root/mongodb/data/configlog/config.log
          logappend = true
          fork = true
        
    分别启动配置服务
    ./mongod -f ../conf/config.conf
   
         启动路由节点(注意端口号)
   
          vi   mongos_config.conf
        
          configdb=192.168.136.74:40000,192.168.136.76:40000,192.168.136.78:40000
    port = 50000
          chunkSize = 5
           logpath =/root/mongodb/data/log/mongos.log
           logappend=true
           fork = true
    启动
    ./mongos -f ../conf/mongos_config.conf
    配置sharding
    ./mongo 127.0.0.1:50000/admin
    添加shard集合
    db.runCommand( { addshard : "shard1/192.168.136.74:11721,192.168.136.76:11721,192.168.136.78:11721",name:"shard1",maxsize:20480});
    db.runCommand( { addshard : "shard2/192.168.136.71:11722,192.168.136.75:11722,192.168.136.77:11722",name:"shard2",maxsize:20480});
    查看shards
    db.runCommand({listshards:1})
        
          激活数据库分片
          创建数据库test,创建表mycollection
          db.runCommand( { enablesharding : “test” } );(手动敲入)
          通过执行以上命令,可以让数据库跨shard,如果不执行这步,数据库只会存放在一个shard,一旦激活数据库分片,数据库中不同的collection将被存放在不同的shard上,但一个collection仍旧存放在同一个shard上,要使单个collection也分片,还需单独对collection做些操作
         
           Collection分片
          db.runCommand( { shardcollection : “”,key :  });
          例如:db.runCommand( { shardcollection : "test.mycollection",key : {_id: 1} } )
          例如:db.runCommand( { shardcollection : "testdb.table1",key : {id: 1} } )
  

  

    搭建好之后进行性能测试
          测试案例:
                1.插入10万条数据(此处可以写测试案例的程序来进行压力测试)
                2.插入数据过程中,Shard11强制关机(192.168.136.74),检查发现shard12已经转变为primary,插入10万条数据。耗时741秒,重启Shard11后发现数据迅速的从主机同步过来,同时shard11又称为了primary

                3.插入100万条数据,耗时18分钟,数据增大后插入速度反而增快
                4.多线程测试
                       调用mongodb client (线程池资源,默认10个线程)
                       插入10万条数据,耗时62.881
                       插入100万条 耗时658
   
    补充说明,总算完成了mongodb的初步学习,主要完成的工作就是搭建了简单的数据库集群。集群的具有的功能包括数据库的备份(一主一从),分片处理来缓解插入数据压力过大的问题。其中遇到启动失败或者配置失败等问题,一定要仔细检查其中的配置以及端口启用或者是目录创建失败等问题。
   
    心得:总体感觉搭建一个简单的mongodb数据库集群还是很容易的,关键是对细节以及性能、参数设置的理解上。此外,数据库的设计应该是根据项目的需求而设。不一定是设计了集群和分片就是最好的。

        
  

运维网声明 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-154890-1-1.html 上篇帖子: MongoDB学习——在MVC模式下通过Jqgrid表格操作MongoDB数据 下篇帖子: MongoDB学习——通过samus驱动实现基本数据操作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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