mongodb主从仲裁节点配置

环境介绍

  • 系统:CentOS 6.9
  • MongoDB版本:mongodb-linux-x86_64-rhel62-3.4.10linux

  • 设备3台:172.16.10.42(27020端口),172.16.10.90(27020端口),172.16.10.199(27020端口),若是没有足够设备也可部署同一台设备上面,只须要修改端口便可。mongodb

准备工做

  • 同步系统时间:保证各个机器的时间一致,可以使用/usr/sbin/ntpdate time.nist.gov 进行系统时间同步,在系统任务中添加新的任务 crontab -e
    0 12 * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1数据库

  • 配置同时容许打开的文件最大数
    查看系统容许同时打开文件的最大数 :ulimit -a
    查看系统容许的最大句柄文件数:cat /proc/sys/fs/file-max
    修改容许最大打开文件数,修改以后会永久生效,在【/etc/security/limits.conf】中,增长下面的代码:
    * soft nofile 65536
    * hard nofile 65536bash

  • 保证3台设备相互之间网络访问可达网络

  • 防火墙打开27020端口
/sbin/iptables -I INPUT -p tcp --dport 27020 -j ACCEPT      #开放端口
/etc/init.d/iptables save   # 保存修改
 service iptables restart   # 重启防火墙,修改生效复制代码

准备安装

  • 选择MongoDB存放位置,例如: /home/mongodb
  • 使用cd 命令cd /home/mongodb 进入mongodb 目录,下载MongoDB 压缩包 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.4.10.tgz
  • 解压文件 tar -xzvf mongodb-linux-x86_64-rhel62-3.4.10.tgz 到当前目录下
  • 建立数据存放文件夹 mkdir data,建立日志存放文件夹 mkdir log
  • 分配机器172.16.10.42(主节点),172.16.10.90(从节点),172.16.10.199(arb仲裁节点)

安装MongoDB主节点

  • 在mongdb 目录下新建mongod.conf文件,编辑以下内容
systemLog:
    destination: file
    path: /home/mongodb/log/mongod.log      #日志存放位置
    logAppend: true                                             #以追加的形式写入日志
storage:
    dbPath: /home/mongodb/data                            #数据存放地址
    journal:
        enabled: true
    directoryPerDB: true                                       #每一个数据库单独一个目录
processManagement:
    fork: true
    pidFilePath: /home/mongodb/mongod.pid  #进程文件存放位置
net:
    port: 27020                                                     #mongo 占用的端口号
setParameter:
    failIndexKeyTooLong: false复制代码
  • 启动mongdb服务 /home/mongodb/mongodb-linux-x86_64-rhel62-3.4.10/bin/mongod --config /home/mongodb/mongod.confcurl

  • 控制台链接mongo /home/mongodb/mongodb-linux-x86_64-rhel62-3.4.10/bin/mongo 127.0.0.1:27020 ,必须指定端口号,由于默认的端口为27017tcp

  • 建立管理员账号ui

use  admin;  #进入admin数据库,系统自带
db.createUser(
   {
     user: "admin",
     pwd: "admin",
     roles: [ "__system","backup","clusterAdmin","dbAdminAnyDatabase","readWriteAnyDatabase","userAdminAnyDatabase" ]
   }
);  #建立用户,并分配用户角色复制代码
  • 查询上一步操做建立的用户 db.system.users.find({"user":"admin"})
    查询结果以下:
  • 关闭mongodb 服务 /home/mongodb/mongodb-linux-x86_64-rhel62-3.4.10/bin/mongod --config /home/mongodb/mongod.conf --shutdownurl

  • 生成keyfile文件 openssl rand -base64 741 > /home/mongodb/mongodb.keyfilespa

  • 修改主节点mongd.conf文件为以下内容

systemLog:
   destination: file
   path: /home/mongodb/log/mongod.log
   logAppend: true
storage:
  dbPath: /home/mongodb/data
  journal:
    enabled: true
  directoryPerDB: true
processManagement:
   fork: true
   pidFilePath: /home/mongodb/mongod.pid
net:
   port: 27020
setParameter:
  failIndexKeyTooLong: false
security:
  keyFile: /home/mongodb/mongodb.keyfile       # 使用keyfile认证
  authorization: enabled
replication:
  replSetName: mongodb_set   #名称能够自定义,可是必须保证主节点、从节点、仲裁节点统一复制代码

安装MongoDB从节点、仲裁节点

  • 同理在172.16.10.90,172.16.10.199 /home/mongodb 目录下新建 data、log目录

  • 拷贝主节点 (172.16.10.42) /home/mongodb 目录下的 mongodb.keyfilemongod.conf文件以及 mongodb-linux-x86_64-rhel62-3.4.10 文件夹 到从节点已经仲裁节点的/home/mongodb 目录下

  • 修改仲裁节点` mongod.conf`` 文件内容以下

systemLog:
   destination: file
   path: /home/mongodb/log/mongod.log
   logAppend: true
storage:
  dbPath: /home/mongodb/data
  journal:
    enabled: false                                         # 仲裁节点本地不保存数据
  directoryPerDB: true
processManagement:
   fork: true
   pidFilePath: /home/mongodb/mongod.pid
net:
   port: 27020
setParameter:
  failIndexKeyTooLong: false
security:
  keyFile: /home/mongodb/mongodb.keyfile       # 使用keyfile认证
  authorization: enabled
replication:
  replSetName: mongodb_set   #名称能够自定义,可是必须保证主节点、从节点、仲裁节点统一复制代码

配置主节点、从节点、仲裁节点

  • 分别在三台设备上执行 /home/mongodb/mongodb-linux-x86_64-rhel62-3.4.10/bin/mongod --config /home/mongodb/mongod.conf 启动mongodb服务

  • 控制台链接主节点(172.16.10.42)mongo /home/mongodb/mongodb-linux-x86_64-rhel62-3.4.10/bin/mongo 127.0.0.1:27020 -u admin -p , 使用admin账号密码登陆mongodb

  • 初始化副本集配置
use admin;
config={_id:"mongodb_set",members:[{_id:0,host:"172.16.10.42","priority":20}]}
rs.initiate(config);复制代码

确认返回的是{ "ok" : 1 }
上面config里面,是当前主节点对外的ip,即从节点以及仲裁节点可以访问到的ip
查看集群节点的状态:rs.status();

  • 添加仲裁节点

rs.addArb("172.16.10.199:27020");

  • 添加从节点

rs.add("172.16.10.90:27020");

  • 查看集群配置rs.config();
    显示结果以下
mongodb_set:PRIMARY> rs.config()
{
        "_id" : "mongodb_set",
        "version" : 4,
        "protocolVersion" : NumberLong(1),
        "members" : [
                {
                        "_id" : 0,
                        "host" : "172.16.10.42:27020",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 20,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 1,
                        "host" : "172.16.10.199:27020",
                        "arbiterOnly" : true,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 2,
                        "host" : "172.16.10.90:27020",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                }
        ],
        "settings" : {
                "chainingAllowed" : true,
                "heartbeatIntervalMillis" : 2000,
                "heartbeatTimeoutSecs" : 10,
                "electionTimeoutMillis" : 10000,
                "catchUpTimeoutMillis" : 60000,
                "getLastErrorModes" : {

                },
                "getLastErrorDefaults" : {
                        "w" : 1,
                        "wtimeout" : 0
                },
                "replicaSetId" : ObjectId("59f82d3d21b782e865dc270a")
        }
}复制代码
  • 修改从节点为只读节点
    获取当前配置,修改以后从新写入配置
cfg = rs.conf();
cfg.members[2].priority=0
rs.reconfig(cfg);复制代码
  • 修改从节点为永远不可能被选为主节点(非必须)
    获取当前配置,修改以后从新写入配置
cfg = rs.conf();
cfg.members[2].votes=0
rs.reconfig(cfg);复制代码

全部配置到此结束

相关文章
相关标签/搜索