在Ubuntu 20.04 | 18.04 | 16.04上配置MongoDB 4.4副本集

您可以通过以下链接以PDF格式下载本文来支持我们。以PDF格式下载指南关闭关闭关闭

本指南将向您展示如何在Ubuntu 20.04 | 18.04 | 16.04服务器上配置MongoDB副本集。 MongoDB是具有自动扩展,高可用性和高性能的企业级NoSQL数据库系统。 在NoSQL数据库中,数据使用MongoDBBSON格式存储在文档结构中。 您不能在MongoDB中使用SQL语句来插入或检索数据。

什么是MongoDB复制/副本集?

在MongoDB中,副本集是一组维护相同数据集的mongod进程。副本集为所有操作部署提供了基础,因为它们提供了数据冗余和高可用性。

本教程将引导您完成创建有效的3节点副本集所需的步骤,而无需配置访问控制来限制访问。本指南基于以下系统IP地址:

MongoDB Server1: 10.10.5.2
MongoDB Server2: 10.10.5.3
MongoDB Server3: 10.10.5.4

步骤1:设定要求

在配置副本集之前,必须在所有服务器上安装MongoDB。确保用于复制的服务器配置了正确的主机名。

如果DNS服务器无法正常工作,请在服务器上本地将IP地址配置为FQDN映射。

# Edit and set the values correctly
10.10.5.2 mongodb-01.example.net mongodb-01
10.10.5.3 mongodb-02.example.net mongodb-02
10.10.5.4 mongodb-03.example.net mongodb-03

步骤2:在所有Ubuntu 20.04 | 18.04节点上安装MongoDB

请按照以下步骤在您的Ubuntu服务器上安装MongoDB。

更新系统:

sudo apt-get update
sudo apt-get upgrade && sudo reboot

导入MongoDB公共GPG密钥:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4

导入密钥后,添加存储库。

### Ubuntu 20.04 ###
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list

### Ubuntu 18.04 ###
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list

### Ubuntu 16.04 ###
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list

安装MongoDB软件包

sudo apt-get update
sudo apt install -y mongodb-org

使用专用磁盘保存MongoDB数据(可选)

在我的设置中 10GB 专门用于MongoDB数据的辅助存储。创建并挂载分区 /数据/ mongodb。

# lsblk 
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   32G  0 disk 
|-sda1   8:1    0  487M  0 part /boot
|-sda2   8:2    0  1.9G  0 part [SWAP]
`-sda3   8:3    0 29.6G  0 part /
vda      252:0  0 10G    0 disk

为辅助磁盘创建一个GPT分区表。可以是多张光盘

parted -s -a optimal -- /dev/vda mklabel gpt
parted -s -a optimal -- /dev/vda mkpart primary 0% 100%
parted -s -- /dev/vda align-check optimal 1

接下来,创建一个LVM卷。这使扩展分区变得容易。

$ sudo pvcreate  /dev/vda1
  Physical volume "/dev/vda1" successfully created.

$ sudo vgcreate vg11 /dev/vda1
  Volume group "vg11" successfully created

$ sudo lvcreate -n data -l 100%FREE vg11
Logical volume "data" created

创造 ext4创建的逻辑卷上的文件系统。

$ sudo mkfs.ext4 /dev/mapper/vg11-data
mke2fs 1.44.1 (24-Mar-2018)
Creating filesystem with 2620416 4k blocks and 655360 inodes
Filesystem UUID: b98e07e5-1b04-4282-a9db-fa5b73c74d2f
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

创建安装点并安装分区

echo "/dev/mapper/vg11-data /data ext4 defaults 0 0" | sudo tee -a /etc/fstab
mkdir /data
mount -a

确认分区安装成功。

$ df -hT | grep /data
/dev/mapper/vg11-data ext4      9.8G   37M  9.3G   1% /data

创建用于MongoDB数据的文件夹

sudo mkdir /data/mongodb
sudo chown -R mongodb:mongodb /data/mongodb
sudo chmod -R 775 /data/mongodb

将存储路径配置为所有节点上先前创建的存储路径

$ sudo vim /etc/mongod.conf
# Where and how to store data.
storage:
  dbPath: /data/mongodb
  journal:
    enabled: true

步骤3:配置MongoDB副本集

现在您已拥有所需的一切,让我们继续配置MongoDB副本集。

从所有节点上的本地主机IP更改MongoDB侦听地址

$ sudo vim /etc/mongod.conf
# node 1
# network interfaces
net:
  port: 27017
  bindIp: 10.10.5.2  # Listen to local interface only, comment to listen on all interfaces.

# node 2
# network interfaces
net:
  port: 27017
  bindIp: 10.10.5.3  # Listen to local interface only, comment to listen on all interfaces.

# node 3
# network interfaces
net:
  port: 27017
  bindIp: 10.10.5.4  # Listen to local interface only, comment to listen on all interfaces.

MongoDB副本集配置

MongoDB节点之一 PRIMARY,所有其他节点的工作方式如下 SECONDARY..数据永远 PRIMARY 然后将节点和数据集复制到其他所有内容 SECONDARY节点。

编辑MongoDB配置文件mongod.conf以在所有节点上启用副本集

replication:
  replSetName: "replica01"

开放端口 27017/tcp 在防火墙上:

sudo ufw enable
sudo ufw allow ssh
sudo ufw allow 27017/tcp

将MongoDB配置为在操作系统引导时引导

sudo systemctl enable mongod.service
sudo systemctl restart mongod.service

检查MongoDB服务的监听地址。

# ss -tunelp | grep -i mongo
tcp   LISTEN  0       128                10.10.5.2:27017          0.0.0.0:*      users:(("mongod",pid=15288,fd=11)) uid:111 ino:46927 sk:4 <->

启动MongoDB副本集

MongoDB Node1(mongodb-01PRIMARY 而另外两个充当 SECONDARY

登录到mongodb-01服务器并启动mongo shell。

$ mongo 10.10.5.2
MongoDB shell version v4.0.1
connecting to: mongodb://10.10.5.2:27017/test
MongoDB server version: 4.0.1
Welcome to the MongoDB shell.
For interactive help, type "help".
...
>

初始化副本集 node1 执行以下命令。

> rs.initiate()
{
        "info2" : "no configuration specified. Using a default configuration for the set",                                                           
        "me" : "10.10.5.2:27017",
        "ok" : 1,
        "operationTime" : Timestamp(1534797235, 1),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1534797235, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),                                                                          
                        "keyId" : NumberLong(0)
                }
        }
}

确保你得到 1 对于 ok 状态

添加辅助节点

replica01:PRIMARY> rs.add("mongodb-02")
{
        "ok" : 1,
        "operationTime" : Timestamp(1534797580, 1),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1534797580, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}

replica01:PRIMARY> rs.add("mongodb-03")
{
        "ok" : 1,
        "operationTime" : Timestamp(1534797614, 1),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1534797614, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}

使用以下方法检查副本集的状态:

replica01:PRIMARY> rs.status()

检查主站的状态

replica01:PRIMARY> rs.isMaster()

测试MongoDB复制

在中创建测试数据库 mongodb-01

replica01:PRIMARY> use test_db
switched to db test_db

新增资料

> db.test.save(
{
    "desc": "My Test Database",
    "apps":  ["Test1", "Test2", "Test3", "Test4"],
})

replica01:PRIMARY> show dbs
admin    0.000GB
config   0.000GB
local    0.000GB
test_db  0.000GB
replica01:PRIMARY> use test_db
switched to db test_db
replica01:PRIMARY> show collections
test

结论

MongoDB复制现在正在工作。3个节点的群集大小 节点, 不只是一个节点。此数字是根据以下公式计算得出的: [Master Eligible Nodes) / 2 + 1]也就是说,高可用性需要奇数个节点。最小数量是 ..

参考:

您可以通过以下链接以PDF格式下载本文来支持我们。以PDF格式下载指南关闭关闭关闭

Sidebar