如何搭建mongodb的复制集环境,mongodb升级

MongoDB 是一个nosql数据库,在大数据处理方面可能比关系型数据库更高效。

scrn20150815233206

我来介绍一下MongoDB 的环境配置和复制集Replica Set的搭建。

选用环境:ubuntu 12.04

在mongodb官网上已经有了大部分安装的步骤,但是按照官网上的步骤apt-get安装只能安装最新版的MongoDB ,如果你需要安装老版本,可以参考这篇教程。而且同样适用于centos。我自己尝试了mongodb2.4,2.6,3.0的升级过程。

安装

首先你需要下载MongoDB 的二进制包

#分别对应2.4,2.6,3.0的包,任选其一即可,推荐使用最新的3.0.5稳定版
wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.4.12.tgz

wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.10.tgz

wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1204-3.0.5.tgz

对下载好的包进行解压

tar -zxvf mongodb-linux-x86_64-ubuntu1204-3.0.5.tgz

解压以后我们可以进入解压后的文件夹了

可执行程序都在bin文件夹里

为了使用mongodb,我们需要先设定好数据库文件、日志文件的存储路径

比如我设定的是

数据库路径        /data/mongo1
数据库日志路径    /data/mongo1/logs/mongo.log

只需要去相应位置建立文件夹和文件即可,log文件需要提前建好,它不会自己生成的

然后可以启动mongodb服务了

两种方式:

#默认启动,端口为27017
./bin/mongod
#增加参数启动,参数意义我后面再说
./bin/mongod --port 30000 --logappend  --logpath /data/mongo1/logs --fork --dbpath /data/mongo1

#用配置文件指定启动参数,这里的mongo.conf是我自己创建的文本文件
./bin/mongod -f mongo.conf

#mongo.conf示例
port=30000                             #指定端口号
dbpath=/data/mongo1                    #指定数据库目录
logpath=/data/mongo1/logs/mongo.log    #指定日志路径
logappend=true                         #以追加方式写日志
fork=true                              #以守护进程的方式运行,创建服务器进程 

更多参数,自行搜索啦

如果运行失败尝试使用sudo运行,虽然这样不推荐

用ps -ef|grep mongo 查看服务是否已经运行

连接数据库

./bin/mongo localhost:30000     #这里的IP和端口号都依情况自行调整
#这时成功的话可以进入mongodb的命令行界面
#简单的数据库命令

show dbs
show collections
show users
db.test.find()
db.test.insert({a:"insert test"})

 升级

保持mongodb服务的运行,把新版本的二进制包解压到另一个文件夹,cd到里面

#依然是连接Mongodb服务
./bin/mongo localhost:30000

#mongod是mongodb的服务端工具,mongo是mongodb的客户端,可以使用不同的客户端连接同一服务端
#比如你现在运行2.4的服务,可以分别使用2.4和2.6的客户端连接mongodb服务

在新版本的mongo命令行中进行如下命令

>db.upgradeCheckAllDBs()            #检查是否可以升级,通过了会有提示

#停止旧版本服务
>use admin                          #必须切换到管理员用户
>db.shutdownServer()                #停止服务
>exit                               #退出Mongo命令行,由于服务已经停止,你开着也没用

启动新版本的mongod服务

./bin/mongod -f mongo.conf
#可以采用旧的配置文件,这样数据库路径是一样的,有时会出现问题,检查一下是否使用了错误的参数

#这里用的是新版本的mongod启动的服务,数据库采用的旧版,但之前检查过可以升级,所以数据也不会出错

 Replica Set

至少启动三个服务,可以在一台机器上使用三个端口,也可以使用多台机器。

./bin/mongod --port 30000 --directoryperdb --logappend  --logpath /data/mongo1/logs --fork --dbpath /data/mongo1 --replSet mydb

./bin/mongod --port 30001 --smallfiles --directoryperdb --logappend  --logpath /data/mongo2/logs --fork  --dbpath /data/mongo2 --replSet mydb

./bin/mongod --port 30002 --smallfiles --directoryperdb --logappend  --logpath /data/mongo3/logs --fork  --dbpath /data/mongo3 --replSet mydb

然后对rs集进行初始化

rs.initiate(
    {"_id" : "test-set",
     "members" : [
        {"_id" : 1, "host" : "127.0.0.1:30000"},
        {"_id" : 2, "host" : "127.0.0.1:30001"},
        {"_id" : 3, "host" : "127.0.0.1:30002", "arbiterOnly" : true}
    ]
});

#也可以
cfg={"_id" : "test-set",
     "members" : [
        {"_id" : 1, "host" : "127.0.0.1:30000"},
        {"_id" : 2, "host" : "127.0.0.1:30001"},
        {"_id" : 3, "host" : "127.0.0.1:30002", "arbiterOnly" : true}
    ]
rs.reconfig(cfg)	可以重新配置,cfg为刚刚赋值的json

#或者使用

rs.initiate()
rs.add(“127.0.0.1:30001”)
rs.add(“127.0.0.1:30002”)

一段时间后机器会自行选出primary,secondary,arbiter,当然你也可以自己指定的。

使用rs.status()查看复制集状态

primary可以读写,secondary默认不可读写

可以使用

对于replica set 中的secondary 节点默认是不可读的。在写多读少的应用中,使用Replica Sets来实现读写分离。通过在连接时指定或者在主库指定slaveOk,由Secondary来分担读的压力,Primary只承担写操作。
如果通过shell访问mongo,要在secondary进行查询。会出现如下错误:
imageSet:SECONDARY> db.fs.files.find()
error: { "$err" : "not master and slaveOk=false", "code" : 13435 }
有两种方法实现从机的查询:
第一种方法:db.getMongo().setSlaveOk();
第二种方法:rs.slaveOk();
但是这种方式有一个缺点就是,下次再通过mongo进入实例的时候,查询仍然会报错,为此可以通过下列方式
vi ~/.mongorc.js
增加一行rs.slaveOk();
这样的话以后每次通过mongo命令进入都可以查询了

 

Replica Set测试:

配置好环境我们还要进行测试,思路如下:

1.查看各机器状态

2. 1号Primary写数据,

3. 2号Secondary读数据

4.Kill primary1

ps -ef |grep mongo

 kill -9 … …

5.查看secondary2状态(变成primary2)

6.测试secondary2读

7.重启primary1

8.查看primary1机器状态(变成sendary1)

9.测试2号读写

10.测试1号读

11.Kill 2号机

12.查看1号机状态

13.测试1号读写

14.重启2号机,测试读

如果文章对你有帮助,欢迎点赞或打赏(金额不限)。你的打赏将全部用于支付网站服务器费用和提高网站文章质量,谢谢支持。

版权声明:

本文由 原创,商业转载请联系作者获得授权。
非商业转载请注明作者 雅乐网 ,并附带本文链接:
https://www.yalewoo.com/mongodb.html

上一篇:

下一篇:

我要评论

验证码*: 9 + 3 =