记一次Mongodb数据从单机迁移到集群过程

一.背景:

最近公司一个项目由于初期部署MongoDB使用单节点部署,考虑到业务量大了之后数据量随之增长,对数据库并发性,可靠性,容灾方面要求较高。所以决定新增三台服务器,组建MongoDB的集群,并将原单节点运行的部分数据迁移到新集群当中,同时实现不同业务系统间数据分离。把流量较大的业务系统的数据操作分配到新搭建的集群当中,提升数据读写性能。

二.基本信息:

软件版本:mongodb-4.0.11

系统环境如下:

编号IP地址操作系统备注
A192.168.99.42CentOS 7.6.1810(Core) X86_64原单节点
B192.168.193.118CentOS 7.8.2003(Core) X86_64新集群主节点
C192.168.193.119CentOS 7.8.2003(Core) X86_64新集群从节点1
D192.168.193.120CentOS 7.8.2003(Core) X86_64新集群从节点2

三.操作过程:

1.在服务器A上的操作:

(1)登录mongodb终端,确认需要导出的数据情况

mongo --host 192.168.99.42 -u "idr" --authenticationDatabase "admin" -p "Idr@2019"

(2)查看数据库和集合情况

show dbs;

use idr_attendance_record;

show collections;

(3)确定好需要导出的业务数据库为idr_attendance_record后,退出mongodb终端,开始执行数据导出,导出数据备份存放目录要提前建立好,仅导出需迁移的库idr_attendance_record,以及账号权限管理相关所在的库admin,命令行最后添加“&”表示后台执行,不会因为终端连接超时退出而中断导出操作

mongodump --host 192.168.99.42 -u "idr" --authenticationDatabase "admin" -p "Idr@2019" -d idr_attendance_record -o /data/backup/mongodb/ &

mongodump --host 192.168.99.42 -u "idr" --authenticationDatabase "admin" -p "Idr@2019" -d admin -o /data/backup/mongodb/ &

(4)最后便是打包导出文件,并上传到集群主节点的服务器B中,远程传输操作和过程省略

2.在服务器B,C,D上操作:

(1)首先每台服务器上安装mongodb,直接解压即可,并把bin目录路径添加到环境变量/etc/profile下

(2)新建实例目录,存放配置文件,数据,日志等,如下图

(3)编写配置文件mongodb.conf,并保存到conf目录下,配置文件内容如下

##### 是否以守护进程方式运行 #######

fork = true 

#### 数据目录  #######
dbpath = /data/mongodb_cluster/27017/data

#### 运行端口 ######
port = 27017

#### 绑定的IP地址 #####
bind_ip = 127.0.0.1,10.100.108.79

#### 日志目录 #####
logpath = /data/mongodb_cluster/27017/logs/mongodb.log 

###### 日志写入模式为追加 #####
logappend=true

#复制集名字
replSet=idrdb

#### 数据引擎 #####
storageEngine=wiredTiger

#### 最大连接数 ####
maxConns = 5000

###### 开启journal日志 ####
journal = true

# Inspect all client data for validity on receipt (useful for 
# developing drivers)用于开发驱动程序时验证客户端请求 
objcheck = true

#### 进程号文件 ######
pidfilepath = /data/mongodb_cluster/27017/mongodb27017.pid

####### 关闭密码认证 #####
#noauth = true

##### 开启密码认证 #####
auth = true

#KeyFile鉴权文件:改为实际路径
keyFile=/data/mongodb_cluster/27017/keyfile/keyfile

#####操作日志大小限制5G
oplogSize = 2000

######## 数据库分析等级记录到logpath下
profile = 2

####### 慢日志默认100毫秒 
slowms = 100

##### 开启详细诊断日志记录读写操作到logpath下
#diaglog = 3

##### 开启CPU和IO日志
cpu = true

##### 一个数据库一个文件夹
directoryperdb = true

(4)添加为系统服务,方便开机启a动,以下内容保存到文件/usr/lib/systemd/system/mongodb27017.service

[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target

[Service]
User=mongodb
Group=mongodb
Type=forking
ExecStart=/data/mongodb/bin/mongod --config /data/mongodb_cluster/27017/conf/mongodb.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/data/mongodb/bin/mongod --shutdown --config /data/mongodb_cluster/27017/conf/mongodb.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target

(5)之后重载系统服务,并设置服务开机自启

systemctl daemon-reload

systemctl enable mongodb27017

(6)修改配置文件mongodb.conf,注释掉密码认证相关项,并开启无需密码即可登录

noauth = true

#auth = true

#keyFile = /data/mongodb_cluster/27017/keyfile/keyfile 

(7)为了确保系统安全性和用户权限隔离,新建无法直接登录的用户mongodb,用来启动服务

useradd -s /sbin/nologin -M mongodb

(8)然后把相关数据库文件从属都改成mongodb,以便读写,不会出现权限导致禁止写入数据的问题

chown -R mongodb:mongodb /data/mongodb_cluster

(9)最后启动数据库服务即可

systemctl start mongodb27017

3.在集群三个节点服务器B,C,D上都进行步骤1和2的安装和部署操作之后,下面开始搭建mongodb的复制集(Replica Set)模式的集群

(1)首先在分配为主节点的服务器B上,登录到mongodb终端,由于设置了免密登录,所以无需输入账号密码

mongodb

(2)之后就是进行集群配置初始化,采用一主两从模式,当主节点故障时候,优先级越高越容易被选为新的主节点,id的值为复制集名称,参考配置文件mongodb.conf中的replSet配置项

use admin;

cfg={ _id:"idrdb", members:[ {_id:0,host:'192.168.193.118',priority:3}, {_id:1,host:'192.168.193.119',priority:2}, {_id:2,host:'192.168.193.120',priority:1}] };

rs.initiate(cfg);

(3)配置完毕,可查看个服务器节点是否都已联通并加入到集群中的角色

rs.status();     //需在主节点PRIMARY上执行

4.集群搭建完毕后,即可把A迁移过来的数据恢复到集群BCD中去,首先恢复admin库,然后开启密码登录认证和keyfile鉴权,keyfile需要使用openssl生成并统一部署到集群所有节点

(1)恢复admin库

mongorestore -h localhost:27017 -d admin --dir /data/backup/mongodb/admin/

(2)生成新的keyfile秘钥串,文件权限要求为600

openssl rand -base64 745 > /data/mongo_cluster/27017/keyfile/keyfile

chmod 600 /data/mongo_cluster/27017/keyfile/keyfile

(3)修改配置文件,开启密码登录认证和keyfile鉴权

#noauth = true

auth = true

keyFile = /data/mongodb_cluster/27017/keyfile/keyfile

(4)集群BCD所有服务器操作完毕后,按先重启C,D两台,最后重启B,确保每台都重启mongodb服务使配置生效,重启完毕还需确认集群节点角色状态是否为一主两从

systemctl restart mongodb27017

5.最后使用账户密码登录认证,导入余下的业务系统相关库的数据,已实际验证,导入过程中可以同步进行数据写入,新数据不会因为旧数据导入而被覆盖掉

(1)在主节点上导入旧的业务数据,只要集群状态正常,数据会自动同步到从节点上,同样,添加“&”让进程置于后台操作

mongorestore -h 192.168.193.118 -u "idr" --authenticationDatabase "admin" -p "Idr@2019" -d idr_attendance_record --dir /data/bac

kup/mongodb/idr_attendance_record/ &

(2)导入完毕后确认每个集合的数据量

db.attendance_record.find().count();

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值