1、环境准备 

1、Centos7 
2、mongodb3.4.9
3、三台机器IP分别是:10.170.1.16、10.170.1.18、10.170.1.33

2、mongdb数据库的安装

如下操作是分别在三台机器进行

1、首先分别在三台机器上下载好mongodb安装包mongodb-linux-x86_64-amazon-3.4.9.tgz

2、使用tar命令解压安装包然后修改解压后的目录名

tar zxvf mongodb-linux-x86_64-amazon-3.4.9.tgz

mv  mongodb-linux-x86_64-amazon-3.4.9.tgz  mongodb

3、 进入 mongodb目录中新建三个目录conf、logs 、db 

conf存储配置文件目录,logs用来存储日志目录,db用来存储数据目录

cd mongodb

mkdir conf logs db

4、 进入conf目录新建mongodb的配置文件mongodb.conf

cd conf

touch mongodb.conf

5、 编写配置文件mongodb.conf,内容如下 

其中dbpath是数据库文件目录,logpath是日志目录,port是mongodb所占用的端口,fork是true的时候表示在后台启动

dbpath=/data/mongodb/db

logpath=/data/mongodb/log/mongodb.log

port=27017

fork=true

6、 分别在三台机器上启动mongodb 其中–replSet表示副本集群参数 ,mongoTest是副本集名称,这里的名字可以任意取,另外两台机也要和这个一样

/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf --replSet mongoTest

7、 配置副本集

进入mongodb:

mongo 10.170.1.16:27017/admin -u test -p

输入密码

config_test={_id : 'mongoTest',members : [{_id : 0, host : '10.170.1.16:27017'},{_id : 1, host : '10.170.1.18:27017'},{_id : 2, host : '10.170.1.33:27017'}]}

初始化副本集

rs.initiate(config_test);

查看副本状态

rs.status();

health表示副本集中该节点是否正常,0表示不正常,1表示正常;state表示节点的身份,0表示非主节点,1表示主节点;stateStr用于对节点身份进行字符描述,PRIMARY表示主节点,SECONDARY表示副节点;name是副本集节点的ip和端口信息

查看副本同步状态

db.printSlaveReplicationInfo();

8、主库配置用户

在没有添加权限之前进入到mongodb主库操作页面并添加用户

db.createUser({user:'admin',pwd:'admin',roles:[{role:'userAdminAnyDatabase

',db:'admin'}]})

刚建立了 userAdminAnyDatabase 角色,用来管理用户,可以通过这个角色来创建、删除用户。

9、增加安全认证机制KeyFile

mkdir -p /data/mongo_set/usercenter/27017/

touch mongodb-keyfile

#生成key

openssl rand -base64 745 > /data/mongo_set/usercenter/27017/mongodb-keyfile

chmod 600 /data/mongo_set/usercenter/27017/mongodb-keyfile

# 该key的权限必须是600

注:将该key放到集群中机器的每一台上,记住必须保持一致,权限设置成600;

修改mongodb.conf配置

keyFile=/data/mongo_set/usercenter/27017/mongodb-keyfile

重新启用所有服务器

注:记住重新启动时候,keyfile的指定如果没有在配置文件中配置,就必须启动时候使用参数keyfile指定,关闭顺序注意下,mongodb集群有自动切换主库功能,如果先关主库,主库就切换到其它上面去了,这里预防主库变更,从库关闭后再关闭主库

开启keyfile认证就默认开启了auth认证了,在此可以用之前创建的账号进行登录

10、最后检查主从的状态

rs.status();

11、配置副本集的读写分离

配置副本集的读写分离需要以下两步:

(1)在副本节点上设置setSlaveOk(为了使从机变为可读状态);

通过命令sudo find / -name .mongorc.js找到.mongorc.js

在.mongorc.js中添加rs.slaveOk();

注:一般这个文件都是空的,直接加上去。保存退出。之后退出mongo在进去就可以了。

尽量每台服务器都添加上去。

(2)代码层面,在读操作过程中设置从副本节点读取数据,如下所示:

ReadPreference preference = ReadPreference.secondary();

mongoTemplate.setReadPreference(preference);

配置完后经过测试读操作就会自动分配到从服务器,而写操作则在主服务器进行

这部分可以从控制台查看日志进行分析

附单元测试程序:

package com.sinoway.cisp;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.test.context.junit4.SpringRunner;

import com.sinoway.cisp.constant.CollectionEnum;

import com.sinoway.cisp.mongo.collection.BasicReport;

import com.sinoway.cisp.mongo.dao.SinowayReportDao;

@RunWith(SpringRunner.class)

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)

public class XMLTest {

@Autowired

private SinowayReportDao reportDao;

@Test

public void testSql() {

System.out.println("++++++++++++++++++++++++开始读");

BasicReport historyReport =  reportDao.findOneBySinoCardid("SW-8X760156-20161122",

BasicReport.class, CollectionEnum.HISTORYREPORT_COLLECTION_NAME.getCollectionName());

System.out.println(historyReport);

System.out.println("++++++++++++++++++++++++读结束");

System.out.println("++++++++++++++++++++++++开始写");

BasicReport report = new BasicReport();

report.setSino_cardid("3333");

reportDao.insertOneReport(report);

System.out.println("++++++++++++++++++++++++写结束");

}

}

这些可以从控制台的日志中查看,例如:刚才进行了读操作,

16是从机

下面进行了一次写操作,输出如下

18是主机

可以查看主从状态

经测试,删除操作也在主机进行,所以不属于读操作

经测试:mongodb中upsert方法属于写操作

MongoDB的搭建并配置主从以及读写分离的更多相关文章

  1. 聊聊Mysql主从同步读写分离配置实现

    Hi,各位热爱技术的小伙伴您们好,好久没有写点东西了,今天写点关于mysql主从同步配置的操作日志同大家一起分享.最近自己在全新搭建一个mysql主从同步读写分离数据库简单集群,我讲实际操作步骤整理分 ...

  2. Mysql主从配置,实现读写分离

    大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...

  3. 黄聪:Mysql主从配置,实现读写分离

    大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...

  4. DBA 小记 — 分库分表、主从、读写分离

    前言 我在上篇博客 "Spring Boot 的实践与思考" 中比对不同规范的 ORM 框架应用场景的时候提到过主从与读写分离,本篇随笔将针对此和分库分表进行更深入地探讨. 1. ...

  5. mysql数据库主从同步读写分离(一)主从同步

    1.mysql数据库主从同步读写分离 1.1.主要解决的生产问题 1.2.原理 a.为什么需要读写分离? 一台服务器满足不了访问需要.数据的访问基本都是2-8原则. b.怎么做?  不往从服务器去写了 ...

  6. mysql 主从同步-读写分离

    主从同步与读写分离测试 一.  实验环境(主从同步) Master                   centos 7.3              192.168.138.13 Slave     ...

  7. 使用docker 实现MySQL主从同步/读写分离

    1. 利用 docker 实现 mysql 主从同步 / 读写分离 为了保证数据的完整和安全,mysql 设计了主从同步,一个挂掉还可以用另个.最近重构论坛,想来改成主从吧.担心失误,就先拿 dock ...

  8. mysql主从同步--读写分离。

    1.mysql 安装参考 https://www.cnblogs.com/ttzzyy/p/9063737.html 2. 主mysql,从mysql 指定配置文件启动 mysqld --defaul ...

  9. Docker容器启动Mysql,Docker实现Mysql主从,读写分离

    Docker容器启动Mysql,Docker实现Mysql主从,读写分离 一.Docker文件编排 二.配置主从复制 2.1 配置master 2.2 配置slave 三.验证主从复制 3.1 mas ...

随机推荐

  1. Zara带你快速入门WPF(1)---开篇

    一.引言 我们时常可以看到园友们在讨论WPF与WinForm!它们两个的激情对决,看到大家热情洋溢的评论,搞技术的我也是深受感动. 二.走势 但抱歉的是,我无法预测未来WPF会怎么样.乔布斯说过这么一 ...

  2. Linux~Sh脚本一点自己的总结

    从.netCore开源项目来看,eShopOnContainers来说,它的部署是跨平台的,可以部署在linux,docker上,在linux上运行它也可以写一些集成的小脚本,这是微信工程师为我们提供 ...

  3. 写在最前面 - 《看懂每一行代码 - kubernetes》

    我要写什么 <看懂每一行代码 - kubernetes>会包含k8s整个项目的源码解析,考虑到门槛问题,在开始分析k8s之前我会通过一些更低难度的golang开源项目讲解来帮助大家提升go ...

  4. Shiro+easyUI+SpringMVC实现登录认证

      最近在做一个小项目,其中认证这块使用shiro+SpringMVC+easyUI,因为easyUI在提交数据的时候使用的是ajax的异步提交,所以shiro在处理数据的时候需要重写FormAuth ...

  5. 多线程Thread,线程池ThreadPool

    首先我们先增加一个公用方法DoSomethingLong(string name),这个方法下面的举例中都有可能用到 #region Private Method /// <summary> ...

  6. 大前端的自动化工厂(1)——Yeoman

    一.Yeoman是什么 Yeoman是现代化前端项目的脚手架工具,用于生成包含指定框架结构的工程化目录结构.它是整个前端自动化工厂的第一站. 从个人使用者的角度来看,Yeoman的地位有些鸡肋,因为流 ...

  7. 【Mybatis】使用Mybatis-Generator自动生成entity、dao、mapping

    使用过mybatis的应该都有用过Mybatis-Generator,本文主要介绍使用Mybatis-Generator来自动生成entity.dao.mapping文件. Mybatis-Gener ...

  8. 【JVM】7、深入理解Java G1垃圾收集器

    本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践. 一,什么是垃圾回收 首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么 ...

  9. Selenium自动化测试-进阶2-框架篇

    前面的文章已经讲述了 Selenium自动化的入门知识,不知道各位看官看懂没有,有不懂的请留言. 接下来,开始讲解 Selenium自动化测试进阶知识. 首先讲解:自动化测试的核心: 利用自动化程序代 ...

  10. Vue利用canvas实现移动端手写板

    <template> <div class="hello"> <!--touchstart,touchmove,touchend,touchcance ...