- 安装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数据库中可用。超级账号,超级权限;