本文以mongodb4.2.1为例搭建副本集,记录搭建流程,便于大家学习
1.准备三台机器(阿里云)
mongo1 47.100.32.119(192.168.0.78)
mongo2 106.15.40.89(192.168.0.79)
mongo3 106.15.40.101(192.168.0.80)
2.安装mongodb
详情可参考官方安装文档:(本文以ubuntu 16.4为例)
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
1.安装:
1.wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
2.echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
3.sudo apt-get update
4.sudo apt-get install -y mongodb-org
2.启动:
1.sudo service mongod start #以默认配置文件启动
2.sudo service mongod status #查看mongodb状态
3.sudo service mongod stop #停止服务
4.sudo service mongod restart #重启服务
3.卸载:
1.sudo service mongod stop
2.sudo apt-get purge mongodb*
3.sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb
3.修改mongodb配置文件
默认启动文件为:
启动文件:/usr/bin/mongod
配置文件:/etc/mongod.conf
数据文件:/var/lib/mongodb
日志文件:/var/log/mongodb.log
修改文件位置为:(便于管理和配置,下面的文件位置需要自己手动在服务器上创建目录和文件)
配置文件:/home/mongo/config/mongod.conf(拷贝默认文件 cp /etc/mongod.conf /home/mongo/config/mongod.conf)
数据文件:/home/mongo/data
日志文件:/home/mongo/log/mongod.log
4.修改配置文件:
修改完成如下:
#db path(1.修改数据存储位置为自己新建的位置)
storage:
dbPath: /home/mongo/data
# logger(2.修改日志文件为自己新建的位置)
systemLog:
destination: file
logAppend: true
path: /home/mongo/log/mongod.log
# network interfaces (3.修改bindIp,解除绑定到本地限制)
net:
port: 27017
bindIp: 0.0.0.0
#replication(4.注意修改副本集名称,三台服务器需要统一)
replication:
replSetName: testRepl
#sharding:
部分修改如上所示,需要别的可以继续修好
5.启动副本集
sudo /usr/bin/mongod --config /home/mongo/config/mongod.conf
依次在三台机器上启动,按照指定的配置文件, 然后进入本机客户端:
sudo /usr/bin/mongo
在三台机器上任意一台登陆mongodb(我这里在mongo1上登陆)
#进入数据库
user admin
#进行初始化配置
config={_id:"testRepl",members:[{_id:0,host:"47.100.32.119:27017"},{_id:1,host:"106.15.40.89:27017"},{_id:2,host:"106.15.40.101:27017"}]}
#初始化副本集
rs.initiate(config);
#查询初始化状态(此处可查看到当前节点是主节点还是副本集)
rs.status();
#重启当前节点
db.shutdownServer();
6.数据测试
找到主节点所在的服务器,也可自己设置主节点,然后建立test数据库
use test
#往testdb插入数据
db.testdb.insert({"test1":"test11"})
#然后在副节点上查看数据是否复制过来
#使用test 数据库。
repset:SECONDARY> use test;
repset:SECONDARY> show tables;
#如果看见错误信息:not master and slaveOk
解决方案:
#mongodb默认是从主节点读写数据的,副本节点上不允许读,需要设置副本节点可以读。
repset:SECONDARY> db.getMongo().setSlaveOk();
#可以看到数据已经复制到了副本集。
repset:SECONDARY> db.testdb.find();
问题备注:
搭建过程遇到的问题:
1.防火墙未关闭,导致三台机器之间不能相互访问
解决方法:
1.查看防火墙当前状态
sudo ufw status
2.开启防火墙
sudo ufw enable
3.关闭防火墙(解决方案是关闭防火墙,此处列出一系列命令,便于使用查看)
sudo ufw disable
2.三台机器中有一二台开启的权限认证,此时会报错
解决方法:
将对应机器的配置文件中授权注释掉
3.数据库版本不一致,也可能导致失败
解决方法:
统一数据库版本,将不相同版本的数据库卸载重装,卸载步骤可参看官网文档
单间完成后即可写代码测试,本副本集方案仅为测试使用参考!