在 CentOS 7 上部署 MongoDB 副本集
1. 安装并配置 MongoDB 副本集
首先,为 MongoDB 添加 YUM 仓库配置:
vim /etc/yum.repos.d/mongo.repo
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://pgp.mongodb.com/server-4.4.asc
安装 MongoDB:
yum install -y mongodb-org
创建数据和日志目录,并设置权限:
mkdir -p /data/mongodb
mkdir -p /var/log/mongodb
touch /var/log/mongodb/mongod.log
openssl rand -base64 512 > /data/mongodb/mongo.key # 确保所有节点使用相同的文件内容
chmod 400 /data/mongodb/mongo.key
chown -R mongod:mongod /data/mongodb
chown -R mongod:mongod /var/log/mongodb
配置 MongoDB:
vim /etc/mongod.conf
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
storage:
dbPath: /data/mongodb
journal:
enabled: true
processManagement:
timeZoneInfo: /usr/share/zoneinfo
net:
port: 27017
bindIp: 0.0.0.0
security:
authorization: enabled
keyFile: /data/mongodb/mongo.key
replication:
replSetName: rs0
启动并启用 MongoDB 服务:
systemctl start mongod
systemctl status mongod
systemctl enable mongod
初始化副本集。请将 IP 地址替换为您实际的集群节点地址:
mongo
rs.initiate( {
_id : "rs0",
members: [
{ _id: 0, host: "192.168.1.101:27017" },
{ _id: 1, host: "192.168.1.102:27017" },
{ _id: 2, host: "192.168.1.103:27017" }
]
})
rs.status() # 查看节点状态和角色
2. 创建管理员用户
连接到 MongoDB 并创建管理员用户:
mongo
use admin
db.createUser({ user:'admin',pwd:'StrongPassword123',roles:[ { role:'userAdminAnyDatabase', db: 'admin'}]});
db.auth('admin','StrongPassword123');
db.grantRolesToUser( "admin" , [ { role: "dbOwner", db: "admin" },{ "role": "clusterAdmin", "db": "admin" },{ "role": "userAdminAnyDatabase", "db": "admin" },{ "role": "dbAdminAnyDatabase", "db": "admin" }]);
# 创建 root 用户
db.createUser({user:"root",pwd:"AnotherSecurePwd456",roles:[{role:"root",db:"admin"}]});
db.grantRolesToUser ( "root", [ { role: "__system", db: "admin" } ] );
3. 集群验证
在主节点上进行操作,使用 root 用户登录:
mongo
use admin
db.auth('root','AnotherSecurePwd456');
rs.config(); # 查看副本集配置
rs.printSecondaryReplicationInfo(); # 检查副本延迟
db.hello(); # 获取集群信息
进行读写测试:
# 在主节点执行写入操作
db.mycollection.insertOne({ name: "testDocument", value: 100 });
# 在从节点执行读取操作
mongo
use admin
db.auth('root','AnotherSecurePwd456');
rs.secondaryOk(); # 允许从节点读取
db.mycollection.findOne({ name: "testDocument" });
# 预期输出: { "_id" : ObjectId(...), "name" : "testDocument", "value" : 100 }
4. 客户端连接
4.1 下载并安装 MongoDB Compass
访问 MongoDB Compass 下载页面,根据您的操作系统下载并安装客户端。
4.2 配置连接字符串
打开 MongoDB Compass,点击 "New Connection"。在连接字符串输入框中,输入副本集的连接 URI。格式如下:
"mongodb://user:password@node1_ip:port,node2_ip:port,node3_ip:port/?replicaSet=replicaSetName"
示例:
"mongodb://root:AnotherSecurePwd456@192.168.1.101:27017,192.168.1.102:27017,192.168.1.103:27017/?replicaSet=rs0"
4.3 添加用户认证
在 MongoDB Compass 的连接设置中,提供用户名和密码进行认证。
5. 数据备份与恢复
使用 mongodump 进行备份:
mongodump --uri='mongodb://root:AnotherSecurePwd456@192.168.1.101:27017/?replicaSet=rs0&authSource=admin' --db=your_database_name # 默认在当前目录下创建 dump 文件夹
使用 mongorestore 进行恢复:
mongorestore --uri="mongodb://root:AnotherSecurePwd456@192.168.1.102:27017/?replicaSet=rs0&authSource=admin" /path/to/your/dump/directory
