Mongodb集群----Master/Slave


Mongodb是时下流行的NoSql数据库,它的存储方式是文档式存储,并不是Key-Value形式。


Mongodb的三种集群方式的搭建:Replica Set / Sharding / Master-Slaver。这里只说明最简单的集群搭建方式(生产环境),如果有多个节点可以此类推或者查看官方文档。OS是CentOs7_x64系统,客户端用的是Java客户端。Mongodb版本是mongodb-linux-x86_64-3.2.9.tgz



简介:


使用mysql数据库时大家广泛用到,采用双机备份后主节点挂掉了后从节点可以接替 主机继续服务。所以这种模式比单节点的高可用性要好很多。


一、单个从节点




二、多个从节点


现在只是一个数据库服务器又提供写又提供读,机器承载会出现瓶颈。大家还记mysql里的读写分离吗?把20%的写放到主节点,80%的读放到从节点分摊了减少了服务器的负载。但是大部分应用都是读操作带来的压力,一个从节点压力负载不了,可以把一 个从节点变成多个节点。 





主从环境搭建 


1. 准备两台机器 ( 192.168.1.131 和192.168.1.133)


192.168.1.131 当作主节点,192.168.1.133作为从节点。



2.安装mongodb


前面已经详细介绍过mongodb的安装,这里就不再赘述,如有需要,详见《mongo学习笔记一:MongoDB 入门(安装与配置)》


注意:后面所有集群搭建均是通过配置文件进行的,故请使用“方式二:通过配置文件方式启动”来启动mongodb


3.修改mongodb配置文件


192.168.1.131(主)上的mongodb.conf配置如下:


注: mongodb.conf在/usr/local/mongodb目录下


dbpath=/usr/local/mongodb/data/


logpath=/usr/local/mongodb/logs


pidfilepath=/usr/local/mongodb/master.pid


directoryperdb=true


logappend=true


bind_ip=192.168.1.131


port=27017


oplogSize=10000


fork=true


noprealloc=true


master=true



192.168.1.133(从)上的mongodb.conf配置如下:


dbpath=/usr/local/mongodb/data/


logpath=/usr/local/mongodb/logs


pidfilepath=/usr/local/mongodb/slaver.pid


directoryperdb=true


logappend=true


bind_ip=192.168.1.133


port=27017


oplogSize=10000


fork=true


noprealloc=true


slave=true


source=192.168.1.131:27017



4.启动mongo


分别在131和133上执行以下命令,启动mongo


cd /usr/local/mongodb


bin/mongod --config mongodb.conf



至此mongodb的主从集群搭建完成,下面进行主从集群的测试


在主节点131上连接到终端:


/usr/local/mongodb/bin/mongo 192.168.1.131:27017


#建立database 数据库。use database;


#创建collections


db.createCollection("test")


db.test.insert({"test1":"testval1"})


#查询testdb数据看看是否成功。


db.test.find();



5.测试主从集群


检查从主机133的数据。


/usr/local/mongodb/bin/mongo 192.168.1.133:27017


show dbs;


use database;


show collections;


db.test.find();


可以看到主库上创建的database,collection以及插入的数据都同步到了从库,至此主从集群搭建完毕


注:



若执行是报错,请在从机上执行


rs.slaveOk()


说明:


在写多读少的应用中,使用Replica Sets来实现读写分离。通过在连接时指定或者在主库指定slaveOk,由Secondary来分担读的压力,Primary只承担写操作。


对于replica set 中的secondary 节点默认是不可读的。



6.内核参数调整 


启动后有如下警告,需要调整内核参数





调整方法如下:


echo "never" > /sys/kernel/mm/transparent_hugepage/enabledecho "never" > /sys/kernel/mm/transparent_hugepage/defrag


设置完后重启mongodb即可(netstat -lntp查找,kill杀掉mongodb,再启动mongodb)


7、主从复制缺陷思考


  • 主节点挂了能否自动切换连接?

目前需要手工切换。


  • 主节点的写压力过大如何解决?
  • 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大?
  • 就算对从节点路由实施路由访问策略能否做到自动扩展?