Post

【Ops】03 MongoDB

【Ops】03 MongoDB

1 搭建MongoDB集群

1.1 单个host搭建mongodb 集群

refer doc:

1.1.1 搭建集群

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# 准备目录
mkdir -p /data/docker/mongo/rs{1,2,3}/{data,logs,config}
chmod -R 777  /data/docker/mongo/

# 准备配置
cat > /data/docker/mongo/rs1/config/mongod.conf << EOF
storage:
  dbPath: /var/lib/mongodb
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log
net:
  port: 27021
  bindIp: 0.0.0.0
processManagement:
  timeZoneInfo: /usr/share/zoneinfo
replication:  #开启副本集
  replSetName: rs  #设置副本集名称
EOF

cp /data/docker/mongo/rs1/config/mongod.conf /data/docker/mongo/rs2/config/mongod.conf
cp /data/docker/mongo/rs1/config/mongod.conf /data/docker/mongo/rs3/config/mongod.conf

# 启动容器
for i in {1..3}
do
    docker run \
        --restart=always \
        -d \
        -p 2702${i}:27021 \
        --name mongo-rs${i} \
        -v /data/docker/mongo/rs${i}/data:/var/lib/mongodb \
        -v /data/docker/mongo/rs${i}/logs:/var/log/mongodb \
        -v /data/docker/mongo/rs${i}/config/mongod.conf:/etc/mongod.conf \
        registry.XXX.com/public/mongo:4.2 -f /etc/mongod.conf
done

# 初始化
docker exec -it mongo-rs1 bash

mongo 127.0.0.1:27021

rs.status()

cfg = {_id: 'rs', members: [{_id: 1, host: '192.168.31.148:27021'},{_id: 2, host: '192.168.31.148:27022'},{_id: 3, host: '192.168.31.148:27023', arbiterOnly: true}]}

rs.initiate(cfg)

rs.status()

1.1.2 增加认证

1
2
3
4
5
6
docker exec -it mongo-rs1 bash

mongo 127.0.0.1:27021

use admin
db.createUser({user:"root",pwd:"XXXXXXXXXXXXX",roles:[{role:"root",db:"admin"}]})

1.2 客户端连接

客户端同时连接主节点与备节点,不连接仲裁节点。

1.3 停止、重启

切记!日常使用时要关闭数据库,必须是在进入shell下进行按仲裁节点,从节点,主节点的顺序执行关闭,而不是通过ps aux的kill 杀死进程,否则可能造成数据丢失或损坏

2 replicaset 理解

一个 MongoDB 集群通常就是一个副本集(Replica Set)。副本集是 MongoDB 的基本高可用性和容错单元,负责实现数据的复制和冗余。一个副本集具有以下特征:

  • 唯一标识:每个副本集都有一个唯一的 _id,这就是副本集的名称。连接字符串中需要指定这个名称,以确保客户端正确连接到副本集。
  • 多个节点:副本集可以包含多个节点(主节点、从节点、仲裁节点),这些节点一起工作以提供数据的高可用性。
  • 高可用性:通过自动选举机制,当主节点不可用时,副本集可以自动选出一个新的主节点。

因此,在大多数情况下,一个 MongoDB 集群就是一个副本集。

但需要注意的是,MongoDB 也支持分片(Sharding),在分片架构中,一个集群可能包含多个副本集,每个分片是一个独立的副本集,这种情况下,一个集群不再是单纯的一个副本集。

This post is licensed under CC BY 4.0 by the author.