mangodb—分片和副本集架构部署
mangodb—分片和副本集架构部署
三台服务器20.0.0.18(19)(20)
**服务器18 | **服务器19 | **服务器20 |
---|---|---|
mongos | mongos | mongos |
config server | config server | config server |
shard server1 主节点 | shard server1副节点 | shard server1 仲裁 |
shard server2 仲裁 | shard server2主节点 | shard server2 副节点 |
shard server3 副节点 | shard server3 仲裁 | shard server3 主节点 |
一.每台机器上先安装mongodb
1.关闭系统防火墙和安全机制
systemctl stop firewalld.service
setenforce 0
2.先把安装包上传到/opt目录下解压
tar zxvf mongodb-linux-x86_64-3.6.3.tgz
3.在usr/local/文件夹下创建mongodb文件夹
mkdir mongodb
4.然后将mongodb-linux-x86_64-3.6.3下的文件移动到mongodb文件夹下
cd /opt
mv mongodb-linux-x86_64-3.6.3/* /usr/local/mongodb/
cd /usr/local/mongodb/
mkdir data
5.在usr/local/mongodb文件夹下创建logs文件
touch /usr/local/mongodb/logs
6.进入/usr/local/mongodb/bin目录下,启动mongodb服务
cd /usr/local/mongodb/bin
./mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend --port=27017 --fork./mongo ##启动客户端
7.分别在每台机器建立conf、mongos、config、shard1、shard2、shard3六个目录,因为mongos不存储数据,只需要建立日志文件目录即可。
mkdir -p /usr/local/mongodb/conf
mkdir -p /usr/local/mongodb/mongos/log
mkdir -p /usr/local/mongodb/config/data
mkdir -p /config/log
mkdir -p /usr/local/mongodb/shard1/data
mkdir -p /usr/local/mongodb/shard1/log
mkdir -p /usr/local/mongodb/shard2/data
mkdir -p /usr/local/mongodb/shard2/log
mkdir -p /usr/local/mongodb/shard3/data
mkdir -p /usr/local/mongodb/shard3/log
二.配置服务器搭建副本集
Mongodb3.4以后要求配置服务器也创建副本集,不然集群搭建不成功。添加配置文件。(每个都要配置)
vi /usr/local/mongodb/conf/config.conf
进入后添加以下配置信息
## 配置文件内容
pidfilepath = /usr/local/mongodb/config/log/configsrv.pid
dbpath = /usr/local/mongodb/config/data
logpath = /usr/local/mongodb/config/log/congigsrv.log
logappend = true
bind_ip = 0.0.0.0
port = 24000
fork = true
#declare this is a config db of a cluster;
configsvr = true
#副本集名称
replSet=configs
#设置最大连接数
maxConns=20000
分别启动三台服务器的config server,连接:进入/etc目录下
./mongod -f /usr/local/mongodb/conf/config.conf
登录任意一台配置服务器,初始化配置副本集,登录:进入/usr/local/mongodb/bin目录下
./mongo --port 24000
使用admin数据库
use admin
config变量:
config = {
... members : [
... {_id : 0, host : "20.0.0.18:24000" },
... {_id : 1, host : "20.0.0.19:24000" },
... {_id : 2, host : "20.0.0.20:24000" }
... ]
... }
初始化副本集:
rs.initiate(config)
这一步非常重要,必须初始化成功。不成功的话,路由服务器与配置服务器连接不上。
其中,”_id” : “configs”应与配置文件中配置的 replicaction.replSetName 一致,”members” 中的 “host” 为三个节点的 ip 和 port。
三台分片服务器搭建副本集
配置分片副本集(三台机器一起配置)。
1.设置第一个分片副本集
配置文件:
vi /usr/local/mongodb/conf/shard1.conf#配置文件内容
#——————————————–
pidfilepath = /usr/local/mongodb/shard1/log/shard1.pid
dbpath = /usr/local/mongodb/shard1/data
logpath = /usr/local/mongodb/shard1/log/shard1.log
logappend = true
bind_ip = 0.0.0.0
port = 25001
fork = true
#副本集名称
replSet=shard1
#declare this is a shard db of a cluster;
shardsvr = true
#设置最大连接数
maxConns=20000
启动三台服务器的shard1 server,进入/usr/local/mongodb/bin目录下:
./mongod -f /usr/local/mongodb/conf/shard1.conf
登陆任意一台服务器,初始化副本集,进入/usr/local/mongodb/bin目录下:
./mongo --port 25001使用admin数据库
use admin定义副本集配置,第三个节点的 “arbiterOnly”:true 代表其为仲裁节点。config = {
... _id : "shard1",
... members : [
... {_id : 0, host : "20.0.0.18:25001" },
... {_id : 1, host : "20.0.0.19:25001" },
... {_id : 2, host : "20.0.0.20:25001" , arbiterOnly: true }
... ]
... }
初始化副本集配置
rs.initiate(config);
2.设置第二个分片
进入配置文件(三台机子一起配置)
vi /usr/local/mongodb/conf/shard2.conf#配置文件内容
#——————————————–
pidfilepath = /usr/local/mongodb/shard2/log/shard2.pid
dbpath = /usr/local/mongodb/shard2/data
logpath = /usr/local/mongodb/shard2/log/shard2.log
logappend = true
bind_ip = 0.0.0.0
port = 25002
fork = true
#副本集名称
replSet=shard2
#declare this is a shard db of a cluster;
shardsvr = true
#设置最大连接数
maxConns=20000
启动三台服务器的shard2 server,进入/usr/local/mongodb/bin目录下:
./mongod -f /usr/local/mongodb/conf/shard2.conf
登陆任意一台服务器,进入/usr/local/mongodb/bin初始化副本集
./mongo --port 25002use admin定义副本集配置config = {
... _id : "shard2",
... members : [
... {_id : 0, host : "20.0.0.18:25002" , arbiterOnly: true },... {_id : 1, host : "20.0.0.19:25002" },
... {_id : 2, host : "20.0.0.20:25002" }
... ]
... }
初始化副本集配置
rs.initiate(config);
这里出现了错误 ,换另外一台机子做
设置第三个分片副本集
配置文件代码如下:
vi /usr/local/mongodb/conf/shard3.conf#配置文件内容
#——————————————–
pidfilepath = /usr/local/mongodb/shard3/log/shard3.pid
dbpath = /usr/local/mongodb/shard3/data
logpath = /usr/local/mongodb/shard3/log/shard3.log
logappend = true
bind_ip = 0.0.0.0
port = 25003
fork = true
#副本集名称
replSet=shard3
#declare this is a shard db of a cluster;
shardsvr = true
#设置最大连接数
maxConns=20000
启动三台服务器的shard3 server,进入/usr/local/mongodb/bin目录下:
./mongod -f /usr/local/mongodb/conf/shard3.conf
登陆任意一台服务器,初始化副本集
./mongo --port 25003use admin定义副本集配置config = {
... _id : "shard3",
... members : [
... {_id : 0, host : "20.0.0.18:25003" },
... {_id : 1, host : "20.0.0.19:25003" , arbiterOnly: true},
... {_id : 2, host : "20.0.0.20:25003" }
... ]
... }
初始化副本集配置
rs.initiate(config);
4、 配置路由服务器
先启动配置服务器和分片服务器,后启动路由实例启动路由实例:(三台机器)
vi /usr/local/mongodb/conf/mongos.conf
#内容
pidfilepath = /usr/local/mongodb/mongos/log/mongos.pid
logpath = /usr/local/mongodb/mongos/log/mongos.log
logappend = true
bind_ip = 0.0.0.0
port = 23000
fork = true
#监听的配置服务器,只能有1个或者3个 configs为配置服务器的副本集名字
configdb = configs/20.0.0.18:24000,20.0.0.19:24000,20.0.0.20:24000#设置最大连接数
maxConns=20000
启动三台服务器的mongos server,进入/usr/local/mongodb/bin目录下:
./mongos -f /usr/local/mongodb/conf/mongos.conf
ps:中间出现服务一直等待连接中,也没有报错 就是连接不上,后来 排错是因为初始化config.server副本集出错了 忘记加 _id : “configs”,服务一直找不到它(遇到问题可以查看config.log的日志文件,看不懂直接有道翻译)
5、分片
目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到mongos路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。
登陆任意一台mongos,进入/usr/local/mongodb/bin目录下
./mongo --port 23000使用admin数据库
use admin串联路由服务器与分配副本集
sh.addShard("shard1/20.0.0.18:25001,20.0.0.19:25001,20.0.0.20:25001")sh.addShard("shard2/20.0.0.18:25002,20.0.0.19:25002,20.0.0.20:25002")sh.addShard("shard3/20.0.0.18:25003,20.0.0.19:25003,20.0.0.20:25003")查看集群状态
sh.status()
6、 测试
目前配置服务、路由服务、分片服务、副本集服务都已经串联起来了,但我们的目的是希望插入数据,数据能够自动分片。连接在mongos上,准备让指定的数据库、指定的集合分片生效。
指定testdb分片生效
db.runCommand( { enablesharding :"testdb"});
指定数据库里需要分片的集合和片键
db.runCommand( { shardcollection : "testdb.table1",key : {id: "hashed"} } )
我们设置testdb的 table1 表需要分片,根据 id 自动分片到 shard1 ,shard2,shard3 上面去。要这样设置是因为不是所有mongodb 的数据库和表 都需要分片!插入100000条数据测试:
先进入testdb数据库use testdb ##因为上面设置了 只有这个库才有数据分片的功能for(var i=1;i<=10000;i++){
... db.table1.insert({id:i,name:"sundenghui"})
... }
查看分配状态
db.table1.stats();
的 table1 表需要分片,根据 id 自动分片到 shard1 ,shard2,shard3 上面去。要这样设置是因为不是所有mongodb 的数据库和表 都需要分片!插入100000条数据测试:
先进入testdb数据库use testdb ##因为上面设置了 只有这个库才有数据分片的功能for(var i=1;i<=10000;i++){
... db.table1.insert({id:i,name:"sundenghui"})
... }
[外链图片转存中…(img-DRxwTwFK-1662436163063)]
查看分配状态
db.table1.stats();
[外链图片转存中…(img-Xz7tW315-1662436163064)]
[外链图片转存中…(img-5OjsIV8l-1662436163064)]
[外链图片转存中…(img-P07DlRbm-1662436163064)]
每个节点上根据hash算法分配这10000条数据
mangodb—分片和副本集架构部署相关推荐
- MongoDB 分片(sharding)+副本集(replSet)集群搭建
文章目录 MongoDB安装 Windows平台安装 1.下载 2.安装 3.启动MongoDB服务 4.进入MongoDB后台 Linux平台安装MongoDB 1.下载 2.安装 3.创建数据库目 ...
- mongodb主从复制及副本集的部署
一.mongodb配置参数介绍: [root@host11 tmp]# cat /etc/mongod.conf #以守护进程的方式运行 fork=true #设置db的路径 dbpath=/usr ...
- Mongodb 分片与副本集
测试搭建 192.168.3.110 mongos 30000,30001,30002 config 40000,40001,40002 shard1 50001,50002,50003 shard2 ...
- mongodb副本集架构搭建
高可用性通常描述一个系统经过专门的设计,从而减少停工时间.保存其服务的高度连续可用性,MongoDB提供的主从复制机制保证了多个数据库的数据同步,这对实现数据库的容灾.备份.恢复.负载均衡都是有极大的 ...
- MongoDB副本集的部署与操作
一.实验综述 1.实验目的及要求 (1)了解MongoDB副本集 (2)熟悉MongoDB副本集成员 (3)掌握MongoDB副本集部署 (4)掌握MongoDB副本集操作 (5)理解副本集机制 实验 ...
- mongodb高可用集群 3 ---分片与副本集结合
1. 架构图: 2. 四个组件:mongos.config server.shard.replica set mongos,数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程 ...
- CentOS7mongodb6副本集安装部署
mongodb 6.0.4社区版 CentOS7 正常的副本集需要三台主机,一主两从或者一主一从一仲裁,集群可以实现高可用,主节点宕机之后通过选举产生新的主节点.我只有两台主机,根据实际的需求,我要部 ...
- Mongo分片+副本集集群搭建
一. 概念简单描述 1. MongoDB分片集群包含组件: mongos,configserver,shardding分片 2. Mongos:路由服务是Sharded cluster的访问入口,本身 ...
- mongodb集群搭建详情分片+副本集
在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置服务器等. 相关概念 mongodb集群架构图: 从图中可以看到有四个组件:mongos.config server.shard.repl ...
最新文章
- 浏览器保存密码后自动填充问题
- mysql中如何将一个表中的部分记录合并,MySQL数据库将多条记录的单个字段合并成一条记录_MySQL...
- socket网络编程——多进程、多线程处理并发
- Python自动化之语法基础
- [Linux]Linux应用程序中添加强制中断处理
- c++将小写转换为大写函数_必须掌握的基础函数组合应用技巧,提高效率,准时下班...
- python进程池_python进程池剖析(一)
- SharePoint 上传附件
- 网络协议端口号说明(转)
- 48. 总是包含(#include)正确的头文件
- 基于Ubuntu系统下的Hadoop 环境搭建(新手可尝)
- 小花语音机器人(零)-单片机控制驱动板PCB
- php 搭建laravel,laravel框架_搭建php Laravel框架教程详解
- python deap_在Python中用DEAP绘制多目标pareto边界
- kindle阅读订阅的google reader时,词典不能工作的修正
- mysql limit 索引失效_mysql索引失效
- linux ntfs格式u盘实现与挂载
- Edge浏览器主页被hao123劫持怎么办?
- 码农的自我修养 - ARM处理器天梯图
- 小丁带你走进git的世界四-重写历史记录