IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MongoDB 4.2.16 分片副本集高可用集群搭建 -> 正文阅读

[大数据]MongoDB 4.2.16 分片副本集高可用集群搭建

1 MongoDB简介

MongoDB 是一个文档数据库,旨在简化开发和扩展。 MongoDB 中的记录是一个文档,它是由字段和值对组成的数据结构。MongoDB 文档类似于 JSON 对象。字段的值可能包括其他文档、数组和文档数组。 使用文档的优点是: 文档(即对象)对应于许多编程语言中的本地数据类型。 嵌入式文档和数组减少了对昂贵连接的需求。 动态模式支持流畅的多态性。

2 环境准备

2.1 主机规划

hadoop101hadoop102hadoop103说明
mongosmongosmongos路由服务器,寻址
configconfigconfig配置服务器,保存配置
shard1(主)shard2(主)shard3(主)分片:保存数据,可扩展
shard2shard3shard1副本集:备份数据,可以配置读写分离(主负责写,从负责同步数据和读)
shard3shard1shard2副本集:备份数据,可以配置读写分离(主负责写,从负责同步数据和读)

2.2 下载MongoDB安装包

MongoDB 源码包下载地址:https://www.mongodb.com/download-center#community

2.3 MongoDB安装

以下操作在3台主机都需要操作!

安装方法1:(离线安装)

下载完安装包,并解压 tgz(以下演示的是 64 位 Linux上的安装)。

$ tar -xvf mongodb-linux-x86_64-rhel70-4.2.16.tgz -C /opt/modules/            # 解压
$ mv mongodb-linux-x86_64-rhel70-4.2.16/ mongodb-4.2                          # 将解压包拷贝到指定目录

MongoDB 的可执行文件位于 bin 目录下,所以可以将其添加到 PATH 路径中:

sudo vim /etc/profile
...

# MONGO_DB

export MONGO_HOME=/opt/modules/mongodb-4.2
export PATH=$PATH:$MONGO_HOME/binsource

# 生效
$ source /etc/profile</pre>

安装方法2:(在线安装)

创建安装文件

sudo vim /etc/yum.repos.d/mongodb-org-4.2.repo

[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc

安装指定版本的最新文档版

sudo yum install -y mongodb-org

安装指定版本

sudo yum install -y mongodb-org-4.2.16 mongodb-org-server-4.2.16 mongodb-org-shell-4.2.16 mongodb-org-mongos-4.2.16 mongodb-org-tools-4.2.16

2.4 创建相关目录

分别在各主机上创建mongo config server对应的目录,根据自己情况选择

# 配置文件服务器
mkdir -p /opt/modules/mongodb/cluster/config/{log,data,run}

# 第一分片和副本集
mkdir -p /opt/modules/mongodb/cluster/shard1/{log,data,run}

# 第二分片和副本集
mkdir -p /opt/modules/mongodb/cluster/shard2/{log,data,run}

# 第三分片和副本集
mkdir -p /opt/modules/mongodb/cluster/shard3/{log,data,run}

# mongos目录
mkdir -p /opt/modules/mongodb/cluster/mongos/{log,data,run}

3 创建集群

3.1 创建配置文件服务器

分别在多台机器上修改config server的配置文件

cat > /opt/modules/mongodb/cluster/config/mongod.conf << EOF
systemLog:
  destination: file
  logAppend: true
  path: /opt/modules/mongodb/cluster/config/log/mongod.log
storage:
  dbPath: /opt/modules/mongodb/cluster/config/data
  journal:
    enabled: true
processManagement:
  fork: true
  pidFilePath: /opt/modules/mongodb/cluster/config/run/mongod.pid
net:
  port: 27100
  bindIp: 192.168.56.101
replication:
  replSetName: config
sharding:
  clusterRole: configsvr
EOF

clusterRole: configsvr 这个配置是固定的,表示配置文件服务器

启动所有的mongo config server服务

mongod --config /opt/modules/mongodb/cluster/config/mongod.conf

登录任意一台配置服务器,初始化配置副本集

mongo --port 27100 --host 192.168.56.101

创建配置

config = {
   _id : "config",
    members : [
        {_id : 0, host : "192.168.56.101:27100" },
        {_id : 1, host : "192.168.56.102:27100" },
        {_id : 2, host : "192.168.56.103:27100" }
    ]
}

初始化副本集配置

> rs.initiate(config)

{
    "ok" : 1,
    "$gleStats" : {
        "lastOpTime" : Timestamp(1634369868, 1),
        "electionId" : ObjectId("000000000000000000000000")
    },
    "lastCommittedOpTime" : Timestamp(0, 0)
}

查看分区状态

> rs.status()

config:PRIMARY> rs.status()
{
    "set" : "config",
    "date" : ISODate("2021-10-16T07:39:30.295Z"),
    "myState" : 1,
    "term" : NumberLong(1),
    "syncingTo" : "",
    "syncSourceHost" : "",
    "syncSourceId" : -1,
    "configsvr" : true,
    "heartbeatIntervalMillis" : NumberLong(2000),
    "majorityVoteCount" : 2,
    "writeMajorityCount" : 2,
...
    "members" : [
        {
            "_id" : 0,
            "name" : "192.168.56.101:27100",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 493,
            "optime" : {
                "ts" : Timestamp(1634369969, 1),
                "t" : NumberLong(1)
            },
            "optimeDate" : ISODate("2021-10-16T07:39:29Z"),
            "syncingTo" : "",
            "syncSourceHost" : "",
            "syncSourceId" : -1,
            "infoMessage" : "could not find member to sync from",
            "electionTime" : Timestamp(1634369879, 1),
            "electionDate" : ISODate("2021-10-16T07:37:59Z"),
            "configVersion" : 1,
            "self" : true,
            "lastHeartbeatMessage" : ""
        },
        {
            "_id" : 1,
            "name" : "192.168.56.102:27100",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 102,
            "optime" : {
...

注意:其中,"_id" : "config"对应配置文件中配置的 replicaction.replSetName 一致,"members" 中的 "host" 为三个节点的ip和port

3.2 配置第一个分片和副本集

创建配置文件,注意每个主机的bindIp不一样

cat > /opt/modules/mongodb/cluster/shard1/mongod.conf << EOF
systemLog:
  destination: file
  logAppend: true
  path: /opt/modules/mongodb/cluster/shard1/log/mongod.log
storage:
  dbPath: /opt/modules/mongodb/cluster/shard1/data
  journal:
    enabled: true
processManagement:
  fork: true
  pidFilePath: /opt/modules/mongodb/cluster/shard1/run/mongod.pid
net:
  port: 27001
  bindIp: 192.168.56.101
replication:
  replSetName: shard1
sharding:
  clusterRole: shardsvr
EOF

启动所有的shard1 server

mongod --config /opt/modules/mongodb/cluster/shard1/mongod.conf

登陆任意一台shard1服务器(希望哪一台机器是主,就登录到那一台机器上),初始化副本集

mongo --port 27001 --host 192.168.56.101

使用admin数据库

use admin

定义副本集配置

config = {
   _id : "shard1",
    members : [
        {_id : 0, host : "192.168.56.101:27001" },
        {_id : 1, host : "192.168.56.102:27001" },
        {_id : 2, host : "192.168.56.103:27001" }
    ]
}

初始化副本集配置

rs.initiate(config)

查看分区状态

rs.status()

3.3 配置第二个分片和副本集

创建配置文件,注意每个主机的bindIp不一样

cat > /opt/modules/mongodb/cluster/shard2/mongod.conf << EOF
systemLog:
  destination: file
  logAppend: true
  path: /opt/modules/mongodb/cluster/shard2/log/mongod.log
storage:
  dbPath: /opt/modules/mongodb/cluster/shard2/data
  journal:
    enabled: true
processManagement:
  fork: true
  pidFilePath: /opt/modules/mongodb/cluster/shard2/run/mongod.pid
net:
  port: 27002
  bindIp: 192.168.56.101
replication:
  replSetName: shard2
sharding:
  clusterRole: shardsvr
EOF

启动所有的shard2 server

mongod --config /opt/modules/mongodb/cluster/shard2/mongod.conf

登陆任意一台shard2服务器(希望哪一台机器是主,就登录到那一台机器上),初始化副本集

mongo --port 27002 --host 192.168.56.101

使用admin数据库

use admin

定义副本集配置

config = {
   _id : "shard2",
    members : [
        {_id : 0, host : "192.168.56.101:27002" },
        {_id : 1, host : "192.168.56.102:27002" },
        {_id : 2, host : "192.168.56.103:27002" }
    ]
}

初始化副本集配置

rs.initiate(config)

查看分区状态

rs.status()

3.4 配置第三个分片和副本集

创建配置文件,注意每个主机的bindIp不一样

cat > /opt/modules/mongodb/cluster/shard3/mongod.conf << EOF
systemLog:
  destination: file
  logAppend: true
  path: /opt/modules/mongodb/cluster/shard3/log/mongod.log
storage:
  dbPath: /opt/modules/mongodb/cluster/shard3/data
  journal:
    enabled: true
processManagement:
  fork: true
  pidFilePath: /opt/modules/mongodb/cluster/shard3/run/mongod.pid
net:
  port: 27003
  bindIp: 192.168.56.101
replication:
  replSetName: shard3
sharding:
  clusterRole: shardsvr
EOF

启动所有的shard3 server

mongod --config /opt/modules/mongodb/cluster/shard3/mongod.conf

登陆任意一台shard3服务器(希望哪一台机器是主,就登录到那一台机器上),初始化副本集

mongo --port 27003 --host 192.168.56.101

使用admin数据库

use admin

定义副本集配置

config = {
   _id : "shard3",
    members : [
        {_id : 0, host : "192.168.56.101:27003" },
        {_id : 1, host : "192.168.56.102:27003" },
        {_id : 2, host : "192.168.56.103:27003" }
    ]
}

初始化副本集配置

rs.initiate(config)

查看分区状态

rs.status()

3.5 添加mongs的配置文件

cat > /opt/modules/mongodb/cluster/mongos/mongod.conf << EOF
systemLog:
  destination: file
  logAppend: true
  path: /opt/modules/mongodb/cluster/mongos/log/mongod.log
processManagement:
  fork: true
  pidFilePath: /opt/modules/mongodb/cluster/mongos/run/mongod.pid
net:
  port: 27200
  bindIp: 192.168.56.101
sharding:
  configDB: config/192.168.56.101:27100,192.168.56.102:27100,192.168.56.103:27100
EOF

注意,这里configDB后面的config要与配置服务器的保持一致

启动路由服务器

mongos --config /opt/modules/mongodb/cluster/mongos/mongod.conf

登录其中的一台路由节点,手动启用分片

mongo --port 27200 --host 192.168.56.101

添加分片到mongos

sh.addShard("shard1/192.168.56.101:27001,192.168.56.102:27001,192.168.56.103:27001")
sh.addShard("shard2/192.168.56.102:27002,192.168.56.103:27002,192.168.56.101:27002")
sh.addShard("shard3/192.168.56.103:27003,192.168.56.101:27003,192.168.56.102:27003")

设置slave可读(在命令行中生效一次),如果配置从接到可读,那么是连接客户端指定的

rs.slaveOk()

4 集群启停

4.1 启动集群

#启动所有的config server
mongod --config /opt/modules/mongodb/cluster/config/mongod.conf
#启动所有的shard1
mongod --config /opt/modules/mongodb/cluster/shard1/mongod.conf
#启动所有的shard2
mongod --config /opt/modules/mongodb/cluster/shard2/mongod.conf
#启动所有的shard3
mongod --config /opt/modules/mongodb/cluster/shard3/mongod.conf
#启动所有的mongos
mongos --config /opt/modules/mongodb/cluster/mongos/mongod.conf

4.2 集群停止

关闭服务

mongod --shutdown --dbpath /opt/modules/mongodb/cluster/shard3/data
mongod --shutdown --dbpath /opt/modules/mongodb/cluster/shard2/data
mongod --shutdown --dbpath /opt/modules/mongodb/cluster/shard1/data
mongod --shutdown --dbpath /opt/modules/mongodb/cluster/config/data

5 集群测试

[hadoop@hadoop101 ~]$ mongo --port 27200 --host hadoop101
MongoDB shell version v4.2.17
connecting to: mongodb://hadoop101:27200/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("f95ab028-5395-4f7b-87cf-a8fdc97c2de2") }
MongoDB server version: 4.2.17
mongos> show dbs
admin   0.000GB
config  0.003GB
mongos> quit()

[hadoop@hadoop101 ~]$ mongo --port 27200 --host hadoop102
MongoDB shell version v4.2.17
connecting to: mongodb://hadoop102:27200/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("ce375f9a-2fdd-4192-9845-2205a4848a85") }
MongoDB server version: 4.2.17
mongos> show dbs
admin   0.000GB
config  0.003GB
mongos> quit()

[hadoop@hadoop101 ~]$ mongo --port 27200 --host hadoop103
MongoDB shell version v4.2.17
connecting to: mongodb://hadoop103:27200/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("8cca71f4-1c0b-4598-84ee-74c86674458b") }
MongoDB server version: 4.2.17
mongos> show dbs
admin   0.000GB
config  0.003GB
mongos> quit()
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-17 12:03:34  更:2021-10-17 12:05:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:21:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码