mongodb副本集搭建

本文详细介绍了MongoDB副本集的搭建过程,包括使用配置文件和命令模式启动服务,以及初始化节点的方法。通过实例展示了如何在两台服务器上设置主从节点,并解析了副本集如何保持数据一致性的同步原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

副本集没有固定的“主节点”,整个集群结构会动态选举出一个“主节点”,当其不能工作了,则会动态变更到其他节点。副本集对其节点又特殊的称呼:活跃节点(“主节点”)和 备份节点(“从节点”)。

 

1.资源有限两台电脑(172.16.0.249,,12.16.0.250),一个主primary,一个secondary(可以称副节点)

 

2、使用选项--replSet来启动副本集的第一个服务:

(1)采用配置文件的方法

         在mongodb目录下新建conf文件夹 并新建文件xx.conf,内容如下

        

        port=10001                                           -------------------》端口号
        fork=true                                               --------------------》以守护进程的方式运行,创建服务器进程
       logpath=/home/llp/log.log                  --------------------》日志文件输出目录

       dbpath=/home/llp/db                          -------------------- 》数据库路径
       logappend=true                                  ---------------------》日志输出方式

       replSet=blort/172.16.0.250:10002 ----------------------》设置副本集  名字/ip:端口

 

       启动服务

[root@slave1 bin]# ./mongod -config ../conf/llpmongo.conf
all output going to: /home/llp/log.log
forked process: 22703

 

      查看进程

[root@slave1 bin]# ps -ef|grep mongo
root     20063     1  0 Jan03 ?        00:00:03 /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongod.conf
root     22703     1  0 10:29 ?        00:00:00 ./mongod -config ../conf/llpmongo.conf                                                                                    ------------------------》启动的进程
root     22742 20283  0 10:30 pts/2    00:00:00 ./mongo localhost:10001/admin
root     22761 19670  0 10:31 pts/1    00:00:00 grep mongo
[root@slave1 bin]# kill -2 22703
[root@slave1 bin]# ps -ef|grep mongo
root     20063     1  0 Jan03 ?        00:00:03 /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongod.conf
root     23035 20283  0 10:39 pts/2    00:00:00 ./mongo localhost:10001/admin
root     23088 19670  0 10:42 pts/1    00:00:00 grep mongo

 

(2)命令模式

[root@slave1 bin]# ./mongod -dbpath /home/llp/db -port 10001 -replSet blort/172.16.0.250:10002 -logpath /home/llp/log.log
all output going to: /home/llp/log.log

 

3、启动第二个服务

 

配置文件同上

 

[root@lvjian3 bin]# ./mongod -dbpath /home/llp/db -port 10002 -replSet blort/172.16.0.249:10001 -logpath /home/llp/log.log -logappend
all output going to: /home/llp/log.log

 

4、.初始化节点:只初始化一次,随便登陆任何一个节点,但是必须进入admin数据库

 

[root@slave1 bin]# ./mongo localhost:10001
MongoDB shell version: 2.0.0
connecting to: localhost:10001/test
> use admin
switched to db admin
> conf={
... "_id":"blort",
... "members":
... [
... {
...     "_id":0,
...     "host":"172.16.0.249:10001"
... },
... {
...     "_id":1,
...     "host":"172.16.0.250:10002"
... }
... ]}
{
        "_id" : "blort",
        "members" : [
                {
                        "_id" : 0,
                        "host" : "172.16.0.249:10001"
                },
                {
                        "_id" : 1,
                        "host" : "172.16.0.250:10002"
                }
        ]
}
> rs.initiate(conf)
{
        "info" : "Config now saved locally.  Should come online in about a minute.",
        "ok" : 1
}

 

[root@slave1 bin]# ./mongo localhost:10001/admin
MongoDB shell version: 2.0.0
connecting to: localhost:10001/admin
PRIMARY> rs.status()
{
        "set" : "blort",
        "date" : ISODate("2014-02-10T01:41:26Z"),
        "myState" : 1,
        "members" : [
                {
                        "_id" : 0,
                        "name" : "172.16.0.249:10001",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "optime" : {
                                "t" : 1391853169000,
                                "i" : 1
                        },
                        "optimeDate" : ISODate("2014-02-08T09:52:49Z"),
                        "self" : true
                },
                {
                        "_id" : 1,
                        "name" : "172.16.0.250:10002",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 195,
                        "optime" : {
                                "t" : 1391853169000,
                                "i" : 1
                        },
                        "optimeDate" : ISODate("2014-02-08T09:52:49Z"),
                        "lastHeartbeat" : ISODate("2014-02-10T01:41:25Z"),
                        "pingMs" : 0
                }
        ],
        "ok" : 1
}

5、创建完成可看出172.16.0.249为主节点,172.16.0.250为副节点

 

6、副本集同步原理:如何保持主从节点数据一致性

主节点插入数据

[root@slave1 bin]# ./mongo localhost:10001/admin
MongoDB shell version: 2.0.0
connecting to: localhost:10001/admin
PRIMARY> use testdata
switched to db testdata
PRIMARY> show tables
PRIMARY> db.tt.insert({"x":1})
PRIMARY> db.tt.find()
{ "_id" : ObjectId("52f82edfaeb169a6245d9b4b"), "x" : 1 }

 

(2)查看副节点172.16.0.250  

 [root@lvjian3 bin]# ./mongo localhost:10002
MongoDB shell version: 2.0.0
connecting to: localhost:10002/test
SECONDARY> use testdata
switched to db testdata
SECONDARY> db.tt.find()
error: { "$err" : "not master and slaveok=false", "code" : 13435 }

 

副节点没有权限查看

 

(3)down掉主节点(172.16.0.249)


[root@slave1 bin]# [root@slave1 bin]# kill -2 22703

查看副节点的状态(172.16.0.250)

[root@lvjian3 bin]# ./mongo localhost:10002
MongoDB shell version: 2.0.0
connecting to: localhost:10002/test
SECONDARY>                                                       还是副节点    只有两个节点的时候一个down掉后无法选举主节点了

 

重新启动172.16.0.249  查看250的状态

[root@slave1 bin]# ./mongo localhost:10001/admin
MongoDB shell version: 2.0.0
connecting to: localhost:10001/admin
PRIMARY> use testdata
switched to db testdata
PRIMARY> db.tt.find()
{ "_id" : ObjectId("52f82edfaeb169a6245d9b4b"), "x" : 1 }

可看出数据发生同步

 


 

         

      

 

        

        

  

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值