mongdb 启动配置文件副本集为什么启动就挂

Linux下MongoDB副本集部署 | 系统运维
技术交流QQ群:& && && &
现在的位置:
Linux下MongoDB副本集部署
有三台服务器,已经安装好了MongoDB数据库,具体信息如下:
MongoDB版本:mongodb-linux-x86_64-2.6.11
MongoDB安装目录:/usr/local/mongodb
MongoDB数据库目录:/home/data/mongodb/mongodb_data
MongoDB日志目录:/home/data/mongodb/mongodb_log
MongoDB配置文件:/usr/local/mongodb/mongodb.conf
三台服务器IP地址:
<span style="color: #8.0.8
<span style="color: #8.0.9
<span style="color: #8.0.10
实现目的:
对三台服务器进行部署,实现副本集功能。
具体操作:
一、确定副本集名称、主从节点、配置文件、启动脚本信息
1、定义副本集名称为:osyunwei
2、主节点为:192.168.0.8
3、两台从节点为:
192.168.0.9
192.168.0.10
4、确保三台副本集服务器上的配置文件完全相同,如下:
第一种写法:官方推荐、适合2.6以后的版本
vi /usr/local/mongodb/mongodb.conf #编辑
systemLog:
destination: "file"
path: "/home/data/mongodb/mongodb_log/mongodb.log"
logAppend: true
enabled: true
dbPath: "/home/data/mongodb/mongodb_data/"
directoryPerDB: true
processManagement:
fork: true
pidFilePath: "/usr/local/mongodb/mongo.pid"
port: 27017
enabled: true
RESTInterfaceEnabled: true
#security:
keyFile: "/usr/local/mongodb/keyfile"
clusterAuthMode: "keyFile"
authorization: "enabled"
replication:
replSetName: "osyunwei"
:wq! #保存退出
第二种写法:适用所有版本
vi /usr/local/mongodb/mongodb.conf #编辑
port=27017
dbpath=/home/data/mongodb/mongodb_data/
logpath=/home/data/mongodb/mongodb_log/mongodb.log
pidfilepath=/usr/local/mongodb/mongo.pid
logappend=true
shardsvr=true
directoryperdb=true
#auth=true
#keyFile =/usr/local/mongodb/keyfile
replSet =osyunwei
:wq! #保存退出
注意:以上两种配置文件的写法都可以。
5、确保三台副本集服务器上的启动脚本完全相同,如下:
vi /etc/init.d/mongod
ulimit -SHn 655350
# chkconfig: - 64 36
# description:mongod
case $1 in
/usr/local/mongodb/bin/mongod --maxConns 20000 --config /usr/local/mongodb/mongodb.conf
/usr/local/mongodb/bin/mongo 127.0.0.1:27017/admin --eval "db.shutdownServer()"
#/usr/local/mongodb/bin/mongo 127.0.0.1:27017/admin --eval "db.auth('system', '123456');db.shutdownServer()"
/usr/local/mongodb/bin/mongo 127.0.0.1:27017/admin --eval "db.stats()"
#/usr/local/mongodb/bin/mongo 127.0.0.1:27017/admin --eval "db.auth('system', '123456');db.stats()"
:wq! #保存退出
二、对主节点进行配置
1、/usr/local/mongodb/bin/mongo #进入主节点192.168.0.8
温馨提醒:qihang01原创内容(C)版权所有,转载请注明出处及原文链接
rs.initiate()
#初始化副本集,设置本机为主节点PRIMARY
2、添加副本集从节点
rs.add("192.168.0.9:27017")
rs.add("192.168.0.10:27017")
3、设置节点优先级
cfg = rs.conf() #查看节点顺序
cfg.members[0].priority = 1
cfg.members[1].priority = 1
cfg.members[2].priority = 2 #设置_ID为2的节点为主节点
rs.reconfig(cfg) #使配置生效
exit #退出控制台
MongoDB副本集通过设置priority决定优先级,默认优先级为1,priority值是0到100之间的数字,数字越大优先级越高,priority=0,则此节点永远不能成为主节点primay。
cfg.members[0].priority =1参数,中括号里的数字是执行rs.conf()查看到的节点顺序,第一个节点是0,第二个节点是1,第三个节点是2,以此类推。
三、分别对两台从节点进行配置
/usr/local/mongodb/bin/mongo #进入从节点192.168.0.9/10
db.getMongo().setSlaveOk() #设置从节点为只读数据库
exit #退出控制台
四、设置数据库账号,开启登录验证
1、设置数据库账号
在主节点服务器192.168.0.8上面操作
/usr/local/mongodb/bin/mongo #进入主节点192.168.0.8
show dbs #列出所有数据库
use admin #切换到admin数据库,添加的账号才是管理员账号。
show collections
db.system.users.find()
#添加两个管理员账号,一个系统管理员:system 一个数据库管理员:administrator
db.createUser({user:"system",pwd:"123456",roles:[{role:"root",db:"admin"}]}) #添加系统管理员账号,用来管理用户
db.auth('system','123456') #添加管理员用户认证,认证之后才能管理所有数据库
db.createUser({user:"administrator",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]}) #添加数据库管理员,用来管理所有数据库
db.auth('administrator','123456') #添加管理员用户认证,认证之后才能管理所有数据库
exit #退出
#用刚才创建的账号进行登录
/usr/local/mongodb/bin/mongo -u system -p 123456 --authenticationDatabase admin
exit #退出
/usr/local/mongodb/bin/mongo -u administrator -p 123456 --authenticationDatabase admin
exit #退出
2、开启登录验证
在主节点服务器192.168.0.8上面操作
cd /usr/local/mongodb #进入mongodb安装目录
openssl rand -base64 21 & keyfile #创建一个keyfile(使用openssl生成21位base64加密的字符串)
chmod 600 /usr/local/mongodb/keyfile #修改文件权限为600
cat /usr/local/mongodb/keyfile #查看刚才生成的字符串,做记录,后面要用到。
注意:上面的数字21,最好是3的倍数,否则生成的字符串可能含有非法字符,认证失败。
3、设置配置文件
分别在所有节点上面操作
192.168.0.8/9/10
配置文件/usr/local/mongodb/mongodb.conf取消注释
第一种写法:
keyFile: "/usr/local/mongodb/keyfile"
clusterAuthMode: "keyFile"
authorization: "enabled"
第二种写法:
keyFile =/usr/local/mongodb/keyfile
启动脚本使用下面的代码(注释原来的,启用之前注释掉的)
/usr/local/mongodb/bin/mongo 127.0.0.1:27017/admin --eval "db.auth('system', '123456');db.shutdownServer()"
/usr/local/mongodb/bin/mongo 127.0.0.1:27017/admin --eval "db.auth('system', '123456');db.stats()"
4、设置权限验证文件
先进入主节点服务器192.168.0.8,查看cat /usr/local/mongodb/keyfile #查看刚才生成的字符串,做记录
再分别进入两台从节点服务器192.168.0.9/10
vi /usr/local/mongodb/keyfile #输入上一步查看到的字符串
:wq! #保存退出
chmod 600 /usr/local/mongodb/keyfile #修改文件权限为600
五、验证副本集
分别重启三台副本集服务器
/usr/local/mongodb/bin/mongo -u system -p 123456 --authenticationDatabase admin #登录到控制台
rs.status() #副本集状态查看
exit #退出
当主节点出现故障的时候,在两个从节点上会选举出一个新的主节点,故障恢复之后,之前的主节点会变为从节点。
至此,Linux下MongoDB副本集部署完成。
扩展阅读:
官方文档:
http://docs.mongodb.org/manual/reference/configuration-options/
rs.remove("ip:port"); #删除副本
/usr/local/mongodb/bin/mongo --host 192.168.0.9 #远程连接服务器
默认情况下,mongodb不启用验证的。
单服务器,启动时添加--auth参数开启验证。
副本集服务器,开启--auth参数的同时,必须指定keyfile参数,节点之间的通讯基于该keyfile,key长度必须在6到1024个字符之间,最好为3的倍数,不能含有非法字符。
重新设置副本集
rs.stepDown()
cfg = rs.conf()
cfg.members[n].host= 'new_host_name:prot'
rs.reconfig(cfg)
副本集所有节点服务器总数必须为奇数,服务器数量为偶数的时候,需要添加一个仲裁节点,仲裁节点不参与数副本集,只有选举权。
rs.addArb("192.168.0.11:27017") #添加仲裁节点
副本集选举最重要的一个特性是:
集合中的成员一定要有大部分成员(即超过一半数量)是保持正常在线状态,3个成员的副本集,需要至少2个从属节点是正常状态(如果一个从属节点挂掉,那么当主节点down掉产生故障切换时,由于副本集中只有一个节点是正常的,少于一半,则选举失败),4个成员的副本集,则需要3个成员是正常状态,(先关闭一个从属节点,然后再关闭主节点,产生故障切换,此时副本集中只有2个节点正常,则无法成功选举出新主节点)。
&&&&&>> 本文链接:>> 订阅本站:>> 转载请注明来源: >>
&&系统运维技术交流QQ群:①& ②& ③&
【上篇】【下篇】
您可能还会对这些文章感兴趣!
您必须才能发表留言!
本分类最新文章
日志总数:332篇
评论总数:1030条
分类总数:70个
标签总数:476个
友情链接:35个
网站运行:2031天
最后更新:日
欢迎PR值≥3的IT类技术博客与本站友情链接(申请前请先做好本站链接)
Copyright&
系统运维 All rights reserved
版权声明:本站所有文章均为作者原创内容,如需转载,请注明出处及原文链接mongodb主从,副本集,分片的理解 - 陈华的博客 - ITeye技术网站
博客分类:
MongoDb在用于生产环境的三种模式,master/slaves(主从模式);replcation副本集;auto shard 分片模式
在早期的系统设计中,主从模式是比较流行的,将读写分离,在不同的DB上操作,可以有效降低数据库的压力,而且还能实现数据的备份,但是在master节点故障的时候,不能及时的自动的切换到slaves节点,需要手动干预,这个是硬伤
目前在Mongodb的官方说法中已经不推荐使用master/slave/模式,推荐使用副本集模式,应为该模式不但实现了主从模式的读写分离,而且有自己的一套选举机制,能通过自己的算法,选举出当前最优的节点作为活跃节点,一旦活跃节点宕机,选举出来的新的节点将成为活跃节点对外提供服务,其他节点则继续作为复制节点,当原先的活跃节点恢复,会自动作为非活跃节点(备份节点)存在。
这种模式的最大优点在于Mongodb的自动选举活跃节点的机制,不需要手动干预便可以实现活跃与非活跃的切换,但是它由于数据没有shard,每个节点都是一个完成的备份,则不能使用MongoDb的分布式计算功能,当然,也可以通过程序自己来实现(成本很高),所以就有了Auto shard模式
利用Mongo的分片,可以将数据自动的分解成多个块,存储在不同的节点上,每个被差分的块都有三个副本集,这样是为了数据备份和恢复,而且数据分片以后,可以利用多台廉价的存储和CPU的计算构建一个水平可扩展的计算架构,这就是我们的分布式计算
目前在单台Mongodb上做MapReduce,速度还是比较慢的,但是如果数据分散在多台机器上,利用多太机器建立一个计算集群,计算速度估计会线性增长。
chenhua_1984
浏览: 707788 次
来自: 杭州
非常感谢!
what 能连数据库不错
java程序语言学习教程 地址http://www.zuida ...
整理的不错,
代码很久了,这个应该是包裹在外面的DIV的IDMongoDB总结(三):mongoDB的主从复制、副本集、分布式部署
MongoDB总结(三):mongoDB的主从复制、副本集、分布式部署
1. 主从复制
  主从复制是MongoDB最常用的复制方式。这种方式非常灵活,可用于备份、故障恢复、读扩展等。
  MongoDB的复制至少需要两个服务器或者节点。其中一个是主节点,负责处理客户端请求,其它的都是从节点,负责映射主节点的数据。主节点记录在其上执行的所有操作。从节点定期轮询主节点获得这些操作,然后对自己的数据副本执行这些操作。由于和主节点执行了相同的操作,从节点就能保持与主节点的数据同步。
   在D盘创建两个目录master和slave,master目录作为主节点的数据文件的目录,slave目录作为从节点的数据文件的目录。
注意:主节点和从节点要指定不同的端口。
启动主节点:mongod –dbpath d:\master –port 10000  –master
启动从节点:mongod –dbpath d:\slave –port 10001 –slave –source localhost:10000
  副本集就是有自动故障恢复功能的主从集群。
  主从集群和副本集最大的区别就是副本集没有固定的“主节点”;整个集群会选出一个“主节点”,当其挂掉后,又在剩下的从节点中选中其他节点为“主节点”,副本集总有一个活跃点(primary)和一个或多个备份节点(secondary)。
以三个节点为例:
节点1: HOST:localhost:10001
    Log File:D:\mongodb\logs\node1**logs.txt**(该文件会在创建日志时自动创建)
    Data File:D:\mongodb\dbs\node1
节点2: HOST:localhost:10002
    Log File:D:\mongodb\logs\node2\logs.txt Data
    File:D:\mongodb\dbs\node2
节点3: HOST:localhost:10003
    Log File:D:\mongodb\logs\node3\logs.txt
     Data File:D:\mongodb\dbs\node3
启动节点1:
mongod –dbpath D:\mongodb\dbs\node1 –logpath D:\mongodb\logs\node1\logs.txt –logappend –port 10001 –replSet
ywendeng(副本集的名称)/localhost:10002
(表示和localhost:10002是一组的)–master(表明该节点为活跃节点)
启动节点2:
mongod –dbpath D:\mongodb\dbs\node2
D:\mongodb\logs\node2\logs.txt –logappend –port 10002 –replSet
ywendeng/localhost:10001
启动节点3:
mongod –dbpath D:\mongodb\dbs\node3 –logpath D:\mongodb\logs\node3\logs.txt –logappend –port 10003 –replSet
ywendeng/localhost:10001,localhost:10002 
初始化节点(只能初始化一次):随便登录一个节点,以10001为例
mongo localhost:10001/admin
db.runCommand({ “replSetInitiate”:
“_id”:“ywendeng”,
“members”:[
“_id”:1,
“host”:”localhost:10001”,
“priority”:3
“_id”:2,
“host”:”localhost:10002”,
“priority”:2
“_id”:3,
“host”:”localhost:10003”,
“priority”:1
参数解释:
指定副本集
后面紧跟着副本集的名称
–logappend 日志文件末尾添加
–port 指定端口号
db.runCommand({})
初始化副本集
初始化文档:
“_id”:“ywendeng”,
指副本集的名称
“members”:[…]
副本集的服务器列表
每个列表有个
   “_id”: 每个服务器的唯一id,
    “host” 指定服务器的主机,
   “priority”设置优先级,默认优先级为1,可以是1-1000的数字  
对副本集中节点的属性查看操作:
关闭10001服务Dos命令窗口,
登录10002查询当前主库  mongo localhost:10002
 db.$cmd.findOne ( {ismaster: 1 } );
默认情况下从库是不能进行读写操作的
设置从库可读(在从库secondary上执行):
rs.slaveOk ( );
3. 分布式部署
在了解分布式部署之前,先了解一下MongoDB中分片的思想。
  MongoDB分片的基本思想就是将集合切分成小块。这些块分散到若干节点上,每个片只负责总数据的一部分。应用程序不必知道哪片对应哪些数据,甚至不需要知道数据已经被拆分了,所以在分片之前要运行一个路由进程,该进程名为mongos。这个路由器知道所有数据的存放位置,所以应用可以连接它来正常发送请求。对应用来说,它仅知道连接了一个普通的mongod。路由器知道数据和片的对应关系,能够转发请求到正确的片上。如果请求有了回应,路由器将其收集起来回送给应用。
  设置分片时,需要从集合里面选一个键,用该键的值作为数据拆分的依据。这个键称为片键(shard key)。{name:“shell”,age:1}
MongoDB中的分布式部署原理
  mongos就是一个路由服务器,它会根据管理员设置的“片键”将数据分摊到自己管理的mongod集群,数据和片的对应关系以及相应的配置信息保存在“config服务器”上。
  mongod:一个普通的数据库实例,如果不分片的话,我们会直接连上mongod。
MongoDB中的分布式部署步骤
1、创建三个目录,分别存放两个mongod服务的数据文件和config服务的数据文件
2、开启config服务器 。mongos要把mongod之间的配置放到config服务器里面,所以首先开启它,这里就使用2222端口。 命令为:
mongod –dbpath E:\sharding\config_node –port 2222
3、开启mongos服务器 。这里要注意的是我们开启的是mongos,端口3333,同时指定下config服务器。命令为:
mongos –port 3333 –configdb=127.0.0.1:2222
4、启动mongod服务器 。对分片来说,也就是要添加片了,这里开启两个mongod服务,端口分别为:。命令为:
mongod –dbpath E:\sharding\mongod_node1 –port 4444
mongod –dbpath E:\sharding\mongod_node2 –port 5555
5、服务配置 。client直接跟mongos打交道,也就说明我们要连接mongos服务器,然后将的mongod交给mongos,添加分片也就是addshard()。
 mongo localhost:3333/admin 连接到mongos 服务器
 db.runCommand({“addshared”:”localhost:4444”,allowLocal:true})
 db.runCommand({“addshared”:”localhost:5555”,allowLocal:true})
6、开启数据库分片功能,命令很简单 enablesharding(),这里就开启test数据库。
db.runCommand({“enablesharding”:”test”})
7、指定集合中分片的片键,这里就指定为person.name键。
db.runCommand({“shardcollection”:”test.shell”,”key”:{“name”:1}})
8、通过mongos插入10w记录,然后通过printShardingStatus命令查看mongodb的数据分片情况。
这里主要看三点信息:
① shards:
可以看到已经别分为两个片了,shard0000和shard0001。
② databases:: 这里有个partitioned字段表示是否分区,这里可以看到test已经分区。
③ chunks:
集合被砍成四段:
无穷小 —— jack0,
   jack0 ——jack234813,
   jack234813——jack9999,
   jack9999——无穷大。
我的热门文章
即使是一小步也想与你分享}

我要回帖

更多关于 mongdb 安装 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信