程序员,架构师,运维想要的mongodb数据库集群安装教程在这里
qiyuwang 2024-11-03 16:32 24 浏览 0 评论
现在mongo数据库非常流行,下面就详细介绍一下怎么搭建mongo数据库集群搭建,下图是mongo集群的架构图
环境准备
系统系统 CentOS Linux release 7.6.1810 (Core),Red Hat Enterprise Linux Server release 6.10 (Santiago),由于测试环境服务器比较难找,有一台服务器为centos,但是不影响集群搭建
三台服务器:10.10.57.206,10.10.57.207,10.10.57.208
安装包: mongodb-org-server-4.2.2
服务器规划
端口分配:
mongos:20000
config:21000
shard1:27001
shard2:27002
hard3:27003
集群搭建
1、安装mongodb
rpm -ivh?mongodb-org-server-4.2.2-1.el7.x86_64.rpm?mongodb-org-mongos-4.2.2-1.el7.x86_64.rpm?mongodb-org-shell-4.2.2-1.el7.x86_64.rpm?mongodb-org-tools-4.2.2-1.el7.x86_64.rpm
分别在每台机器建立conf、mongos、config、shard1、shard2、shard3六个目录,因为mongos不存储数据,只需要建立日志文件目录即可。
mkdir -p /mongo/conf
mkdir -p /mongo/mongos/log
mkdir -p /mongo/config/data
mkdir -p /mongo/config/log
mkdir -p /mongo/shard1/data
mkdir -p /mongo/shard1/log
mkdir -p /mongo/shard2/data
mkdir -p /mongo/shard2/log
mkdir -p /mongo/shard3/data
mkdir -p /mongo/shard3/log
chown -R?mongod:mongod /mongo
2、config server配置服务器
mongodb3.4以后要求配置服务器也创建副本集,不然集群搭建不成功。
添加配置文件
vi /mongo/conf/config.conf
## 配置文件内容
pidfilepath = /mongo/config/log/configsrv.pid
dbpath = /mongo/config/data
logpath = /mongo/config/log/congigsrv.log
logappend = true
directoryperdb=true
bind_ip = 0.0.0.0
port = 21000
fork = true
#declare this is a config db of a cluster;
configsvr = true
#副本集名称
replSet=configs
#设置最大连接数
maxConns=20000
启动三台服务器的config server
mongod -f /mongo/conf/config.conf
登录任意一台配置服务器,初始化配置副本集
#连接
mongo --port 21000
#config变量
config?={
????????"_id" : "configs",
????????"members" : [
????????????????{
????????????????????????"_id" : 0,
????????????????????????"host" : "10.10.57.206:21000"
????????????????},
????????????????{
????????????????????????"_id" : 1,
????????????????????????"host" : "10.10.57.207:21000"
????????????????},
????????????????{
????????????????????????"_id" : 2,
????????????????????????"host" : "10.10.57.208:21000"
????????????????}
????????]
}
#初始化副本集
rs.initiate(config)
其中,”_id” : “configs”应与配置文件中配置的 replicaction.replSetName 一致,”members” 中的 “host” 为三个节点的 ip 和 port
3、配置分片副本集(三台机器)
设置第一个分片副本集
配置文件
vi /mongo/conf/shard1.conf
#配置文件内容#
pidfilepath = /mongo/shard1/log/shard1.pid
dbpath = /mongo/shard1/data
logpath = /mongo/shard1/log/shard1.log
logappend = true
directoryperdb=true
bind_ip = 0.0.0.0
port = 27001
fork = true
#副本集名称
replSet=shard1
#declare this is a shard db of a cluster;
shardsvr = true
#设置最大连接数
maxConns=20000
启动三台服务器的shard1 server
mongod -f /mongo/conf/shard1.conf
登陆任意一台服务器,初始化副本集
mongo --port 27001
#使用admin数据库
use admin
#定义副本集配置,第三个节点的 "arbiterOnly":true 代表其为仲裁节点。
config ={
????????"_id" : "shard1",
????????"members" : [
????????????????{
????????????????????????"_id" : 0,
????????????????????????"host" : "10.10.57.206:27001"
????????????????},
????????????????{
????????????????????????"_id" : 1,
????????????????????????"host" : "10.10.57.207:27001"
????????????????},
????????????????{
????????????????????????"_id" : 2,
????????????????????????"host" : "10.10.57.208:27001",
????????????????????????"arbiterOnly" : true
????????????????}
????????]}
#初始化副本集配置
rs.initiate(config);
设置第二个分片副本集
配置文件
vi /mongo/conf/shard2.conf
#配置文件内容#
pidfilepath = /mongo/shard2/log/shard2.pid
dbpath = /mongo/shard2/data
logpath = /mongo/shard2/log/shard2.log
logappend = true
directoryperdb=true
bind_ip = 0.0.0.0
port = 27002
fork = true
#副本集名称
replSet=shard2
#declare this is a shard db of a cluster;
shardsvr = true
#设置最大连接数
maxConns=20000
启动三台服务器的shard2 server
mongod -f /mongo/conf/shard2.conf
登陆任意一台服务器,初始化副本集
mongo --port 27002
#使用admin数据库
use admin
#定义副本集配置
config = {
????????"_id" : "shard2",
????????"members" : [
????????????????{
????????????????????????"_id" : 0,
????????????????????????"host" : "10.10.57.206:27002",
????????????????????????"arbiterOnly" : true
????????????????},
????????????????{
????????????????????????"_id" : 1,
????????????????????????"host" : "10.10.57.207:27002"
????????????????},
????????????????{
????????????????????????"_id" : 2,
????????????????????????"host" : "10.10.57.208:27002"
????????????????}
????????]
}
#初始化副本集配置
rs.initiate(config);
设置第三个分片副本集
配置文件
vi /mongo/conf/shard3.conf
#配置文件内容#
pidfilepath = /mongo/shard3/log/shard3.pid
dbpath = /mongo/shard3/data
logpath = /mongo/shard3/log/shard3.log
logappend = true
directoryperdb=true
bind_ip = 0.0.0.0
port = 27003
fork = true
#副本集名称
replSet=shard3
#declare this is a shard db of a cluster;
shardsvr = true
#设置最大连接数
maxConns=20000
启动三台服务器的shard3 server
mongod -f /mongo/conf/shard3.conf
登陆任意一台服务器,初始化副本集
mongo --port 27003
#使用admin数据库
use admin
#定义副本集配置
config = {
????????"_id" : "shard3",
????????"members" : [
????????????????{
????????????????????????"_id" : 0,
????????????????????????"host" : "10.10.57.206:27003"
????????????????},
????????????????{
????????????????????????"_id" : 1,
????????????????????????"host" : "10.10.57.207:27003",
????????????????????????"arbiterOnly" : true
????????????????},
????????????????{
????????????????????????"_id" : 2,
????????????????????????"host" : "10.10.57.208:27003"
????????????????}
????????]
}
#初始化副本集配置
rs.initiate(config);
4、配置路由服务器 mongos
先启动配置服务器和分片服务器,后启动路由实例:(三台机器)
vi /mongo/conf/mongos.conf
#内容
pidfilepath = /mongo/mongos/log/mongos.pid
logpath = /mongo/mongos/log/mongos.log
logappend = true
bind_ip = 0.0.0.0
port = 20000
fork = true
#监听的配置服务器,只能有1个或者3个 configs为配置服务器的副本集名字
configdb = configs/10.10.57.206:21000,10.10.57.207:21000,10.10.57.208:21000
#设置最大连接数
maxConns=20000
启动三台服务器的mongos server
mongos -f /mongo/conf/mongos.conf
5、启用分片
目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到mongos路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。
登陆任意一台mongos
mongo --port 20000
#使用admin数据库
use admin
#串联路由服务器与分配副本集
sh.addShard("shard1/10.10.57.206:27001,10.10.57.207:27001,10.10.57.208:27001")
sh.addShard("shard2/10.10.57.206:27002,10.10.57.207:27002,10.10.57.208:27002")
sh.addShard("shard3/10.10.57.206:27003,10.10.57.207:27003,10.10.57.208:27003")
#查看集群状态
sh.status()
6、测试
目前配置服务、路由服务、分片服务、副本集服务都已经串联起来了,但我们的目的是希望插入数据,数据能够自动分片。连接在mongos上,准备让指定的数据库、指定的集合分片生效。
use admin
#指定testdb分片生效
db.runCommand( { enablesharding :"testdb"});
#指定数据库里需要分片的集合和片键
db.runCommand( { shardcollection : "testdb.table1",key : {sno: 1} } )
我们设置testdb的 table1 表需要分片,根据 id 自动分片到 shard1 ,shard2,shard3 上面去。要这样设置是因为不是所有mongodb 的数据库和表 都需要分片!
测试分片配置结果
mongo 127.0.0.1:20000
#使用testdb
use testdb;
#创建索引
db.table1.ensureIndex( {"testkey": 1}, {"name": "idx_testkey", "background": true} )
#插入测试数据
for (var i = 1; i <= 1000000; i++) db.table1.save({sno:i,"testkey":"testiefsljfoeflasfa"+i});
#查看分片情况如下,部分无关信息省掉了
db.table1.stats();
后期运维
启动关闭
mongodb的启动顺序是,先启动配置服务器,在启动分片,最后启动mongos.
mongod -f /mongo/conf/config.conf
mongod -f /mongo/conf/shard1.conf
mongod -f /mongo/conf/shard2.conf
mongod -f /mongo/conf/shard3.conf
mongod -f /mongo/conf/mongos.conf
关闭时,直接killall杀掉所有进程
mongod --shutdown -f /mongo/conf/config.conf
mongod --shutdown -f /mongo/conf/shard1.conf
mongod --shutdown -f /mongo/conf/shard2.conf
mongod --shutdown -f /mongo/conf/shard3.conf
mongod --shutdown -f /mongo/conf/mongos.conf
killall mongod
killall mongos
安装注意事项
在初始化分片配置时,一定要注意,不在仲裁节点上激活就行,在其他任意一个主备节点激活,不然会报一下错误
> rs.initiate(config);
{
"operationTime" : Timestamp(0, 0),
"ok" : 0,
"errmsg" : "This node, 10.10.57.208:27001, with _id MemberId(2) is not electable under the new configuration version 1 for replica set shard1",
"code" : 93,
"codeName" : "InvalidReplicaSetConfig",
"$clusterTime" : {
"clusterTime" : Timestamp(0, 0),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
相关推荐
- 你真的会用Word画线吗?(word画线技巧)
-
【你真的会用Word画线吗?】①输入三个“=”回车,是一条双直线;②输入三个“”,回车,就是一条波浪线;③输入三个“”回车,就是一条虚线;④输入三个“-”,回车,就是一条细直线.....新技能get√...
- 「干货」Word技巧知识——进阶篇(2)
-
Hello,大家好,我是无拘无束的分享知识,每天跟大家分享点有用的知识,话不多说。感兴趣的朋友可以点赞、关注、收藏哦。1.将word文档中的硬回车全部消除从事来稿阅读、编辑的工作者,最头痛的事就是打...
- 办公室人员必备! Word快捷键大全(办公中常用的快捷键)
-
【Word里超简单的画线方法!】简历、总结里文字太多怎么办?用线条分隔!Word画线秘籍:①输三个"="回车,是一条双直线②输三个"~"回车,是一条波浪线③输三个"-"回车,就是一条细直线。(来源...
- Word笔记大全(详细步骤)(word怎么写笔记)
-
字处理一、文档的基本操作1.打开/新建2.快速新建ctrl+n3.利用模板创建文件--新建--选择模板officeplus4.保存5.保护文件--信息--保护文档--限制编辑--对话框:勾选每一项...
- 如何删除word文档空白页?(怎么删除word里的空白页?)
-
在日常办公或学习中,我们经常会遇到Word文档中出现空白页的情况,这不仅影响文档的美观,还可能造成打印浪费。下面,我将为大家详细介绍如何在Office和WPS中的Word里轻松删除这些恼人的空白页。...
- Win11学院:如何在Windows 11装机时禁用BitLocker磁盘加密
-
IT之家5月7日消息,微软计划在Windows1124H2装机过程默认启用BitLocker加密,对于用户来说有两方面的影响:其一是影响硬盘的性能,其二是用户如果没有解密密钥,可能...
- 办公小技巧:Word“安全模式”用通透
-
大家都知道Windows的安全模式。其实,Word也有安全模式。那么,Word的安全模式又是什么?何时使用这种模式?使用这种模式有何限制?当Word运行中遇到问题需要启用安全模式运行时,如何按照软件给...
- 段落结束敲回车,下一段格式变样了怎么处理#每天学习一点点
-
段落换行后的格式发生变化。段落结束敲回车键,下一段格式变样了怎么处理?大家有时候遇到文章敲回车键,在下一段打字之后会发现这一段的样子就会和之前的段落不一样,当然可以调整一下或者用格式刷刷一下,但是稍微...
- 硬回车、软回车等介绍(硬回车键和软回车键)
-
1.硬回车:硬回车占两个字节,在word中敲击Enter键即可输入硬回车,硬回车是真正的段落标记,在两个硬回车之间的文字自成一个段落。代码是^p(小写)。2.软回车:用Shift+Enter产...
- Word里超简单的画线方法!(word中如何画线条)
-
小厅分享【Word里超简单的画线方法!】简历、总结里文字太多怎么办?用线条分隔!Word画线秘籍:①输三个"="回车,是一条双直线②输三个"~"回车,是一条波浪线③输三个"-"回车,就是一条细直线...
- Word 如何更改图片、删除与删除背景,勾选图片等问题
-
如果插入到Word文档中的图片想另外换一张,更换方法有两种,一种是把原图删除另外插入一张,另一种是直接更换图片。Word2016提供了更改图片的功能,用此功能更换图片会自动把原图删除,就像...
- Word中批量删除空行(多种方案)(批量删除word中的空行)
-
如下图,在Word文档中存在大量空行(回车),为了文档整洁,需要批量取消这些回车;方法一Ctrl+h,在查找内容中输入”^p^p”,在替换为输入”^p”,单击全部替换即可(^符号在英文输入法下按Shi...
- Word文档如何取消自动编号?(word文档如何取消自动编号功能)
-
在word文档中,当我们编辑有序号的文本内容时,word会自动识别给文本编号,如果直接删除序号再按回车键,序号又会自动填充。但有时候我们并不需要它自动编号或不喜欢它的编号格式,如何才能取消word自动...
- 最全的Word知识点,抓紧时间收藏起来
-
Word知识点1.1word工作界面Word2010的窗口组成∶窗口分标题栏、菜单栏、常用工具栏、格式工具栏、标尺、编辑区滚动条、状态栏、任务窗格。1.标题栏∶显示所编辑的文档名和程序名称。单击标题...
- Word中的页眉横线就是删不掉?其实按下这个键,1秒就能去除
-
不知道大家在用Word的同时,有没有遇到过难删除的页眉横线呢?以前小编就是遇到这条横线,不得已将里面的文字复制到一个新的文档中,如今终于知道该怎样删除这条横线了,下面我们就来看看删除方法。一、删除页眉...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- navicat无法连接mysql服务器 (65)
- 下横线怎么打 (71)
- flash插件怎么安装 (60)
- lol体验服怎么进 (66)
- ae插件怎么安装 (62)
- yum卸载 (75)
- .key文件 (63)
- cad一打开就致命错误是怎么回事 (61)
- rpm文件怎么安装 (66)
- linux取消挂载 (81)
- ie代理配置错误 (61)
- ajax error (67)
- centos7 重启网络 (67)
- centos6下载 (58)
- mysql 外网访问权限 (69)
- centos查看内核版本 (61)
- ps错误16 (66)
- nodejs读取json文件 (64)
- centos7 1810 (59)
- 加载com加载项时运行错误 (67)
- php打乱数组顺序 (68)
- cad安装失败怎么解决 (58)
- 因文件头错误而不能打开怎么解决 (68)
- js判断字符串为空 (62)
- centos查看端口 (64)