• 测试环境

    操作系统: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集群配置主从模式的更多相关文章

  1. 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 ...

  2. 实例:Mongodb集群配置过程

    最近因为一些项目公司开始采用Mongodb做为大量的数据存储,通过网络上大量的资源自己已经掌握一套可行的Mongodb集群配置过程,Mongodb具有无规则存储.大数据存储.多平台支持.强大的扩展插件 ...

  3. mongodb集群配置及备份恢复

    Mongodb安装: 编辑/etc/yum.repos.d/mongodb.repo,添加以下: [MongoDB] name=MongoDB Repository baseurl=https://r ...

  4. MongoDB集群配置笔记一

    MongoDB 的部署方案有单机部署.复本集(主备)部署.分片部署.复本集与分片混合部署.混合的部署方式如图: 分片集群的构造 (1)mongos :数据路由,和客户端打交道的模块.mongos本身没 ...

  5. MariaDB集群配置(主从和多主)

    1.mariadb主从 主从多用于网站架构,因为主从的同步机制是异步的,数据的同步有一定延迟,也就是说有可能会造成数据的丢失,但是性能比较好,因此网站大多数用的是主从架构的数据库,读写分离必须基于主从 ...

  6. Mongodb集群配置(sharding with replica set)

    转自:http://blog.csdn.net/zhangzhaokun/article/details/6269514 前言 最近在研习MongoDB集群,找到一个不错的例子,加了几句,按照自己的理 ...

  7. MongoDB集群配置笔记二(实战)

    单台mongodb配置文件: dbpath=/opt/mongodb/data logpath=/opt/mongodb/logs/mongodb.log logappend=true fork=tr ...

  8. redis sentinel 集群配置-主从切换

    1.配置redis master,redis slave(配置具体操作见上文http://www.cnblogs.com/wangchaozhi/p/5140469.html). redis mast ...

  9. mongodb集群配置副本集

    测试环境 操作系统:CentOS 7.2 最小化安装 主服务器IP地址:192.168.197.21 mongo01 从服务器IP地址:192.168.197.22 mongo02 从服务器IP地址: ...

随机推荐

  1. Vue通过id跳转到商品详情页

    首页列表: 在这里我用a标签进行跳转,在vue里面使用<router-link></router-link> <router-link :to="{path:' ...

  2. CentOS卸载通过yum安装的软件

    以erlang为例:rpa -qa|grep erlang 使用:yum -y remove erlang-* 扩展--查看yum安装软件的路径:rpm -ql erlang-cosFileTrans ...

  3. es6中...是什么意思。

    1. var set = new Set([1, 2, 3, 4, 4,4,4,4,2,2,2]) set=[...set] 2. let [head, ...tail] = [1, 2, 3, 4] ...

  4. 创建多线程的第二种方法实现Callable接口

    1.实现Callable接口,重写call方法,有返回值 2.通过实现Callable接口创建的线程只能在线程池中使用. 3.返回值就是run方法返回的对象 4.通过future.get()可以获取到 ...

  5. scrapy---反爬虫

    反爬虫措施1)动态修改User-Agent2)动态修改ip3)延迟DOWNLOAD_DELAY = 0.5 1)在middleware中新建一个类,从fake_useragent中导入UserAgen ...

  6. 201621123075《Java程序设计》第1周学习总结

    1.本周学习总结 本周简单了解了一些Java的基本概念,如Java的用途,功能.也学习了一些变量,类型和运算符.我感觉学好Java也是不容易的,尽管它库函数丰富,可最重要的还是那一份创造力. 2.书面 ...

  7. windows下《Go Web编程》之Go环境配置和安装

    <Go Web编程>笔者是基于unix下讲述的,作为入门练手,我选择在windows下开发,全程按照目录进行... 一.安装 windows下需要安装MinGW,通过MinGW安装gcc支 ...

  8. .net反编译的九款神器

    本人搜集了下8款非常不错的.Net反编译利器: 1.Reflector Reflector是最为流行的.Net反编译工具.Reflector是由微软员工Lutz Roeder编写的免费程序.Refle ...

  9. 你了解大O符号(big-O notation)么?你能给出不同数据结构的例子么?

    大O符号表示当数据结构的元素增加的时候,算法规模或者性能在最坏场景下有多好. 大O符号也可以用来描述其他行为,比如说内存消耗.因为集合实际上就是一种数据结构,我们一般用大O符号基于时间.性能.内存消耗 ...

  10. Problem A: 类的初体验

    Description 定义一个类Data,只有一个double类型的属性和如下3个方法: 1.    void init(double d);——初始化属性值. 2.   double getVal ...