MongoDB副本集配置
三台机器配置
要求:一主两从一仲裁、异地机房节点不具备选举为Primary资格。
1、MongoDB安装
在官网或者GitHub上下载压缩包,上传到服务器,并解压到/usr/local/下,命名为mongodb
2、在/app目录下创建mongodb目录,并根据安装的节点端口号创建/mongodb+端口号目录,例如创建/mongodb27017目录
3、在/app目录下创建db、conf、log三个目录,并在conf下创建文件mongodb+端口号.conf文件,文件配置如下
port=27017 dbpath=/app/mongodb/mongodb27017/db logappend=true fork=true logpath=/app/mongodb/mongodb27017/log/mongpdb.log replSet=my_repl
4、分别启动各节点mongod服务
/usr/local/mongodb/bin/mongod -f /app/mongodb/mongodb27017/conf/mongodb27017.conf
5、启动配置为主节点的客户端,配置副本集
> rs.initiate({ _id:"my_repl", members:[{_id:0,host:"192.168.10.1:27017"},{_id:1,host:"192.168.10.2:27017"},{_id:2,host:"10.10.10.1:27017"}] })
#添加仲裁节点,如需要可创建另一个节点作为仲裁节点
> rs.addArb("192.168.10.2:27018")
6、将北京节点的priority设置为0,使其无法被选举为primary节点
my_repl:PRIMARY> cfg = rs.conf() my_repl:PRIMARY> cfg.members[2].priority=0 my_repl:PRIMARY> rs.reconfig(cfg)
7、测试副本集同步功能及故障自动转移
在主节点写入数据、手动关闭主节点等。略。
彩蛋:
在conf里指定directoryperdb为true时,每个数据库都会生成单独的文件夹。然而在rs.initiate()时会出现报错"has data already, cannot initiate set"。
我的操作是创建别的db目录,将conf文件中的directoryperdb去掉,以另外的db目录启动数据库,重新初始化副本集。
参考文档:
1、https://blog.csdn.net/qiaqia609/article/details/78900187 安装
2、https://www.cnblogs.com/clsn/p/8214345.html#auto_id_0 副本集介绍
3、https://www.cnblogs.com/phpandmysql/p/7763394.html conf文件参数详解