利用docker搭建mongo主从集群,测试mongo事务,mongo添加用户名密码!

  1. 安装docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

  2. 验证docker-compose的版本:  Docker-compose -version

  3.写配置文件

version: '2'
services:
  rs1:
    container_name: mongo1
    image: mongo
    ports:
        - "27117:27017"
    volumes:
      - /opt/mongocluster/replset/rs1:/data/db
    command: mongod --dbpath /data/db --replSet myset
  rs2:
    container_name: mongo2
    image: mongo
    ports:
        - "27118:27017"
    volumes:
      - /opt/mongocluster/replset/rs2:/data/db
    command: mongod --dbpath /data/db --replSet myset
  rs3:
    container_name: mongo3
    image: mongo
    ports:
        - "27119:27017"
    volumes:
      - /opt/mongocluster/replset/rs3:/data/db
    command: mongod --dbpath /data/db --replSet myset

4.运行 yml 文件 : docker-compose up -d     (注意:提前建好目录,在yml文件的地方执行命令)

5.进入任意容器: docker-compose exec rs1 mongo

6.初始化节点:

config = {
  "_id": "myset",
  "members": [
    {
      "_id": 0,
      "host": "192.168.4.219:27227",  #配置你自己的ip地址和端口
      "priority": 1
    },
    {
      "_id": 1,
      "host": "192.168.4.219:27228",
      "priority": 1
    },
    {
      "_id": 2,
      "host": "192.168.4.219:27229",
      "priority": 1
    }
  ]
}

7.执行命令  rs.initiate(config)

8.看配置与副本级状态

rs.conf()

rs.status()

9.检测是否配置好集群:插入信息到主节点:

docker-compose exec rs1 mongo

use test

db.test.insert({msg: 'this is from primary', ts: new Date()})

 

10.副本集中检测信息是否同步:

docker-compose exec rs2 mongo

rs.slaveOk()

use test

db.test.find()

docker-compose exec rs3 mongo

rs.slaveOk() //副本集默认仅primary可读写

use test

db.test.find()

二.mongo 4.0开始支持事务

事务测试demo:

@RestController
public class MongoTestController {

    @Autowired
    MongoClient mongoClient;

    @Autowired
    MongoTemplate mongoTemplate;

    @GetMapping("/addMongo")
    public String addMongo() {

        //获取ClientSession
        ClientSession clientSession = mongoClient.startSession();

        try {
            //开启事务
            clientSession.startTransaction();
            //为mongoTemplate注入的事务特性
            MongoTemplate mongoTemplate = this.mongoTemplate.withSession(clientSession);
            Student student = new Student();
            student.setId("158262877");
            student.setName("test student");
            mongoTemplate.remove(student);

            Teacher teacher = new Teacher();
            teacher.setId(String.valueOf(System.currentTimeMillis() / 10000));
            teacher.setName("test teacher");
            mongoTemplate.save(teacher);

            //int i=1/0;
            //提交事务
            clientSession.commitTransaction();

            return student.getName();

        } catch (Exception e) {
             //回滚
            clientSession.abortTransaction();
            e.printStackTrace();
        }
        return "ss";
    }

}

结论:完美支持事务!!!!!!!!!!

2020-9-29补充:

mongo集群添加用户名密码(必须是在主节点上,切换到自己创建的数据库上):

use editor //切换到editor库
db.createUser({user:'a',pwd:'a',roles:['readWrite','dbAdmin']})

内建的角色

数据库用户角色:read、readWrite;
数据库管理角色:dbAdmin、dbOwner、userAdmin;
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
备份恢复角色:backup、restore;
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色:root #这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)

内部角色:__system

角色说明:

read:允许用户读取指定数据库;
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限;
readWrite:允许用户读写指定数据库;
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限;
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile;
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限;
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限;
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户;
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限;
root:只在admin数据库中可用。超级账号,超级权限;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangkaixuan456

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值