0%

Ubuntu20 安装 MongoDB 副本集、设置密码、开启远程访问

  • 系统:阿里云 Ubuntu20.04.1 LTS
  • 软件:MongoDB Community 4.4

安装 MongoDB

apt 安装的数据库还是 v3,无法支持副本集,副本集最低也需要 v4。很多商用数据库的也是 v4,为了后续直接部署在生产环境,请选择和生产环境一样的配置。
根据官方文档安装 MongoDB Community,确认安装好后,记得关闭 MongoDB 服务,进行副本集配置。

创建存储目录

1
mkdir /data && cd /data

创建 keyFile 文件,用于副本集的身份验证

1
sudo openssl rand -base64 756 > access
1
sudo chmod 400 access

创建第一个节点

1
mkdir -p /data/db1/db /data/db1/logs
1
sudo vim /data/db1/mongod.conf

配置内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
systemLog:
destination: file
path: /data/db1/logs/mongod.log # 日志文件路径
logAppend: true
storage:
dbPath: /data/db1/db # 数据目录
net:
bindIp: 0.0.0.0 # 绑定所有 IP,否则只能本机访问
port: 37017 # 端口
replication:
replSetName: rs0 # 副本集名称
processManagement:
fork: true # 后台运行
security:
authorization: enabled # 开启权限验证
clusterAuthMode: keyFile # 集群身份验证模式
keyFile: /data/access # keyFile 文件路径

创建第二个节点

只需要修改每个节点的端口和数据目录即可,往后的操作都是一样的。

1
mkdir -p /data/db2/db /data/db2/logs
1
sudo vim /data/db2/mongod.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
systemLog:
destination: file
path: /data/db2/logs/mongod.log # 修改目录
logAppend: true
storage:
dbPath: /data/db2/db # 修改目录
net:
bindIp: 0.0.0.0
port: 37018 # 修改端口
replication:
replSetName: rs0
processManagement:
fork: true
security:
authorization: enabled
clusterAuthMode: keyFile
keyFile: /data/access

创建第三个节点

1
mkdir -p /data/db3/db /data/db3/logs
1
sudo vim /data/db3/mongod.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
systemLog:
destination: file
path: /data/db3/logs/mongod.log
logAppend: true
storage:
dbPath: /data/db3/db
net:
bindIp: 0.0.0.0
port: 37019
replication:
replSetName: rs0
processManagement:
fork: true
security:
authorization: enabled
clusterAuthMode: keyFile
keyFile: /data/access

依次启动每个节点

1
2
3
mongod -f /data/db1/mongod.conf
mongod -f /data/db2/mongod.conf
mongod -f /data/db3/mongod.conf

进入主节点 创建副本集

三个端口都可以进,进那个都行,我这里进 37017 端口。

1
mongo localhost:37017

输入以下命令,创建副本集,记得把 ip 换成你的服务器 ip,并打开防火期的 37017、37018、37019 端口。

1
2
3
4
5
6
7
8
9
10
11
12
13
rs.initiate({
_id: "rs0",
members: [{
_id: 0,
host: "ip:37017"
},{
_id: 1,
host: "ip:37018"
},{
_id: 2,
host: "ip:37019"
}]
})

回车后返回 { "ok" : 1 },表示副本集创建成功。

创建用户

1
use admin
1
db.createUser({user:"admin",pwd:"你的密码",roles:["root"]})