mongodb集群安装及延迟节点配置
本文主要介绍mongodb安装、副本集模式的配置、mongodb数据库的简单使用及延迟节点搭建和利用延迟节点恢复误删除的数据。
一、系统环境
平台:Centos6.6_x86_64
实验环境:四台主机部署副本集模式集群
主机:192.168.115.21、192.168.115.22、192.168.115.23、192.168.115.24
规划:21为master节点,22为副本节点,23为副本节点,24为延迟节点
目的:完成副本集模式集群的部署
测试延迟节点同步数据,当在主节点上误删除数据后利用延迟节点恢复数据
注意:由于mongodb数据同步对时间的实时性要求较高事先要同步下各节点的时间
二、安装mongodb
1.软件安装
软件包:mongodb-linux-x86_64-2.6.9.gz
下载地址:wget
tar -zxvf mongodb-linux-x86_64-2.6.9.tgz
mv mongodb-linux-x86_64-2.6.9.tgz /usr/local/mongodb
2.mongodb安装文件介绍
mongod:数据库服务端,类似mysqld,每个实例启动一个进程,可以fork为Daemon运行
mongo:客户端命令行工具,类似sqlplus/mysql,其实也是一个js解释器,支持js语法
mongodump/mongorestore:将数据导入为bson格式的文件/将bson文件恢复为数据库,类似xtracbackup
mongoexport/mongoimport:将collection导出为json/csv格式数据/将数据导入数据库,类似mysqldump/mysqlimport
bsondump:将bson格式的文件转储为json格式的数据
mongos:分片路由,如果使用了sharding功能,则应用程序连接的是mongos而不是mongod
mongofiles:GridFS管理工具
mongostat:实时监控工具
3.配置mongodb环境变量
vi /etc/profile
添加如下内容:
#Set Mongodb Environment
export MONGODB_HOME=/usr/local/mongodb
export PATH=$PATH:$MONGODB_HOME /bin
source /etc/profile
4.创建配置文件
# vi /usr/local/mongodb/etc/mongodb.conf
添加如下内容:
fork = true #以后台Daemon形式运行服务
quiet = true
port = 27017 #对外服务端口,Web管理端口在这个port的基础上+1000
dbpath = /data/mongodb/ #数据文件存放路径,每个数据库会在其中创建一个子目录
logpath = /usr/local/mongodb/logs/server.log #错误日志文件
logappend = true #错误日志采用追加模式(默认是覆写模式)
journal = true #开启日志功能,通过保存操作日志来降低单机故障的恢复时间
rest = true
httpinterface = true
5.启动mongodb
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/etc/mongodb.conf
6.查看mongodb启动进程
默认监听在tcp/27017端口tcp/28017为web监听端口
三、集群配置
MongoDB的副本集能够故障自动转移,在集群Master故障的时候,副本集可以自动投票,选举出新的Master,并引导其余的Slave服务器连接新的Master,目前官方推荐采用这种吗模式部署。
1.每个节点修改配置文件添加如下一行
# vi /usr/local/mongodb/etc/mongodb.conf
replSet = hnrtest/192.168.115.21:27017,192.168.115.22:27017,192.168.115.23:27017
2.启动服务
3.连接mongodb初始化集群
# /usr/local/mongodb/bin/mongo 192.168.115.21:27017
> db.runCommand({"replSetInitiate" : { "_id" : "hnrtest" ,"members" : [ { "_id" : 1, "host" : "192.168.115.21:27017"},{ "_id" : 2, "host" : "192.168.115.22:27017"},{ "_id" : 3, "host" : "192.168.115.23:27017"}]}})
执行命令出现以上错误提示,解决方法
> use admin> db.runCommand({"replSetInitiate" : { "_id" : "hnrtest" ,"members" : [ { "_id" : 1, "host" : "192.168.115.21:27017"},{ "_id" : 2, "host" : "192.168.115.22:27017"},{ "_id" : 3, "host" : "192.168.115.23:27017"}]}})
此时通过内部自动选举21被选举为主节点
4.通过修改优先级,手动指定主节点
hnrtest:PRIMARY> cfg=rs.conf() #起始命令
hnrtest:PRIMARY> cfg.members[1].priority=15
hnrtest:PRIMARY> rs.reconfig(cfg) #提交配置
可以看到,配置一提交角色状态立即改变,22成为主节点
四、数据库操作常用命令
1.查看副本集节点状态信息:hnrtest:PRIMARY> rs.status()
2.查看当前使用的库:hnrtest:PRIMARY> db
3.查看所有库:show dbs
4. 创建数据库:hnrtest:PRIMARY> use mydb 如果没有往库中添加数据默认没有该库至少需要插入一条数据
5. 插入数据:hnrtest:PRIMARY> db.test.insert({"a":"1"})
6. 查看数据:db.test.find()
7. 删除选定的数据库:db.dropDatabase()
8. 查看集合中所有数据条目:hnrtest:PRIMARY> db. test.count()
9.查看数据同步时间:hnrtest:PRIMARY> rs.printReplicationInfo()
10.副本节点上第一次执行命令时报错,需要打开写操作
hnrtest:SECONDARY> rs.slaveOk()
此时在执行查询命令,一切正常
11.添加删除一个节点
添加:在主节点上执行命令:hnrtest:PRIMARY> rs.add("192.168.115.#:27017")
删除:在主节点上执行命令:hnrtest:PRIMARY> rs.remove("192.168.115.#:27017")
五、利用延迟节点恢复数据
当在主节点上误删除数据时其他从节点实时同步主节点数据,从节点上的数据也被删除,而此时延迟节点由于延迟时间未到数据还未同步,可以恢复主节点上误删除的数据。
1.延迟节点的配置
1)将24加入副本集
hnrtest:PRIMARY> rs.add("192.168.115.24:27017")
2)修改24的优先级为0并设置延迟时长
hnrtest:PRIMARY> cfg=rs.conf
hnrtest:PRIMARY> cfg.members[3].priority=0
hnrtest:PRIMARY> cfg.members[3].slaveDelay=120
hnrtest:PRIMARY> rs.reconfig(cfg)
在主节点上插入一条数据,在延迟节点上查看同步时间,可见延迟120秒后同步数据
2.延迟节点恢复数据
1)模拟数据误删除
执行以上命令,主节点及副本节点上的数据全部被删除,而延迟节点数据还在
2)恢复方法:
1.先关闭从节点及主节点上服务(延迟节点除外)
2.删除从节点及主节点数据目录下的所有文件(延迟节点除外)
3.开启以上关闭的节点服务进程,会从延迟节点上同步数据
执行以上步骤后,所有节点数据恢复成原来的