副本集定义
- PRIMARY: 192.168.3.135:28158
- SECONDARY: 192.168.3.135:28159
- SECONDARY: 192.168.3.135:28160
配置数据库存储位置和日志位置
配置dbpath/logpath
路径:vim mongodb_copy_1.conf 到 mongodb_copy_3.conf
注意replSet=rs
是副本集的名称,三个配置都要一样
keyFile 文件
mongodb 副本集加密码认证(keyFile认证)的简单方法
配置文件
# 配置文件
port=28158 #端口
dbpath= /www/mongodb-linux-x86_64-rhel80-4.4.2/data/db_copy_1 #数据库存文件存放目录
logpath= /www/mongodb-linux-x86_64-rhel80-4.4.2/logs/mongodb_coy_1.log #日志文件存放路径
logappend=true #使用追加的方式写日志
fork=true #以守护进程的方式运行,创建服务器进程
maxConns=3000 #最大同时连接数
#noauth=false #不启用验证
journal=true #每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)。
#即使宕机,启动时wiredtiger会先将数据恢复到最近一次的checkpoint点,然后重放后续的journal日志来恢复。
storageEngine=wiredTiger #存储引擎有mmapv1、wiretiger、mongorocks
bind_ip = 0.0.0.0 #这样就可外部访问了,例如从win10中去连MongoDB
# 为高速缓存分配的最大内存量;默认为物理RAM的1/2
# wiredTigerCacheSizeGB <float>
wiredTigerCacheSizeGB=0.5
replSet = rs #副本集的名称
#keyFile=/www/mongodb-linux-x86_64-rhel80-4.4.2/keyfile #keyFile认证
操作流程
副本集初始化
登入192.168.3.135:28158
实例,进行副本集初始化
use admin
// 初始化副本集
conf={
"_id" : "rs",
"members" : [
{
"_id" : 0,
"host" : "192.168.3.135.137:28158",
"priority":3 // 设置节点优先级别
},
{
"_id" : 1,
"host" : "192.168.3.135.137:28159",
"priority":0 // 不参与主节点的选举
},
{
"_id" : 2,
"host" : "192.168.3.135.137:28160",
"priority":0 // 不参与主节点的选举
}
]
}
rs.initiate(conf)
// 如果要补充成员可以使用
rs.add("host:prot")
// 删除某个成员
rs.remove("host:prot")
// 修改某个节点优先级
var config=rs.config()
config.members[2].priority=3
rs.reconfig(config)
// 查看
rs.config();
// 查看自己是否主节点
db.isMaster();
设置密码认证用于副本之间的安全连接
// 设置主节点admin数据库密码
use admin
db.runCommand({
"updateUser" : "root",
"pwd": "password"
"customData" : {
},
"roles" : [
{
"role" : "dbAdmin",
"db" : "admin"
},
{
"role" : "dbAdminAnyDatabase",
"db" : "admin"
},
{
"role" : "readWriteAnyDatabase",
"db" : "admin"
},
{
"role" : "root",
"db" : "admin"
},
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
});
// 关闭数据库实例 1-3 号实例
$ mongod --shutdown --dbpath ../data/db_copy_1
$ mongod --shutdown --dbpath ../data/db_copy_2
$ mongod --shutdown --dbpath ../data/db_copy_3
// 设置秘钥
$ openssl rand -base64 666 > /www/mongodb-linux-x86_64-rhel80-4.4.2/keyfile
// 设置秘钥权限
$ chmod 600 /www/mongodb-linux-x86_64-rhel80-4.4.2/keyfile
// 修改各个配置文件把注释去掉
$ keyFile=/www/mongodb-linux-x86_64-rhel80-4.4.2/keyfile #keyFile认证
// 启动实例
$ mongod -f mongodb_copy_1.conf
$ mongod -f mongodb_copy_2.conf
$ mongod -f mongodb_copy_3.conf
# 去配置文件中增加该属性显示缓存大小
$ storage.wiredTiger.engineConfig.cacheSizeGB
使用 Studio 3T 连接
连接
设置密码
连接成功
设置从节点不参与主节点选举
// 设置成员优先级为0,这样可以不参与主节点的选举,只能接受读取操作和同步主节点的数据
var config=rs.config()
config.members[1].priority=0
config.members[2].priority=0
rs.reconfig(config)
SpringBoot 配置事务
@Configuration
public class TransactionConfig {
@Bean
MongoTransactionManager transactionManager(MongoDatabaseFactory factory) {
return new MongoTransactionManager(factory);
}
}
使用 Shell 连接
// 连接本地的数据库
$ mongo --host 127.0.0.1 --port 28118 --authenticationDatabase admin -u user -p password