根据网上查找的资料,自己动手在虚拟机内搭建MongoDB复制集+用户认证,Spring集成测试。
附上操作文档、java源码的下载地址(免积分下载):http://download.csdn.net/detail/zbq8hao/9887344
该文章由附件里的操作文档复制过来,图片丢失,所以最好用附件里的操作文档来看,比较清晰。
mongodb安装步骤略,必须已熟悉mongodb基本操作
查看mongodb是否已启用
netstat -nltp|grep 27017
搜索进程
ps -ef|grep mongo
结束进程
kill -9 [pid]
关闭mongodb
use admin
db.shutdownServer()
exit命令退出mongo客户端
测试环境
CentOS 6.5
mongodb 3.4.5
CentOS固定ip:192.168.145.131
本文档mongodb安装目录为/usr/local/mongodb
三个mongodb实例在同一台服务器,端口号:27017(主节点)、27018(从节点)、27019(从节点)
一、搭建复制集(无用户认证)
1.准备
1.1在mongodb目录下,创建数据库、日志目录
mkdir -p data/db1 data/db2 data/db3
mkdir -p data/log1 data/log2 data/log3
1.2创建日志文件
touch data/log1/mongo1.log data/log2/mongo2.log data/log3/mongo3.log
2.启动3个实例
./bin/mongod --dbpath /usr/local/mongodb/data/db1 --logpath /usr/local/mongodb/data/log1/mongo1.log --port 27017 --fork --replSet rsa
./bin/mongod --dbpath /usr/local/mongodb/data/db2 --logpath /usr/local/mongodb/data/log2/mongo2.log --port 27018 --fork -replSet rsa
./bin/mongod --dbpath /usr/local/mongodb/data/db3 --logpath /usr/local/mongodb/data/log3/mongo3.log --port 27019 --fork --replSet rsa
3.复制集配置
3.1在任意一台机上配置副本集,这里在27017上配置
./bin/mongo 27017
3.2切换到amdin集合
use admin
3.3配置对象
rsconf={_id:'rsa',members:[{_id:0,host:'192.168.145.131:27017'},{_id:1,host:'192.168.145.131:27018'},{_id:2,host:'192.168.145.131:27019'}]}
注意:要用具体ip或主机名,不要用127.0.0.1或localhost,或者在spring连接时会连接异常,spring读取配置信息的主机为127.0.0.1,所以异常
3.5初始化配置
rs.initiate(rsconf)
3.6查看复制集状态
rs.status()
4.测试
4.1主节点插入
步骤省略
4.2连接从节点查询同步情况
./bin/mongo --port 27018
出现上述错误,是因为slave默认不许读写,先执行rs.slaveOk()再其他操作
rs.slaveOk()
查询测试步骤省略
其他一些操作
更新配置
rs.reconfig(rsconf)
删除节点
rs.remove('1192.168.145.131:27018');
rs.remove('1192.168.145.131:27019');
添加节点
rs.add('1192.168.145.131:27018');
rs.add('1192.168.145.131:27019');
二、搭建复制集(用户认证)
1.准备
1.1在mongodb目录下,创建数据库、日志目录
mkdir -p data/db1 data/db2 data/db3
mkdir -p data/log1 data/log2 data/log3
1.2创建日志文件
touch data/log1/mongo1.log data/log2/mongo2.log data/log3/mongo3.log
2.启动3个实例,此处以配置文件的形式启动
2.1先创建配置文件
vi 27017.conf
vi 27018.conf
vi 27019.conf
2.2启动mongod实例,-f后面跟上该结点的配置文件的路径
"27017.conf"是一个相对路径,即上面的27017.conf这个配置文件的路径
./bin/mongod -f 27017.conf
./bin/mongod -f 27018.conf
./bin/mongod -f 27019.conf
3.复制集配置
3.1在任意一台机上配置副本集,这里在27017上配置
./bin/mongo 27017
3.2切换到amdin集合
use admin
3.3配置对象
rsconf={_id:'rsa',members:[{_id:0,host:'192.168.145.131:27017'},{_id:1,host:'192.168.145.131:27018'},{_id:2,host:'192.168.145.131:27019'}]}
注意:要用具体ip或主机名,不要用127.0.0.1或localhost,或者在spring连接时会连接异常,spring读取配置信息的主机为127.0.0.1,所以异常
3.4初始化配置
rs.initiate(rsconf)
3.5查看复制集状态
rs.status()
4.生成keyfile文件
4.1在主节点的mongodb路径下,生成生成753字节的密钥文件
openssl rand -base64 753 >keyfile.dat
4.2建议把密钥文件的权限设置为600(针对启动mongo实例的那个用户)
chmod 600 keyfile.dat
接着需要把这个密钥文件拷贝到每个复制集结点上(包括主结点和从结点),这里都在同一机器上,所以不拷贝
5.创建复制集的用户
5.1进入主结点(我这里此时27017是主结点)的admin库
./bin/mongo 27017
use admin
5.2创建admin库的用户(身份为所有库的用户的管理者)
db.createUser({user:'dba',pwd:'dba',roles:[{role:'root',db:'admin'}]})
5.3进入你之前创建的新库
use test
5.4创建这个库的用户(身份为此库的拥有者)
注意,只需要在主结点上创建这两个用户,由于复制集的关系,每个从结点会自动创建这两个相同的用户
db.createUser({user:'startdm',pwd:'123456',roles:[{role:'dbOwner',db:'test'}]})
6.修改配置
6.1关闭原先的集群
注意,最好按照 从节点 -> 主节点 的顺序,依次关闭各结点的进程,在关闭某个进程时,需要先进入admin库,然后执行这条命令
db.shutdownServer()
6.2在每个结点(主结点,从结点)的配置文件中加入keyFile的配置项
keyFile=/usr/local/mongodb/keyfile.dat
6.3在每个结点(主结点,从结点)的配置文件中加入auth=true的配置项
auth=true
7.重启集群
./bin/mongod -f 27017.conf
./bin/mongod -f 27018.conf
./bin/mongod -f 27019.conf
8.测试
先use库,再db.auth(‘用户名’,’密码’),从节点用户验证后需要执行rs.slaveOk(),才能查询
步骤省略