自己为了测试方便,使用一台机器,将mongo执行在不同端口,并指定了多个目录存放数据
环境准备
安装mongodb,此处不再赘述
创建数据存放目录,例/tmp/mongo/db1/
以副本集方式启动mongo服务,根据环境不同可能运行的命令也不相同,但参数都一样
开启各节点服务
28017端口需要提供WEB管理工具,因此不能占用 只有两个节点时,副本集将不具备真正的故障转移能力,故而官方推荐的副本集是至少3个节点.
mongod --replSet {repset_name} --dbpath=/tmp/mong/db1/ --port=30001 > /dev/null 2>&1 &
mongod --replSet {repset_name} --dbpath=/tmp/mong/db2/ --port=30002 > /dev/null 2>&1 &
mongod --replSet {repset_name} --dbpath=/tmp/mong/db3/ --port=30003 > /dev/null 2>&1 &
mongod --replSet {repset_name} --dbpath=/tmp/mong/db4/ --port=30004 > /dev/null 2>&1 & #作为仲裁节点,没有仲裁节点无法实现自动切换主从
参数说明: --replSet 以副本集方式运行服务 --dbpath 指定数据存放路径 --port 指定端口
写入配置
service mongodb start #启动服务
mongo #执行cli工具
use admin #
rs.initiate({'_id':'myrst', 'members':[{'_id':0,'host':'127.0.0.1:30001','priority':2}, {'_id':1,'host':'127.0.0.1:30002','priority':1}, {'_id':2,'host':'127.0.0.1:30003','priority':1}, {'_id':3, 'host':'127.0.0.1:30004','priority':1,'arbiterOnly':true}] });
# priority:1 设置优先级, 'arbiterOnly':true 设为仲裁节点
此时将看到如图所示,即表示成功运行
后面登陆副本集的mongo客户端,需要加端口 mongo --port 30001
本地副本集启动脚本
查看运行状态
rs.status()
添加新节点/仲裁节点
增加新的副本集服务
mongod --replSet {repset_name} --dbpath=/tmp/mong/db1/ --port=30001 > /dev/null 2>&1 &
登陆主节点client,进行如下操作
mongo --port 30001 use admin rs.add("127.0.0.1:30004") #添加新节点 rs.addArb("127.0.0.1:30004") # 添加仲裁节点
删除节点
查找原有副本集并kill
掉其进程
登陆主节点client,进行如下操作
mongo --port 30001 use admin rs.remove("127.0.0.1:30004")
设置子节点可读写
rs.slaveOk()
重新进行主节点选举
rs.stepDown()
重新设置节点优先级
此功能亦可实现节点的强制切换
方式1 提高某一节点优先级
config=rs.conf()
config.members[1].priority=2
rs.reconfig(config)
方式2 全部重设
config={"members" : [
{"_id" : 0,"host" : "127.0.0.1:30001", priority : 1},
{"_id" : 1,"host" : "127.0.0.1:30002", priority : 2},
{"_id" : 2,"host" : "127.0.0.1:30003", priority : 1},
{"_id" : 3,"host" : "127.0.0.1:30004", priority : 1, 'arbiterOnly':true}
]}
rs.reconfig(config)