千家信息网

Mongo之架构部署(Replica Sets+Sharding)

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,Mongo之架构部署(Replica Sets+Sharding)一、环境要构建一个 MongoDB Sharding Cluster,需要三种角色:•Shard Server: mongod 实例,
千家信息网最后更新 2025年01月20日Mongo之架构部署(Replica Sets+Sharding)

Mongo之架构部署(Replica Sets+Sharding)

一、环境

要构建一个 MongoDB Sharding Cluster,需要三种角色:

Shard Server: mongod 实例,用于存储实际的数据块。

Config Server: mongod 实例,存储了整个 Cluster Metadata,其中包括 chunk 信息。

Route Server: mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一进程

数据库。

方案一:

192.168.136.14

192.168.136.15

192.168.136.16

192.168.136.26

192.168.136.29

Shard1(master)

Shard2(master)

Shard3(master)

Shard1(slave)

Shard1(arbiter)

Shard2(slave)

Shard3(slave)

Shard1(slave)

Shard3(slave)

Shard2(arbiter)

Shard3(arbiter)

Shard1(arbiter)

Shard2(arbiter)

Shard2(slave)

Shard3 (arbiter)

1.节点:

S1: 192.168.136..14,192.168.136..26,192.168.136..16,192.168.136.15,192.168.136.29(arbiter)

S2: 192.168.136.15,192.168.136.26,192.168.136.14,192.168.136.16,192.168.136.29(arbiter)

S3: 192.168.136.16,192.168.136.26,192.168.136.15,192.168.136.14,192.168.136.29(arbiter)

c

主机

端口信息

192.168.136.14

mongod shard1:27017(master)

mongod shard2:27018(slave)

mongod shard3:27019(arbiter)

mongod config:30000

mongs:40000

192.168.136.15

mongod shard1:27017(arbiter)

mongod shard2:27018(master)

mongod shard3:27019(slave)

mongod config:30000

mongs:40000

192.168.136.16

mongod shard1:27017(slave

mongod shard2:27018(arbiter)

mongod shard3:27019(master)

mongod config:30000

mongs:40000

192.168.136.26

mongod shard1:27017(slave)

mongod shard2:27018(slave)

mongod shard3:27019(slave)

192.168.136.29

mongod shard1:27017(arbiter)

mongod shard2:27018(arbiter)

mongod shard3:27019(arbiter)

二、安装部署

软件准备及目录

1.下载mongodb程序

curl -O http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-1.8.3.tgz

2.解压mongodb-linux-x86_64-2.0.0.tgz

tar zxvf mongodb-linux-x86_64-1.8.3.tgz

3.重命名mongodb-linux-x86_64-2.0.0.tgzmongodb

mv mongodb-linux-x86_64-2.0.0 mongodb

4.进入mongodb目录

cd mongodb

5.新建文件夹data

mkdir data

mkdir logs

配置Replica Sets,Config Server

※配置配置文件conf

# 1.start_mongod Shard1.conf

shardsvr=true

port=27017

dbpath=/data/database/shard1/

logpath=/data/logs/shard1.log

logappend=true

fork=true

replSet=s1

rest=true

journal=true

# 2.start_mongod Shard2.conf

shardsvr=true

port=27018

dbpath=/data/database/shard2/

logpath=/data/logs/shard2.log

logappend=true

fork=true

replSet=s2

rest=true

journal=true

# 3.start_mongod Shard3.conf

shardsvr=true

port=27019

dbpath=/data/database/shard3/

logpath=/data/logs/shard3.log

logappend=true

fork=true

replSet=s3

rest=true

journal=true

192.168.136.14

1.创建相应的文件夹(注意此处的testadmin是客户端登陆名)

mkdir -p /data/database/shard1
mkdir -p /data/database/shard2
mkdir -p /data/database/shard3
mkdir -p /data/database/config

mkdir -p /data/logs

2.配置mongod

./mongod --config /mongodb/shard1.conf

./mongod --config /mongodb/shard2.conf

./mongod --config /mongodb/shard3.conf

./mongod --config /mongodb/configsvr.conf

3.查看mongod的进程是否启动

ps aux | grep mongodb | grep -v grep

4.初始化replica sets(此处ip是对应的内网IP)

/testadmin/mongodb/bin/mongo --port 27017

config = {_id: 's1', members: [{_id: 0,host: '192.168.136.14:27017',priority:5},{_id: 1, host: '192.168.136.26:27017',priority:2},{_id: 2, host: '192.168.136.16:27017',priority:.5},{_id: 3, host: '192.168.136.15:27017',arbiterOnly: true},{_id: 4, host: '192.168.136.29:27017', arbiterOnly: true}]}

rs.initiate(config)
rs.status()

192.168.136.15

1.创建相应的文件夹(注意此处的testadmin是客户端登陆名)

mkdir -p /data/database/shard1
mkdir -p /data/database/shard2
mkdir -p /data/database/shard3
mkdir -p /data/database/config

mkdir -p /data/logs

2.配置mongod

./mongod --config /mongodb/shard1.conf

./mongod --config /mongodb/shard2.conf

./mongod --config /mongodb/shard3.conf

./mongod --config /mongodb/configsvr.conf

3.查看mongod的进程是否启动

ps aux | grep mongodb | grep -v grep

4.初始化replica sets

/testadmin/mongodb/bin/mongo --port 27018

config={_id: 's2', members: [{_id: 0, host: '192.168.136.15:27018',priority:5},{_id: 1, host: '192.168.136.26:27018',priority:2},{_id: 2, host: '192.168.136.14:27018',priority:.5},{_id: 3, host: '192.168.136.16:27018', arbiterOnly: true},{_id: 4, host: '192.168.136.29:27018', arbiterOnly: true}]}

rs.initiate(config)

192.168.136.16

1.创建相应的文件夹(注意此处的testadmin是客户端登陆名)

mkdir -p /data/shard1
mkdir -p /data/shard2
mkdir -p /data/shard3
mkdir -p /data/config

mkdir -p /data/logs

2.配置mongod

./mongod --config /mongodb/shard1.conf

./mongod --config /mongodb/shard2.conf

./mongod --config /mongodb/shard3.conf

./mongod --config /mongodb/configsvr.conf

3.查看mongod的进程是否启动

ps aux | grep mongodb | grep -v grep

4.初始化replica sets

/testadmin/mongodb/bin/mongo --port 27019

config={_id: 's3',members: [{_id: 0, host: '192.168.136.16:27019',priority:5},{_id: 1, host: '192.168.136.26:27019',priority:2},{_id: 2, host: '192.168.136.15:27019',priority:.5},{_id: 3, host: '192.168.136.14:27019', arbiterOnly: true},{_id: 4, host: '192.168.136.29:27019', arbiterOnly: true}]}
rs.status()

192.168.136.26,192.168.136.29分别执行如下:

1.创建相应的文件夹(注意此处的testadmin是客户端登陆名)

mkdir -p /data/shard1
mkdir -p /data/shard2
mkdir -p /data/shard3
mkdir -p /data/config

mkdir -p /data/logs

2.配置mongod

./mongod --config /mongodb/shard1.conf

./mongod --config /mongodb/shard2.conf

./mongod --config /mongodb/shard3.conf

3.查看mongod的进程是否启动

ps aux | grep mongodb | grep -v grep

配置Mongos(在每一台机子上建立路由)

/mongodb/bin/

./mongos --fork --port 40000 --logpath /data/logs/mongos.log --configdb 192.168.136.14:30000,192.168.136.15:30000,192.168.136.16:30000

添加分片

1连接任意一台,其他无需这样操作:

/home/testadmin/bin/mongo --port 40000
use admin
db.runCommand({addshard:'s1/192.168.136.14:27017,192.168.136.26:27017,192.168.136.16:27017'}) db.runCommand({addshard:'s2/192.168.136.15:27018,192.168.136.26:27018,192.168.136.14:27018'}) db.runCommand({addshard:'s3/192.168.136.16:27019,192.168.136.26:27019,192.168.136.15:27019'})

db.runCommand({ listshards:1 })

db.runCommand({ enablesharding:'weibo' })
db.runCommand({shardcollection:'weibo.test', key:{_id:1},
unique:true}) printShardingStatus()

db.data.stats();

三、用户认证

1.注意1.9.1之前复制集不支持用户认证,只能通过keyFile密匙文件,幸好这几天2.0正式版出来了,很多功能问题都已解决。呵呵

注意:用户验证,启动mongod必须添加--auth

#设置用户名和密码

>use test

>db.addUser('mongo','456123');

>db.auth('mongo','456123')

>db.system.users.find() --查看该用户是否添加成功

>db.system.users.remove('mongo','456123')

>mongo 数据库 -u mongo -p

注意:启动时必须添加--auth用户权限才会生效,第一次配置完成后,没效果就重启下。

四、鸭梨大了怎么办?添加服务器,怎么样添加呢?

1.如果读得鸭梨大了,则添加加slave节点,分散读得鸭梨。

启动后,在primary节点中添加节点

如:rs.add("10.168.0.100:27017") 当我们看到变为secondary后,就一切正常。

2.如果写的鸭梨打了,则可以添加一组shard节点分散写的鸭梨。

如:如上所述启动mongod,添加即可。

五、备份恢复策略

增量备份(添加延迟备份节点)

1、利用另外一台secondary机器传送数据

2、在新机器上中配置文件中添加fastsync=true配置(当需要从有数据中启动节点,那么必须加上fastsync=true否则启动会报错,如果是从主库直接同步所有数据,那么就不需要添加这个参数)

3、启动后,在primary节点中添加节点

如:rs.add("10.168.0.102:27017") 当我们看到变为secondary后,就一切正常,可以正常提供线上服务了

4、通过rs.conf()命令查看现在的节点信息(需要admin库密码权限)

5rs.remove("10.168.0.102:27017")删除节点

6、添加arbiter节点:rs.addArb("10.73.24.171:19003")

7、添加延时备份机器:

rs.add({_id:5,host:"10.168.0.102:27017",priority:0,slaveDelay:300});

rs.add({_id:5,host:"10.168.0.102:27018",priority:0,slaveDelay:300});

rs.add({_id:5,host:"10.168.0.102:27019",priority:0,slaveDelay:300});

注意:slaveDelay单位秒.

8、出现这个错误时:replSet error RS102 too stale to catch up,我们可以db.printReplicationInfo()查看主库、从库的oplog信息

利用延迟备份节点恢复数据

1. 先把延迟备份节点的数据,备份到各节点的master机子上。如:

#./mongodump -h 192.168.136.14:27017 -d weibo -o /data/mongoback/

#./mongodump -h 192.168.136.15:27018 -d weibo -o /data/mongoback/

#./mongodump -h 192.168.136.16:27019 -d weibo -o /data/mongoback/

2. 把备份的数据导入到个节点的master上。如:

建议先修复下,压缩空间

db.repairDatabase();修复数据(和压缩(删除数据)空间)

./mongorestore -h 127.0.0.1:27017 --directoryperdb /data/mongoback --drop --indexesLast

./mongorestore -h 127.0.0.1:27018 --directoryperdb /data/mongoback --drop --indexesLast

./mongorestore -h 127.0.0.1:27019 --directoryperdb /data/mongoback --drop --indexesLast

全量备份(添加延迟备份节点)

1. 写好脚本定期凌晨备份数据,如:

./mongodump -h 10.168.0.187:40000 -d weibo -o /data/mongoback/

2. 恢复数据

3. 建议先修复下,压缩空间

4. db.repairDatabase();修复数据(和压缩(删除数据)空间)

./mongorestore -h 10.168.0.187:40000 --directoryperdb /data/mongoback --drop --indexesLast

六、其他问题~

1.如果启动不成功,则尝试修复.如:

./mongod --port 27017 --repair --dbpath /data/database/shard1/

2如果master节点kill了,则起来之后通过rs.stepDown(100)让出master的位置。

3.其他问题请随时欢迎提出,联系我(李航),围脖:http://weibo.com/lidaohang~

节点 数据 备份 配置 文件 用户 客户 客户端 文件夹 进程 鸭梨 信息 空间 延迟 登陆 实例 机器 问题 成功 密码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 计算机网络技术需要考取的证书 b站回应服务器超温 xss怎样切换服务器买游戏 宅霸请重新选择服务器 非关系形数据库有哪些 阜阳电商软件开发公司哪家好 玛爱网络技术有限公司怎么样 华为nova如何切换数据库 蜗牛星际换服务器硬盘架 网络安全校园日江苏 在京东做数据库 大同分销软件开发方案 哪个部门发布网络安全预警 ug10许可证服务器连不上 数据库与嵌入式有什么关联吗 软件开发社招流程 微商防窜货软件开发 广东惠州市网络安全战略支援部队 obs 服务器 食品安全数据库问题 数据库权限授予修改自己 北京微型企业财务软件网络技术 网络安全努力破除啥思维 医疗保障局网络安全工作责任制 中国的互联网服务器建设 成都实力教育系统开发软件开发 查询fm球员数据库 软件开发初步设计阶段 外卖预订系统数据库 2021网络技术职高高考试题
0