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

news2024/12/27 17:10:48

一、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.4.8二进制安装包
官方下载mongodb-database-tools二进制安装包

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

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

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

#1、安装二进制服务包
[root@localhost ~]# mkdir -pv /data/pkgs && cd /data/pkgs 
[root@localhost pkgs]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.8.tgz
[root@localhost pkgs]# tar axf mongodb-linux-x86_64-rhel70-4.4.8.tgz
[root@localhost pkgs]# mv mongodb-linux-x86_64-rhel70-4.4.8 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、安装Database Tools工具
# 说明:从MongoDB4.4开始Database Tools是独立发布的
[root@localhost ~]# cd /data/pkgs
[root@localhost pkgs]# wget https://fastdl.mongodb.org/tools/db/mongodb-database-tools-rhel70-x86_64-100.6.1.tgz
[root@localhost pkgs]# tar axf mongodb-database-tools-rhel70-x86_64-100.6.1.tgz
[root@localhost pkgs]# cp -r mongodb-database-tools-rhel70-x86_64-100.6.1/bin/* ./mongodb/bin
[root@localhost pkgs]# ls ./mongodb/bin/
bsondump  install_compass  mongo  mongod  mongodump  mongoexport  mongofiles  mongoimport  mongorestore  mongos  mongostat  mongotop

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

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

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: /data/pkgs/mongodb/pid/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:
  oplogSizeMB: 2048
  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-setup.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 --storageEngine wiredTiger --config /data/pkgs/mongodb/conf/mongod.conf --auth --maxConns=20000
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、添加环境变量
[root@localhost mongodb]# vim /etc/profile
export PATH=$PATH:/data/pkgs/mongodb/bin
#2、永久生效
[root@localhost mongodb]# source /etc/profile

2.8、集群测试

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/78053.html

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

相关文章

自动驾驶之行人轨迹预测数据集

一、 Real Data ETH: Univ. Hotel;750 pedestrians exhibiting complex interactions UCY: Zara01, Zara02 and Uni.780 pedestrians 单应性矩阵,SLAM中的当用多个不同相机拍摄同一个三维平面需要考虑的矩阵,适应场景为平面情况 商场 这个数据集是用双…

Onvif学习

ONVIF onvif(Open Network Video Interface Forum,开放型网络视频接口论坛)协议. onvif协议涵盖了设备发现、设备配置、事件、PTZ控制、视频分析和实时流媒体直播功能,以及搜索,回放和录像录音管理功能。 先去看许振…

git 常用操作

Git 是一个分布式版本控制系统,用于项目开发中的版本控制。从本质上来讲Git是一个内容寻址(content-addressable)文件系统,并在此之上提供了一个版本控制系统的用户界面。 Git的核心部分是一个简单的键值对数据库(key-value data store)。 你可以向该数据…

XML配置文件、用来约束XML文档:DTD、Schema(类型更多)

上一章properties作为配置文件的内容好像还没讲? properties相对于XML的缺点:如果要运行多个方法,只能在properties配置文件里等号后面加逗号(或指定符号)隔开,然后再加值,这样累加下去会导致阅…

基于分布式数据库集群的大数据职位信息统计

目录 任务一: MongoDB 分布式集群关键配置信息截图(启动参数文件、初始化参数文件、启动命令等) ch0的参数文件配置: ​编辑 ch1的参数文件配置: ​编辑chconfig的参数文件配置: router的参数文件配置…

SpringSecurity整合Oauth2.0

SpringSecurity整合Oauth2.0一、概述与原理1.1 、OAuth2.0 是什么?1.2、OAuth2.0中角色解释1.3、OAuth2.0的4中授权模式1.3.1、授权码模式(重点)1.3.1.1 原理1.3.1.2 代码1.3.2、密码模式(重点)1.3.2.1 原理1.3.2.2 代…

开发运维(DevOps)自动化运维与持续交付企业级实战

一、网站部署流程 1、传统网站部署流程 传统的网站部署,大家在运维过程中,网站部署是运维的工作之一,网站部署的流程大致分为: 需求分析—原型设计—开发代码—提交测试—内网部署—确认上线—备份数据—外网更新-最终测试,如果发现外网部署的代码有异常,需要及时回滚…

[附源码]JAVA毕业设计心理健康系统(系统+LW)

[附源码]JAVA毕业设计心理健康系统(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术&…

网络安全观察报告恶意软件观察

攻击类型分析 2018 年,主要的攻击类型 1 为 SYN Flood,UDP Flood,ACK Flood,HTTP Flood,HTTPS Flood, 这五大类攻击占了总攻击次数的 96%,反射类攻击不足 3%。和 2017 年相比&…

使用分页导入的方式把大量数据从mysql导入es

1、首先要有分页功能的代码 如何使用mybatis-plus实现分页,可参考 http://t.csdn.cn/ddnlk 2、要创建feign远程调用模块 可以参考 http://t.csdn.cn/gshFw 3、在feign模块中声明远程调用接口 1.在feign模块中创建一个接口,名字可以是你要调用的服务名&…

指定区域内实现多尺度、多维度2D图形随机填充(如圆、椭圆、多边形)之MATLAB实现

N久之前,咱在公众号中分享了如何用MATLAB实现在指定区域内随机填充圆,并将相关功能封装一个名为randCircle函数里面,其可实现的功能如下: (1) 设定是否允许填充圆相交、相切或独立存在 (2) 指定区域内圆的生成个数 (3) 设定是否允…

[附源码]计算机毕业设计基于vuejs的文创产品销售平台appSpringboot程序

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

【面试题】说说 Promise是什么?如何使用

大厂面试题分享 面试题库 前端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 前言 本文主要介绍和总结Promise的作用、使用方式和其对应的一些方法,供大家参考学习,如有写的不准确的地方欢迎大家指出&a…

Android 使用 jni Demo示例

Android 使用 jni Demo示例简介1. NDK的介绍1.1 NDK 简介1.2 NDK 特点2. JNI介绍2.1 JNI 简介2.2 为什么要有 JNI?3. NDK 与 JNI 的关系NDK下载及环境配置1. 使用Android studio SDK Manager下载2.配置NDK2.1 配置环境变量2.2 Android studio配置NDK示例Demo流程1.版…

RabbitMQ - 安装和使用

RabbitMQ - 安装和使用一. 安装二. RabbitMQ的简单使用2.1 创建交换机2.1.1 交换机类型2.1.2 持久化方式2.2 创建队列2.3 绑定交换机和队列2.4 SpringBoot整合2.5 另外一种监听写法一. 安装 一键安装: docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 …

rtl8221b+mcu,2.5g光纤收发器的开发备份

1、rtl8221b是一款2.5g的光电转换的phy 系统的构建如下 为了省成本,不用mac来对接其中的gmii接口直接接光模块 2、mdio和mdc由mcu的gpio来模拟,在csdn上有很多的文章来参考 mdio的参数如下 不想看英文可以参考下面的文章 MDIO(clause 22 与 clause 4…

Java基础之《netty(10)—Reactor三种模式》

一、单Reactor单线程模式 1、工作原理图 2、方案说明 (1)Select是前面I/O复用模型介绍的标准网络编程API,可以实现应用程序通过一个阻塞对象监听多路连接请求。 (2)Reactor对象通过Select监控客户端请求事件&#xf…

一元钱注册 chatGPT账号

文章目录打开 openai chatgpt 主页注册 chatGPT 账号找境外的电话号码激活账号查看服务价格账号注册充值成功参考视频 打开 openai chatgpt 主页 打开之前首先登录 vpn。但是使用 vpn 有可能还是会被告知 当前国家没有开放服务个人建议: 使用美国的 ip 地址我使用…

PIN TO PIN替代GM8775C|DSI转LVDS转换方案芯片CS5518|CS5518完全替代GM8775C

GM8775C 型 DSI 转双通道 LVDS 发送器产品主要实现将 MIPI DSI 转单/双通道 LVDS 功能,MIPI 支持 1/2/3/4 通道可选,最大支持 4Gbps 速率。LVDS 时钟频率最高 154MHz, 最大支持视频格式为 FULL HD(1920 x 1200) CS551…

网络安全观察报告

攻击类型分析 2018 年,主要的攻击类型 1 为 SYN Flood,UDP Flood,ACK Flood,HTTP Flood,HTTPS Flood, 这五大类攻击占了总攻击次数的 96%,反射类攻击不足 3%。和 2017 年相比&…