利用docker搭建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": "testeditor",
  "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(conf)

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";
    }

}

結論:完美支持事務!!!!!!!!!!1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章