Mongodb副本集配置

官方文档:点击这里 菜鸟教程:点击这里

MongoDB复制是将数据同步在多个服务器过程

复制提供了数据的冗余备份,并在多个服务器存储数据副本,提高了数据的可用性,并可以保证数据的安全性。

复制还允许从硬件故障和服务器中恢复数据。

什么是复制?

  • 保证数据的安全性

  • 数据可用性(24*7)

  • 灾难恢复

  • 无需停机维护(如备份,重建索引,压缩)

  • 分布式读取数据

MongoDB复制原理

mongodb的复制至少需要两个节点(这里准备三个)其中一个主节点,负责处理客户端请求,其余都是从节点,负责复制主节点的数据。

mongodb各个节点常用的搭配方式为:一主一从,一主多从

主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。

MongoDB复制结构图如下:

 架构规划:

节点 数据目录 端口
主节点 28017 /data/mongo_28017 :28017
从节点 28018 /data/mongo_28018 :28018
从节点 28019 /data/mongo_28019 :28019

创建节点目录和数据目录

su - mongo
mongod -f /opt/mongo_27017/conf/mongodb.conf --shutdown
mkdir -p /opt/mongo_2801{7,8,9}/{conf,log,pid}
mkdir -p /data/mongo_2801{7,8,9}

创建配置文件

cat >/opt/mongo_28017/conf/mongo_28017.conf <<EOF
systemLog:
  destination: file   
  logAppend: true  
  path: /opt/mongo_28017/log/mongodb.log

storage:
  journal:
    enabled: true
  dbPath: /data/mongo_28017
  directoryPerDB: true
  wiredTiger:
     engineConfig:
        cacheSizeGB: 0.5 
        directoryForIndexes: true
     collectionConfig:
        blockCompressor: zlib
     indexConfig:
        prefixCompression: true

processManagement:
  fork: true
  pidFilePath: /opt/mongo_28017/pid/mongod.pid

net:
  port: 28017
  bindIp: 127.0.0.1,10.0.0.51

replication:
   oplogSizeMB: 1024 
   replSetName: dba
EOF

复制配置文件到其他节点

cp /opt/mongo_28017/conf/mongo_28017.conf /opt/mongo_28018/conf/mongo_28018.conf
cp /opt/mongo_28017/conf/mongo_28017.conf /opt/mongo_28019/conf/mongo_28019.conf

替换端口号

sed -i 's#28017#28018#g' /opt/mongo_28018/conf/mongo_28018.conf  
sed -i 's#28017#28019#g' /opt/mongo_28019/conf/mongo_28019.conf

启动所有节点

mongod -f /opt/mongo_28017/conf/mongo_28017.conf
mongod -f /opt/mongo_28018/conf/mongo_28018.conf
mongod -f /opt/mongo_28019/conf/mongo_28019.conf

初始化集群

进入各个节点:

# 添加主机名
vim /etc/hosts
10.0.0.51 db01

mongo db01:28017
mongo db01:28018
mongo db01:28019

改成变量起个别名,添加主从节点信息

config = {
            _id : "dba", 
            members : [
                        {_id : 0, host : "db01:28017"},
                        {_id : 1, host : "db01:28018"},
                        {_id : 2, host : "db01:28019"},
            ]}
rs.initiate(config)

选举过程:

插入数据

db.inventory.insertMany( [
    { "item": "journal", "qty": 25, "size": { "h": 14, "w": 21, "uom": "cm" }, "status": "A" },
    { "item": "notebook", "qty": 50, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "A" },
    { "item": "paper", "qty": 100, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "D" },
    { "item": "planner", "qty": 75, "size": { "h": 22.85, "w": 30, "uom": "cm" }, "status": "D" },
    { "item": "postcard", "qty": 45, "size": { "h": 10, "w": 15.25, "uom": "cm" }, "status": "A" }
]);

副本节点登录查看数据

rs.slaveOk()
use test
db.inventory.find()

设置副本可读

# 临时生效
rs.slaveOk()

# 写入启动文件
echo "rs.slaveOk()" > ~/.mongorc.js

 

posted @ 2020-04-20 22:24  kerwin-  阅读(381)  评论(0编辑  收藏  举报