Mongodb副本集:
NoSQL的产生就是为了解决大数据量、高扩展性、高性能、灵活数据模型、高可用性。但是光通过主从模式的架构远远达不到上面几点,由此MongoDB设计了副本集和分片的功能,先来用用副本集。
Mongodb副本集的同步机制:
数据复制的目的是使数据得到最大的可用性,避免单点故障引起的整站不能访问的情况的发生,Mongodb的副本集在同一时刻只有一台服务器是可以写的,副本集的主从复制也是一个异步同步的过程,是slave端从primary端获取日志,然后在自己身上完全顺序的执行日志所记录的各种操作(该日志是不记录查询操作的),这个日志就是local数据库中的oplog.rs表,默认在64位机器上这个表是比较大的,占磁盘大小的5%,oplog.rs的大小可以在启动参数中设定:--oplogSize 1000,单位是M。
1,设置yum源安装
创建/etc/yum.repos.d/mongodb-enterprise.repo文件,这样就可以使用yum来安装mongodb了。
[mongodb-org-3.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-3.0.asc |
每一个release版本的.repo文件可以在repository找到,记住奇数镜像版本(比如e.g.2.5)是开发版本,放在生成环境是不太合适的。
2,源码安装
2.1 下载安装包
在官方网站可以下载到比较新的版本,下载地址:
https://www.mongodb.org/dr/fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.3.tgz/download;
我这里下载的是稳定版本:mongodb-linux-x86_64-3.0.3.tgz,安装也是用的3.0.3; 3.0.3的下载地址为:http://download.csdn.net/detail/mchdba/9546256
2.2 解压安装
tar -xvf mongodb-linux-x86_64-3.0.3.tgz -C /usr/local/ |
3 启动3个mongodb服务
安装mongodbreplica sets,至少需要3台linux服务器,而初始化副本集合,本来应该是3台服务器,但是这里只是测试环境,启用了3个mongodb端口进程来来模拟3个mongodb的服务器达到一样的效果,在实际中,可以部署在多台mongodb服务器上,如下表所示:
Mongodb 主机 |
服务器端口地址 |
默认角色 |
mongodb主机 1 |
localhost:27017 |
primary |
mongodb主机 2 |
localhost:27018 |
secondary |
mongodb主机 3 |
localhost:27019 |
secondary |
开始启动3个mongodb服务:
# 启动第一个mongodb 27017,默认为primary服务器 mkdir -p /data/mongodb/log27017 mkdir -p /data/mongodb/data27017 /usr/local/mongodb-linux-x86_64-3.0.3/bin/mongod --replSet repset --port 27017 --dbpath /data/mongodb/data27017 --oplogSize 2048 --logpath /data/mongodb/log27017/mongod.log &
# 启动第二个mongodb 27018 mkdir -p /data/mongodb/log27018 mkdir -p /data/mongodb/data27018 /usr/local/mongodb-linux-x86_64-3.0.3/bin/mongod --replSet repset --port 27018 --dbpath /data/mongodb/data27018 --oplogSize 2048 --logpath /data/mongodb/log27018/mongod.log &
# 启动第三个 mongodb 27019 mkdir -p /data/mongodb/log27019 mkdir -p /data/mongodb/data27019 /usr/local/mongodb-linux-x86_64-3.0.3/bin/mongod --replSet repset --port 27019 --dbpath /data/mongodb/data27019 --oplogSize 2048 --logpath /data/mongodb/log27019/mongod.log & |
4 添加replica sets配置
在任何一台mongodb实例上登录,进入admin库,执行config命令:
> use admin switched to db admin > config = { _id:"repset", members:[ ... {_id:0,host:"mongodb_server:27017"}, ... {_id:1,host:"mongodb_server:27018"}, ... {_id:2,host:"mongodb_server:27019"}] ... };
> config = { _id:"repset", members:[ ... ... {_id:0,host:"mongodb_server:27017"}, ... ... {_id:1,host:"mongodb_server:27018"}, ... ... {_id:2,host:"mongodb_server:27019"}] ... ... }; { "_id" : "repset", "members" : [ { "_id" : 0, "host" : "mongodb_server:27017" }, { "_id" : 1, "host" : "mongodb_server:27018" }, { "_id" : 2, "host" : "mongodb_server:27019" } ] } > |
5 初始化副本集
# 初始化副本集配置,使用rs.initiate(config);命令
rs.initiate(config);
> rs.initiate(config);
{ "ok" : 1 }
repset:SECONDARY>
6 查看replica sets状态
看到config配置里面的第一个默认为primary,后面的都为secondary,然后查看"optime": Timestamp(1465641737, 1),如果集合中的mongodb的optime一致,表是集群中各个mongodb数据是保持一致性的:
# 随意登录一个mongodb服务 [root@oracle_master ~]# /usr/local/mongodb-linux-x86_64-3.0.3/bin/mongo localhost:27017 MongoDB shell version: 3.0.3 connecting to: localhost:27017/test Server has startup warnings: 2016-06-10T07:56:33.333-0700 I CONTROL [initandlisten] ** WARNING: You are running this process a |