spring mongo 集群怎么配置mongo副本集

mongodb主从配置:副本集replica set - 推酷
mongodb主从配置:副本集replica set
mongodb的主从部署,常用方式为副本集(replica set)方式。
replica set为多个mongod实例,组成一组group,包括一个主primary,多个从secondary。
这种一主多从的方式的好处是,mongodb自运维,如果主服务器挂了,会通过心跳自动检测,选举出一个新的主来。不需要人工处理。
三台机器做例子,一主俩从。
主和从之间有心跳,来检测是否都处于激活状态。
每2s互相发一次心跳,如果10秒内没有返回状态,则把这个服务标记为丢弃,不可访问状态。
如果主挂了。则选举新的主出来。
然后又是新的主-从模式。
3. 数据同步
mongodb的数据写入都会落到primary主上。
primary生成操作的oplog。
从secondary接收主的primary的oplog。
然后调用异步进程写入从数据。
每次主从同步都更新optime。
选举新的主时通过optime来确定,optime最新的一个会选为新的主。
一个副本集可以有一个或多个从secondary。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致用户名:bjiaonline
文章数:30
访问量:4149
注册日期:
阅读量:1297
阅读量:3317
阅读量:581698
阅读量:466240
51CTO推荐博文
一、Mongdb3.0安装官网下载最新稳定版本的mongodb软体 解压软体[root@test-weidangkou&service]#&tar&zxvf&mongodb-linux-x86_64-rhel62-3.0.3.tgz&
mongodb-linux-x86_64-rhel62-3.0.3/README
mongodb-linux-x86_64-rhel62-3.0.3/THIRD-PARTY-NOTICES
mongodb-linux-x86_64-rhel62-3.0.3/GNU-AGPL-3.0
mongodb-linux-x86_64-rhel62-3.0.3/bin/mongodump
mongodb-linux-x86_64-rhel62-3.0.3/bin/mongorestore
mongodb-linux-x86_64-rhel62-3.0.3/bin/mongoexport
mongodb-linux-x86_64-rhel62-3.0.3/bin/mongoimport
mongodb-linux-x86_64-rhel62-3.0.3/bin/mongostat
mongodb-linux-x86_64-rhel62-3.0.3/bin/mongotop
mongodb-linux-x86_64-rhel62-3.0.3/bin/bsondump
mongodb-linux-x86_64-rhel62-3.0.3/bin/mongofiles
mongodb-linux-x86_64-rhel62-3.0.3/bin/mongooplog
mongodb-linux-x86_64-rhel62-3.0.3/bin/mongoperf
mongodb-linux-x86_64-rhel62-3.0.3/bin/mongod
mongodb-linux-x86_64-rhel62-3.0.3/bin/mongos
mongodb-linux-x86_64-rhel62-3.0.3/bin/mongo创建mongdb数据存放路径及日志存放路径[root@test-weidangkou&service]#&mkdir&-p&/date/{mongodbdata,mongodb_logs}建立mongod账号,授权数据目录[root@test-weidangkou&date]#&useradd&mongod
[root@test-weidangkou&date]#&chown&-R&mongod.mongod&/date/mongodbdata/创建mongod.conf配置文件,只需要以下几个选项即可[root@test-weidangkou&date]#cat&/etc/mongod.conf&
dbpath&=&/data/mongodata&&&&&&&&&&&&&&&&&&&&&&&&&&&#mongodb数据存放路径
logpath&=&/data/mongodb_logs/mongodb.log&&&&&&&&&&&#mongodb日志存放路径
httpinterface&=&true&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&#mongodb管理端口默认+
fork&=&true&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&#后台启动二、启动Mongodb初始化数据(1)第一种直接在命令行中指定路径和日志/usr/local/service/mongodb-linux-x86_64-rhel62-3.0.3/bin/mongod&--dbpath=/date/mongodbdate/&--logpath=/date/mongodb_logs/mongodb.log&--fork
about&to&fork&child&process,&waiting&until&server&is&ready&for&connections.
forked&process:&5238
child&process&started&successfully,&parent&exiting
端口已经起来了:
[root@test-weidangkou&mongodb_logs]#&lsof&-i&:27017
COMMAND&&PID&USER&&&FD&&&TYPE&DEVICE&SIZE/OFF&NODE&NAME
mongod&&5238&root&&&&6u&&IPv4&&41939&&&&&&0t0&&TCP&*:27017&(LISTEN)
初始化由于要同步数据,建立本地的一些数据文件。会启动比较慢。(2)第二种方式启动:通过加载配置文件启动(推荐)[root@test-weidangkou&mongodbdate]#&/usr/local/service/mongodb-linux-x86_64-rhel62-3.0.3/bin/mongod&-f&/etc/mongod.conf&
about&to&fork&child&process,&waiting&until&server&is&ready&for&connections.
forked&process:&5382
child&process&started&successfully,&parent&exiting进入终端查看数据库[root@test-weidangkou&mongodb_logs]#&/usr/local/service/mongodb-linux-x86_64-rhel62-3.0.3/bin/mongo
MongoDB&shell&version:&3.0.3
connecting&to:&test
Welcome&to&the&MongoDB&shell.
For&interactive&help,&type&"help".
For&more&comprehensive&documentation,&see
http://docs.mongodb.org/
Questions?&Try&the&support&group
/group/mongodb-user
Server&has&startup&warnings:&
T17:37:53.882+0800&I&CONTROL&&[initandlisten]&**&WARNING:&You&are&running&this&process&as&the&root&user,&which&is&not&recommended.
T17:37:53.882+0800&I&CONTROL&&[initandlisten]&
T17:37:53.905+0800&I&CONTROL&&[initandlisten]&
T17:37:53.905+0800&I&CONTROL&&[initandlisten]&**&WARNING:&/sys/kernel/mm/transparent_hugepage/enabled&is&'always'.
T17:37:53.905+0800&I&CONTROL&&[initandlisten]&**&&&&&&&&We&suggest&setting&it&to&'never'
T17:37:53.905+0800&I&CONTROL&&[initandlisten]&
T17:37:53.905+0800&I&CONTROL&&[initandlisten]&**&WARNING:&/sys/kernel/mm/transparent_hugepage/defrag&is&'always'.
T17:37:53.906+0800&I&CONTROL&&[initandlisten]&**&&&&&&&&We&suggest&setting&it&to&'never'
T17:37:53.906+0800&I&CONTROL&&[initandlisten]&
local&&0.078GB启动报错会出现以下:[root@test-weidangkou&mongodbdate]#&/usr/local/service/mongodb-linux-x86_64-rhel62-3.0.3/bin/mongod&-f&/etc/mongod.conf&
about&to&fork&child&process,&waiting&until&server&is&ready&for&connections.
forked&process:&5298检查原因:第一:由于之前没有正常的退出Mongodb服务,需要删除mongod.lock文件,再次启动恢复正常。第二:配置文件有问题,需要检查配置文件是否有特殊字符,导致无法解析三、mongodb副本集配置配置mongodb的副本集务必要做好以下几点:1、各个节点能够正常访问mongodb的socket端口,iptables要放行2、SELINUX必须要关闭掉,以免禁止端口复制3、各个服务器节点要做好解析/etc/hosts4、由于副本集是通过Heartbeat心跳线连接到,务必同步好各个节点的时间小注:本人由于之前没有注意到这些,被坑了好久。哈哈!!!mongodb复制过程及概念(1)主节点将数据修改操作保存至oplog,oplog:大小固定的文件,存储在local数据库(2)初始同步(inital sync)& &节点没有任何数据& &节点丢失副本复制历史& &:克隆所有的数据库& &:应用数据集的所有改变:复制oplog并应用于本地& &:为所有collection的构建索引(3)回滚后追赶(post-rollback catch-up)&(4)切分块迁移(shareding chunk migrations)local:存放了副本集的所有元素和用于存储oplog的是一个名为oplog.rs的oplog.rs的大小依赖于OS及文件系统;但可以自定义其大小oplogsize1、环境配置192.168.254.7& & samba192.168.254.229 &git192.168.254.9 & &weidangkou3t台机器的配置文件修改vim /etc/mongodb.conf,增加两个选项replIndexPrefetch&=&_id_only&&&&&&&&&&&&&#索引的ID号复制
replSet&=&9tong1&&&&&&&&&&&&&&&&&&&&&&&&&#副本集设置成9tong1为了测试证明复制的数据,可以先在主节点上导入点数据,测试环境的数据如下:[root@samba&mongodata]#&ls
9tong.0&&9tong.1&&9tong.2&&9tongAPI.0&&9tongAPI.1&&9tongAPI.ns&&9tong.ns&&base.0&&base.1&&base.ns&&journal&&local.0&&local.ns&&mongod.lock&&storage.bson2、初始化&&show&
T11:38:18.324+0800&E&QUERY&&&&Error:&listDatabases&failed:{&"note"&:&"from&execCommand",&"ok"&:&0,&"errmsg"&:&"not&master"&}
&&&&at&Error&(&anonymous&)
&&&&at&Mongo.getDBs&(src/mongo/shell/mongo.js:47:15)
&&&&at&shellHelper.show&(src/mongo/shell/utils.js:630:33)
&&&&at&shellHelper&(src/mongo/shell/utils.js:524:36)
&&&&at&(shellhelp2):1:1&at&src/mongo/shell/mongo.js:47
配置好副本集选项启动后,不能直接查看dbs的情况,因为目前还没有初始化不是primary
&&rs.initiate()
"info2"&:&"no&configuration&explicitly&specified&--&making&one",
"me"&:&"samba:27017",
9tong1:OTHER&&
9tong1:PRIMARY&&
初始化后会直接变成9tong1:PRIMARY的标识,可以查看数据库的容量信息
9tong1:PRIMARY&&show&
9tong&&&&&0.453GB
9tongAPI&&0.203GB
base&&&&&&0.203GB
local&&&&&2.077GB&3、添加副本节点9tong1:PRIMARY&&rs.add
rs.add(&&&&&rs.addArb(
9tong1:PRIMARY&&rs.add("192.168.254.9")&&&&&&&&&&#默认端口不需要加端口号码
9tong1:PRIMARY&&rs.add("192.168.254.9")
{&"ok"&:&1&}
9tong1:PRIMARY&&rs.status()
"set"&:&"9tong1",
"date"&:&ISODate("T04:04:51.535Z"),
"myState"&:&1,
"members"&:&[
"_id"&:&0,
"name"&:&"samba:27017",
"health"&:&1,
"state"&:&1,
"stateStr"&:&"PRIMARY",
"uptime"&:&1645,
"optime"&:&Timestamp(,&1),
"optimeDate"&:&ISODate("T04:04:45Z"),
"electionTime"&:&Timestamp(,&2),
"electionDate"&:&ISODate("T03:40:18Z"),
"configVersion"&:&2,
"self"&:&true
"_id"&:&1,
"name"&:&"192.168.254.9:27017",
"health"&:&1,
"state"&:&5,
"stateStr"&:&"STARTUP2",
"uptime"&:&6,
"optime"&:&Timestamp(0,&0),
"optimeDate"&:&ISODate("T00:00:00Z"),
"lastHeartbeat"&:&ISODate("T04:04:51.261Z"),
"lastHeartbeatRecv"&:&ISODate("T04:04:51.300Z"),
"pingMs"&:&2,
"syncingTo"&:&"samba:27017",
"configVersion"&:&2
StateStr:STARTUPU2是复制数据追赶主节点的状态模式。
数据同步好后会变成SECONDARY
"_id"&:&1,
"name"&:&"192.168.254.9:27017",
"health"&:&1,
"state"&:&2,
"stateStr"&:&"SECONDARY",
"uptime"&:&63,
"optime"&:&Timestamp(,&1),
"optimeDate"&:&ISODate("T04:04:45Z"),
"lastHeartbeat"&:&ISODate("T04:05:47.313Z"),
"lastHeartbeatRecv"&:&ISODate("T04:05:47.344Z"),
"pingMs"&:&1,
"configVersion"&:&2
也可以通过rs.conf()查看各个节点状态
9tong1:PRIMARY&&rs.conf()
"_id"&:&"9tong1",
"version"&:&2,
"members"&:&[
"_id"&:&0,
"host"&:&"samba:27017",
"arbiterOnly"&:&false,
"buildIndexes"&:&true,
"hidden"&:&false,
"priority"&:&1,
"tags"&:&{
"slaveDelay"&:&0,
"votes"&:&1
"_id"&:&1,
"host"&:&"192.168.254.9:27017",
"arbiterOnly"&:&false,
"buildIndexes"&:&true,
"hidden"&:&false,
"priority"&:&1,
"tags"&:&{
"slaveDelay"&:&0,
"votes"&:&1
"settings"&:&{
"chainingAllowed"&:&true,
"heartbeatTimeoutSecs"&:&10,
"getLastErrorModes"&:&{
"getLastErrorDefaults"&:&{
"wtimeout"&:&0
9tong1:PRIMARY&&use&9
switched&to&db&9tong
9tong1:PRIMARY&&db.user_contacts.find().count();
从节点上查看
9tong1:SECONDARY&&show&
9tong&&&&&0.203GB
9tongAPI&&0.078GB
base&&&&&&0.078GB
local&&&&&6.075GB
test&&&&&&0.078GB
9tong1:SECONDARY&&use&9
switched&to&db&9tong
9tong1:SECONDARY&&db.user_contacts.find().count();
以上证明数据已经同步过来,状态变成SECONDARY
查看OPOLOG状态
9tong1:PRIMARY&&db.printReplicationInfo()
configured&oplog&size:&&&5MB
log&length&start&to&end:&3053secs&(0.85hrs)
oplog&first&event&time:&&Wed&Jul&01&:18&GMT+0800&(CST)&&&#第一次更新时间
oplog&last&event&time:&&&Wed&Jul&01&:11&GMT+0800&(CST)&&&#最后一次更新时间
now:&&&&&&&&&&&&&&&&&&&&&Wed&Jul&01&:25&GMT+0800&(CST)&&&#现在时间
9tong1:SECONDARY&&db.printReplicationInfo()
configured&oplog&size:&&&32422MB
log&length&start&to&end:&1586secs&(0.44hrs)
oplog&first&event&time:&&Wed&Jul&01&:45&GMT+0800&(CST)&&
oplog&last&event&time:&&&Wed&Jul&01&:11&GMT+0800&(CST)&&#与主节点最近一次时间一&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&样说明数据同步完成了。
now:&&&&&&&&&&&&&&&&&&&&&Wed&Jul&01&:01&GMT+0800&(CST)& 4、连接到从节点192.168.254.9查看状态&&&[root@weidangkou&data]#&/usr/local/service/mongodb-linux-x86_64-rhel62-3.0.3/bin/mongo
MongoDB&shell&version:&3.0.3
connecting&to:&test
Server&has&startup&warnings:&
T12:00:01.448+0800&I&CONTROL&&[initandlisten]&**&WARNING:&You&are&running&this&process&as&the&root&user,&which&is&not&recommended.
T12:00:01.448+0800&I&CONTROL&&[initandlisten]&
T12:00:01.449+0800&I&CONTROL&&[initandlisten]&
T12:00:01.449+0800&I&CONTROL&&[initandlisten]&**&WARNING:&/sys/kernel/mm/transparent_hugepage/enabled&is&'always'.
T12:00:01.449+0800&I&CONTROL&&[initandlisten]&**&&&&&&&&We&suggest&setting&it&to&'never'
T12:00:01.449+0800&I&CONTROL&&[initandlisten]&
T12:00:01.449+0800&I&CONTROL&&[initandlisten]&**&WARNING:&/sys/kernel/mm/transparent_hugepage/defrag&is&'always'.
T12:00:01.449+0800&I&CONTROL&&[initandlisten]&**&&&&&&&&We&suggest&setting&it&to&'never'
T12:00:01.449+0800&I&CONTROL&&[initandlisten]&
9tong1:SECONDARY&&
已经变成副本集的SECONDARY状态。
查看数据库容量信息,会出现以下错误。
9tong1:SECONDARY&&show&
T12:14:14.768+0800&E&QUERY&&&&Error:&listDatabases&failed:{&"note"&:&"from&execCommand",&"ok"&:&0,&"errmsg"&:&"not&master"&}
&&&&at&Error&(&anonymous&)
&&&&at&Mongo.getDBs&(src/mongo/shell/mongo.js:47:15)
&&&&at&shellHelper.show&(src/mongo/shell/utils.js:630:33)
&&&&at&shellHelper&(src/mongo/shell/utils.js:524:36)
&&&&at&(shellhelp2):1:1&at&src/mongo/shell/mongo.js:47
因为此时该节点不属于主节点,也没有默认为从节点。需要运行如下这个命令:
9tong1:SECONDARY&&rs.slaveOk()
9tong1:SECONDARY&&show&
9tong&&&&&0.203GB
9tongAPI&&0.078GB
base&&&&&&0.078GB
local&&&&&6.075GB
也可以通过rs.isMaster()查看是否自己属于主节点
9tong1:SECONDARY&&rs.isMaster()
"setName"&:&"9tong1",
"setVersion"&:&2,
"ismaster"&:&false,
"secondary"&:&true,
"hosts"&:&[
"samba:27017",
"192.168.254.9:27017"
"primary"&:&"samba:27017",
"me"&:&"192.168.254.9:27017",
"maxBsonObjectSize"&:&,
"maxMessageSizeBytes"&:&,
"maxWriteBatchSize"&:&1000,
"localTime"&:&ISODate("T04:23:34.493Z"),
"maxWireVersion"&:&3,
"minWireVersion"&:&0,
}5、添加192.168.254.229成为仲裁节点。仲裁节点只有投票选举权,没有数据复制功能。9tong1:PRIMARY&&rs.addArb("192.168.254.229")
{&"ok"&:&1&}
9tong1:PRIMARY&&rs.status()
"set"&:&"9tong1",
"date"&:&ISODate("T04:27:36.132Z"),
"myState"&:&1,
"members"&:&[
"_id"&:&0,
"name"&:&"samba:27017",
"health"&:&1,
"state"&:&1,
"stateStr"&:&"PRIMARY",
"uptime"&:&3010,
"optime"&:&Timestamp(,&1),
"optimeDate"&:&ISODate("T04:26:53Z"),
"electionTime"&:&Timestamp(,&2),
"electionDate"&:&ISODate("T03:40:18Z"),
"configVersion"&:&3,
"self"&:&true
"_id"&:&1,
"name"&:&"192.168.254.9:27017",
"health"&:&1,
"state"&:&2,
"stateStr"&:&"SECONDARY",
"uptime"&:&1370,
"optime"&:&Timestamp(,&1),
"optimeDate"&:&ISODate("T04:26:53Z"),
"lastHeartbeat"&:&ISODate("T04:27:35.993Z"),
"lastHeartbeatRecv"&:&ISODate("T04:27:34.470Z"),
"pingMs"&:&0,
"syncingTo"&:&"samba:27017",
"configVersion"&:&3
"_id"&:&2,
"name"&:&"192.168.254.229:27017",
"health"&:&1,
"state"&:&7,
"stateStr"&:&"ARBITER",
"uptime"&:&42,
"lastHeartbeat"&:&ISODate("T04:27:35.987Z"),
"lastHeartbeatRecv"&:&ISODate("T04:27:35.986Z"),
"pingMs"&:&0,
"configVersion"&:&3
}6、测试主节点写数据,查看从节点是否有主节点:
9tong1:PRIMARY&&db.classes.insert({class:&"ONE",nostu&:40})
WriteResult({&"nInserted"&:&1&})
9tong1:PRIMARY&&show&
system.indexes
从节点查看:
9tong1:SECONDARY&&db.classes.findOne()
"_id"&:&ObjectId("c674b1e83360d6"),
"class"&:&"ONE",
"nostu"&:&40
注意,从节点没有写权限,插入数据后会报错
9tong1:SECONDARY&&db.classes.insert({class:&"TOW",nostu&:50})
WriteResult({&"writeError"&:&{&"code"&:&undefined,&"errmsg"&:&"not&master"&}&})7、主从切换测试要点:副本集的重新选举的影响条件:心跳信息,heartbeat会每隔几秒检查连接状态信息优先级,默认都是1,值越高优先级越高。值为0的节点是不能成为主节点的,也不能触发选举。optime:主节点必须optime更新的时间要快于从节点是最新的,如果这个值小于线上的其他机器, & & & & 是不肯能成为主节点的。网络连接票数超过法定票数一半网络分区:票数选举选举机制:& 触发选举的事件新副本集初始化时从节点联系不到主节点时主节点“下台”时收到setpDown()命令时某从节点有更高的优先级且已经满足其他所有条件主节点无法联系到副本集的“多数方”&(1)关闭192.168.254.7-SAMBA,主节点的MongoDB服务rs.status()
"set"&:&"9tong1",
"date"&:&ISODate("T05:36:43.453Z"),
"myState"&:&1,
"members"&:&[
"_id"&:&0,
"name"&:&"samba:27017",
"health"&:&0,
"state"&:&8,
"stateStr"&:&"(not&reachable/healthy)",
"uptime"&:&0,
"optime"&:&Timestamp(0,&0),
"optimeDate"&:&ISODate("T00:00:00Z"),
"lastHeartbeat"&:&ISODate("T05:36:42.029Z"),
"lastHeartbeatRecv"&:&ISODate("T05:36:14.991Z"),
"pingMs"&:&0,
"lastHeartbeatMessage"&:&"Failed&attempt&to&connect&to&samba:27017;&couldn't&connect&to&server&samba:28.254.7),&connection&attempt&failed",
"configVersion"&:&-1
"_id"&:&1,
"name"&:&"192.168.254.9:27017",
"health"&:&1,
"state"&:&1,
"stateStr"&:&"PRIMARY",
"uptime"&:&5916,
"optime"&:&Timestamp(,&2),
"optimeDate"&:&ISODate("T04:31:11Z"),
"electionTime"&:&Timestamp(,&1),
"electionDate"&:&ISODate("T05:36:17Z"),
"configVersion"&:&3,
"self"&:&true
"_id"&:&2,
"name"&:&"192.168.254.229:27017",
"health"&:&1,
"state"&:&7,
"stateStr"&:&"ARBITER",
"uptime"&:&4188,
"lastHeartbeat"&:&ISODate("T05:36:43.328Z"),
"lastHeartbeatRecv"&:&ISODate("T05:36:42.799Z"),
"pingMs"&:&0,
"configVersion"&:&3
}停止后,10秒左右的时间,明显的看到原来是主节点的SAMBA,监控状态变为0,1表示正常,原先192.168.254.9从SECONDARY变成了PRIMARY。(2)更改192.168.254.9的优先级。使它变为高优先级成为主节点9tong1:PRIMARY&&cfg=rs.conf()&&&&&&&&&#保存当前状态
"_id"&:&"9tong1",
"version"&:&3,
"members"&:&[
"_id"&:&0,
"host"&:&"samba:27017",
"arbiterOnly"&:&false,
"buildIndexes"&:&true,
"hidden"&:&false,
"priority"&:&1,
"tags"&:&{
"slaveDelay"&:&0,
"votes"&:&1
"_id"&:&1,
"host"&:&"192.168.254.9:27017",
"arbiterOnly"&:&false,
"buildIndexes"&:&true,
"hidden"&:&false,
"priority"&:&1,
"tags"&:&{
"slaveDelay"&:&0,
"votes"&:&1
"_id"&:&2,
"host"&:&"192.168.254.229:27017",
"arbiterOnly"&:&true,
"buildIndexes"&:&true,
"hidden"&:&false,
"priority"&:&1,
"tags"&:&{
"slaveDelay"&:&0,
"votes"&:&1
"settings"&:&{
"chainingAllowed"&:&true,
"heartbeatTimeoutSecs"&:&10,
"getLastErrorModes"&:&{
"getLastErrorDefaults"&:&{
"wtimeout"&:&0
9tong1:PRIMARY&&cfg.members[1].priority=2&&&&&#更改ID号为1的优先级。
9tong1:PRIMARY&&rs.reconfig(cfg)&&&&&&&&&&&&&&#使配置生效
{&"ok"&:&1&}
9tong1:PRIMARY&&
9tong1:PRIMARY&&
T14:01:15.000+0800&I&NETWORK&&DBClientCursor::init&call()&failed
T14:01:15.002+0800&I&NETWORK&&trying&reconnect&to&127.0.0.1:2.0.1)&failed
T14:01:15.002+0800&I&NETWORK&&reconnect&127.0.0.1:2.0.1)&ok
9tong1:SECONDARY&&
9tong1:SECONDARY&&
可以看到原来主节点SAMBA,自动降级为SECONDARY,从节点自动升级到PRIMARY
[root@weidangkou&data]#&/usr/local/service/mongodb-linux-x86_64-rhel62-3.0.3/bin/mongo
MongoDB&shell&version:&3.0.3
connecting&to:&test
Server&has&startup&warnings:&
T12:00:01.448+0800&I&CONTROL&&[initandlisten]&**&WARNING:&You&are&running&this&process&as&the&root&user,&which&is&not&recommended.
T12:00:01.448+0800&I&CONTROL&&[initandlisten]&
T12:00:01.449+0800&I&CONTROL&&[initandlisten]&
T12:00:01.449+0800&I&CONTROL&&[initandlisten]&**&WARNING:&/sys/kernel/mm/transparent_hugepage/enabled&is&'always'.
T12:00:01.449+0800&I&CONTROL&&[initandlisten]&**&&&&&&&&We&suggest&setting&it&to&'never'
T12:00:01.449+0800&I&CONTROL&&[initandlisten]&
T12:00:01.449+0800&I&CONTROL&&[initandlisten]&**&WARNING:&/sys/kernel/mm/transparent_hugepage/defrag&is&'always'.
T12:00:01.449+0800&I&CONTROL&&[initandlisten]&**&&&&&&&&We&suggest&setting&it&to&'never'
T12:00:01.449+0800&I&CONTROL&&[initandlisten]&
9tong1:PRIMARY&本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)Mongodb3.0.5 副本集搭建及spring和java连接副本集配置详细介绍
作者:生_若蜉蝣
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了Mongodb3.0.5 副本集搭建及spring和java连接副本集配置详细介绍的相关资料,这里对安装步骤进行了详解,需要的朋友可以参考下
Mongodb3.0.5 副本集搭建及spring和java连接副本集配置详细介绍
一、基本环境:
mongdb3.0.5数据库
spring-data-MongoDB-1.7.2.jar
mongo-Java-driver-3.0.2.jar
Linux-redhat6.3
二、搭建mongodb副本集:
1、& 分别在三台linux系统机上安装mongodb,(为避免和机器上原有的mongodb端口冲突,这里设为57017):
192.168.0.160
192.168.0.211(192.168.0.33上的虚拟机)
192.168.0.213(192.168.0.4上的虚拟机)
每个mongodb的安装这里就不细说了,可以参考我的安装方面的文档,注意先不要更改用户验证方式。另外,这里如果没有三台机,也可以只用一台机开三个端口,同时准备三个数据存储目录。
2、& 以副本集的方式启动三个mongodb:
只是在单机mongodb启动的基础上加入副本集参数—replSet,例如启动160的:
/home/admin/mongodb3051/mongodb305/bin/mongod –f /home/admin/mongo3051/conf/mongodb.conf --replSet reptest
&其中,reptest是指定的副本集名称,另外两台机也也要和这个一样。如:
/mongodb3051/mongodb305/bin/mongod –f /mongodb3051/conf/mongodb.conf --replSet repTest
3、& 在任意一台机上配置副本集,这里在160上配置:
(1)、进入160上的mongo sehll(数据操作界面):
/home/admin/mongodb3051/mongodb305/bin/mongo –port 57017
(2)、切换到admin数据库:
(3)、配置副本集:
config={_id:”reptest”,members:[{_id:0,host:”192.168.0.160:57017”},{_id:1,host:”192.168.0.211:57017”},{_id:,host:”192.168.0.213:57017”}]}
(4)、加载副本集配置文件:
rs.initiate(config)
(5)、查看副本集状态:
rs.status()
&& 正常情况下可以看到160会是主服务器,显示PRIMARY,如果是,就直接进行以下操作,如果不是,就切换到PRIMARY上进行以下操作(换到另一个mongo);
(6)、增加用户:
db.createUser({“user”:”admin”,”pwd”:”admin”,”roles”:[“root”]})
(7)、更改用户验证方式:&
varschema=db.system.version.findOne({“_id”:”authSchema”})
schema.currentVersion=3
db.system.version.save(schema)
(8)、删除用户:
db.dropUser(“admin”)
(9)、重新建立用户(系统中和上边建立的用户验证方式不一样):
db.createUser({“user”:”admin”,”pwd”:”admin”,”roles”:[“root”]})
(10)、关闭三个mongodb:
db.shutDownServer()或者kill命令
(11)、在160的数据库的data目录中建立keyFile文件:&&&&
cd /home/admin/mongodb3051/data
openssl rand –base64 753 & keyFile
(12)、给keyFile文件设置600权限(必须设置600权限):
chmod 600 keyFile
(13)、把这个keyFile文件上传到另外两台机上mongodb的data目录中:&&&&
scp –r keyFile root@192.168.0.211/mongodb3051/data
scp –r keyFile root@192.168.0.213/mongodb3051/data
(14)、在mongodb.conf文件中加入keyFile,例如160:
keyFile=/home/admin/mongodb3051/data/keyFile
(15)、重新启动mongodb,使用replSet和auth参数:
/home/admin/mongodb3051/mongodb305/bin/mongod –f /home/admin/mongo3051/conf/mongodb.conf --replSet reptest --auth
(16)、在priority中设置副本集成员的优先级,给160设置最高优先级,优先级默认都是1:&&
config=rs.conf()
config.members[0].priority=2
rs.reconfig(config)
这样的话,只要160的mongodb是开着的,那么主服务器就会是160&
三、Spring中连接副本集的配置:
&?xml version="1.0"encoding="UTF-8"?&
&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo.xsd"&
&!-- Factory bean that creates the Mongoinstance --&
&mongo:mongo-client replica-set="192.168.0.160:57017" credentials="admin:admin@admin" id="mongo"&
&mongo:client-options write-concern="SAFE" connections-per-host="100"
threads-allowed-to-block-for-connection-multiplier="50"
&/mongo:mongo-client&
&mongo:db-factory id="mongoDbFactory"dbname="admin" mongo-ref="mongo"/&
&bean id="mongoTemplate"class="org.springframework.data.mongodb.core.MongoTemplate"&
&constructor-arg name="mongoDbFactory" ref="mongoDbFactory" /&
只需要配置一个ip,就会自动切换。用户验证格式:username:password@dbname。&
四、java中连接副本集的代码:
public DB getMongoDB() {
ServerAddress sa = new ServerAddress("192.168.0.160", 57017);
ServerAddress sa1 = new ServerAddress("192.168.0.211", 57017);
ServerAddress sa2 = new ServerAddress("192.168.0.213", 57017);
List&ServerAddress& sends = new ArrayList&ServerAddress&();
sends.add(sa);
sends.add(sa1);
sends.add(sa2);
List&MongoCredential& mongoCredentialList = new ArrayList&MongoCredential&();
mongoCredentialList.add(MongoCredential.createMongoCRCredential("admin", "admin","admin".toCharArray()));
DB mongoDB = new MongoClient(sends,mongoCredentialList).getDB("admin");
} catch (Exception e) {
throw new RuntimeException("连接MongoDB数据库错误", e);
return mongoDB;
用户验证格式是:username,dbname,password
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具}

我要回帖

更多关于 mongo spring 配置 的文章

更多推荐

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

点击添加站长微信