副本集定义

  • 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认证)的简单方法

配置文件

  1. # 配置文件
  2. port=28158 #端口
  3. dbpath= /www/mongodb-linux-x86_64-rhel80-4.4.2/data/db_copy_1 #数据库存文件存放目录
  4. logpath= /www/mongodb-linux-x86_64-rhel80-4.4.2/logs/mongodb_coy_1.log #日志文件存放路径
  5. logappend=true #使用追加的方式写日志
  6. fork=true #以守护进程的方式运行,创建服务器进程
  7. maxConns=3000 #最大同时连接数
  8. #noauth=false #不启用验证
  9. journal=true #每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)。
  10. #即使宕机,启动时wiredtiger会先将数据恢复到最近一次的checkpoint点,然后重放后续的journal日志来恢复。
  11. storageEngine=wiredTiger #存储引擎有mmapv1、wiretiger、mongorocks
  12. bind_ip = 0.0.0.0 #这样就可外部访问了,例如从win10中去连MongoDB
  13. # 为高速缓存分配的最大内存量;默认为物理RAM的1/2
  14. # wiredTigerCacheSizeGB <float>
  15. wiredTigerCacheSizeGB=0.5
  16. replSet = rs #副本集的名称
  17. #keyFile=/www/mongodb-linux-x86_64-rhel80-4.4.2/keyfile #keyFile认证

操作流程

副本集初始化

登入192.168.3.135:28158实例,进行副本集初始化

  1. use admin
  2. // 初始化副本集
  3. conf={
  4. "_id" : "rs",
  5. "members" : [
  6. {
  7. "_id" : 0,
  8. "host" : "192.168.3.135.137:28158",
  9. "priority":3 // 设置节点优先级别
  10. },
  11. {
  12. "_id" : 1,
  13. "host" : "192.168.3.135.137:28159",
  14. "priority":0 // 不参与主节点的选举
  15. },
  16. {
  17. "_id" : 2,
  18. "host" : "192.168.3.135.137:28160",
  19. "priority":0 // 不参与主节点的选举
  20. }
  21. ]
  22. }
  23. rs.initiate(conf)
  24. // 如果要补充成员可以使用
  25. rs.add("host:prot")
  26. // 删除某个成员
  27. rs.remove("host:prot")
  28. // 修改某个节点优先级
  29. var config=rs.config()
  30. config.members[2].priority=3
  31. rs.reconfig(config)
  32. // 查看
  33. rs.config();
  34. // 查看自己是否主节点
  35. db.isMaster();

设置密码认证用于副本之间的安全连接

  1. // 设置主节点admin数据库密码
  2. use admin
  3. db.runCommand({
  4. "updateUser" : "root",
  5. "pwd": "password"
  6. "customData" : {
  7. },
  8. "roles" : [
  9. {
  10. "role" : "dbAdmin",
  11. "db" : "admin"
  12. },
  13. {
  14. "role" : "dbAdminAnyDatabase",
  15. "db" : "admin"
  16. },
  17. {
  18. "role" : "readWriteAnyDatabase",
  19. "db" : "admin"
  20. },
  21. {
  22. "role" : "root",
  23. "db" : "admin"
  24. },
  25. {
  26. "role" : "userAdminAnyDatabase",
  27. "db" : "admin"
  28. }
  29. ]
  30. });
  31. // 关闭数据库实例 1-3 号实例
  32. $ mongod --shutdown --dbpath ../data/db_copy_1
  33. $ mongod --shutdown --dbpath ../data/db_copy_2
  34. $ mongod --shutdown --dbpath ../data/db_copy_3
  35. // 设置秘钥
  36. $ openssl rand -base64 666 > /www/mongodb-linux-x86_64-rhel80-4.4.2/keyfile
  37. // 设置秘钥权限
  38. $ chmod 600 /www/mongodb-linux-x86_64-rhel80-4.4.2/keyfile
  39. // 修改各个配置文件把注释去掉
  40. $ keyFile=/www/mongodb-linux-x86_64-rhel80-4.4.2/keyfile #keyFile认证
  41. // 启动实例
  42. $ mongod -f mongodb_copy_1.conf
  43. $ mongod -f mongodb_copy_2.conf
  44. $ mongod -f mongodb_copy_3.conf
  45. # 去配置文件中增加该属性显示缓存大小
  46. $ storage.wiredTiger.engineConfig.cacheSizeGB

使用 Studio 3T 连接

连接

image.png

设置密码

image.png

连接成功

image.png

设置从节点不参与主节点选举

  1. // 设置成员优先级为0,这样可以不参与主节点的选举,只能接受读取操作和同步主节点的数据
  2. var config=rs.config()
  3. config.members[1].priority=0
  4. config.members[2].priority=0
  5. rs.reconfig(config)

SpringBoot 配置事务

  1. @Configuration
  2. public class TransactionConfig {
  3. @Bean
  4. MongoTransactionManager transactionManager(MongoDatabaseFactory factory) {
  5. return new MongoTransactionManager(factory);
  6. }
  7. }

使用 Shell 连接

  1. // 连接本地的数据库
  2. $ mongo --host 127.0.0.1 --port 28118 --authenticationDatabase admin -u user -p password

参考

mongodb 副本集加密码认证(keyFile认证)的简单方法
MongoDB开启副本集 + Spring事务整合