MongoDB的搭建并配置主从以及读写分离
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的搭建并配置主从以及读写分离的更多相关文章
- 聊聊Mysql主从同步读写分离配置实现
Hi,各位热爱技术的小伙伴您们好,好久没有写点东西了,今天写点关于mysql主从同步配置的操作日志同大家一起分享.最近自己在全新搭建一个mysql主从同步读写分离数据库简单集群,我讲实际操作步骤整理分 ...
- Mysql主从配置,实现读写分离
大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...
- 黄聪:Mysql主从配置,实现读写分离
大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...
- DBA 小记 — 分库分表、主从、读写分离
前言 我在上篇博客 "Spring Boot 的实践与思考" 中比对不同规范的 ORM 框架应用场景的时候提到过主从与读写分离,本篇随笔将针对此和分库分表进行更深入地探讨. 1. ...
- mysql数据库主从同步读写分离(一)主从同步
1.mysql数据库主从同步读写分离 1.1.主要解决的生产问题 1.2.原理 a.为什么需要读写分离? 一台服务器满足不了访问需要.数据的访问基本都是2-8原则. b.怎么做? 不往从服务器去写了 ...
- mysql 主从同步-读写分离
主从同步与读写分离测试 一. 实验环境(主从同步) Master centos 7.3 192.168.138.13 Slave ...
- 使用docker 实现MySQL主从同步/读写分离
1. 利用 docker 实现 mysql 主从同步 / 读写分离 为了保证数据的完整和安全,mysql 设计了主从同步,一个挂掉还可以用另个.最近重构论坛,想来改成主从吧.担心失误,就先拿 dock ...
- mysql主从同步--读写分离。
1.mysql 安装参考 https://www.cnblogs.com/ttzzyy/p/9063737.html 2. 主mysql,从mysql 指定配置文件启动 mysqld --defaul ...
- Docker容器启动Mysql,Docker实现Mysql主从,读写分离
Docker容器启动Mysql,Docker实现Mysql主从,读写分离 一.Docker文件编排 二.配置主从复制 2.1 配置master 2.2 配置slave 三.验证主从复制 3.1 mas ...
随机推荐
- 《深入理解Java虚拟机》-----第2章 Java内存区域与内存溢出异常
2.1 概述 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝又是执行最基础工作的劳动人民——拥有每一个对象的“所有权”,又担负着每一个对象生命开始到终结的维护责任 ...
- AngularJS7那些不得不说的事故
题外话 最近简直要忙死,所以停更了很久,你们会不会以为我人间蒸发了? 正文之前,请允许我先跑个题,就是关于忙的问题. 做了Freelance,每天过的比上班还累,这完全不是我想要的生活啊? ...
- Android 开发工具类 18_NetWorkUtil
检测网络的一个工具包: 1.网络是否可用: 2.判断是否有网络连接: 3.判断 WIFI 网络是否可用: 4.判断 MOBILE 网络是否可用; 5.获取当前网络连接的类型信息: 6.获取当前的网络状 ...
- React Native (一) 入门实践
上周末开始接触react native,版本为0.37,边学边看写了个demo,语法使用es6/7和jsx.准备分享一下这个过程.之前没有native开发和react的使用经验,不对之处烦请指出.笔者 ...
- 阿里云Ubuntu安装图形界面与中文语言包
图形界面: http://blog.csdn.net/qq_37608398/article/details/78155568?locationNum=9&fps=1 安装中文: http:/ ...
- ARP协议分析
一.ARP概述 网络中所有的协议(HTTP.URL.FTP.TELNET.TCP.UDP.ARP ······)都包含在TCP/IP协议栈中,从使用上来看:其中大部分协议都是大家平常上网所接触到的,不 ...
- 如何理解git checkout -- file和git reset HEAD -- file
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001374831943254ee ...
- Xamarin.Forms 开发资源集合(复制)
复制:https://www.cnblogs.com/mschen/p/10199997.html 收集整理了下 Xamarin.Forms 的学习参考资料,分享给大家,稍后会不断补充: UI样式 S ...
- c#委托中的同步和异步方法即BeginInvoke和EndInvoke
学习多线程之前我们先了解一下电脑的一些概念,比如进程,线程,这个参考https://www.cnblogs.com/loverwangshan/p/10409755.html 这篇文章.今天我们接着来 ...
- Vue中父组件传子组件
父组件代码: <template> <section :class="menuMode === 'vertical' ? 'vertical-sub-nav' : 'sub ...