Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1792
  • 博文数量: 1
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 11
  • 用 户 组: 普通用户
  • 注册时间: 2015-01-29 16:14
文章分类

全部博文(1)

文章存档

2015年(1)

我的朋友
最近访客

分类: NOSQL

2015-01-30 09:30:07

个人理解:搭建集群是为了数据的热机备份,保证了数据的安全。也就是说在一台数据库挂掉的情况下,在没有人为的干预下就能自动的启动从机继续提供数据库服务。保证了数据的持续写入和读取,不会对业务造成影响。分片的目的有两个,一是在数据写入压力过大的时候,分片能起到分担写入压力的作用;二是在数据库的硬盘不足的时候分片可以实现动态扩容的意义。
       下面我们开始我们的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数据库集群还是很容易的,关键是对细节以及性能、参数设置的理解上。此外,数据库的设计应该是根据项目的需求而设。不一定是设计了集群和分片就是最好的。

        


阅读(524) | 评论(0) | 转发(0) |
1

上一篇:没有了

下一篇:没有了

给主人留下些什么吧!~~