暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mongodb 分片集群搭建

数据库笔记 2020-12-24
2206

前言

分片技术是解决如今大数据量,高吞吐量的数据库应用对传统关系型单机数据库造成巨大压力的有效手段,mongodb不同于mysql等数据库需要依赖第三方中间件来实现sharding,增加架构复杂度和运维难度,mongodb内建分片技术,并且已经做到相当高的自动化

架构模型

由图可知mongodb分片集群由三部分组成mongos,config servers,shard nodes


环境准备

IDIPROLE
1
10.0.60.79mongos
210.0.60.81config servers
310.0.61.82shard node1
410.0.61.83shard node2


搭建步骤

本次搭建在centos7.5上

以下步骤依次在所有节点执行

解压数据库tgz软件包至/usr/local下

    tar -C usr/local -zxvf mongodb-linux-x86_64-rhel70-4.0.19.tgz

    创建mongod用户组与用户:

      groupadd mongod
      useradd mongod -g mongod

      创建软连接

        ln -s usr/local/mongodb-linux-x86_64-rhel70-4.0.19 usr/local/mongo

        设置环境变量

          vi root/.bash_profile
          vi home/mongod/.bash_profile
          PATH = $PATH:/usr/local/mongo/bin
          source .bash_profile

          或者直接将二进制文件cp过去:

            sudo cp path/to/the/mongodb-directory/bin/* usr/local/bin/


            分片集群各部分组件搭建顺序(程序启动顺序也是如此):

            1.“config server” -> 2. “shard” -> 3. “mongos”


            配置config server

            config server为元数据服务器,存储分片集群元数据与配置信息,3.4版本后需部署为副本集,本次部署资源有限,在当前节点上,部署三个config server实例组成副本集

            创建数据目录:

              mkdir -p /mongodb/configserver/db1
              mkdir -p /mongodb/configserver/db2
              mkdir -p /mongodb/configserver/db3
              chown -R mongod.mongod /mongodb/configserver/db1
              chown -R mongod.mongod /mongodb/configserver/db2
              chown -R mongod.mongod /mongodb/configserver/db3

              创建日志目录:

                mkdir -p /mongodb/configserver/log1
                chown -R mongod.mongod /mongodb/configserver/log1
                mkdir -p /mongodb/configserver/log2
                chown -R mongod.mongod /mongodb/configserver/log2
                mkdir -p /mongodb/configserver/log3
                chown -R mongod.mongod /mongodb/configserver/log3

                创建配置文件:

                在/mongodb/configserver目录下创建三个配置文件:mongo_configserver1.conf,mongo_configserver2.conf,mongo_configserver3.conf

                模板参考:

                vim /mongodb/configserver/mongo_configserver1.conf

                  # 数据文件路径
                  dbpath = /mongodb/configserver/db1
                  # 日志文件路径
                  logpath = /mongodb/configserver/log1/configserver1.log
                  # 端口(21001,21002,21003)
                  port = 21001
                  # 绑定ip
                  bind_ip = 0.0.0.0
                  # 是否以守护进程方式运行
                  fork = true
                  # 副本集名称
                  replSet = rs-config
                  # 定义当前实例为config server
                  configsvr = true
                  # 是否开启认证
                  #auth = true
                  # 认证密钥文件
                  #keyFile = /mongodb/configserver/db1/mongokeyfile

                  依次启动config server:

                    mongod -f /mongodb/configserver/mongo_configserver1.conf
                    mongod -f /mongodb/configserver/mongo_configserver2.conf
                    mongod -f /mongodb/configserver/mongo_configserver3conf

                    初始化副本集:

                      mongo --port 21001
                      config = {_id : "rs-config",members : [{_id : 0, host : "10.0.60.81:21001" }, {_id : 1, host : "10.0.60.81:21002" }, {_id : 2, host : "10.0.60.81:21003"}]}
                      rs.initiate(rs-config)
                      rs.status()

                      配置shard nodes:

                      shard节点用于保存真实数据,以下步骤依次操作在10.0.60.82,10.0.60.83

                      创建数据目录:

                        mkdir -p /mongodb/shardserver/db1
                        mkdir -p /mongodb/shardserver/db2
                        mkdir -p /mongodb/shardserver/db3
                        chown -R mongod.mongod /mongodb/shardserver/db1
                        chown -R mongod.mongod /mongodb/shardserver/db2
                        chown -R mongod.mongod /mongodb/shardserver/db3

                        创建日志目录:

                          mkdir -p /mongodb/shardserver/log1
                          chown -R mongod.mongod /mongodb/shardserver/log1
                          mkdir -p /mongodb/shardserver/log2
                          chown -R mongod.mongod /mongodb/shardserver/log2
                          mkdir -p /mongodb/shardserver/log3
                          chown -R mongod.mongod /mongodb/shardserver/log3

                          创建配置文件:

                          在/mongodb/shardserver下创建三个配置文件:mongo_shardserver1.conf,mongo_shardserver2.conf,mongo_shardserver3.conf

                          模板参考:

                          vim /mongodb/shardserver/mongo_shardserver1.conf

                            # 数据文件路径
                            dbpath = /mongodb/shardserver/db1
                            # 日志文件路径
                            logpath = /mongodb/shardserver/log1/shardserver1.log
                            # 端口(27017,27018,27019)
                            port = 27017
                            # 绑定ip
                            bind_ip = 0.0.0.0
                            # 是否以守护进程方式运行
                            fork = true
                            # 副本集名称
                            replSet = rsshard
                            # 定义当前实例为shard server
                            shardsvr= true
                            # 是否开启认证
                            #auth = true
                            # 认证密钥文件
                            #keyFile = /mongodb/shardserver/db1/mongokeyfile

                            初始化副本集:

                              mongo --port 27017
                              config =
                              {_id : "rs-shard2",
                              members : [
                              {_id : 0, host : "10.0.60.83:27017" },
                              {_id : 1, host : "10.0.60.83:27018" },
                              {_id : 2, host : "10.0.60.83:27019"}
                              ]
                              }
                              rs.initiate(config)
                              rs.status()


                              配置mongos

                              mongos模块作为分片集群的查询入口,不存储真实数据,因此不需要创建数据目录,只需创建日志路径:

                                mkdir -p /mongodb/mongos/log
                                sudo chown -R mongod:mongod /mongodb/mongos

                                vim /mongodb/mongos/mongos.conf

                                  # 日志文件路径
                                  logpath = /mongodb/mongos/log/mongos.log
                                  # 端口
                                  port = 20001
                                  # 绑定ip
                                  bind_ip = 0.0.0.0
                                  # 是否以守护进程方式运行
                                  fork = true
                                  #监听的配置服务器,只能有1个或者3个 configs为配置服务器的副本集名字
                                  configdb = rs-config/10.0.60.81:21001,10.0.60.81:21002,10.0.60.81:21003

                                  启动mongos:

                                    mongos -f /mongodb/mongos/mongos.conf

                                    添加shard集群:

                                      sh.addShard("rs-shard1/10.0.60.82:27017,10.0.60.82:27018,10.0.60.82:27019")
                                      sh.addShard("rs-shard2/10.0.60.83:27017,10.0.60.83:27018,10.0.60.83:27019")

                                      查看分片集群配置:

                                      sh.status()

                                      开启分片功能

                                      对指定数据库启用分片:

                                        mongos>sh.enableSharding("test")

                                        对指定库下指定集合(test.test)进行分片,id为片键,需要有索引,1为分片类型(范围分片:1,哈希分片:hashed)

                                          mongos>sh.shardCollection("test.test",{"id":1})


                                          分片集群安全认证:

                                          mongos节点创建用户:

                                            mongo --port 20001
                                            use admin
                                            db.createUser(
                                            {
                                            user: "sysadmin",
                                            pwd: "123456",
                                            roles: [
                                            'clusterAdmin',
                                            'dbAdminAnyDatabase',
                                            'userAdminAnyDatabase',
                                            'readWriteAnyDatabase',
                                            'backup',
                                            'restore'
                                            ]
                                            }
                                            )

                                            在mongos节点创建keyfile认证文件,文件大小为756字符,需要小于1024字符

                                              openssl rand -base64 756 > /mongodb/mongos/mongokeyfile
                                              chown -R mongod.mongod /mongodb/mongos/mongokeyfile
                                              chmod 600 /mongodb/mongos/mongokeyfile

                                              创建成功后依次拷贝至集群所有节点mongodb部署目录下

                                              依次修改mongo_configserver.conf,mongo_shard.conf,mongos.conf

                                                auth=true
                                                keyfile = mongodb部署目录/mongokeyfile

                                                最后依次重启所有节点:config server->shard node->mongos


                                                文章转载自数据库笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                评论