服务器MongoDB分布式副本集集群相关配置教程总结

471 阅读7分钟

服务器MongoDB分布式副本集集群相关配置教程总结

单机服务器进行伪分布式副本集集群部署

  1. 修改HOSTS文件:通过修改 etc/hosts 文件,配置一个IP和主机名的对应关系,这样后续如果服务器IP发生变更时,只需要修改 hosts 文件就可,示例如下:

    127.0.0.1       localhost
    127.0.1.1       test-Precision-3650-Tower
    
    # The following lines are desirable for IPv6 capable hosts
    ::1     ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    
    # 设置MonggoDB数据库节点IP对应名称
    192.168.10.92    mongodb_rs0
    
  2. 安装MongoDB二进制版本的安装包:直接从MonoDB官网上下载和服务器操作系统对应的ZIP格式的二进制版本安装包,优势是省去编译过程,可以直接复制多份,放在不同目录下即可直接运行。

  3. 配置MongoDB实例:对于每个MongoDB实例,需要创建一个配置文件,在其中指定MongoDB的配置参数,例如数据目录,日志文件和端口号。在每个配置文件中,需要将“replSetName”设置为相同的副本集名称,以确保它们能够彼此相关,配置示例如下:

    # mongod.conf
    
    # for documentation of all options, see:
    #   http://docs.mongodb.org/manual/reference/configuration-options/
    
    # Where and how to store data.
    storage:
     dbPath: "/mongo/rs0/data/db"
     journal:
       enabled: true
    
    #  engine:
    
    #  mmapv1:
    
    #  wiredTiger:
    
    # where to write logging data.
    systemLog:
     destination: file
     path: "/mongo/rs0/log/mongo.log"
     logAppend: true
    
    # network interfaces
    net:
     bindIp: 0.0.0.0
     port: 27017
    
    # how the process runs
    processManagement:
     fork: false
    
    #security:
    
    #operationProfiling:
    replication:
     replSetName: rs0
    
    #sharding:
    
    ## Enterprise-Only Options:
    
    #auditLog:
    
    #snmp:
    
    配置选项描述
    storage.dbPathMongoDB 数据存储位置
    storage.journal.enabledMongoDB journal 日志是否开启
    systemLog.destinationMongoDB 输出日志路径
    systemLog.pathMongoDB 日志文件路径
    systemLog.logAppend是否在现有 MongoDB 日志文件中附加日志信息
    net.bindIp绑定 IP 地址,MongoDB 监听指定的 IP 地址
    net.portMongoDB 监听的端口号
    processManagement.fork是否以守护进程方式运行 MongoDB
    replication.replSetName副本集的名称,用于标识 MongoDB 实例属于哪个副本集
    security.authorization是否开启 MongoDB 权限认证
    security.clusterAuthMode集群安全认证模式
    operationProfiling.modeMongoDB 操作跟踪模式,用于跟踪数据库操作性能
    sharding.clusterRoleMongoDB 集群角色
    auditLog.destinationMongoDB 审计日志输出路径
    snmp.subagent是否将 MongoDB 作为子代理进行操作
  4. 启动MongoDB实例:通过Supervisor进程管理工具来监测MongoDB实例的启动启动情况,相关配置示例如下,其它示例可复制多个,通过修改名称、路径等配置共同生效:

    [program: mongodb_rs0]
    command=/usr/local/mongodb/bin/mongod -f /mongo/rs0/mongo.conf
    directory=/mongo/rs0
    startsecs=0
    stopwaisecs=0
    autostart=true
    ; autorestart=true
    stdout_logfile=/mongo/rs0/log/rs0.log
    stderr_logfile=/mongo/rs0/log/rs0.err
    
    ...
    
  5. 初始化副本集:执行 mongo 命令进入到任意节点的MongoDB实例,这里需要注意的是因为是通过二进制版本安装的MongoDB,所以默认没有mongo命令,需要找到mongo安装路径,并在bin目录下执行mongo命令,或者自己创建一个软连接并赋予相关执行权限。

    config={}
    
    # 在 mongo shell 中暂时不能换行输入,下面这行注意单行输入到 shell 中
    config = {
       _id: "rs0",
       members: [
           {_id: 0, host: "mongodb_rs0:27017", priority: 3},
           {_id: 1, host: "mongodb_rs0:27018", priority: 2},
           {_id: 2, host: "mongodb_rs0:27019", priority: 1},
           {_id: 3, host: "mongodb_rs0:27020", arbiterOnly: true},
       ],
    }
    
    rs.initiate(config)
    
  6. 检查副本集状态:在一个 MongoDB 实例中使用一下命令,查看副本集状态:

    rs.status()
    

以上就是一个单机服务器上部署MongoDB伪分布式副本集集群的基本部署方案。

多台服务器进行 MongoDB 分布式副本集集群(主服务器+备份服务器)

与单机伪分布式部署不同的地方主要有三点,分别是 etc/hosts 、服务器防火墙配置、数据库实例初始化方式。

  1. 修改HOSTS文件:通过修改 etc/hosts 文件,配置一个IP和主机名的对应关系,这样后续如果服务器IP发生变更时,只需要修改 hosts 文件就可,示例如下:

    127.0.0.1       localhost
    127.0.1.1       test-Precision-3650-Tower
    
    # The following lines are desirable for IPv6 capable hosts
    ::1     ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    
    # 设置MonggoDB数据库节点IP对应名称
    192.168.10.92    mongodb_rs0
    192.168.10.93    mongodb_rs1
    ...
    
  2. 服务器防火墙配置:使用防火墙管理软件配置只允许特定 IP 访问数据库启动使用的端口,这里需要注意的是,MongoDB 副本集集群之前需要保证可以互相访问到,所以防火墙配置过程中需要配置为可以互相访问,这里使用的是 firewall-cmd 进行复制规则配置,示例如下:

    # 在 IPv4 地址为 192.168.10.93 的服务器上运行
    # 允许使用IPv4地址为 192.168.10.92 的TCP协议进入流量通过端口 27017 进入系统
    firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.92" port port="27017" protocol="tcp" accept'
    
    # 允许使用IPv4地址为 192.168.10.92 的TCP协议进入流量通过端口 27018 进入系统
    firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.92" port port="27018" protocol="tcp" accept'
    
    # 在 IPv4 地址为 192.168.10.92 的服务器上运行
    # 允许使用IPv4地址为 192.168.10.93 的TCP协议进入流量通过端口27017进入系统
    firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.93" port port="27017" protocol="tcp" accept'
    
  3. 安装MongoDB二进制版本的安装包:直接从MonoDB官网上下载和服务器操作系统对应的ZIP格式的二进制版本安装包,优势是省去编译过程,可以直接复制多份,放在不同服务器的相同目录下即可直接运行。

  4. 配置MongoDB实例:对于每个MongoDB实例,需要创建一个配置文件,在其中指定MongoDB的配置参数,例如数据目录,日志文件和端口号。在每个配置文件中,需要将“replSetName”设置为相同的副本集名称,以确保它们能够彼此相关,配置示例如下:

    # mongod.conf
    
    # for documentation of all options, see:
    #   http://docs.mongodb.org/manual/reference/configuration-options/
    
    # Where and how to store data.
    storage:
     dbPath: "/mongo/rs0/data/db"
     journal:
       enabled: true
    
    #  engine:
    
    #  mmapv1:
    
    #  wiredTiger:
    
    # where to write logging data.
    systemLog:
     destination: file
     path: "/mongo/rs0/log/mongo.log"
     logAppend: true
    
    # network interfaces
    net:
     bindIp: 0.0.0.0
     port: 27017
    
    # how the process runs
    processManagement:
     fork: false
    
    #security:
    
    #operationProfiling:
    replication:
     replSetName: rs0
    
    #sharding:
    
    ## Enterprise-Only Options:
    
    #auditLog:
    
    #snmp:
    
    配置选项描述
    storage.dbPathMongoDB 数据存储位置
    storage.journal.enabledMongoDB journal 日志是否开启
    systemLog.destinationMongoDB 输出日志路径
    systemLog.pathMongoDB 日志文件路径
    systemLog.logAppend是否在现有 MongoDB 日志文件中附加日志信息
    net.bindIp绑定 IP 地址,MongoDB 监听指定的 IP 地址
    net.portMongoDB 监听的端口号
    processManagement.fork是否以守护进程方式运行 MongoDB
    replication.replSetName副本集的名称,用于标识 MongoDB 实例属于哪个副本集
    security.authorization是否开启 MongoDB 权限认证
    security.clusterAuthMode集群安全认证模式
    operationProfiling.modeMongoDB 操作跟踪模式,用于跟踪数据库操作性能
    sharding.clusterRoleMongoDB 集群角色
    auditLog.destinationMongoDB 审计日志输出路径
    snmp.subagent是否将 MongoDB 作为子代理进行操作
  5. 启动MongoDB实例:通过Supervisor进程管理工具来监测MongoDB实例的启动启动情况,相关配置示例如下,其它示例可复制多个,通过修改名称、路径等配置共同生效:

    [program: mongodb_rs0]
    command=/usr/local/mongodb/bin/mongod -f /mongo/rs0/mongo.conf
    directory=/mongo/rs0
    startsecs=0
    stopwaisecs=0
    autostart=true
    ; autorestart=true
    stdout_logfile=/mongo/rs0/log/rs0.log
    stderr_logfile=/mongo/rs0/log/rs0.err
    
    ...
    
  6. 初始化副本集:执行 mongo 命令进入到任意节点的MongoDB实例,这里需要注意的是因为是通过二进制版本安装的MongoDB,所以默认没有mongo命令,需要找到mongo安装路径,并在bin目录下执行mongo命令,或者自己创建一个软连接并赋予相关执行权限。

    config={}
    
    # 在 mongo shell 中暂时不能换行输入,下面这行注意单行输入到 shell 中
    config = {
       _id: "rs0",
       members: [
           {_id: 0, host: "mongodb_rs0:27017", priority: 3},
           {_id: 1, host: "mongodb_rs1:27017", priority: 2},
           {_id: 2, host: "mongodb_rs1:27018", priority: 1}
       ],
    }
    
    rs.initiate(config)
    
  7. 检查副本集状态:在一个 MongoDB 实例中使用一下命令,查看副本集状态:

    rs.status()