详解Mongodb搭建Replica Set的方法
Mongodb的Replica Set是实现高可用和数据冗余的常见方法,本篇文章将详细介绍在linux系统下搭建mongodb Replica Set的方法。
1. 安装Mongodb
在搭建Replica Set之前,需要先在服务器上安装Mongodb。在ubuntu操作系统中,可使用以下命令进行安装:
sudo apt-get update
sudo apt-get install mongodb
2. 配置Mongodb
Mongodb的配置文件可在/etc/mongodb.conf中进行编辑。以下是常见的配置项:
dbpath=/var/lib/mongodb # 数据库文件存储位置
logpath=/var/log/mongodb/mongodb.log # 日志文件存储位置
logappend=true # 日志文件是否追加
bind_ip=127.0.0.1,123.123.123.123 # 绑定的IP地址
port=27017 # 监听的端口号
在无需设置认证的情况下,此时您已成功完成mongodb的安装和配置。
3.设置Replica Set
3.1 配置集群节点
在搭建Replica Set之前需要先确定节点的角色,分别是Primary、Secondary 和 Arbiter。
-
Primary:每个Replica Set中只有一个Primary节点,提供唯一的写入操作,如索引和修改操作。
-
Secondary:提供读取操作,从Primary节点复制数据,并参与选举成为Primary.
-
Arbiter:只参与选举过程,不参与写入或复制数据。最小搭建方式的配置是一主一从一裁判,也可以多一个从节点,甚至裁判节点也可以多个。
在配置节点之前,首先需要设置Replica Set名称,可通过以下配置项完成:
replSetName=rs0 # 配置Replica Set名称
在各个节点的Mongodb配置文件中添加此项配置。
3.2 启动节点
在每个节点上使用以下命令启动Mongodb服务
mongod --config /etc/mongodb.conf
3.3 初始化Replica Set
操作任何一个节点,使用Mongo Shell连接并初始化Replica Set。Replica Set只需初始化一次。以下操作均在Mongo Shell中进行:
mongo
初始化Replica Set:
rs.initiate(
{
_id : "rs0",
members: [
{_id:0, host:"ip:port"},
{_id:1, host:"ip:port"},
{_id:2, host:"ip:port", arbiterOnly:true}
]
})
其中,rs0为Replica Set的名称,members为节点列表,_id为节点在列表中的唯一标识,host为节点的ip地址和端口号,arbiterOnly表示该节点为裁判节点。
3.4 添加节点到Replica Set
在Mongodb的Replica Set运行过程中,还可以随时添加新的节点(Secondary或Arbiter)进入集群。
- 添加Secondary节点
在主节点上使用Mongo Shell连接,在MongoDB Shell中执行以下命令:
rs.add("ip:port") # 将ip:port添加为Secondary节点
- 添加Arbiter节点
在主节点上使用Mongo Shell连接,在MongoDB Shell中执行以下命令:
rs.addArb("ip:port") # 将ip:port添加为Arbiter节点
示例一:搭建一主一从一裁判的Replica Set
每个节点都应该安装mongodb。节点IP及端口如下:
主节点 | 从节点 | 裁判节点 |
---|---|---|
123.123.123.1:27017 | 123.123.123.2:27017 | 123.123.1233:27017 |
1. 在每个节点上配置Mongodb
在节点上的配置项如下:
dbpath=/var/lib/mongodb
logpath=/var/log/mongodb/mongodb.log
logappend=true
bind_ip=123.123.123.1 # 主节点和从节点修改此项
port=27017
replSetName=rs0
主节点配置和从节点配置应该相同,只需修改bind_ip即可。
2. 在每个节点上启动Mongodb服务
在每个节点上使用以下命令启动Mongodb服务:
mongod --config /etc/mongodb.conf
3. 在主节点上初始化Replica Set
在主节点上执行以下命令:
mongo
rs.initiate(
{
_id : "rs0",
members: [
{_id:0, host:"123.123.123.1:27017"},
{_id:1, host:"123.123.123.2:27017"},
{_id:2, host:"123.123.123.3:27017", arbiterOnly:true}
]
})
4. 添加从节点和裁判节点
在主节点上分别添加从节点和裁判节点:
rs.add("123.123.123.2:27017")
rs.addArb("123.123.123.3:27017")
Replica Set搭建完成,您可以通过以下命令查看集群状态:
mongo
rs.status() # 查看集群状态
示例二:添加客户端访问的用户认证
上文中介绍了如何搭建一个基本的Replica Set,但在实际应用中,还需要配置客户端访问的用户认证,以下是配置步骤。
1. 创建用户及角色
在administration数据库中创建用户和角色,以下实例创建了两个角色:
-
ReplicaSetAdmin:用于管理集群
-
ReplicaSetUser:用于重写数据
use admin
db.createUser(
{
user: "admin",
pwd: "passw0rd",
roles: [ { role: "root", db: "admin" } ]
}
)
use admin
db.createRole(
{
role: "ReplicaSetAdmin",
privileges: [ { resource: { cluster: true }, actions: [ "addShard", "shardCollection", "listShards", "removeShard", "enableSharding", "disableSharding" ] } ],
roles: []
}
)
db.createRole(
{
role: "ReplicaSetUser",
privileges: [ { resource: { db: "mydb", collection: "" }, actions: [ "find", "insert", "update", "remove" ] } ],
roles: []
}
)
其中,admin为Mongodb的系统管理数据库,mydb为自定义的业务数据库。
2. 配置Mongodb
在每个节点的配置文件中添加以下配置项:
auth=true
security.authorization = enabled
然后在主节点的Mongo Shell中执行以下操作:
use admin
db.createUser(
{
user: "ReplicaSetAdmin",
pwd: "adminPassword",
roles: [ { role: "ReplicaSetAdmin", db: "admin" } ]
}
)
db.auth('ReplicaSetAdmin', 'adminPassword')
3. 在Replica Set中启用用户认证
使用主节点的Mongo Shell连接到Replica Set,并随机选择集群中一个从节点:
mongo --host "123.123.123.1:27017,123.123.123.2:27017,123.123.123.3:27017" --authenticationDatabase "admin" -u "ReplicaSetAdmin" -p "adminPassword"
rs.slaveOk() # 切换到一个从节点上
在从节点上执行以下操作:
use admin
db.createUser(
{
user: "ReplicaSetUser",
pwd: "password",
roles: [ { role: "ReplicaSetUser", db: "mydb" } ]
}
)
use admin
db.auth('ReplicaSetUser', 'password')
use mydb
db.createUser(
{
user: "mydb",
pwd: "password",
roles: [ { role: "readWrite", db: "mydb" } ]
}
)
其中,mydb为自定义的业务数据库。
4. 客户端访问
在客户端连接Mongodb时,需要提供认证信息:
mongo --host "123.123.123.1:27017,123.123.123.2:27017,123.123.123.3:27017" --authenticationDatabase "mydb" -u "mydb" -p "password"
完成了以上操作,您可以通过以下命令查看集群状态:
mongo --host "123.123.123.1:27017,123.123.123.2:27017,123.123.123.3:27017" --authenticationDatabase "admin" -u "ReplicaSetAdmin" -p "adminPassword"
rs.status() # 查看集群状态
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解mongodb搭建Replica Set的方法 - Python技术站