基于OpenEuler多机分片安装MongoDB 数据库

举报
Hhxm416 发表于 2021/07/14 21:51:47 2021/07/14
【摘要】 配置环境变量# 内容export MONGODB_HOME=/usr/mongodbexport PATH=$MONGODB_HOME/bin:$PATH# 使立即生效source /etc/profile配置服务器mkdir -p /usr/mongodb/config/datamkdir -p /usr /mongodb/config/log添加配置文件vi /usr/mongodb/...
  1. 配置环境变量
# 内容
export MONGODB_HOME=/usr/mongodb
export PATH=$MONGODB_HOME/bin:$PATH
# 使立即生效
source /etc/profile

配置服务器

mkdir -p /usr/mongodb/config/data
mkdir -p /usr /mongodb/config/log

添加配置文件

vi /usr/mongodb/config/config.conf

 

## 配置文件内容

pidfilepath = /usr/mongodb/config/log/configsrv.pid

dbpath = /usr/mongodb/config/data

logpath = /usr/mongodb/config/log/congigsrv.log

logappend = true

 

bind_ip = 0.0.0.0

port = 21000

fork = true

 

#declare this is a config db of a cluster;

configsvr = true

 

#副本集名称

replSet=configs

 

#设置最大连接数

maxConns=20000

启动三台服务器的config server

mongod -f /usr/mongodb/config/config.conf

登录任意一台配置服务器,初始化配置副本集

#连接

mongo --port 21000

#config变量

config = {

...    _id : "configs",

...     members : [

...         {_id : 0, host : "192.168.85.140:21000" },

...         {_id : 1, host : "192.168.85.141:21000" },

...         {_id : 2, host : "192.168.85.142:21000" }

...     ]

... }

 

#初始化副本集

rs.initiate(config)

其中,”_id” : “configs”应与配置文件中配置的 replicaction.replSetName 一致,”members” 中的 “host” 为三个节点的 ip port

2.配置分片副本集(三台机器)

设置第一个分片副本集

配置文件

vi /usr/mongodb/shard1/shard1.conf

 

#配置文件内容

#——————————————–

pidfilepath = /usr/mongodb/shard1/log/shard1.pid

dbpath = /usr/mongodb/shard1/data

logpath = /usr/mongodb/shard1/log/shard1.log

logappend = true

 

bind_ip = 0.0.0.0

port = 27001

fork = true

 

#打开web监控

httpinterface=true

rest=true

 

#副本集名称

replSet=shard1

 

#declare this is a shard db of a cluster;

shardsvr = true

 

#设置最大连接数

maxConns=20000

启动三台服务器的shard1 server

mongod -f /usr/mongodb/shard1/shard1.conf

登陆任意一台服务器,初始化副本集

mongo --port 27001

#使用admin数据库

use admin

#定义副本集配置,第三个节点的 "arbiterOnly":true 代表其为仲裁节点。

config = {

...    _id : "shard1",

...     members : [

...         {_id : 0, host : "192.168.85.140:27001" },

...         {_id : 1, host : "192.168.85.141:27001" },

...         {_id : 2, host : "192.168.85.142:27001 , arbiterOnly: true }

...     ]

... }

#初始化副本集配置

rs.initiate(config);

设置第二个分片副本集

配置文件

vi /usr/mongodb/shard2/shard2.conf

 

#配置文件内容

#——————————————–

pidfilepath = /usr/mongodb/shard2/log/shard2.pid

dbpath = /usr/mongodb/shard2/data

logpath = /usr/mongodb/shard2/log/shard2.log

logappend = true

 

bind_ip = 0.0.0.0

port = 27002

fork = true

 

#打开web监控

httpinterface=true

rest=true

 

#副本集名称

replSet=shard2

 

#declare this is a shard db of a cluster;

shardsvr = true

 

#设置最大连接数

maxConns=20000

启动三台服务器的shard2 server

mongod -f /usr/mongodb/shard2/shard2.conf

登陆任意一台服务器,初始化副本集

mongo --port 27002

#使用admin数据库

use admin

#定义副本集配置

config = {

...    _id : "shard2",

...     members : [

...         {_id : 0, host : "192.168.85.140:27002"  , arbiterOnly: true },

...         {_id : 1, host : "192.168.85.141:27002" },

...         {_id : 2, host : "192.168.85.142:27002" }

...     ]

... }

 

#初始化副本集配置

rs.initiate(config);

设置第三个分片副本集

配置文件

vi /usr/mongodb/shard3/shard3.conf

 

#配置文件内容

#——————————————–

pidfilepath = /usr/mongodb/shard3/log/shard3.pid

dbpath = /usr/mongodb/shard3/data

logpath = /usr/mongodb/shard3/log/shard3.log

logappend = true

 

bind_ip = 0.0.0.0

port = 27003

fork = true

 

#打开web监控

httpinterface=true

rest=true

 

#副本集名称

replSet=shard3

 

#declare this is a shard db of a cluster;

shardsvr = true

 

#设置最大连接数

maxConns=20000

启动三台服务器的shard3 server

mongod -f /usr/mongodb/shard3/shard3.conf

登陆任意一台服务器,初始化副本集

mongo --port 27003

#使用admin数据库

use admin

#定义副本集配置

config = {

...    _id : "shard3",

...     members : [

...         {_id : 0, host : "192.168.85.140:27003" },

...         {_id : 1, host : "192.168.85.141:27003" , arbiterOnly: true},

...         {_id : 2, host : "192.168.85.142:27003" }

...     ]

... }

 

#初始化副本集配置

rs.initiate(config);

3.配置路由服务器 mongos

先启动配置服务器和分片服务器,后启动路由实例:(三台机器)

vi /usr/mongodb/monogs/mongos.conf
 
#内容
pidfilepath = /usr/mongodb/mongos/log/mongos.pid
logpath = /usr/mongodb/mongos/log/mongos.log
logappend = true
 
bind_ip = 0.0.0.0
port = 20000
fork = true
 
#监听的配置服务器,只能有1个或者3个 configs为配置服务器的副本集名字
configdb = configs/192.168.85.140:21000,192.168.85.141:21000,192.168.85.142:21000
 
#设置最大连接数
maxConns=20000

启动三台服务器的mongos server

mongos -f /usr/mongodb/mongos/mongos.conf
sh.addShard("shard1/192.168.85.140:27001,192.168.85.141:27001,192.168.85.143:27001")
sh.addShard("shard2/192.168.85.140:27002,192.168.85.141:27002,192.168.85.143:27002")
sh.addShard("shard3/192.168.85.140:27003,192.168.85.141:27003,192.168.85.143:27003")
#查看集群状态
sh.status()

如果都显示

则表示成功

4.启用分片

目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到mongos路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。

登陆任意一台mongos

mongo --port 20000

#使用admin数据库

use  admin

#串联路由服务器与分配副本集

sh.addShard("shard1/192.168.85.140:27001,192.168.85.141:27001,192.168.85.142:27001")

sh.addShard("shard2/192.168.85.140:27002,192.168.85.141:27002,192.168.85.142:27002")

sh.addShard("shard3/192.168.85.140:27003,192.168.85.141:27003,192.168.85.142:27003")

#查看集群状态

sh.status()

5.测试

目前配置服务、路由服务、分片服务、副本集服务都已经串联起来了,但我们的目的是希望插入数据,数据能够自动分片。连接在mongos,准备让指定的数据库、指定的集合分片生效。

#指定testdb分片生效

db.runCommand( { enablesharding :"testdb"});

#指定数据库里需要分片的集合和片键

db.runCommand( { shardcollection : "testdb.table1",key : {id: 1} } )

我们设置testdb table1 表需要分片,根据 id 自动分片到 shard1 ,shard2,shard3 上面去。要这样设置是因为不是所有mongodb 的数据库和表 都需要分片!

测试分片配置结果

mongo  --port 26003

#使用testdb

use  testdb;

#插入测试数据

for (var i = 1; i <= 100000; i++)

db.table1.save({id:i,"test1":"testval1"});

#查看分片情况如下,部分无关信息省掉了

db.table1.stats();{"sharded" : true,

        "ns" : "testdb.table1",

        "count" : 100000,

        "numExtents" : 13,

        "size" : 549376,

        "storageSize" : 2232352,

        "totalIndexSize" : 623760,

        "indexSizes" : {"_id_" : 333808,

                "id_1" : 287952

        },

        "avgObjSize" : 54,

        "nindexes" : 2,

        "nchunks" : 3,

        "shards" : {"shard1" : {"ns" : "testdb.table1",

                        "count" : 46148,

                        "size" : 0,

                        ...

                        "ok" : 1

                },

                "shard2" : {"ns" : "testdb.table1",

                        "count" : 34937,

                        "size" : 2180472,

                        ...

                        "ok" : 1

                },

                "shard3" : {"ns" : "testdb.table1",

                        "count" :18915,

                        "size" : 3419528,

                        ...

                        "ok" : 1

                }},

        "ok" : 1

}

可以看到数据分到3个分片,各自分片数量为: shard1 “count” : 46148,shard2 “count” : 34937,shard3 “count” : 18915。已经成功了!

6.后期运维

启动关闭

mongodb的启动顺序是,先启动配置服务器,在启动分片,最后启动mongos.

mongod -f /usr/mongodb/config/config.conf

mongod -f /usr/mongodb/shard1/shard1.conf

mongod -f /usr/mongodb/shard2/shard2.conf

mongod -f /usr/mongodb/shard3/shard3.conf

mongod -f /usr/mongodb/mongos/mongos.conf

关闭时,直接killall杀掉所有进程

killall mongod

killall mongos

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。