《Linux运维总结:Centos7.6部署二进制mongodb4.2.23三节点副本集群》

news2024/11/18 16:39:49

一、Mongodb集群模式

1、三种集群介绍

MongoDB有三种集群部署模式,分别为主从复制(Master-Slaver)、副本集(Replica Set)和分片(Sharding)模式。

1、Master-Slaver 是一种主从副本的模式,目前已经不推荐使用。
2、Replica Set 模式取代了 Master-Slaver 模式,是一种互为主从的关系。Replica Set 将数据复制多份保存,不同服务器保存同一份数据,在出现故障时自动切换,实现故障转移,在实际生产中非常实用。
3、Sharding 模式适合处理大量数据,它将数据分开存储,不同服务器保存不同的数据,所有服务器数据的总和即为整个数据集。

总结:Sharding 模式追求的是高性能,而且是三种集群中最复杂的。在实际生产环境中,通常将 Replica Set 和 Sharding 两种技术结合使用。

2、副本集角色介绍

1、主要要成员(Primary):主要接收所有写操作。就是主节点。
2、副本成员(Replicate):从主节点通过复制操作以维护相同的数据集,即备份数据,不可写操作,但可以读操作(但需要配置)。是默认的一种从节点类型。
3、仲裁者(Arbiter):不保留任何数据的副本,只具有投票选举作用。当然也可以将仲裁服务器维护为副本集的一部分,即副本成员同时也可以是仲裁者。也是一种从节点类型。


二、Mongodb集群部署

2.1、环境信息

主机IP操作系统CPU架构节点角色节点说明文件描述符
192.168.1.191Centos7.6x86_64primary主节点65535
192.168.1.192Centos7.6x86_64secondary从节点65535
192.168.1.193Centos7.6x86_64arbiter仲裁节点65535

说明:由于业务需要,mongodb的最大连接数需要设置为20000,由于系统默认的文件描述符为1024,所以这里都统一设置为65535。

具体设置方式如下所示:

#1、临时生效
ulimit -n 65535

#2、永久生效
echo "* soft nofile 65535" >>/etc/security/limits.conf
echo "* hard nofile 65535" >>/etc/security/limits.conf
echo "* soft nproc 65535" >>/etc/security/limits.d/20-nproc.conf
echo "* hard nproc 65535" >>/etc/security/limits.conf

2.2、安装包及配置文件准备

官方下载MongoDB4.2.23二进制安装包

说明:建议mongodb的服务安装目录、数据目录、日志目录都放在磁盘空间最大目录下。

说明:只需在主节点上(192.168.1.191)主机上操作。

1、下载二进制安装包(假设/data磁盘空间最大)

[root@localhost ~]# mkdir /data/pkgs && cd /data/pkgs 
[root@localhost pkgs]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.23.tgz
[root@localhost pkgs]# tar axf mongodb-linux-x86_64-rhel70-4.2.23.tgz
[root@localhost pkgs]# mv mongodb-linux-x86_64-rhel70-4.2.23 mongodb
[root@localhost pkgs]# ll mongodb
drwxr-xr-x 2 root root    231 122 14:52 bin
-rw-r--r-- 1 root root  30608 929 23:36 LICENSE-Community.txt
-rw-r--r-- 1 root root  16726 929 23:36 MPL-2
-rw-r--r-- 1 root root   2581 929 23:37 README
-rw-r--r-- 1 root root  75405 929 23:37 THIRD-PARTY-NOTICES
-rw-r--r-- 1 root root 183512 929 23:38 THIRD-PARTY-NOTICES.gotools

2、创建数据目录、日志目录、key文件目录、配置文件目录

[root@localhost ~]# cd /data/pkgs/mongodb 
[root@localhost mongodb]# mkdir data logs key conf

3、生成key文件

说明:MongoDB使用keyfile认证,副本集中的每个mongod实例使用keyfile内容作为认证其他成员的共享密码。mongod实例只有拥有正确的keyfile才可以加入副本集。keyFile的内容必须是6到1024个字符的长度,且副本集所有成员的keyFile内容必须相同。

# 400权限是要保证安全性,否则mongod启动会报错
[root@localhost ~]# cd /data/pkgs/mongodb 
[root@localhost mongodb ]# openssl rand -base64 756 > ./key/mongo.key
[root@localhost mongodb ]# chmod 400 ./key/mongo.key

4、编辑配置文件

[root@localhost ~]# cd /data/pkgs/mongodb
[root@localhost mongod]# vim conf/mongod.conf
systemLog:
  destination: file
  logAppend: true
  path: /data/pkgs/mongodb/logs/mongod.log

storage:
  dbPath: /data/pkgs/mongodb/data
  journal:
    enabled: true
#  engine:
#  wiredTiger:

# how the process runs
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile
  timeZoneInfo: /usr/share/zoneinfo

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0  # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.


security:
  clusterAuthMode: keyFile
  keyFile: /data/pkgs/mongodb/key/mongo.key
  authorization: enabled

#operationProfiling:

replication:
  replSetName: mongodb_cluster

5、将/data/pkgs目录下的mongodb目录远程拷贝到192.168.1.192和192.168.1.193主机上,远程主机如果没有/data/pkgs目录,则请先创建该目录

[root@localhost pkgs]# scp -r /data/pkgs/mongodb root@192.168.1.192:/data/pkgs
[root@localhost pkgs]# scp -r /data/pkgs/mongodb root@192.168.1.193:/data/pkgs

2.3、启动服务

说明:分别在192.168.1.191、192.168.1.192、192.168.1.193主机上启动mongodb服务,启动命令相同。

[root@localhost pkgs]# cd /data/pkgs/mongodb/
[root@localhost mongodb]# ./bin/mongod -f ./conf/mongod.conf --auth --maxConns=20000
about to fork child process, waiting until server is ready for connections.
forked process: 97708
child process started successfully, parent exiting

2.4、配置副本集

说明:只需在主节点上(192.168.1.191)添加副本集信息。

[root@localhost mongodb]# ./bin/mongo --eval "
  rs.initiate(
    {
      _id : 'mongodb_cluster',
      members: [
        { _id : 0, host : \"192.168.1.191:27017\", priority: 2 },
        { _id : 1,  host : \"192.168.1.192:27017\", priority: 1 },
        { _id : 2, host : \"192.168.1.193:27017\", arbiterOnly: true }
      ]
    }
  )
  "

说明:

1、“_id” : “mongodb_cluster” :副本集的配置数据存储的主键值,默认就是副本集的名字
2、““members” :副本集成员数组,priority表示优先级,

如下图所示:
在这里插入图片描述
查询副本集状态

[root@localhost mongodb]#  ./bin/mongo --eval "rs.status()"

如下图所示:
在这里插入图片描述


2.5、创建用户

说明:只需在主节点上(192.168.1.191)创建用户。

1、新建管理员root

[root@localhost pkgs]# cd /data/pkgs/mongodb/
[root@localhost mongodb]# vim admin-setup.js
db.createUser(
  {
    user: "admin",
    pwd: "admin@123",
    roles: [ { role: "root", db: "admin" } ]
  }
)

[root@localhost mongodb]# ./bin/mongo admin ./admin.js 
MongoDB shell version v4.2.23
connecting to: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("9962547e-7264-485b-a4f8-62752722b246") }
MongoDB server version: 4.2.23
Successfully added user: {
	"user" : "admin",
	"roles" : [
		{
			"role" : "root",
			"db" : "admin"
		}
	]
}

[root@localhost mongodb]# ./bin/mongo --host 192.168.1.191 --port 27017 -u admin -p admin@123 --authenticationDatabase admin
MongoDB shell version v4.2.23
connecting to: mongodb://192.168.1.191:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("71df4b04-fafc-4408-aa14-a36be94c09d0") }
MongoDB server version: 4.2.23
Server has startup warnings: 

如下图所示:

在这里插入图片描述

2、数据库possecu,新建普通(读写权限)用户lolaage

[root@localhost pkgs]# cd /data/pkgs/mongodb/
[root@localhost mongodb]# vim possecu-setup.js
db.createUser(
 {
   user: "lolaage",
   pwd: "lolaage@123",
   roles: [
  { role: "readWrite", db: "possecu" }
      ]
 }
)
[root@localhost mongodb]# ./bin/mongo -u admin -p admin@123 --authenticationDatabase admin possecu ./possecu-setup.js
MongoDB shell version v4.2.23
connecting to: mongodb://127.0.0.1:27017/possecu?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("ca7ad103-bdbc-40dd-a237-31e1c653d9c4") }
MongoDB server version: 4.2.23
Successfully added user: {
	"user" : "lolaage",
	"roles" : [
		{
			"role" : "readWrite",
			"db" : "possecu"
		}
	]
}

[root@localhost mongodb]# ./bin/mongo --host 192.168.1.191 --port 27017 -u lolaage -p lolaage@123 --authenticationDatabase possecu
MongoDB shell version v4.2.23
connecting to: mongodb://192.168.1.191:27017/?authSource=possecu&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("c19599e2-5aef-4b4b-942d-557f4c619b63") }
MongoDB server version: 4.2.23

如下图所示:
在这里插入图片描述

3、开启从节点临时读权限

[root@localhost mongodb]# ./bin/mongo --host  192.168.1.192 --port 27017 -u admin -p admin@123  --authenticationDatabase admin
mongodb_cluster:SECONDARY> rs.secondaryOk();

2.6、设置system开机自启

#1、创建服务脚本mongodb.service
[root@localhost ~]# vim /etc/systemd/system/mongod.service
[Unit]
Description=Mongodb Service
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/data/pkgs/mongodb/bin/mongod --config /data/pkgs/mongodb/conf/mongod.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/data/pkgs/mongodb/bin/mongod --config /data/pkgs/mongodb/conf/mongod.conf --shutdown
PrivateTmp=true

[Install]
WantedBy=multi-user.target

#2、刷新配置(在启动前,必须先执行,否则报警告)
[root@localhost ~]# systemctl daemon-reload

#3、启动服务
[root@localhost ~]# systemctl start mongod

#4、停止服务
[root@localhost ~]# systemctl stop mongod

#5、服务加入开机自启
[root@localhost ~]# systemctl enable mongod

2.7、集群测试

1、故障转移

#1、停止主节点mongodb服务
# 说明:停止前主节点为192.168.1.191
[root@localhost mongodb]# ./bin/mongod -f ./conf/mongod.conf --auth --maxConns=20000 --shutdown
killing process with pid: 99828

#2、登录从节点查看当前节点状态
[root@localhost mongodb]# ./bin/mongo --host 192.168.1.192 --port 27017 -u admin -p admin@123 --authenticationDatabase admin
mongodb_cluster:PRIMARY> rs.status()

说明:此时应该可以看到,主节点为192.168.1.192,已经完成了主从切换。如下图所示:

在这里插入图片描述

2、数据一致性

#1、主节点登录插入一条数据
[root@localhost mongodb]# ./bin/mongo --host 192.168.1.191 --port 27017 -u admin -p admin@123 --authenticationDatabase admin
mongodb_cluster:PRIMARY> db.users.insert({name:"jack",age:0,addr:"guangzhou",country:"China"})
WriteResult({ "nInserted" : 1 })

mongodb_cluster:PRIMARY> db.users.find()
{ "_id" : ObjectId("6389c03ceec47300d932c1aa"), "name" : "jack", "age" : 0, "addr" : "guangzhou", "country" : "China" }
mongodb_cluster:PRIMARY> 

#2、从节点查看数据是否同步
[root@localhost mongodb]# ./bin/mongo --host 192.168.1.192 --port 27017 -u admin -p admin@123 --authenticationDatabase admin
mongodb_cluster:SECONDARY> rs.secondaryOk()
mongodb_cluster:SECONDARY> db.users.find()
{ "_id" : ObjectId("6389c03ceec47300d932c1aa"), "name" : "jack", "age" : 0, "addr" : "guangzhou", "country" : "China" }

说明:此时应该看到这条记录了, 证明我们的主从复制功能已经成功了。


三、Mongodb集群常用命令

1、查看全局所有账户

mongodb_cluster:PRIMARY> use admin
switched to db admin
mongodb_cluster:PRIMARY> db.system.users.find()

**2、查看当前库下的账户 **

mongodb_cluster:PRIMARY> use possecu
switched to db possecu
mongodb_cluster:PRIMARY> show users

3、查看最大连接数

mongodb_cluster:PRIMARY> db.serverStatus().connections
{ "current" : 8, "available" : 19992, "totalCreated" : 30, "active" : 2 }

4、修改密码

mongodb_cluster:PRIMARY> use admin
switched to db admin
mongodb_cluster:PRIMARY> db.changeUserPassword("admin", "admin@123456")

5、通过密码登陆mongo

[root@localhost mongodb]# ./bin/mongo --host 192.168.1.191 --port 27017 -u admin -p admin@123 --authenticationDatabase admin

四、Mongodb集群管理命令

在这里插入图片描述


总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:Linux运维实战总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/54947.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计智慧园区运营管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

详解设计模式:观察者模式

观察者模式(Observer Pattern)也被称为发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式,是在 GoF 23 种设计模式中定义了的行为型模式。 观察者模式 定义了一对多的关系&#xff…

牛客网最新Java面试通关八股文手册,花点耐心每天刷上10道题,挑战一下年薪50W!

明年金三银四不少人已经蓄势待发,信心满满地准备投递简历,到处面试,在不同的 Offer 之中择优而栖。 与此同时,也有人会悔恨自己这半年进步不大,每天噼里啪啦敲代码,但面对那些不能再熟悉的 Java 面试题时&…

H2N-Val-Pro-Pro-COOH,58872-39-2

H-Val-Pro-Pro-OH,是牛奶来源的脯氨酸肽衍生物,是血管紧张素 I 转化酶 (ACE) 的抑制剂,其IC50 为 9 μM。H-Val-Pro-Pro-OH, a milk-derived proline peptides derivative, is an inhibitor of Angiotensin I converting enzyme (ACE), with …

C++手敲基于梯度图和像素数量数组的OTSU阈值分割

一、OTSU算法原理 ➢OTSU法(最大类间方差法,有时也称之为大津算法) ➢ 使用聚类的思想,把图像的灰度数按灰度级分成2个部分, 使得两个部分之间的灰度值差异最大,每个部分之间的灰 度差异最小 ➢ 通过方…

数学建模-2022年亚太赛C题(含思路过程和代码)

目录 一、题目以及大概的思路 二、数据预处理 三、预测模型 四、全球变暖的相关性分析 五、赛后总结 一、题目以及大概的思路 先对数据进行无量纲化处理,根据所给不确定度与数据,计算出相对不确定度,并将其异常点剔除,通常情况…

[附源码]计算机毕业设计病房管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Cisco ASA防火墙——远程控制与多安全区域

作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.远程管理ASA 1.配置Telnet接入 2.配置SSH接入 3.配置ASDM接…

Java数据结构与Java算法学习Day02---算法排序

目录 一、简单排序 1.1Comparable接口介绍 11 1.2冒泡排序 12、13、14 1.3选择排序 15、16、17 1.4插入排序 18、19、20 二、高级排序 2.1希尔排序 21、22、23 2.2归并排序 24 2.2.1递归 24 2.2.2归并排序 25 2.3快速排序 32 2.3.1快速排序的原理 32 2.3.2快速排序…

这可能是我见过最可爱的乒乓女孩了!

3D角色艺术家Carlos Sanz曾在U-tab学习动画,在CICE学习角色创作,现在正致力于创作她的作品集并成为3D动画行业的一员,本文是作者在ZBrush和Maya等软件中设计乒乓女孩角色造型的教程: 首先给大家做个自我介绍。我叫Carlos Sanz&am…

[附源码]计算机毕业设计springboot网上电影购票系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

(阅读笔记)急性卒中CT灌注分析在临床中的实际问题

(阅读笔记)急性卒中CT灌注分析在临床中的实际问题IntroductionUnderstanding the basics of CTP acquisition and processingCTP thresholds and quantificationPitfalls of perfusion imagingTechnical pitfallsPatient motionContrast bolusRadiationC…

CMMI和SPCA是一样的吗?有什么区别

CMMI资质相信有很多企业都了解了,对于SPCA可能有些企业是比较陌生的,不太了解什么是SPCA,简单来说可以理解为CMMI是国外的资质,而SPCA可以理解为国内的,那现在就跟随同邦信息科技的小编一起来看看具体的区别是哪些吧 C…

进程以及线程

目录 🐼今日良言:希望是生命的源泉,失去它生命就会枯萎。 🐯一、进程 🐕1.概念 🐕2.PCB 🐕3.进程调度 🐭二、线程 🐑1.概念 🐇三、进程和线程的联系和区别 &…

Qt实现抽奖程序

一、简介 该程序命名为Lucky,实现的功能如下: 1. 加载抽奖人员名单,并保存加载路径; 2. 单击左键或者点击ctrls开始抽奖,并滚动显示人员名单,显示的人员名单格式为 部门-姓名。 3. 单击左键或者点击ctrls…

了解并应用数字隔离器的安全限值

介绍 电流隔离在工业和汽车系统中很常见,作为防止高电压或抵消接地电位差的一种手段。设计人员传统上使用光耦合器进行隔离,但在过去几年中,使用电容和磁隔离的数字隔离器变得越来越流行。对于任何此类隔离器,了解其安全限值的重…

关于如何找环形链表的入环点

目录一、判断一个链表是否有环二、找到链表入环的第一个节点一、判断一个链表是否有环 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的…

菇多糖-聚乙二醇-大环配体NOTA,大环配体NOTA-PEG-香菇多糖

菇多糖-聚乙二醇-大环配体NOTA,大环配体NOTA-PEG-香菇多糖 中文名称:香菇多糖-大环配体NOTA 英文名称:Lentinan-NOTA 别称:NOTA修饰香菇多糖,NOTA-香菇多糖 PEG接枝修饰香菇多糖 Lentinan-PEG-NOTA 香菇多糖-聚乙…

设置Excel表格“只读模式”的两种方法

Excel表格的“只读模式”可以帮助我们防止意外更改表格,根据不同需求,表格可以设置“有密码”和“无密码”的两种“只读模式”,下面来说说具体设置方法。 一、无密码“只读模式” 如果主要是想防止自己意外修改了表格,可以设置没…

Jenkins拉分支代码 + tortoiseGit删除分支

日常部署测试代码都使用Jenkins代码手工上传代码,主要减减减减工作量,提高工作效率; 一、安装Git、git-parameter插件及配置方法,安装方法忽略一万字,解决不了绕道度娘问问 二、创建项目,设置参数 This pr…