mangodb—分片和副本集架构部署

mangodb—分片和副本集架构部署

三台服务器20.0.0.18(19)(20)

**服务器18**服务器19**服务器20
mongosmongosmongos
config serverconfig serverconfig server
shard server1 主节点shard server1副节点shard server1 仲裁
shard server2 仲裁shard server2主节点shard server2 副节点
shard server3 副节点shard server3 仲裁shard server3 主节点

一.每台机器上先安装mongodb

1.关闭系统防火墙和安全机制
systemctl stop firewalld.service 
setenforce 0
2.先把安装包上传到/opt目录下解压
tar zxvf mongodb-linux-x86_64-3.6.3.tgz

image-20220829235059668

3.在usr/local/文件夹下创建mongodb文件夹
mkdir mongodb

image-20220829235220030

4.然后将mongodb-linux-x86_64-3.6.3下的文件移动到mongodb文件夹下
cd  /opt
mv mongodb-linux-x86_64-3.6.3/* /usr/local/mongodb/
cd /usr/local/mongodb/
mkdir data

image-20220829235453839

5.在usr/local/mongodb文件夹下创建logs文件
touch /usr/local/mongodb/logs
6.进入/usr/local/mongodb/bin目录下,启动mongodb服务
cd /usr/local/mongodb/bin
./mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend  --port=27017 --fork

./mongo   ##启动客户端

image-20220829235710209

image-20220829235816857

7.分别在每台机器建立conf、mongos、config、shard1、shard2、shard3六个目录,因为mongos不存储数据,只需要建立日志文件目录即可。
mkdir -p /usr/local/mongodb/conf
mkdir -p /usr/local/mongodb/mongos/log
mkdir -p /usr/local/mongodb/config/data
mkdir -p /config/log
mkdir -p /usr/local/mongodb/shard1/data
mkdir -p /usr/local/mongodb/shard1/log
mkdir -p /usr/local/mongodb/shard2/data
mkdir -p /usr/local/mongodb/shard2/log
mkdir -p /usr/local/mongodb/shard3/data
mkdir -p /usr/local/mongodb/shard3/log

image-20220829232551300

二.配置服务器搭建副本集

Mongodb3.4以后要求配置服务器也创建副本集,不然集群搭建不成功。添加配置文件。(每个都要配置)
vi /usr/local/mongodb/conf/config.conf
进入后添加以下配置信息
## 配置文件内容
pidfilepath = /usr/local/mongodb/config/log/configsrv.pid
dbpath = /usr/local/mongodb/config/data
logpath = /usr/local/mongodb/config/log/congigsrv.log
logappend = true
bind_ip = 0.0.0.0
port = 24000
fork = true
#declare this is a config db of a cluster;
configsvr = true
#副本集名称
replSet=configs
#设置最大连接数
maxConns=20000

image-20220829233405477

分别启动三台服务器的config server,连接:进入/etc目录下
./mongod -f /usr/local/mongodb/conf/config.conf

image-20220830000211822

登录任意一台配置服务器,初始化配置副本集,登录:进入/usr/local/mongodb/bin目录下
./mongo --port 24000

使用admin数据库

use admin

config变量:

config = {
...  members : [
... {_id : 0, host : "20.0.0.18:24000" },
...  {_id : 1, host : "20.0.0.19:24000" },
...   {_id : 2, host : "20.0.0.20:24000" }
... ]
... }

image-20220830000848046

image-20220830000901495

初始化副本集:

rs.initiate(config)

image-20220830000957084

这一步非常重要,必须初始化成功。不成功的话,路由服务器与配置服务器连接不上。
其中,”_id” : “configs”应与配置文件中配置的 replicaction.replSetName 一致,”members” 中的 “host” 为三个节点的 ip 和 port。

三台分片服务器搭建副本集

配置分片副本集(三台机器一起配置)。

1.设置第一个分片副本集
配置文件:

vi /usr/local/mongodb/conf/shard1.conf

#配置文件内容
#——————————————–
pidfilepath = /usr/local/mongodb/shard1/log/shard1.pid
dbpath = /usr/local/mongodb/shard1/data
logpath = /usr/local/mongodb/shard1/log/shard1.log
logappend = true
bind_ip = 0.0.0.0
port = 25001
fork = true
#副本集名称
replSet=shard1
#declare this is a shard db of a cluster;
shardsvr = true
#设置最大连接数
maxConns=20000

image-20220830001406127

启动三台服务器的shard1 server,进入/usr/local/mongodb/bin目录下:

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

登陆任意一台服务器,初始化副本集,进入/usr/local/mongodb/bin目录下:

./mongo --port 25001

使用admin数据库
use admin

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

 config = {
...   _id : "shard1",
... members : [
...  {_id : 0, host : "20.0.0.18:25001" },
...  {_id : 1, host : "20.0.0.19:25001" },
...  {_id : 2, host : "20.0.0.20:25001" , arbiterOnly: true }
...      ]
...  }


image-20220830002022354

初始化副本集配置

rs.initiate(config);

image-20220830002112651

2.设置第二个分片
进入配置文件(三台机子一起配置)

vi /usr/local/mongodb/conf/shard2.conf

#配置文件内容
#——————————————–
pidfilepath = /usr/local/mongodb/shard2/log/shard2.pid
dbpath = /usr/local/mongodb/shard2/data
logpath = /usr/local/mongodb/shard2/log/shard2.log
logappend = true
bind_ip = 0.0.0.0
port = 25002
fork = true
#副本集名称
replSet=shard2
#declare this is a shard db of a cluster;
shardsvr = true
#设置最大连接数
maxConns=20000

image-20220830002241960

启动三台服务器的shard2 server,进入/usr/local/mongodb/bin目录下:

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

image-20220830002323000

登陆任意一台服务器,进入/usr/local/mongodb/bin初始化副本集

./mongo --port 25002

use admin

定义副本集配置

config = {
...  _id : "shard2",
... members : [
...  {_id : 0, host : "20.0.0.18:25002"  , arbiterOnly: true },

...  {_id : 1, host : "20.0.0.19:25002" },
...  {_id : 2, host : "20.0.0.20:25002" }
... ]
... }

image-20220830002652148

初始化副本集配置
rs.initiate(config);

image-20220830002722058

这里出现了错误 ,换另外一台机子做

设置第三个分片副本集
配置文件代码如下:

vi /usr/local/mongodb/conf/shard3.conf

#配置文件内容
#——————————————–
pidfilepath = /usr/local/mongodb/shard3/log/shard3.pid
dbpath = /usr/local/mongodb/shard3/data
logpath = /usr/local/mongodb/shard3/log/shard3.log
logappend = true
bind_ip = 0.0.0.0
port = 25003
fork = true
#副本集名称
replSet=shard3
#declare this is a shard db of a cluster;
shardsvr = true
#设置最大连接数
maxConns=20000

image-20220830002908937

启动三台服务器的shard3 server,进入/usr/local/mongodb/bin目录下:

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

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

./mongo --port 25003

use admin

定义副本集配置

config = {
...  _id : "shard3",
...   members : [
... {_id : 0, host : "20.0.0.18:25003" },
...  {_id : 1, host : "20.0.0.19:25003" , arbiterOnly: true},
... {_id : 2, host : "20.0.0.20:25003" }
... ]
... }


image-20220830003241671

初始化副本集配置

rs.initiate(config);

image-20220830003310234

4、 配置路由服务器

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

vi /usr/local/mongodb/conf/mongos.conf
#内容
pidfilepath = /usr/local/mongodb/mongos/log/mongos.pid
logpath = /usr/local/mongodb/mongos/log/mongos.log
logappend = true
bind_ip = 0.0.0.0
port = 23000
fork = true
#监听的配置服务器,只能有1个或者3个 configs为配置服务器的副本集名字
configdb = configs/20.0.0.18:24000,20.0.0.19:24000,20.0.0.20:24000

#设置最大连接数
maxConns=20000

启动三台服务器的mongos server,进入/usr/local/mongodb/bin目录下:

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

image-20220830095758245

ps:中间出现服务一直等待连接中,也没有报错 就是连接不上,后来 排错是因为初始化config.server副本集出错了 忘记加 _id : “configs”,服务一直找不到它(遇到问题可以查看config.log的日志文件,看不懂直接有道翻译)

image-20220830100131988

5、分片

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

登陆任意一台mongos,进入/usr/local/mongodb/bin目录下
./mongo --port 23000

使用admin数据库
use  admin


串联路由服务器与分配副本集
sh.addShard("shard1/20.0.0.18:25001,20.0.0.19:25001,20.0.0.20:25001")

sh.addShard("shard2/20.0.0.18:25002,20.0.0.19:25002,20.0.0.20:25002")

sh.addShard("shard3/20.0.0.18:25003,20.0.0.19:25003,20.0.0.20:25003")


查看集群状态
sh.status()

image-20220830101543283

image-20220830101739925

6、 测试

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

指定testdb分片生效
db.runCommand( { enablesharding :"testdb"});

image-20220830101922641

指定数据库里需要分片的集合和片键
db.runCommand( { shardcollection : "testdb.table1",key : {id: "hashed"} } )

image-20220830110441723

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

 先进入testdb数据库
 use testdb  ##因为上面设置了 只有这个库才有数据分片的功能
 
 for(var i=1;i<=10000;i++){
... db.table1.insert({id:i,name:"sundenghui"})
... }

image-20220830104418958

查看分配状态
db.table1.stats();

image-20220830112519017

image-20220830112540467

image-20220830112601574

的 table1 表需要分片,根据 id 自动分片到 shard1 ,shard2,shard3 上面去。要这样设置是因为不是所有mongodb 的数据库和表 都需要分片!插入100000条数据测试:

 先进入testdb数据库
 use testdb  ##因为上面设置了 只有这个库才有数据分片的功能
 
 for(var i=1;i<=10000;i++){
... db.table1.insert({id:i,name:"sundenghui"})
... }

[外链图片转存中…(img-DRxwTwFK-1662436163063)]

查看分配状态
db.table1.stats();

[外链图片转存中…(img-Xz7tW315-1662436163064)]

[外链图片转存中…(img-5OjsIV8l-1662436163064)]

[外链图片转存中…(img-P07DlRbm-1662436163064)]

每个节点上根据hash算法分配这10000条数据

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值