1. 简介
对于mongodb分布式架构中的节点,为了保证数据的高可用性,我们需要配置主节点(Primary)、副本节点(Secondary)和仲裁节点(Arbiter)。
主节点和副本节点都保存有完整的数据副本,而仲裁节点则不保存数据,仅用于投票决定主节点的切换,即仲裁节点的作用相当于一个选举委员会。在节点数目不够多时,引入仲裁节点可以减少选举成本并提升集群的稳定性。
2. 添加仲裁节点的步骤
2.1. 启动mongodb实例
首先,我们需要在新的服务器上启动mongodb实例,并将其作为仲裁节点加入集群。
通过以下命令启动mongodb实例:
mongod --replSet {replSetName} --port {newPort} --dbpath {newPath} --oplogSize {oplogSize} --fork
其中,replSetName是复制集名称,newPort是新实例的端口,newPath是新实例的数据存储路径,oplogSize为Oplog大小,fork表示将进程在后台运行。
同时,我们可以通过以下命令确保该节点已经成功加入集群:
mongod --port {newPort} --eval 'rs.status()'
如果输出结果中的members列表中有与当前主副本节点对应的配置,说明该节点已成功加入集群。
2.2. 将节点声明为仲裁节点
接下来,我们需要在mongodb shell中将该节点声明为仲裁节点。
首先,打开mongodb shell,并连接集群上的任意一个节点。
mongo --host {hostname} --port {port} -u {username} -p {password} --authenticationDatabase=admin
其中,hostname和port分别是一个已存在的mongodb节点的主机名和端口号,username和password分别是该节点的用户名和密码。
然后,切换到admin数据库,执行以下命令查看当前复制集信息并更新配置文件:
use admin
rs.status()
newConfig = rs.conf();
newConfig.members.forEach(function(member) {
if (member.host == "{hostname}:{newPort}") {
member.arbiterOnly=true;
}
});
rs.reconfig(newConfig);
其中,newPort为刚才新开启mongodb实例的端口号。
以上命令会将该节点的成员类型修改为仲裁节点。
2.3. 验证仲裁节点
我们可以通过以下命令验证该节点是否已经成功被配置为仲裁节点:
rs.status()
该命令会返回集群中所有节点的状态信息。我们需要在返回结果中查找该节点的信息,并确保其类型为“ARBITER”。
3. 总结
以上就是mongodb添加仲裁节点的步骤。在实际应用中,我们需要根据实际情况选择合适的节点类型和数量来保证高可用性和低成本。