我们知道mongodb现在生产环境大部分还是使用的复制集来作为主流,据我了解。很多公司现在都是使用复制集的方式,而我们通过mongos可以巧妙的解决链接的问题,我们先从环境说起:

首先我们要模仿搭建的环境是:
server1:mongod primary+mongod config+mongos
server2:mongod primary+mongod config+mongos
server3:mongod primary+mongod config+mongos

其实就是一个分片复制集,只不过这里我们启动了一个分片节点,所有的数据库和集合并没有采用分片的操作,我们的所有链接可以通过三个mongos链接,三个mongos和mongo confir是独立的,目的是为了当其中一组down掉以后出现单点的问题。

下面是我们自己要搭建的环境
线上环境:

server1:mongodb+config+mongos
server2:mongodb+config+mongos

两个mongod是一个复制集,两个config+mongos是各自独立的。

我们采用的是一主一从的分片复制集,也是一个分片,启动两套mongos.
 
首先我们搭建第一步,安装mongodb数据库,两台机器上都要安装mongodb:
1:解压压缩文件
tar -zxvf mongodb-linux-x86_64-rhel62-3.4.2.tgz
mkdir /home/maxiangqian/
mv mongodb-linux-x86_64-rhel62-3.4.2 /home/maxiangqian/

2:加入环境变量

export PATH=/home/maxiangqian/mongodb-linux-x86_64-rhel62-3.4.2/bin:$PATH

3:创建用户和目录

其他配置:
创建用户和目录:
[root@localhost mongodb]# mkdir -p /home/mongodb/db27017/data
[root@localhost mongodb]# mkdir -p /home/mongodb/db27017/log
[root@localhost mongodb]# mkdir -p /home/mongodb/db27017/tmp
[root@localhost mongodb]# mkdir -p /home/mongodb/db27017/key

4:关闭配置SELinux

vi /etc/selinux/config

配置:

SELINUX=disabled
打开端口:
[root@localhost log]# /sbin/iptables -I INPUT -p tcp --dport 27017 -j ACCEPT
[root@localhost log]# /sbin/iptables -I INPUT -p tcp --dport 27018 -j ACCEPT
[root@localhost log]# /sbin/iptables -I INPUT -p tcp --dport 27019 -j ACCEPT
[root@localhost log]# /etc/rc.d/init.d/iptables save

查看状态:/etc/init.d/iptables status

查看端口状态:netstat -tnl |grep 27017
5:创建一个专用的配置文件,配置文件的内容我们再上一篇已经讲过了,这里不再贴出来了。
vi mongodb27017.conf

6:启动

mongod -f /home/mongodb/db27017/mongodb27017.cnf

7:为主实例配置超级管理员账号:maxiangqian

这点一定要留意,因为只有主才能创建管理员账号,当我们初始化复制集的时候,账号是会同步过去的,如果说我们在没初始化的时候就创建了管理员账号的话,初始化复制集的时候就会出问题。
use admin
db.createUser(
{
user: "maxiangqian",
pwd: "maxiangqian",
roles: [ { role: "root", db: "admin" } ]
}
)
8:开启验证,以及keyfile(主从两台都是要开启的)
先生成一个keyfile文件,拷贝到server2上的相同位置:
openssl rand -base64 756 > /home/mongodb/db27017/key/autokey
chmod 400 /home/mongodb/db27017/key/autokey
cp /home/mongodb/db27017/key/autokey /home/sa/
scp -P 9880 autokey sa@172.16.16.35:/home/sa/

9:初始化复制集

config = {
_id : "mongodbtestmxq",
members :
[
{ _id : 0, host : "172.16.16.34:27017" },
{ _id : 1, host : "172.16.16.35:27017" }
]
}

创建复制集配置对象,其中id=warringstates是表示复制集的名称

且应该和配置文件中的一致
之后的一个数组中的每一个json对象都表示一个结点的id和地址和端口
rs.initiate(config)

10:验证复制集

主节点:
mongodbtestmxq:PRIMARY> use maxiangqian
switched to db maxiangqian
mongodbtestmxq:PRIMARY> db.maxiagnqian.insert({"id":1,"name":"maxiangqian"})
WriteResult({ "nInserted" : 1 })
mongodbtestmxq:PRIMARY> db.maxiagnqian.find()
{ "_id" : ObjectId("58eb1aaddf342c94989755e7"), "id" : 1, "name" : "maxiangqian" }

从节点验证:

mongodbtestmxq:SECONDARY> use maxiangqian
switched to db maxiangqian
mongodbtestmxq:SECONDARY> db.maxiagnqian.find()
{ "_id" : ObjectId("58eb1aaddf342c94989755e7"), "id" : 1, "name" : "maxiangqian" }

发现这个认证复制集搭建是OK的。

下面我们开始启动mongos和config,mongos就相当于一个路由的功能,config会配置分片集群的信息
11:启动config的分片
mongod -f /home/mongodb/config/mongoconfig27018.conf

然后我们看一下配置文件:

[root@localhost config]# cat mongoconfig27018.conf
dbpath=/home/mongodb/config/data/
configsvr=true
port=27018
keyFile=/home/sa/autokey
fork = true
logpath = /home/mongodb/config/log/mongo.logi
replSet=configmxq

初始化复制集,也要加认证,添加管理员账号:

config = {
_id : "configmxq",
members :
[
{ _id : 0, host : "172.16.16.34:27018" },
{ _id : 1, host : "172.16.16.35:27018" }
]
}
rs.initiate(config)

12:启动mongos

首先我们看一下配置文件:
[root@localhost mongos]# cat mongos27019.conf
port=27019
configdb=configmxq/172.16.16.34:27018,172.16.16.35:27018
keyFile=/home/sa/autokey
fork = true
logpath = /home/mongodb/mongos/log/mongo.log

然后直接进行启动:

mongos -f /home/mongodb/mongos/mongos27019.conf

13:进入mongos进行分片的设置:

直接进行操作就可以了,所有的链接又要走mongos才能保证数据没问题。
mongos> use admin
switched to db admin
mongos> db.auth("maxiangqian","maxiangqian")
1
mongos> show dbs
admin 0.000GB
config 0.000GB
maxiangqian 0.000GB
mongos> db.maxiangqian.find()
mongos> use maxiangqian
switched to db maxiangqian
mongos> db.maxiangqian.find()
mongos> db.maxiangqian.insert({"id":2,"name":"maxiangqian2"})
WriteResult({ "nInserted" : 1 })
从主库直接插入一条数据:
mongodbtestmxq:PRIMARY> db.maxiangqian.insert({"id":3,"name":"maxiangqian3"})
然后返回mongos直接进行查看:
mongos> db.maxiangqian.find()
{ "_id" : ObjectId("58eb34a9289626fe9f9c2586"), "id" : 2, "name" : "maxiangqian2" }
{ "_id" : ObjectId("58eb35516c6683eeb8a72b9a"), "id" : 3, "name" : "maxiangqian3" }

看到数据是没问题的。应该是配置好了。到这里,也算配置结束了。

下面还是贴一下基本的配置文件吧,方便大家查阅:

1:mongod配置文件
dbpath = /home/mongodb/db27017/data/
logpath = /home/mongodb/db27017/log/mongo.log
pidfilepath = /home/mongodb/db27017/tmp/mongo.pid
keyFile = /home/sa/autokey
directoryperdb = true
logappend = true
smallfiles = true
fork = true
auth = true
port = 27017
replSet = mongodbtestmxq
maxConns = 10240
shardsvr=true

2:config配置文件

dbpath=/home/mongodb/config/data/
configsvr=true
port=27018
keyFile=/home/sa/autokey
fork = true
logpath = /home/mongodb/config/log/mongo.log
replSet=configmxq

3:mongos配置文件

port=27019
configdb=configmxq/172.16.16.34:27018,172.16.16.35:27018
keyFile=/home/sa/autokey
fork = true
logpath = /home/mongodb/mongos/log/mongo.log
 
 
 
 
 

mongodb使用mongos链接复制集的更多相关文章

  1. Studio 3T for MongoDB连接51.212复制集

    Studio 3T for MongoDB连接51.212复制集 [ #DirectConection Authentication Mode - Basic(MONGODB-CR or SCEAM- ...

  2. mongodb 3.4分片复制集配置

    1:启动三个实例 mongod -f /home/mongodb/db27017/mongodb27017.conf mongod -f /home/mongodb/db27018/mongodb27 ...

  3. MongoDB之Replica Set(复制集复制)

    MongoDB支持两种复制模式: 主从复制(Master/Slave) 复制集复制(Replica Set) 下面主要记录我在centos虚拟机上安装replica set,主要参考:http://d ...

  4. Mongodb Manual阅读笔记:CH8 复制集

    8 复制 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读笔 ...

  5. MongoDB复制集高可用选举机制(三)

    复制集高可用选举机制 在上一章介绍了MongoDB的架构,复制集的架构直接影响着故障切换时的结果.为了能够有效的故障切换,请确保至少有一个节点能够顺利升职为主节点.保证在拥有核心业务系统的数据中心中拥 ...

  6. MongoDB之分片集群与复制集

    分片集群 1.1.概念 分片集群是将数据存储在多台机器上的操作,主要由查询路由mongos.分片.配置服务器组成. ●查询路由根据配置服务器上的元数据将请求分发到相应的分片上,本身不存储集群的元数据, ...

  7. 【MongoDB】windows平台搭建Mongo数据库复制集(类似集群)(转)

    原文链接:[MongoDB]windows平台搭建Mongo数据库复制集(类似集群)(一) Replica  Sets(复制集)是在mongodDB1.6版本开始新增的功能,它可以实现故障自动切换和自 ...

  8. MongoDB复制集成员及状态转换

    此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 复制集(Replica Set)是MongoDB核心组件,相比早期版本采用的主从(Master-Slave) ...

  9. MongoDB学习笔记(六)--复制集+sharding分片 && 总结

    复制集+sharding分片                                                               背景 主机 IP 服务及端口 Server A ...

随机推荐

  1. Servlet入门小案例

    案例一:tomcat9.jdk1.8 1.eclipse创建web项目 1)创建一个Dynamic web project,名字为Servlet_hjh 2)在src下创建一个包,为com.hjh.d ...

  2. SD341X-SD343H管网法兰式伸缩蝶阀厂家,SD341X-SD343H管网法兰式伸缩蝶阀价格 - 专题栏目 - 无极资讯网

    无极资讯网 首页 最新资讯 最新图集 最新标签   搜索 SD341X-SD343H管网法兰式伸缩蝶阀 无极资讯网精心为您挑选了(SD341X-SD343H管网法兰式伸缩蝶阀)信息,其中包含了(SD3 ...

  3. Java - n的阶乘计算

    用递归方法,求10!的阶乘 分析: f(n) = n * f(n-1)           n != 1        -----        递推公式 f(n) = 1               ...

  4. React创建组件的三种方式比较

    推荐文章: https://www.cnblogs.com/wonyun/p/5930333.html 创建组件的方式主要有: 1.function 方式 2.class App extends Re ...

  5. table定位

    Table定位 在 web 页面中经常会遇到 table 表格,特别是后台操作页面比较常见.本篇详细讲解 table 表格如何定位. 1.1 table特性 1.table 页面查看源码一般有这几个明 ...

  6. Git学习系列之Git 的优势有哪些?

    Git 的优势主要有: 1.更方便的 Merge 分布式管理必然导致大量的 Branch 和 Merge 操作.因此分布式版本控制系统都特别注意这方面.在传统的 CVS 里面制作 Branch 和 M ...

  7. HttpUtils 封装类

    作为一个web开发人员,对Http 请求,并不陌生.有时候,我们请求的时候,需要使用代码实现,一般情况,我们使用Apache Jakarta Common 下的子项目.的HttpClient. 可是我 ...

  8. 【Javascript】Javascript原型与继承

    一切都是对象! 以下的四种(undefined, number, string, boolean)属于简单的值类型,不是对象.剩下的几种情况——函数.数组.对象.null.new Number(10) ...

  9. 关于javascript中时间格式和时间戳的转换

    当前时间获取的各种函数: var myDate = new Date();myDate.getYear();        //获取当前年份(2位),已经不推荐使用myDate.getFullYear ...

  10. [Unity3D]Shader编程之动态屏幕遮罩

    转载 https://blog.csdn.net/u012741077/article/details/78425834 屏幕可视范围跟随目标物体移动,可修改可视范围大小,边缘渐变大小.以及遮罩颜色, ...