1.去官网下载安装包
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.4.3.tgz
2.解压安装包
tar -zxvf mongodb-linux-x86_64-3.2.5.tgz
3.创建mongodb数据数据以及日志文件的储存位置
mkdir data
mkdir logs
两个文件夹
4.mongo安装包解压过后的文件中 bin文件夹下面添加 的 mongodb.conf文件
5.keyfile生成
openssl rand -base64 90 -out ./keyfile
chmod 600 keyfile
mv keyfile /yiyang/soft/mongo3.2.5/rs/ 如果没有装openssl,请先安装openssl。
6.启动
cd /yiyang/soft/mongo3.2.5/bin
./mongod -f mongodb.conf
7.在部署三个mongodb,放在不同的服务器上面或者同一个服务器上,但是mongodb的端口号改成不同的。每一个数据库的配置文件改一下,要求keyfile用同一个,replSet的值一样。然后都启动。
8.进入mongodb
./mongo 116.62.50.184:27017
如果原来已经存在的数据库,账号什么的已经有了先登录管理员账号
use admin
db.auth("account",“psw”);
没有的话就不用管。
9.设置config
config = {_id: 'replSet', members: [{_id: 0, host: 'ip:port',priority:100},{_id: 1, host: 'ip:port'},{_id: 2, host:'ip:port','arbiterOnly':true}]}
config:名字 随便取;
_id:值是mongodb的配置文件中的replSet的值。
priority:优先级 100最大,0最小,为是不能成为为主节点,也可以不设置默认为1.
arbiterOnly:true 为仲裁节点,不能复制数据,成为复制集。当主节点宕机时,此节点会从 从节点中选举出一个当做主节点。当复制集中所有的节点为奇数时,仲裁节点也可以不设置,但是如果都宕机了,只剩一个从节点,该从节点不能成为主节点。
10.rs.initiate(config);
11.查看复制集的状态。
rs.status();
{
"set" : "replSet",
"date" : ISODate("2019-07-16T07:11:05.374Z"),
"myState" : 1,
"term" : NumberLong(1),
"heartbeatIntervalMillis" : NumberLong(2000),
"members" : [
{
"_id" : 0,
"name" : "116.62.50.184:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 6513,
"optime" : {
"ts" : Timestamp(1563261064, 3),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2019-07-16T07:11:04Z"),
"electionTime" : Timestamp(1563254620, 1),
"electionDate" : ISODate("2019-07-16T05:23:40Z"),
"configVersion" : 1,
"self" : true
},
{
"_id" : 1,
"name" : "101.37.20.117:27018",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 6454,
"optime" : {
"ts" : Timestamp(1563261064, 3),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2019-07-16T07:11:04Z"),
"lastHeartbeat" : ISODate("2019-07-16T07:11:05.023Z"),
"lastHeartbeatRecv" : ISODate("2019-07-16T07:11:05.033Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "116.62.50.184:27017",
"configVersion" : 1
},
{
"_id" : 2,
"name" : "101.37.20.117:27019",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 6454,
"optime" : {
"ts" : Timestamp(1563261064, 3),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2019-07-16T07:11:04Z"),
"lastHeartbeat" : ISODate("2019-07-16T07:11:04.756Z"),
"lastHeartbeatRecv" : ISODate("2019-07-16T07:11:05.052Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "116.62.50.184:27017",
"configVersion" : 1
},
{
"_id" : 3,
"name" : "101.37.20.117:27020",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 6454,
"lastHeartbeat" : ISODate("2019-07-16T07:11:05.020Z"),
"lastHeartbeatRecv" : ISODate("2019-07-16T07:11:03.798Z"),
"pingMs" : NumberLong(0),
"configVersion" : 1
}
],
"ok" : 1
}字段解释:
• self 这个信息出现在执行rs.status()函数的成员信息中
• stateStr用户描述服务器状态的字符串。有SECONDARY,PRIMARY,RECOVERING等
• uptime 从成员可到达一直到现在经历的时间,单位是秒。
• optimeDate 每个成员oplog最后一次操作发生的时间,这个时间是心跳报上来的,因此可能会存在延迟
• lastHeartbeat 当前服务器最后一次收到其他成员心跳的时间,如果网络故障等可能这个时间会大于2秒
• pinMs 心跳从当前服务器达到某个成员所花费的平均时间
• errmsg 成员在心跳请求中返回的状态信息,通过是一些状态信息,不全是错误信息。
state和stateStr是重复的,都表示成员状态,只是state是内部的叫法。
health 为1表示server正常,0表示server宕.state 为1表明Primary,2表明secondary,3表示Recovering,7表示Arbiter,8表示Down.
optime与optimeDate表达的信息也是一样的,只是表示的方式不同,一个是用新纪元开始的毫秒数表示的,一个是用一种更容易阅读的方式表示。
syncingTo表示当前服务器从哪个节点在做同步。
由于rs.status()是从执行命令成员本身的角度得出的,由于网路等故障,这份报告可能不准确或者有些过时。=================================部署完毕==================================================
================================spring 连接mongodb副本集=====================================
1.
db.replica-set=116.62.50.184:27017,101.37.20.117:27018,101.37.20.117:27019
<context:component-scan base-package="cn.yiyang.normalization.dao" />
<context:property-placeholder location="classpath:/config/data/data.properties" />
<util:properties id="properties" location="classpath:/config/data/data.properties" />
<!--host="${db.host}" port="${db.port}" credentials="${db.username}:${db.password}@icare_platform"-->
<mongo:mongo-client id="mongo" replica-set="${db.replica-set}" credentials="${db.username}:${db.password}@icare_platform">
<mongo:client-options min-connections-per-host="2"
connections-per-host="100" connect-timeout="10000" max-wait-time="120000"
heartbeat-frequency="2000" heartbeat-connect-timeout="10000"
max-connection-life-time="3000" socket-keep-alive="true"
socket-timeout="3000"
threads-allowed-to-block-for-connection-multiplier="10" write-concern="SAFE"/>
</mongo:mongo-client>
<mongo:db-factory id="mongoDbFactory" mongo-ref="mongo" dbname="${db.database}"/>
<bean id="secondaryPreferredReadPreference" class="com.mongodb.TaggableReadPreference.SecondaryPreferredReadPreference"></bean>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate" scope="prototype">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
<property name="readPreference" ref="secondaryPreferredReadPreference"></property>
</bean>
<!-- MongoDB GridFS Template 支持,操作mongodb存放的文件 -->
<mongo:mapping-converter id="converter"
db-factory-ref="mongoDbFactory" />
<bean id="gridFsTemplate" class="org.springframework.data.mongodb.gridfs.GridFsTemplate">
<constructor-arg ref="mongoDbFactory" />
<constructor-arg ref="converter" />
</bean>