百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程文章 > 正文

程序员,架构师,运维想要的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的同时,有没有遇到过难删除的页眉横线呢?以前小编就是遇到这条横线,不得已将里面的文字复制到一个新的文档中,如今终于知道该怎样删除这条横线了,下面我们就来看看删除方法。一、删除页眉...

取消回复欢迎 发表评论: