草庐IT

单机Linux下搭建MongoDB副本集-三节点

onepiece 2023-03-28 原文

前言说明

 Linux下安装MongoDB副本集我基本上是一次搭建,几百年不再碰,也记不住具体的命令,偶尔需要搭建都是直接网上找的教程。

有些教程很精简,有些又版本不一样,所以索性我整合下别人的教程,把linux下搭建副本集的步骤记录下并分享出来,希望能够帮到你们。 

 参考以下文章:https://developer.aliyun.com/article/983777

https://developer.aliyun.com/article/485807  -- 这个还有分片相关的东西,

 

安装环境

  • 单台CENT OS 7.6(腾讯云服务器的)
  • MongoDB 5.0.15
  • MobaXterm 终端工具

预期实现效果

在单台服务器上,通过配置3个不同端口,启动3个MongoDB服务来实现副本集配置。

 

具体实现步骤

步骤一: 下载、安装MongoDB、配置环境变量

1.1 下载

到官网下载(下图标注1)或复制下载地址(下图标注2), https://www.mongodb.com/try/download/community

1,2标注说明:
1 是直接下载tgz包,这是用于直接文件传输到linux上,因为通过wget去下载有时候网速会很慢,所以这里下文会提到download的下载方式。

2 是复制下载链接,这是用于wget方式下载,如下文执行命令。

 

 1.2 解压安装

 通过MobaXterm连接到的你Linux主机,当然你用其他的终端工具都可以。然后进入到指定目录下,进行安装。

整体命令如下(是逐行执行,不是整体执行)# 进入指定位置下载安装包 你也可以选择其他指定路径,确保自己清楚即可。 

# 进入指定位置下载安装包  你也可以选择其他指定路径,确保自己清楚即可。 还有,下面的执行命令是一行行执行,而不是一起执行。 
cd /usr/local

# 下载安装包  注意:这里可能遇到下载速度很慢的情况,如果遇到了,直接ctrl+c取消,再按照步骤1.1的截图的1标注,直接下载安装包到本地,再通过mobaXterm文件传输工具传进去(下面有截图参考)。 因为wget执行了,/usr/local路径下有个mongodb安装包文件,先删了再传。 
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.2.tgz


# 注意,执行下面命令前确保安装包是下载好了的到你指定路径。 
# 解压安装包 
tar -zxvf mongodb-linux-x86_64-rhel70-5.0.2.tgz 

# 改名字 
mv mongodb-linux-x86_64-rhel70-5.0.2 mongodb 

# 此时可以删除安装包 -- 建议先留着,等最后再删 可以不执行它 
rm -rf mongodb-linux-x86_64-rhel70-5.0.2.tgz 

MobaXterm上传安装包的截图

解压好安装包之后, cd 进入mongodb 再 ll 查看,看到 bin文件夹和其他几个文件说明解压成功。如下图。

 1.3 配置环境变量

# 配置环境变量
vim /etc/profile

// 进入到profile之后, 添加的内容如下  注意/usr/local/mongodb是刚才安装mongodb它所在的路径,如果你不是安装在这个路径下,这里就要换成你的安装路径。 具体这两个配置的插入位置见下图
export MONGO_HOME=/usr/local/mongodb
export PATH=$PATH:$MONGO_HOME/bin

补充:vim /etc/profile 之后, 按 i 会出来 ------insert----- 此时进入编辑模式,才可以去修改。
修改好了,按住 esc键,然后 输入 :wq 保存退出。

退出后,执行以下命令让环境变量生效

source /etc/profile

 

步骤二:创建每个(共3个实例)MongoDB的数据、日志存储文件夹

2.1 创建数据、日志、配置存储文件夹

分别给每台服务器创建data 、 logs 、 conf文件夹,也就是一共9个,放在统一路径,方便查询管理。

# 这里直接放在根目录的data文件夹下了,你也可以选择存储到usr/local/mongodb里面。 {1,2,3}表示分别创建 mongo1 mongo2 mongo3 
mkdir -p  /data/mongo{1,2,3}/data
mkdir -p  /data/mongo{1,2,3}/logs
mkdir -p  /data/mongo{1,2,3}/conf

执行完毕之后,可以进入到路径中看看,分别有mongo1/2/3,每一个文件夹下都有conf / data / logs 文件夹,分别用来存放配置、数据、日志。

 

步骤三:配置MongoDB配置文件

对每个MongoDB服务,配置服务器配置,包括IP端口、开放IP,后台运行以及主要的副本集配置。

分别执行如下命令,创建三个配置文件,把下边的配置内容粘贴进去,再保存退出

# 每一个conf 对应一个服务器, 里面配置的内容主要是端口不一样
vim /data/mongo1/conf/mongodb.conf
# 第二个服务器配置
vim /data/mongo2/conf/mongodb.conf
# 第三个服务器配置
vim /data/mongo3/conf/mongodb.conf

配置内容

port=27017 #端口 注意,三台服务器端口不一样,分别设置为27017,27018,27019  同时确保Linux端口放开
bind_ip=0.0.0.0 # 默认是127.0.0.1,要想外网接入,这里就要设置为0.0.0.0 
# 三台服务器的数据、日志存放地址不一样,要注意。
dbpath=/data/mongo1/data #数据库存放 
logpath=/data/mongo1/logs/mongodb.log #日志文件
fork=true #设置后台运行
#auth=true #开启认证
## 下面的就是副本集相关的配置,三个服务器要使用一样的副本集名称
replSet = myrs # 定义副本集名称
oplogSize = 1024 # 定义opLog大小,单位是MB,也可以设置大一些比如2048,我这里演示用,设置小点。

分别改下port  dbpath/logpath的路径,其他保持一致。 一共操作三次vim。 保存配置的时候,先检查下有没有漏字母,尤其是 port。

 

步骤四:分别启动三个服务

先进入到mongodb bin 路径下

# 如果你的安装路径是其他的,那就以你的为准,反正就是进入到bin路径下去执行启动服务器命令
cd /usr/local/mongodb/bin

然后依次执行启动命令

# 启动第一台
./mongod --config /data/mongo1/conf/mongodb.conf
#启动第二台
./mongod --config /data/mongo2/conf/mongodb.conf
#启动第三台
./mongod --config /data/mongo3/conf/mongodb.conf

每执行完一次,成功的话,提示如下

 

这时候三台服务器都启动好了,连入等下要设置为主节点的服务器,配置副本集并让其生效。这里我用27017端口的那台作为主节点。

# 进入到mongodb bin目录下,执行以下命令接入mongo
mongo --port 27017  

说明,端口是你准备要设置为主节点的那台服务器的端口,如果你用的其他IP,比如外网的MONGO,那么要加上 --host xxx.xxx.xx.xx  具体IP 

当你看到下面的内容,说明连接上了,距离你完成副本集搭建只有一步之遥了。

 

// 在mongo 上切换到admin数据库,执行
use admin
// 然后会提示你  switched to db admin
// 这个时候输入以下配置

> config={_id:"myrs",members:[{_id:0,host:"localhost:27017"},{_id:1,host:"localhost:27018"},{_id:2,host:"localhost:27019"}]}  

补充说明,第一个_id的值是你在前面配置的副本集名称,要保持一致。 如果你的三台服务器都是本地的,可以用localhost,当然也可以用你服务器的IP地址。  

执行完毕后,页面会出来如下图内容,我执行的时候忘了截图保存,所以拿别人的来替代下。 

然后最后执行初始化生效

# 注意,这里的config 就是上一步命令,你定义的时候,用的变量名,要一致。  
rs.initiate(config)

执行初始化成功后,页面会提示ok.

 

Ok,至此你已经完成副本集配置,可以做测试验证看看了。 

可以执行查询看看副本集状态

rs.status()

看到这些信息就说明配置好了

补充:如果想要查看当前MongoDB是否正常在后台跑,可以输入 ps aux |grep mongodb  查找是否对应进程。

如果需要关掉某个进程重启,可以 kill  进程ID  (通过ps aux |grep mongodb 可以找到)

再启动,还是在mongodb bin路径下 执行 mongod -f /具体存放路径/mongodb.conf  -f 表示fork进程 后台运行

 

步骤五:连接测试

可以用mongo compass / studio 3t 或者直接在虚拟机上面操作连接。 

分别连接主节点和2个子节点。

这个时候你去主节点插入数据,然后到子节点就可以看到一样的。

然后子节点里面是写入不了的,会提示只能在主节点写入。 

 

注意:要确保服务器的端口开放,不然连不上去。  

 

至此,副本集的基本搭建已完成。

希望这篇文章能帮到你~ 

有关单机Linux下搭建MongoDB副本集-三节点的更多相关文章

  1. 区块链入门教程(6)--WeBASE-Front节点前置服务安装 - 2

    文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定

  2. 【Linux操作系统】——网络配置与SSH远程 - 2

    Linux操作系统——网络配置与SSH远程安装完VMware与系统后,需要进行网络配置。第一个目标为进行SSH连接,可以从本机到VMware进行文件传送,首先需要进行网络配置。1.下载远程软件首先需要先下载安装一款远程软件:FinalShell或者xhell7FinalShellxhell7FinalShell下载:Windows下载http://www.hostbuf.com/downloads/finalshell_install.exemacOS下载http://www.hostbuf.com/downloads/finalshell_install.pkg2.配置CentOS网络安装好

  3. Linux磁盘分区中物理卷(PV)、卷组(VG)、逻辑卷(LV)创建和(LVM)管理 - 2

    文章目录一基础定义二创建逻辑卷2-1准备物理设备2-2创建物理卷2-3创建卷组2-4创建逻辑卷2-5创建文件系统并挂载文件三扩展卷组和缩减卷组3-1准备物理设备3-2创建物理卷3-3扩展卷组3-4查看卷组的详细信息以验证3-5缩减卷组四扩展逻辑卷4-1检查卷组是否有可用的空间4-2扩展逻辑卷4-3扩展文件系统五删除逻辑卷5-1备份数据5-2卸载文件系统5-3删除逻辑卷5-4删除卷组5-5删除物理卷六LVM逻辑卷缩容6-1缩容注意事项6-2标准缩容步骤一基础定义LVM,LogicalVolumeManger,逻辑卷管理,Linux磁盘分区管理的一种机制,建立在硬盘和分区上的一个逻辑层,提高磁盘分

  4. ruby - 选择包含子节点内文本的父节点 - 2

    基本上我想选择一个节点(div),其中它的子节点(h1,b,h3)包含指定的文本。Childtext1Childtext2...Childtext3我期待的是/html/div/而不是/html/div/h1我在下面有这个,但不幸的是返回了child,而不是div的xpath。expression="//div[contains(text(),'Childtext1')]"doc.xpath(expression)我期待的是/html/div/而不是/html/div/h1那么有没有一种方法可以简单地使用xpath语法来做到这一点? 最佳答案

  5. ruby - 如何在 Ruby 中获取 linux 系统信息 - 2

    如何在Ruby中获取linux系统(这必须适用于Fedora、Ubuntu等)的软件/硬件信息? 最佳答案 Chef背后的优秀人才,拥有一颗名为Ohai的优秀gemhttps://github.com/opscode/ohai以散列形式返回系统信息,例如操作系统、内核、规范、fqdn、磁盘、空间、内存、用户、接口(interface)、sshkey等。它非常完整,非常好。它还会安装命令行二进制文件(也称为ohai)。 关于ruby-如何在Ruby中获取linux系统信息,我们在Stack

  6. ruby - rbenv:在 Linux Mint 上找不到 gem 命令 - 2

    我在LinuxMint17.2上。我最近使用apt-getpurgeruby​​删除了ruby​​。然后我安装了rbenv然后rbenvinstall2.3.0所以现在,~/.rbenv/versions/2.3.0/bin/ruby存在。但是现在,我无法执行geminstallrubocop。我明白了:$geminstallrubocoprbenv:gem:commandnotfoundThe`gem'commandexistsintheseRubyversions:2.3.0但是我可以~/.rbenv/versions/2.3.0/bin/geminstallrubocop。但是,

  7. ruby - 在 Linux 上编译 Ruby 1.9.2 所需的先决条件? - 2

    我是Ruby和RoR的新手。我有一个带有Ubuntu镜像的干净Linode实例,我想从源代码编译Ruby而不是使用apt-get。我已经在谷歌上搜索了执行此操作的说明,但经过一些尝试后,当我尝试运行一些教程示例时,我不断收到有关缺少zlib和其他一些包的错误。任何人都可以给我详细的说明(或链接),教我如何在从源代码编译Ruby之前安装必要的必备包吗?我的目的是编译Ruby的最新稳定版本,然后安装Rubygems和Rails。提前感谢您的帮助!!! 最佳答案 Thisblogpost涵盖从源代码编译ruby​​所需的包和安装过程;它引

  8. ruby - 删除指定节点之后的所有节点 - 2

    这个问题在这里已经有了答案:Nokogiri:SelectcontentbetweenelementAandB(3个答案)关闭2年前。我正在从url中抓取文本的div,并想删除具有backtotop类的段落下方的所有内容。我在stackoverflow上看到了一段遍历代码片段,看起来很有希望,但我不知道如何将它合并,所以@el只包含第一个p.backtotop之前的所有内容分区我的代码:@doc=Nokogiri::HTML(open(url))@el=@doc.css("div")[0]end遍历片段:doc=Nokogiri::HTML(code)stop_node=doc.css

  9. ruby - 如何从 Chef 说明书中的库访问当前节点? - 2

    我正在尝试为ChefRecipe编写一个库,以简化一些常见的搜索。例如,我希望能够在cookbook/libraries/library.rb中执行类似的操作,然后从同一Recipe中的Recipe中使用它:moduleExampledefself.search_attribute(attribute_name)returnsearch(:nodes,node[attribute_name])endend问题是,在Chef库文件中,node对象或search函数都不可用。似乎可以使用Chef::Search::Query.new().search(...)进行搜索,但我找不到任何可以访

  10. ruby - 如何使用Nokogiri和XPath获取具有多个属性的节点 - 2

    我正在尝试使用Nokogiri来解析带有一些相当古怪的标记的HTML文件。具体来说,我正在尝试获取同时定义了id、多个类和样式的div。标记看起来像这样:titleListofstuff我正在尝试获取里面的问题.我可以毫无问题地获得具有单个id属性的div,但我想不出一种方法让Nokogiri获取具有和两个id类的div。所以这些工作正常:content=@doc.xpath("//div[id='foo']")content=@doc.css('div#foo')但是这些不返回任何东西:content=@doc.xpath("//div[id='bar']")content=@doc

随机推荐