- 安装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