mongodb集群配置主从模式
- 测试环境
操作系统:CentOS 7.2 最小化安装
主服务器IP地址:192.168.197.21 master-node
从服务器IP地址:192.168.197.22 slave-node
关闭selinux,关闭防火墙。
Mongodb版本:mongodb-linux-x86_64-3.4.10.tgz
- 上传mongodb包到/software目录下,然后解压缩该包
[root@localhost software]# tar -zxvf mongodb-linux-x86_64-3.4.10.tgz
- 移动解压缩之后的文件至/usr/local/mongodb目录
[root@localhost software]# mv mongodb-linux-x86_64-3.4.10 /usr/local/mongodb
- 在mongodb下面创建data目录和logs目录,用于存放data和logs
[root@localhost local]# mkdir -p /usr/local/mongodb/data
[root@localhost local]# mkdir -p /usr/local/mongodb/logs
- 增加环境变量,并使环境变量生效
[root@localhost data]# vi /etc/profile
export PATH=$PATH:/usr/local/mongodb/bin
[root@localhost data]# source /etc/profile
- 创建mongodb.conf文件并写入一下内容
[root@localhost data]# touch /usr/local/mongodb/bin/mongodb.conf
[root@localhost data]# vi /usr/local/mongodb/bin/mongodb.conf
- 主服务器配置
[root@master-node software]# more /usr/local/mongodb/bin/mongodb.conf
port=27017
dbpath= /usr/local/mongodb/data
logpath= /usr/local/mongodb/logs/log.log
logappend=true
fork=true
maxConns=100
noauth=true
journal=true
storageEngine=wiredTiger
bind_ip = 192.168.197.21
master=true
- 从服务器配置
[root@slave-node software]# more /usr/local/mongodb/bin/mongodb.conf
port=27017
dbpath= /usr/local/mongodb/data
logpath= /usr/local/mongodb/logs/log.log
logappend=true
fork=true
maxConns=100
noauth=true
slave=true
journal=true
storageEngine=wiredTiger
bind_ip = 192.168.197.22
source=192.168.197.21:27017
- 使用配置文件启动两台服务器上的数据库
mongod --config /usr/local/mongodb/bin/mongodb.conf
- 在主服务器上登陆数据库创建testa数据库,并写入20条数据
[root@master-node software]# mongo 192.168.197.21:27017
MongoDB shell version v3.4.10
connecting to: 192.168.197.21:27017
MongoDB server version: 3.4.10
Server has startup warnings:
2019-02-10T21:38:04.484-0500 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2019-02-10T21:38:04.484-0500 I CONTROL [initandlisten]
2019-02-10T21:38:04.485-0500 I CONTROL [initandlisten]
2019-02-10T21:38:04.485-0500 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2019-02-10T21:38:04.485-0500 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2019-02-10T21:38:04.485-0500 I CONTROL [initandlisten]
2019-02-10T21:38:04.485-0500 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2019-02-10T21:38:04.485-0500 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2019-02-10T21:38:04.485-0500 I CONTROL [initandlisten]
> use testa
switched to db testa
> function add(){var i = 0;for(;i<20;i++){db.persons.insert({"nameA":"li"+i})}}
> add()
> db.persons.find()
{ "_id" : ObjectId("5c61272206144917c514f1a3"), "nameA" : "li0" }
{ "_id" : ObjectId("5c61272206144917c514f1a4"), "nameA" : "li1" }
{ "_id" : ObjectId("5c61272206144917c514f1a5"), "nameA" : "li2" }
{ "_id" : ObjectId("5c61272206144917c514f1a6"), "nameA" : "li3" }
{ "_id" : ObjectId("5c61272206144917c514f1a7"), "nameA" : "li4" }
{ "_id" : ObjectId("5c61272206144917c514f1a8"), "nameA" : "li5" }
{ "_id" : ObjectId("5c61272206144917c514f1a9"), "nameA" : "li6" }
{ "_id" : ObjectId("5c61272206144917c514f1aa"), "nameA" : "li7" }
{ "_id" : ObjectId("5c61272206144917c514f1ab"), "nameA" : "li8" }
{ "_id" : ObjectId("5c61272206144917c514f1ac"), "nameA" : "li9" }
{ "_id" : ObjectId("5c61272206144917c514f1ad"), "nameA" : "li10" }
{ "_id" : ObjectId("5c61272206144917c514f1ae"), "nameA" : "li11" }
{ "_id" : ObjectId("5c61272206144917c514f1af"), "nameA" : "li12" }
{ "_id" : ObjectId("5c61272206144917c514f1b0"), "nameA" : "li13" }
{ "_id" : ObjectId("5c61272206144917c514f1b1"), "nameA" : "li14" }
{ "_id" : ObjectId("5c61272206144917c514f1b2"), "nameA" : "li15" }
{ "_id" : ObjectId("5c61272206144917c514f1b3"), "nameA" : "li16" }
{ "_id" : ObjectId("5c61272206144917c514f1b4"), "nameA" : "li17" }
{ "_id" : ObjectId("5c61272206144917c514f1b5"), "nameA" : "li18" }
{ "_id" : ObjectId("5c61272206144917c514f1b6"), "nameA" : "li19" }
- 登陆从服务器的数据库查看数据是否同步过来
[root@slave-node software]# mongo 192.168.197.22:27017
MongoDB shell version v3.4.10
connecting to: 192.168.197.22:27017
MongoDB server version: 3.4.10
Server has startup warnings:
2019-02-10T21:43:16.796-0500 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2019-02-10T21:43:16.796-0500 I CONTROL [initandlisten]
2019-02-10T21:43:16.796-0500 I CONTROL [initandlisten]
2019-02-10T21:43:16.796-0500 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2019-02-10T21:43:16.796-0500 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2019-02-10T21:43:16.796-0500 I CONTROL [initandlisten]
2019-02-10T21:43:16.796-0500 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2019-02-10T21:43:16.796-0500 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2019-02-10T21:43:16.796-0500 I CONTROL [initandlisten]
> show dbs
2019-02-11T02:43:26.999-0500 E QUERY [thread1] Error: listDatabases failed:{
"ok" : 0,
"errmsg" : "not master and slaveOk=false",
"code" : 13435,
"codeName" : "NotMasterNoSlaveOk"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:781:19
shellHelper@src/mongo/shell/utils.js:671:15
@(shellhelp2):1:1
> rs.slaveOk()
> show dbs
admin 0.000GB
local 0.000GB
master_slave 0.000GB
testa 0.000GB
> use testa
switched to db testa
> db.persons.find()
{ "_id" : ObjectId("5c61272206144917c514f1a3"), "nameA" : "li0" }
{ "_id" : ObjectId("5c61272206144917c514f1a4"), "nameA" : "li1" }
{ "_id" : ObjectId("5c61272206144917c514f1a5"), "nameA" : "li2" }
{ "_id" : ObjectId("5c61272206144917c514f1a6"), "nameA" : "li3" }
{ "_id" : ObjectId("5c61272206144917c514f1a7"), "nameA" : "li4" }
{ "_id" : ObjectId("5c61272206144917c514f1a8"), "nameA" : "li5" }
{ "_id" : ObjectId("5c61272206144917c514f1a9"), "nameA" : "li6" }
{ "_id" : ObjectId("5c61272206144917c514f1aa"), "nameA" : "li7" }
{ "_id" : ObjectId("5c61272206144917c514f1ab"), "nameA" : "li8" }
{ "_id" : ObjectId("5c61272206144917c514f1ac"), "nameA" : "li9" }
{ "_id" : ObjectId("5c61272206144917c514f1ad"), "nameA" : "li10" }
{ "_id" : ObjectId("5c61272206144917c514f1ae"), "nameA" : "li11" }
{ "_id" : ObjectId("5c61272206144917c514f1af"), "nameA" : "li12" }
{ "_id" : ObjectId("5c61272206144917c514f1b0"), "nameA" : "li13" }
{ "_id" : ObjectId("5c61272206144917c514f1b1"), "nameA" : "li14" }
{ "_id" : ObjectId("5c61272206144917c514f1b2"), "nameA" : "li15" }
{ "_id" : ObjectId("5c61272206144917c514f1b3"), "nameA" : "li16" }
{ "_id" : ObjectId("5c61272206144917c514f1b4"), "nameA" : "li17" }
{ "_id" : ObjectId("5c61272206144917c514f1b5"), "nameA" : "li18" }
{ "_id" : ObjectId("5c61272206144917c514f1b6"), "nameA" : "li19" }
- 关于报错
如果在slave-node节点上的数据库中查看,有报错:"errmsg" : "not master and slaveOk=false"!!!
首先这是正常的,因为SECONDARY是不允许读写的, 在写多读少的应用中,使用Replica Sets来实现读写分离。通过在连接时指定或者在主库指定slaveOk,由Secondary来分担读的压力,Primary只承担写操作。对于replica set 中的secondary 节点默认是不可读的。
解决办法:在slave-node节点数据库中执行"rs.slaveOk();"命令即可
条数据,说明mongodb的主从复制环境已经成功了!当配置完主从服务器后,一但主服务器上的数据发生变化,从服务器也会发生变化。
- 设置mongodb的开机启动。
首先要在系统服务目录下创建启动文件mongodb.servicer然后写入一下内容
[root@localhost system]# cd /lib/systemd/system
[root@localhost system]# vi mongodb.service
[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/bin/mongodb.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/mongodb/bin/mongod --shutdown
PrivateTmp=true
[Install]
WantedBy=multi-user.target
注册到开机启动
[root@localhost system]# systemctl enable mongodb.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mongodb.service to /usr/lib/systemd/system/mongodb.service.
启动
systemctl start mongodb.service
关闭
systemctl stop mongodb.service
mongodb集群配置主从模式的更多相关文章
- Docker:docker搭建redis一主多从集群(配置哨兵模式)
角色 实例IP 实例端口 宿主机IP 宿主机端口 master 172.19.0.2 6382 192.168.1.200 6382 slave01 172.19.0.3 6383 192.168.1 ...
- 实例:Mongodb集群配置过程
最近因为一些项目公司开始采用Mongodb做为大量的数据存储,通过网络上大量的资源自己已经掌握一套可行的Mongodb集群配置过程,Mongodb具有无规则存储.大数据存储.多平台支持.强大的扩展插件 ...
- mongodb集群配置及备份恢复
Mongodb安装: 编辑/etc/yum.repos.d/mongodb.repo,添加以下: [MongoDB] name=MongoDB Repository baseurl=https://r ...
- MongoDB集群配置笔记一
MongoDB 的部署方案有单机部署.复本集(主备)部署.分片部署.复本集与分片混合部署.混合的部署方式如图: 分片集群的构造 (1)mongos :数据路由,和客户端打交道的模块.mongos本身没 ...
- MariaDB集群配置(主从和多主)
1.mariadb主从 主从多用于网站架构,因为主从的同步机制是异步的,数据的同步有一定延迟,也就是说有可能会造成数据的丢失,但是性能比较好,因此网站大多数用的是主从架构的数据库,读写分离必须基于主从 ...
- Mongodb集群配置(sharding with replica set)
转自:http://blog.csdn.net/zhangzhaokun/article/details/6269514 前言 最近在研习MongoDB集群,找到一个不错的例子,加了几句,按照自己的理 ...
- MongoDB集群配置笔记二(实战)
单台mongodb配置文件: dbpath=/opt/mongodb/data logpath=/opt/mongodb/logs/mongodb.log logappend=true fork=tr ...
- redis sentinel 集群配置-主从切换
1.配置redis master,redis slave(配置具体操作见上文http://www.cnblogs.com/wangchaozhi/p/5140469.html). redis mast ...
- mongodb集群配置副本集
测试环境 操作系统:CentOS 7.2 最小化安装 主服务器IP地址:192.168.197.21 mongo01 从服务器IP地址:192.168.197.22 mongo02 从服务器IP地址: ...
随机推荐
- 了解多层交换中的CEF FIB CAM TCAM
来源:http://blog.51cto.com/redant/314151 多层交换是指交换机使用硬件来交换和路由数据包,通过硬件来支持4-7层的交换.交换机执行硬件交换,第3层引擎(路由处理器)须 ...
- SWUST OJ(963)
小偷的背包 #include<stdio.h> #include<stdlib.h> int s, flag, n, *a; //主函数之外定义的变量为全局变量 void df ...
- 『TensorFlow』流程控制
『PyTorch』第六弹_最小二乘法对比PyTorch和TensorFlow TensorFlow 控制流程操作 TensorFlow 提供了几个操作和类,您可以使用它们来控制操作的执行并向图中添加条 ...
- js 里面的那些节省字节的写法 a|0 void 0等等
//取整 parseInt(a,10); Math.floor(a); ~~a; //节省之后的写法 a|0; //节省之后的写法 //四舍五入 Math.round(a); a+.5|0; //节省 ...
- 【JS】【5】request.getHeader("referer")的作用
正文: request.getHeader("referer"):获取来访者地址 注意:只有通过链接访问当前页的时候,才能获取上一页的地址,以下情况是获取不到值的: 只有通过链接访 ...
- pandas数据结构之Dataframe
Dataframe DataFrame是一个[表格型]的数据结构,可以看做是[由Series组成的字典](多个series共用同一个索引).DataFrame由按一定顺序排列的多列数据组成.设计初衷是 ...
- nodeJS总结day1
1.概念:nodeJS是基于chromeV8引擎的Javascript运行环境,使用了一个事件驱动非阻塞的i/o模式,使其轻量又高效.适合做高效又并发的项目.除此之外遵循的是COMMONJS规范. 2 ...
- MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example 1.4 Labeling the Map
MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example 1.4 Labeling the Map 一.前言 MapServer拥有非常灵活的标签 ...
- tensorFlow(六)应用-基于CNN破解验证码
TensorFlow基础见前博客 简介 传统的验证码识别算法一般需要把验证码分割为单个字符,然后逐个识别.本教程将验证码识别问题转化为分类的问题,实现对验证码进行整体识别. 步骤简介 本教程一共分为四 ...
- linux (centOS)安装 oracle 11g 以及卸载oracle
目录 首先.1. 一.参数以及环境配置 1.创建用户和组 2.创建数据库软件目录和数据文件存放目录 3.配置oracle用户的环境变量 4.修改linux内核,修改/etc/sysctl.conf文件 ...