mongo3.0 主从(都写分离)复制集搭建

本文介绍如何搭建 MongoDB 3.0 的主从复制环境,并配置 Java 应用实现读写分离。包括配置文件详解、主从关系建立步骤及 Java 配置示例。

1 mongo3.0  主从(都写分离)复制集搭建
//1主2从
主:10.12.28.29:27010
./mongod -f /smart/mongodb/conf/mongodb.conf
//mongodb.conf   配置文件:
port=27010
dbpath=/smart/mongodb/data
logpath=/smart/mongodb/log/mongod.log
pidfilepath=/smart/mongodb/data/mongod.pid
fork=true
logappend=true
storageEngine=wiredTiger
profile=1
slowms=200
journal=true
directoryperdb=true
maxConns=20000
replSet=repl1
auth=false
bind_ip=0.0.0.0
---------------------------------------------
从:10.12.28.29:27020  主从切换用(用于仲裁)
/usr/local/mongodb/mongodb-linux-x86_64-3.0.3/bin/mongod -f /data/mongodb/arbiter/conf/arbiter.conf
//arbiter.conf 配置文件
port=27020
dbpath=/data/mongodb/arbiter/data
logpath=/data/mongodb/arbiter/log/mongod.log
pidfilepath=/data/mongodb/arbiter/data/mongod.pid
fork=true
logappend=true
storageEngine=wiredTiger
profile=1
slowms=200
journal=true
directoryperdb=true
maxConns=20000
replSet=repl1
auth=false
bind_ip=0.0.0.0
----------------------------------------------
从:10.12.30.41:27010
/usr/local/mongodb/bin/mongod -f /smart/mongodb/conf/mongod.conf
//mongodb.conf   配置文件:
port=27010
dbpath=/smart/mongodb/data
logpath=/smart/mongodb/log/mongod.log
pidfilepath=/smart/mongodb/data/mongod.pid
fork=true
logappend=true
storageEngine=wiredTiger
profile=1
slowms=200
journal=true
directoryperdb=true
maxConns=20000
replSet=repl1
auth=false
bind_ip=0.0.0.0
2 添加主从关系:
主库进入并配置复制集:
mongo --port 27010
config={_id:'repl1',members:[{_id:0,host:'10.12.28.29:27010',priority:2},{_id:1,host:'10.12.30.41:27010', priority:1},
{_id:2,host:'10.12.28.29:27020',arbiterOnly:true}]}
rs.initiate(config)
从库进入并执行可读操作:
在从库中确认从库 rs.slaveOk()
查看副本集状态
rs.status()
mongo库搭建完毕:
3 java设置读写分离:
applicationContext-mongodb.xml  文件配置:

<?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:mongo="http://www.springframework.org/schema/data/mongo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        classpath:/org/springframework/beans/factory/xml/spring-beans-3.2.xsd
        http://www.springframework.org/schema/data/mongo
        http://www.springframework.org/schema/data/mongo/spring-mongo.xsd
        ">
    <!-- 定义mongo对象,对应的是mongodb官方jar包中的Mongo,replica-set设置集群副本的ip地址和端口 -->
    <!-- 连接 -->
    <mongo:mongo id="mongo" replica-set="10.12.28.29:27010,10.12.30.41:27010" >
        <mongo:options connections-per-host="${mongo.connectionsPerHost}"
            threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"
            socket-keep-alive="${mongo.socketKeepAlive}" 
            slave-ok="${mongo.slaveOk}" />
    </mongo:mongo>
    <!-- 
            10.12.28.29:27010,10.12.30.41:27010
            ${mongo.host.smart}
            connect-timeout="${mongo.connectTimeout}" 
            max-wait-time="${mongo.maxWaitTime}" 
            auto-connect-retry="${mongo.autoConnectRetry}"  
            socket-timeout="${mongo.socketTimeout}"
            slave-ok="${mongo.slaveOk}" #读写分离
            write-number="${mongo.writeNumber}" 
            write-timeout="${mongo.writeTimeout}" 
            write-fsync="${mongo.writeFsync}"
     -->
    <!-- mongo的工厂,通过它来取得mongo实例,dbname为mongodb的数据库名,没有的话会自动创建 -->
    <mongo:db-factory dbname="smart" mongo-ref="mongo" id="mongoDbFactory"/>
    <!-- mongodb的主要操作对象,所有对mongodb的增删改查的操作都是通过它完成 -->
    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg ref="mongoDbFactory"/>
    </bean>
</beans>

完成搭建!
========================================================================================================================
    @RequestMapping(value = "mysql-proxy")
    public void mysqlProxy(HttpServletRequest request, HttpServletResponse response) {
        //执行任务
        List<String> hostIds = monitorNodeService.getHostIdList();
        dataProcessingService.selectVmInfoStatMonitor();
        //计时结束
    }

---------------------------------------
    @Override
    public void selectVmInfoStatMonitor() {
        Query query = new Query();
        query.addCriteria(Criteria.where(MongoFields.VM_INFO_STAT_VID).is("9132917"));
        query.with(new Sort(Sort.DEFAULT_DIRECTION.DESC, MongoFields.VM_INFO_STAT_CREATE_TIME));
        VmStatInfoVO vmInfoVo = mongoTemplate.findOne(query, VmStatInfoVO.class, "VmInfoStatMonitor");
    }

==========================================================================================================================
./mongod -f /smart/mongodb/conf/mongodb.conf 
./mongod -f /smart/mongodb/conf/mongodb.conf
1 安装mongo:https://www.mongodb.com/download-center
https://www.mongodb.org/dl/linux/
tar -xvzf mongodb-linux-x86_64-rhel70-3.4.10.tgz
    linux/mongodb-linux-x86_64-rhel70-3.4.2.tgz


storage:
 dbPath: "/smart/mongodb/data"
systemLog:
 destination: file
 path: "/smart/mongodb/log/mongod.log"
net:
 port: 27022
 http:
 RESTInterfaceEnabled: true
processManagement:
 fork: false

port=27022
dbpath=/smart/mongodb/data
logpath=/smart/mongodb/log/mongod.log

=========================================================================================
1. 官网下载安装介质https://www.mongodb.org/dl/linux/,选
择适当的版本,这里以linux版本为例;
2. 解压到系统某路径, tar -xvzf mongodb-linux-x86_64-rhel70-3.4.10.tgz
 并在安装目录创建data目录,以及logs目录和logs/mongodb.log文件
3. 使用vim在mongodb的bin目录创建mongodb的配置文件,如:vim
bin/mongodb.conf,mongodb.conf内容请见下一页课件;
4. 编写shell脚本,命名为start-mongodb.sh,脚本内容如下:
   nohup ./mongod -f mongodb.conf &
5. 使用start-mongodb.sh启动mongodb实例,如:./start-mongodb
6. 使用mongoClient进行测试

ps -aux |grep mongo
ps a 显示现行终端机下的所有程序,包括其他用户的程序。
ps u   以用户为主的格式来显示程序状况。 
ps x   显示所有程序,不以终端机来区分。 
=========================================================================================
1 启动:./mongod 
    指定配置文件:
    ./mongod -f mongodb.conf
后台启动:nohup ./mongod -f mongodb.conf &
加可执行权限:chmod 777 xxx.sh
2连接mongo
./mongo localhost:27010

3 基本命令:
关闭mongo进程:
use admin
db.shutdownServer();
show dbs
db.stats() :显示数据库信息db.help(),db.collection.help():内置帮助,显示各种方法的说明;
创建数据库:
   use lijufa
//展示集合
   show collections
//创建集合  并插入数据
   db.users.insert({"name":"test"})
//展示集合
db.users.find().pretty()
=============================
1.特别在生产环境,不要用kill -9关掉mongodb的进程,很可能造成mongodb的数据丢失;
优雅的关机:

(1)第一种方式

use admin

db.shutdownServer()


(2)第二种方式
mongod --shutdown -f mongodb.conf

==========================================

### 如何在 Docker 中配置 MongoDB 主从复制集 #### 创建并启动主节点容器 为了建立MongoDB主从复制环境,首先需要创建一个作为主服务器运行的Docker容器。通过指定端口映射、容器名称以及使用的镜像来完成此操作[^1]。 ```bash docker run -d -p 27017:27017 --name mongo-master bitnami/mongodb:latest ``` 这里`-d`参数表示以后台模式运行容器;`-p`用于定义主机与容器之间的端口转发关系;`--name`给定新创建的服务实例命名以便于管理;最后是指定要拉取的基础镜像版本。 #### 设置从节点容器 接着按照相同的方式启动至少一个以上的从属节点服务,并确保它们能够访问到之前部署好的主节点。对于每一个额外加入集群中的成员都需要单独执行一次类似的命令[^3]。 ```bash docker run -d -p 27018:27017 --name mongo-slave \ --link mongo-master:mongo-master \ bitnami/mongodb:latest mongod --source mongo-master:27017 ``` 上述指令中增加了`--link`选项用来连接两个不同的容器之间通信路径,同时设置了副本集的名字(`rs0`)并通过`--source`指定了数据同步的目标地址即为主节点所在位置。 #### 初始化副本集配置 当所有的参与方都已经成功上线之后,则可以进入任意一台机器内部利用mongo shell来进行初始化工作了。这一步骤主要是向系统告知哪些成员应该被纳入当前组内共同维护同一份数据库副本[^2]。 ```javascript // 进入mongodb shell docker exec -it mongo-master bash mongosh // 开始配置副本集 use admin; config = { _id : "rs0", members : [ { _id : 0, host : "mongo-master:27017" }, { _id : 1, host : "mongo-slave:27017" } ] }; rs.initiate(config); ``` 以上脚本先切换到了管理员库下再构建了一个包含所有预期参与者信息的对象结构体,随后调用了`rs.initiate()`方法正式开启了整个过程。 #### 测试验证 一旦完成了前面几步的操作就可以尝试往集合里入一些测试文档看看能否正常传播至其他地方去了。如果一切顺利的话那么恭喜您已经掌握了如何借助Docker搭建起一套简单的MongoDB主从架构方案!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值