docker添加mongo4.0.3并配置复制集
1、创建docker 具体略过 自行百度
2、创建数据持久化目录文件(/data/mongo0是个例子 命名随意) 拉取mongo docker pull mongo:4.0.3
3、启动容器
docker run --name mongo0 -p 27017:27017 --restart=always -v /data/mongo:/data/db -d mongo:4.0.3 --replSet "rs0"
-v /etc/localtime:/etc/localtime:ro 同步主机时间
--name 指定容器名称
-p 映射容器端口
-v 将服务器文件挂载到容器
-d 后台运行
--replSet "rs0" 设置集群的名称为rs0 这个名字可以随便起 但是需要保证参与集群的数据库名字一直
如果希望容器随docker启动而启动 可添加
--restart=always
如果要设置已经启动的容器可以使用一下命令
docker container update --restart=alway 容器名
如果是修改mongod.conf 需要添加
replication: //删除“#”,开启复制集功能
replSetName: test-rc //名称为test-rc
4、单机情况下需要查看mongoDB的在docker中的ip(当然可以设置不同的端口启用该步骤)
docker inspect mongo0 | grep IPAddress
moogo0 为容器的名字
5、进入容器
docker exec -it mongo0 bash
特别提醒:在数据库使用复制集之前 请先备份好数据 以免造成不必要的损失
./mongodump -o /data/export/ 备份所有数据库 (需要在mongo的bin目录下执行,也可使用绝对路径执行)
./mongorestore -h ip地址 -d zz_spiders /data/export/zz_spiders/
-h 为需要恢复的服务器 -d为指定数据库 /data/export/zz_spiders/ 为备份文件所在地址(注意 批量备份后,仍需要单个文件恢复,否则会出现文件路径错误提示)
6、登录mongoDB
执行命令如下
rs.initiate( {_id : "rs0",members: [{ _id: 0, host: "172.17.0.2:27017" },{ _id: 1, host: "172.17.0.3:27017" },{ _id: 2, host: "172.17.0.4:27017" }]})
可以使用 {_id:0,host:'127.0.0.1:10002',priority:1} 指定主节点(多个节点 priority越高的 会成为主节点)
4 _id:复制集的名称。必须与启动 mongod 的 --replSet 一致
5 members:成员配置文件的列表。
6 members[n]._id:用来识别成员的 id 不可以重复
7 members[n].host:成员对应的 host:port 第四步中得到的ip
7、使用rs.status();查看集群状态
8、从库默认没有读写权限
需要进入从库的mongoDB执行rs.slaveOk();或者db.getMongo().setSlaveOk();
但是但是但是!!!
只有当次生效!只有当次生效!只有当次生效!
如果需要永久生效 可以依次执如下命令
find / -name .mongorc.js
vim /home/shengyang/.mongorc.js
添加内容
rs.slaveOk();
强制更换主节点办法
http://www.mongoing.com/docs/tutorial/force-member-to-be-primary.html
注:
在搭建过程中,遇到一个问题
当将两个从节点停掉之后 在主使用rs.stepDown(120)将现有主节点切换为从节点 导致主节点丢失,该情况下 可以将停掉的一个从节点重启,此时主节点会自动选出,一位复制集的规则是必须有两台可用的数据库,才能够自动选举主从节点。
另:本篇未涉及投票节点,感兴趣的可自行搜索相关文档即可
多讲一句:本篇为4.0.3版本,4.0版本以下的相关命令 可能会失效! //经测试,个人操作原因,需要在执行 rs.reconfig();时添加"protocolVersion" : 1
比如这样:rs.reconfig( {_id : "rs0", "protocolVersion" : 1, members: [{ _id: 0, host: "192.168.1.64:27017",priority:2 },{ _id: 1, host: "192.168.1.50:27017" },{ _id: 2, host: "192.168.1.51:27017" }]})
如果需要非主节点执行需要添加{ "force": true } 例如 rs.reconfig(cfg, { "force": true })
//下面为设置已经启动的mongoDB的数据
非docker环境 (当前目录在data)
mkdir core
cd core
//生成keyfile
openssl rand -base64 741 > mongodb-keyfile
chmod 600 mongodb-keyfile
mongod.conf中添加(注意json的格式)
security:
keyFile: "/data/core/mongodb-keyfile"
replication:
replSetName: rs0
查看进程并关闭mongo
ps aux | grep mongo
kill mongo进程 当然也可以进入mongo依次执行(推荐)
use admin
db.shutdownServer();
来关闭mongo
重启mongo
将mongodb-keyfile复制到其他mongo服务器
执行
chmod 600 mongodb-keyfile
如果是docker 还需要执行
chown 999 mongodb-keyfile
普通环境下配置mongod.conf同上
docker环境下执行
docker run --name mongo -p 27017:27017 --restart=always -v /etc/localtime:/etc/localtime:ro -v /data/mongo:/data/db -v /data/core/mongodb-keyfile:/opt/mongodb-keyfile -d mongo:4.0.3 --smallfiles --keyFile=/opt/mongodb-keyfile --replSet "rs0" --smallfiles 开启验证
--keyFile 设置统一的key
进入主节点 auth验证之后 执行
rs.add('从节点ip:从节点端口')
至此,mongo复制集基本就搭建完成,并且数据已经开始同步了,本篇未涉及投票节点
常用命令
设置从节点可用
mongo --port 27018(填写实际的从节点地址)
rs.slaveOk()
查看集群状态
mongo --port 27018
rs.status()
查看是否primary节点
mongo --port 27018
rs.isMaster()
查看集群配置
mongo --port 27018
rs.conf()
添加节点
mongo 主节点地址
rs.add({} | host地址) 例如rs.add('192.168.1.96:27017')
删除节点
mongo 主节点地址
删除前,建议先停止这个节点的服务
rs.remove(hostname) 例如rs.remove('192.168.1.96:27017')
更改集群配置
mongo 主节点地址
rs.reconfig({},{})
docker添加mongo4.0.3并配置复制集的更多相关文章
- mongodb配置复制集replset
Mongodb的replication主要有两种:主从和副本集(replica set).主从的原理和mysql类似,主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己 ...
- Docker部署Mysql8.0.20并配置主从复制
1. Linux安装Mysql8.0.20并配置主从复制(一主一从,双主双从) Linux安装Mysql8.0.20并配置主从复制(一主一从,双主双从) 2. 前提准备 # 创建主从数据库文件夹 ...
- 通过tarball形式安装HBASE Cluster(CDH5.0.2)——配置分布式集群中的YARN ResourceManager 的HA
<?xml version="1.0"?> <!-- Licensed under the Apache License, Version 2.0 (the &q ...
- 【Linux】【Services】【SaaS】Docker+kubernetes(5. 安装和配置ETCD集群)
1. 简介: 1.1. ETCD是kubernetes和openstack都用到的组件,需要首先装好 1.2. 官方网站:https://coreos.com/etcd/ 1.3. ETCD的作用: ...
- MongoDB复制集原理、环境配置及基本测试详解
一.MongoDB复制集概述 MongoDB复制集实现了冗余备份和故障转移两大功能,这样能保证数据库的高可用性.在生产环境,复制集至少包括三个节点,其中一个必须为主节点,一个从节点,一个仲裁节点.其中 ...
- 使用 Docker 部署 MongoDB 复制集
启用三个 mongod 建立复制集. MongoDB 版本选择目前最新的稳定版 3.6.2-jessie. docker run --name mongo0 -d mongo:3.6.2-jessie ...
- mongoDB研究笔记:复制集概述
自我学习,仅供参考: 数据库总是会遇到各种失败的场景,如网络连接断开.断电等,尽管journaling日志功能也提供了数据恢复的功能,但journaling通常是针对单个节点来说的,只能保证单节点数据 ...
- Mongodb Manual阅读笔记:CH8 复制集
8 复制 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读笔 ...
- MongoDB实战指南(六):MongoDB复制集之复制集概述
1. 复制集概述 数据库总是会遇到各种失败的场景,如网络连接断开.断电等,尽管journaling日志功能也提供了数据恢复的功能,但journaling通常是针对单个节点来说的,只能保证单节点数据的一 ...
随机推荐
- TestNg用例管理
一.TestNg的数据驱动 1. 数据驱动 1)什么是数据驱动? ·数据驱动是指在一个脚本固定的情况下,用数据来控制该脚本是否运行,以及运行的次数,还有每次运行时对应的参数 2)数据驱动的应用场景: ...
- Spark常规性能调优
1.1.1 常规性能调优一:最优资源配置 Spark性能调优的第一步,就是为任务分配更多的资源,在一定范围内,增加资源的分配与性能的提升是成正比的,实现了最优的资源配置后,在此基础上再考虑进行 ...
- How would you differentiate JDK, JRE, JVM, and JIT?
Q5. How would you differentiate JDK, JRE, JVM, and JIT?A5. There is no better way to get the big pic ...
- Generative Adversarial Networks overview(3)
Libo1575899134@outlook.com Libo (原创文章,转发请注明作者) 本文章主要介绍Gan的应用篇,3,主要介绍图像应用,4, 主要介绍文本以及医药化学其他领域应用 原理篇请看 ...
- 2019 CSP-J复赛游记
不出行?不出行考屁呢? 今天的CSP-J似乎比去年简单了一些,可它... 好了,来说一说我的情况. T1:太水,5分钟秒 T2:这个数据有点尴尬,双重循环铁定爆,用链表有有一点小题大做.本蒟蒻在考场上 ...
- Laravel 自定义公共函数全局使用,并设置自定加载
开发中经常定义一些公共函数(如:获取用户信息.csv导入导出等常用函数),方便控制层,模型层调用. 那么在Laravle框架中怎么使用? 方法如下: 1.在根目录app下新建公共目录Library/U ...
- ABP 00 常用知识
1.更改本地预览的端口: 文件路径:\src\ContractMS.Web.Mvc\Properties\launchSettings.json 改这里:"applicationUrl&qu ...
- java自动化配置工具 - autoconfig 简介
对于java程序员来说各种各样的配置文件是司空见惯的,比如spring的bean配置,struts的action配置等等.有些配置会随着运行环境的变化而各不相同,最典型的就是jdbc驱动的配置,在开发 ...
- Mercurial 的hook使用
1. Handling repository events with hooks可以通过Mercurial版本管理工具提供的hooks机制来处理repo的各种事件,从而实现对Mercurial的扩展, ...
- 奇袭 CodeForces 526F Pudding Monsters 题解
考场上没有认真审题,没有看到该题目的特殊之处: 保证每一行和每一列都恰有一只军队,即每一个Xi和每一个Yi都是不一样 的. 于是无论如何也想不到复杂度小于$O(n^3)$的算法, 只好打一个二维前缀和 ...