Linux MongoDB部署副本集+Spring连接MongoDB副本集实现读写分离

==========================Linux MongoDB部署副本集====================================

 

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值