为了能够让MongoDB支持事物,特意在Centos7 环境下搭建了MongoDB复制集。MongoDB在4.0之后开始支持事物。回话级别的事物。
目录
系统:centos 7 ×64
MongoDB:4.0.3
说明:本次搭建伪集群模拟,在真实操作当中可以也如此部署。
Mongodb 在4.0之后可以支持会话级别的事物所以。
本次搭建有三个节点分别如下说明:
节点 | 端口号 | 节点身份 |
Mongodb1 | 27027 | primary |
Mongodb2 | 27028 | secondary |
Mongodb3 | 27029 | secondary |
副本集(Replica Set)是一组MongoDB实例组成的集群,由一个主(Primary)服务器和多个备份(Secondary)服务器构成。通过Replication,将数据的更新由Primary推送到其他实例上,在一定的延迟之后,每个MongoDB实例维护相同的数据集副本。通过维护冗余的数据库副本,能够实现数据的异地备份,读写分离和自动故障转移。也就是说如果主服务器崩溃了,备份服务器会自动将其中一个成员升级为新的主服务器。使用复制功能时,如果有一台服务器宕机了,仍然可以从副本集的其他服务器上访问数据。如果服务器上的数据损坏或者不可访问,可以从副本集的某个成员中创建一份新的数据副本。早期的MongoDB版本使用master-slave,一主一从和MySQL类似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主。目前已经淘汰master-slave模式,改为副本集,这种模式下有一个主(primary),和多个从(secondary),只读。支持给它们设置权重,当主宕掉后,权重最高的从切换为主。在此架构中还可以建立一个仲裁(arbiter)的角色,它只负责裁决,而不存储数据。此架构中读写数据都是在主上,要想实现负载均衡的目的需要手动指定读库的目标server。
- 下载
$ wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.3.tgz
- 解压到:/opt/mongodb-replicaset 目录下:
$ tar -xvf mongodb-linux-x86_64-4.0.3.tgz
- 改名为mongo1
$ sudo mv mongodb-linux-x86_64-4.0.3 mongodb1
- 进入到mongodb1下创建文件
cd mongodb1
mkdir data //数据目录
mkdir logs //日志目录
mkdir conf // 配置文件目录
- 配置文件
$ cd conf
$ touch mongo.conf //新建配置文件
port=27027 dbpath=/home/lcc/mongodb1/data logpath=/home/lcc/mongodb1/logs/mongod.log fork = true bind_ip=0.0.0.0 replSet = replset |
- 将mongodb1 复制三分mongodb2,mongodb3
如何所示:
- 注意修改暴露端口,已经data log 目录
- 启动服务。
cd mongodb1 ./bin/mongod -f conf/mongo.conf |
依次启动MongoDB2,mongodb3
注意启动的时候有可能需要root权限,假如没有root的权限,需要写入数据的时候会有提示 Permission denied。
- 服务器启动之后,进入任意一个节点的命令行,将三个的实例关联起来
(只有一个MongoDB实例的时候可以这样用,当多个实例时可能不正确) $ cd mongodb1$ ./bin/mongo |
特别说明:MongoDB 默认启动端口为27017 。启动时候没有指定IP:端口时会默认启动27017端口。当在一台服务器当中可能需要搭建多个MongoDB实例时。使用上述命令就会有问题。解决办法既可以指定IP端口。
可以使用:$ ./bin/mongo ip:port 如 ./bin/mongo 192.168.154.201:27027
如可以使用:$ ./bin/mongo ip:port 如 ./bin/mongo 192.168.154.201:27027
- 进入命令集合后可以配置:
config = { _id: "replset", members: [{ _id: 0, host: "192.168.101.42:27027" }, { _id: 1, host: "192.168.101.42:27028" }, { _id: 2, host: "192.168.101.42:27029" } ] } |
- 初始化复制集合
$ rs.initiate(config) |
- 查看复制集
$ rs.config() // 查看集合 $ rs.isMaster() // 查看主节点信息 |
后期发现问题及时更新。。。。