为应对互联网业务的快速增加,用户访问在某段时间的快速增加,系统的高可用,可扩展,容错性被放在了越来越重要的位置。随着技术的发展,业界给出了很多解决方案,
下面为大家介绍下MongoDB的主从复制,副本集在windows 操作系统的部署。
顾名思义,数据库主从库,一定为主库和从库。随着持久层压力增加,读写分离的技术已经得到广泛应用。mongoDB 的master-slave设计方式即遵从了上述实现方式。主库负责写入数据,从库负责读取数据;主库在写入数据后,自动把增量数据同步到可用从库节点。以下是代码实现细节:
1111.conf(完成主服务器的配置):
dbpath = E:\mongodb\database\MS\a #数据库数据文件地址
port = 1111 #数据库监听端口
bind_ip = 127.0.0.1 #服务器地址
master = true #设置当前数据库为主库
mongo1111StartServer.bat(加载1111.conf,初始化数据库服务器配置):
mongd -config 1111.conf
mongo1111.bat(启动1111服务器客户端):
mongo 127.0.0.1:1111
2222.conf(完成主服务器的配置):
dbpath = E:\mongodb\database\MS\b #数据库数据文件地址
port = 2222 #数据库监听端口
bind_ip = 127.0.0.1 #服务器地址
slave = true #设置当前数据库为从库
source = 127.0.0.1:1111#设置从库的主库地址,用于同步数据
mongo2222StartServer.bat(加载2222.conf,初始化数据库服务器配置):
mongd -config 2222.conf
mongo2222.bat(启动1111服务器客户端):
mongo 127.0.0.1:2222
3333.conf(完成主服务器的配置):
dbpath = E:\mongodb\database\MS\c #数据库数据文件地址
port = 3333 #数据库监听端口
bind_ip = 127.0.0.1 #服务器地址
slave = true #设置当前数据库为从库
source = 127.0.0.1:1111#设置从库的主库地址,用于同步数据
mongo3333StartServer.bat(加载3333.conf,初始化数据库服务器配置):
mongd -config 3333.conf
mongo3333.bat(启动3333服务器客户端):
mongo 127.0.0.13333一般情况下,MongoDB的主从复制已基本完成分布式应用的需求。然而,随着业务的增加,用户访问的瞬时增加,服务器硬件寿命,故障因素理论存在。因此,一旦主服务器出现故障,无法完成业务请求处理,从库无法同步数据,用户则无法正常访问,因此系统的扩展性,容错性,高可用显得尤为重要。故,MongoDB的副本集技术应用而生。副本集,顾名思义,就是一个个副本的集合,因此不存在特定主服务器,如果已经设置为master的写主库出现故障,系统根据特定算法从数据同步完好,性能较好的读库中推举出另外一个master主写库,继续处理用户的请求,更好保证系统的高可用,高扩展,高容错。
以下给出部署步骤:
mongod --replSet mayadong --dbpath E:\mongodb\database\a --port 9927 --oplogSize 512
mongod --replSet mayadong --dbpath E:\mongodb\database\a --port 9927 --oplogSize 512
mongod --replSet mayadong --dbpath E:\mongodb\database\a --port 9927 --oplogSize 512
mongod --replSet mayadong --dbpath E:\mongodb\database\a --port 9927 --oplogSize 512
亦可以把启动服务端和客户端命令编写成bat文件(批处理文件),每次点击执行
这里选择9927。
config = {
_id:"mayadong",
members:
[
{_id:0,host:"localhost:9927"},
{_id:1,host:“localhost:9928"},
{_id:2,host:"localhost:9929"},
{_id:3,host:"localhost:9930",arbiterOnly:true}
]
}
如若新增服务器,可用config.members.push({_id:3,host:"localhost:9930"}),因其数据结构为栈,支持push,pop操作,所以也用config.members.push(members元素下标)删除服务器节点。
在正常情况下,服务器数量足够,运行良好,用户访问适当,主从服务器完全可以通过主从库的读写分离,应对系统压力,保证性能,配置相对简单。但是新业务的增加,服务器的故障,外部系统接入,必然对系统的扩展性,可用性,容错性提出了更高的要求,因此副本集出现解决了MongoDB在这方面的短板,虽然配置相对复杂,但时保证了系统扩展性,可用性,容错性。