1、配置MongoDB复制集
一主从
主:192.168.159.136
从1:192.168.159.140
从2:192.168.159.141
1)、主从安装mongodb(主从均使用yum的安装方式安装)
[root@localhost ~]# vim /etc/yum.repos.d/mongo.repo
[mongodb]
name=mongodb
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mongodb/yum/el7-5.0/
gpgcheck=0
[root@localhost ~]# yum install mongodb-org -y
[root@localhost ~]# systemctl enable mongod --now
2)三台从设备修改配置文件(三台执行同样操作)
[root@localhost ~]# vim /etc/mongod.conf
net:
port: 27017
bindIp: 0.0.0.0 #监听网卡
#需要增加的内容即复制集设置中的内容
replication:
oplogSizeMB: 1024
replSetName: myRS
参数说明:replication.oplogSizeMB 数字,复制操作日志的最大大小( M )eplication.replSetName 字符,作为其 mongod 部分副本集的名称,副本集中的所有主机都必须 具有相同的名称
3)、所有机器都进行重启mongodb
[root@localhost ~]# systemctl restart mongod
4)、 主库配置
[root@localhost ~]# mongo admin
#查看当前的ReplSet的状态
> rs.status()
{
"ok" : 0,
"errmsg" : "no replset config has been received",
"code" : 94,
"codeName" : "NotYetInitialized"
}
#初始化ReplSet复制集
> config={_id:'myRS',members:[
... {_id:0,host:'192.168.159.136:27017'},
... {_id:1,host:'192.168.159.140:27017'},
... {_id:2,host:'192.168.159.141:27017'}
... ]}
> rs.initiate(config)
5)、主库再次查看当前的ReplSet的状态
此时已经选举当前:192.168.159.136为主库
myRS:SECONDARY> rs.status()
"members" : [
{
"_id" : 0,
"name" : "192.168.159.136:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY", #主库
"uptime" : 1567,
"optime" : {
"ts" : Timestamp(1643459673, 1),
"t" : NumberLong(1)
{
"_id" : 1,
"name" : "192.168.159.140:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 41,
"optime" : {
"ts" : Timestamp(1643459673, 1),
"t" : NumberLong(1)
},
{
"_id" : 2,
"name" : "192.168.159.141:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 41,
"optime" : {
"ts" : Timestamp(1643459673, 1),
"t" : NumberLong(1)
},
状态详解:
- STARTUP :刚加入到复制集中,配置还未加载- STARTUP2 :配置已加载完,初始化状态- RECOVERING :正在恢复,不适用读- ARBITER: 仲裁者- DOWN :节点不可到达- UNKNOWN :未获取其他节点状态而不知是什么状态,一般发生在只有两个成员的架构,脑裂- REMOVED :移除复制集- ROLLBACK :数据回滚,在回滚结束时,转移到 RECOVERING 或 SECONDARY 状态- FATAL :出错。查看日志 grep “replSet FATAL” 找出错原因,重新做同步- PRIMARY :主节点- SECONDARY :备份节点
6)、测试
主节点(192.168.159.136)上插入数据测试
myRS:PRIMARY> use test
myRS:PRIMARY> for(var i =0; i <4; i ++) {db.user.insert({userName:'my'+i,age:i})}
主节点查看数据集,两个数据库都有数据,复制数据功能已经运行成功
myRS:PRIMARY> db.getCollection('user').find({})
{ "_id" : ObjectId("61f536e7b91d1490bfef3fbd"), "userName" : "my0", "age" : 0 }
{ "_id" : ObjectId("61f536e7b91d1490bfef3fbe"), "userName" : "my1", "age" : 1 }
{ "_id" : ObjectId("61f536e7b91d1490bfef3fbf"), "userName" : "my2", "age" : 2 }
{ "_id" : ObjectId("61f536e7b91d1490bfef3fc0"), "userName" : "my3", "age" : 3 }
7)、测试如果主节点掉线,是否会故障转移
当前:
主:192.168.159.136
从1:192.168.159.140
从2:192.168.159.141
模拟关闭主节点,在主节点,使用db.shutdownServer()命令
myRS:PRIMARY> use admin
myRS:PRIMARY> db.shutdownServer()
在两个副节点查看现时的状态,192.168.159.140变成了主节点,成功实现了故障转移
[root@localhost ~]# mongo
myRS:PRIMARY> rs.status()
{
"_id" : 1,
"name" : "192.168.159.140:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 2749,
"optime" : {
"ts" : Timestamp(1643460853, 1),
"t" : NumberLong(2)
},
重新启动192.168.159.136
重启之后也只会变成副节点
[root@localhost ~]# systemctl restart mongod
复制管理操作:
(1)查看复制集状态:
rs.status(); # 查看整体复制集状态rs.isMaster(); # 查看当前是否是主节点(2)添加删除节点
rs.add("ip:port"); # 新增从节点rs.addArb("ip:port"); # 新增仲裁节点rs.remove("ip:port"); # 删除一个节点
2、创建管理员账号admin,密码为admin@163.com
> use admin
> db.createUser( { user: "admin", pwd: "admin@163.com", roles: [ { role: "root", db: "admin" } ] }
3、素材如下,完成下面备份任务
MongoDB Enterprise > use my_mongodb
> db.createCollection("user")
插入数据
db.user.insertMany(
[{id:201,name:'张三',sex:'男',age:19},
{id:202,name:'李四',sex:'女',age:22},
{id:203,name:'王五',sex:'男',age:20},
{id:204,name:'赵六',sex:'女',age:21},
{id:205,name:'钱七',sex:'男',age:20}] )
1)、mongoexport备份my_mongodb,格式为csv
[root@localhost ~]# mongoexport -d my_mongodb -c user -o user.dat
2)、使用mongoimport恢复之前备份的my_mongodb
[root@localhost ~]# mongoimport -d my_mongodb -c user --type csv --headerline -- file user_csv.dat
3)、mongodump备份my_mongodb库下的user集合
mongodump -d my_mongodb -c user -o /home/mongod/backup/
4)、使用mongorestore恢复上一步的备份
[root@localhost ~]# mongorestore -d my_mongodb -c user /home/mongod/backup/my_mongodb/user.bson