mongodb4.4.9副本集安装(一主一从一仲裁)

一、mongodb集群说明

  • 副本集模式:相当于是自带故障转移功能的主从复制

  • 分片集群:(将数据子集分散在集群中,每个分片维护着一个数据集合的子集。与副本集相比,使用集群架构可以使应用程序具有更强大的数据处理能力。)
    分片服务器(Shard Server):将数据子集分散在集群中,每个分片维护着一个数据集合的子集。与副本集相比,使用集群架构可以使应用程序具有更强大的数据处理能力。在实际生产中,一个 Shard Server 可由几台机器组成一个副本集来承担,防止因主节点单点故障导致整个系统崩溃
    配置服务器(Config Server)这是独立的一个 mongod 进程,保存集群和分片的元数据,在集群启动最开始时建立,保存各个分片包含数据的信息。
    路由服务器(Route Server):这是独立的一个 mongos 进程,Route Server 在集群中可作为路由使用,客户端由此接入,让整个集群看起来像是一个单一的数据库,提供客户端应用程序和分片集群之间的接口。
    Route Server 本身不保存数据,启动时从 Config Server 加载集群信息到缓存中,
    并将客户端的请求路由给每个 Shard Server,在各 Shard Server 返回结果后进行聚合并返回客户端.

mongodb下载地址:

https://www.mongodb.com/download-center/community/releases

RedHat / CentOS 7.0 x64
Archive: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.9.tgz
Server Package: https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.4/x86_64/RPMS/mongodb-org-server-4.4.9-1.el7.x86_64.rpm
Mongos Package: https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.4/x86_64/RPMS/mongodb-org-mongos-4.4.9-1.el7.x86_64.rpm
Mongo Shell Package: https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.4/x86_64/RPMS/mongodb-org-shell-4.4.9-1.el7.x86_64.rpm

mongodb副本集安装流程

目前最小节点是3个
1、在集群每个节点上安装一份MongoDB;
2、配置副本集;
3、配置副本集的用户、密码;
4、配置副本集的KeyFile安全鉴权;
5、配置开机自启动;

服务器配置

16核	64G内存 40G+2000G存储	RedHat 7.6
192.168.100.138  主节点
192.168.100.139	 从节点
192.168.100.140  仲裁节点

二、mongodb 4.4.9安装(每个节点安装)

2.1、安装mongodb
groupadd mongod
useradd -g mongod mongod
yum install -y libcurl openssl glibc
mkdir /opt

tar -zxvf mongodb-linux-x86_64-rhel70-4.4.9.tgz
mv mongodb-linux-x86_64-rhel70-4.4.9 /opt/mongodb
mkdir /opt/mongodb/{
   data,conf,logs,pid} -p
mkdir /var/run/mongodb
2.2、目录说明
/opt/mongodb/
├── bin #可执行文件
│   ├── install_compass
│   ├── mongo
│   ├── mongod
│   └── mongos
├── conf #存放配置文件和Keyfile
├── data #存放数据库文件
│   ├── collection   #数据
│   ├── index        #索引
│   └── journal      #日志,类似mysql redo log
├── LICENSE-Community.txt
├── logs #存放系统日志
├── MPL-2
├── pid
├── README
└── THIRD-PARTY-NOTICES

#条件允许的话,可以对服务器的磁盘进行优化,数据、索引、日志放在不同的磁盘(也可以加大内存,满足数据读取,减低磁盘交换)
mount /dev/sdb1 /opt   #450G
mount /dev/sdc1 /opt/mongodb/data/index    #100G
mount /dev/sdd1 /opt/mongodb/data/journal  #50G
2.3、添加到环境变量
# vi /etc/bashrc  #或者vi /etc/profile
#MongoDB config
MONGO_HOME=/opt/mongodb
PATH=$MONGO_HOME/bin:$PATH
export MONGO_HOME PATH

# source /etc/bashrc
2.4、创建 mongo.conf 配置
# vi /opt/mongodb/conf/mongod.conf
# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /opt/mongodb/logs/mongod.log  #日志文件

# Where and how to store data.
storage:
  dbPath: /opt/mongodb/data #数据库存储位置
  journal:
    enabled: true
    commitIntervalMs: 500   #降低journal刷盘时间,500ms(最大的配置)
  engine: "wiredTiger"
  wiredTiger:
    engineConfig:
      cacheSizeGB: 50  ##(64G内存配置50G)(96G内存配置75G整数)。如果一台机器启动一个实例这个可以注释选择默认,如果一台机器启动多个实例,需要设置内存大小,避免互相抢占内存
      journalCompressor: "snappy"
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: "snappy"
    indexConfig:
      prefixCompression: true

# how the process runs
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile
  timeZoneInfo: /usr/share/zoneinfo

# network interfaces
net:
  port: 27017
  maxIncomingConnections: 20000
  bindIp: 0.0.0.0  # Listen to local interface only, comment to listen on all interfaces.

security:
  authorization: 'enabled'
  clusterAuthMode: "keyFile"
  keyFile: /opt/mongodb/conf/rs.key

operationProfiling:
  slowOpThresholdMs: 200
  mode: slowOp

replication:
  oplogSizeMB: 102400 #复制操作日志的最大大小,以M为单位,默认情况下,mongod进程基于最大可用空间创建oplog,对于64位系统,oplog通常占可用磁盘空间的5%;
  replSetName: test  #副本集的名称
  enableMajorityReadConcern: false

#sharding:

## Enterprise-Only Options

#auditLog:

#snmp:

5、分别启动每个节点:A、B、C节点

#创建认证文件
#使用openssl命令随机生成741个字节的随机数字,然后将数字写入rs.key文件中,编码方式为base64,rand表示随机
# cd /opt/mongodb/conf/
# openssl rand -base64 741 > rs.key
ohMhfKa8oX6IDO2NS+YXsoDh0pcz/AJi013D6Ao6L1cO2LFaKtBwDx5vR9VKJvEQ
wMBC2syOFDFuze3U1JZ+DwsIpahvZCG1e74KG4Mgy/l+pJKdeoW2Qk2aRKkf3K00
LxCFmwhbdRZ5ARQNoq3fLhQg0eH7fvajzEXnwfpsIbIeOv6h+uH16nmKklTb426V
rlThA779UFMKmUq17xvY3mZbiPjjEJgC8oMQUOu8c4xUGL8oaC39zM9QjiNG/EoH
TCjra6UN+O9SR2Q09R+u7GZi0yrnLhVpgDjHMOmfWStHkEgHCdsur6r06fQ3YQuq
UE/EHkPjn99hcgRJ+7bfJbR14h76g1lGKPFJ17W8N+UZA+63emhduxfG77PLExuU
g2NURjXV85W4ISSpbak53tjXISNUwT+KKlGoH1UPLtGKWKzgAGMPzsIAva/+fkJi
BKz8gKdWOp3ivaSHUGOZMRUoluAHeQxM77C+DJG9gTPzQ9JcCQnDZFPgIfiYLpl5
dPZu5jWuU0HVRu03fNkeapkkuqIFdiE9kMzyVXpFiJJXUt1YvP/DDbfo9HTeaFw1
AzeKmXasatO6AWvMXc7GBA5KQlqfgrirbViZfw3vb52vTjcQXwmKNPikDfzvKQEd
OdNWHMJPBbIKkMD3BHefMA/CimOEXj9Ryq9cMRnOOSLuUkkkKJlrsxCzaekRUs97
SnjcD5YuWx8YOF1F0ERgS3DBAtPHlcuybmRMTac6Gb3qeMkJEs13IZbA4pmmwTs2
Jj8yuJIKKqxr+Zebjg5DxBte1PF3r7e2YwC3fx7gPP+0gh2a2yOUcL1HK5I3FA69
ryKs6HQ7SHbVnfUpY/1O9MiahBckpi8NkWclYndbS5PWEi+IK7g7sHR8cYuZGrR9
YXlJQH7VOfVaat3+kLJQT0b40YtylFfCW0Nmu83TEyb7+9jucprpLqraNLbb9RvO
eFQJIkSBwvC4nf5voa9TPgRpX+5J
# chmod 600 rs.key
# scp rs.key root@x.x.x.x:/opt/mongodb/conf/  #将此文件rs.key传到另外2台

# chown -R mongod.mongod /opt
# chown -R mongod.mongod /var/run/mongodb
# sudo -u mongod /opt/mongodb/bin/mongod -f /opt/mongodb/conf/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 1725
child process started successfully, parent exiting
# ps -ef | grep mongo
mongod     1725      1 19 19:37 ?        00:00:02 /opt/mongodb/bin/mongod -f /opt/mongodb/conf/mongod.conf
root       1771   1641  0 19:37 pts/1    00:00:00 grep --color=auto mongo
#关闭mongo服务
# sudo -u mongod /opt/mongodb/bin/mongod --shutdown --dbpath /opt/mongodb/data

设置MongoDB开机自启动
# vi /etc/rc.d/rc.local #加入下面的自启动脚本 
sudo -u mongod /opt/mongodb/bin/mongod -f /opt/mongodb/conf/mongod.conf

二、 组建副本集

1、使用mongo 客户端 连接主节点或备节点进行配置

#配置防火墙,允许27017端口可以相互访问

# mongo --port 27017
#连接成功后,开始配置副本集:
> use admin
switched to db admin
# test为配置文件中副本集名称
> config = {_id: 'test', members: [{_id: 0, host: '192.168.100.138:27017',priority:2},{_id: 1, host: '192.168.100.139:27017',priority:1},{_id: 2, host:'192.168.100.140:27017',arbiterOnly:true}]}
{
        "_id" : "replSet",
        "members" : [
                {
                        "_id" : 0,
                        "host" : "192.168.100.138:27017",
                        "priority" : 2
                },
                {
                        "_id" : 1,
                        "host" : "192.168.100.139:27017",
                        "priority" : 1
                },
                {
                        "_id" : 2,
                        "host" : "192.168.100.140:27017",
                        "arbiterOnly" : true
                }
        ]
}

> rs.initiate(config)
{ "ok" : 1 }
> rs.status()           #查看副本集状态,找到private节点的IP
test:SECONDARY> rs.status()
{
        "set" : "test",
        "date" : ISODate("2021-09-28T12:10:56.025Z"),
        "myState" : 1,
        "term" : NumberLong(2),
        "syncSourceHost" : "",
        "syncSourceId" : -1,
        "heartbeatIntervalMillis" : NumberLong(2000),
        "majorityVoteCount" : 2,
        "writeMajorityCount" : 2,
        "votingMembersCount" : 3,
        "writableVotingMembersCount" : 2,
        "optimes" : {
                "lastCommittedOpTime" : {
                        "ts" : Timestamp(1632831055, 1),
                        "t" : NumberLong(2)
                },
                "lastCommittedWallTime" : ISODate("2021-09-28T12:10:55.675Z"),
                "appliedOpTime" : {
                        "ts" : Timestamp(1632831055, 1),
                        "t" : NumberLong(2)
                },
                "durableOpTime" : {
                        "ts" : Timestamp(1632831055, 1),
                        "t" : NumberLong(2)
                },
                "lastAppliedWallTime" : ISODate("2021-09-28T12:10:55.675Z"),
                "lastDurableWallTime" : ISODate("2021-09-28T12:10:55.675Z")
        },
        "electionCandidateMetrics" : {
                "lastElectionReason" : "priorityTakeover",
                "lastElectionDate" : ISODate("2021-09-28T12:10:05.552Z"),
                "electionTerm" : NumberLong(2),
                "lastCommittedOpTimeAtElection" : {
                        "ts" : Timestamp(1632831015, 1),
                        "t" : NumberLong(1)
                },
                "lastSeenOpTimeAtElection" : {
                        "ts" : Timestamp(1632831015, 1),
                        "t" : NumberLong(1)
                },
                "numVotesNeeded" : 2,
                "priorityAtElection" : 2,
                "electionTimeoutMillis" : NumberLong(10000),
                "priorPrimaryMemberId" : 1,
                "numCatchUpOps" : NumberLong(0),
                "newTermStartDate" : ISODate("2021-09-28T12:10:05.645Z")
        },
        "electionParticipantMetrics" : {
                "votedForCandidate" : true,
                "electionTerm" : NumberLong(1),
                "lastVoteDate" : ISODate("2021-09-28T12:09:55.023Z"),
                "electionCandidateMemberId" : 1,
                "voteReason" : "",
                "lastAppliedOpTimeAtElection" : {
                        "ts" : Timestamp(1632830733, 1),
                        "t" : NumberLong(-1)
                },
                "maxAppliedOpTimeInSet" : {
                        "ts" : Timestamp(1632830733, 1),
                        "t" : NumberLong(-1)
                },
                "priorityAtElection" : 2
        },
        "members" : [
                {
                        "_id" : 0,
                        "name" : "192.168.100.138:27017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",  #主节点
                        "uptime" : 2049,
                        "optime" : {
                                "ts" : Timestamp(1632831055, 1),
                                "t" : NumberLong(2)
                        },
                        "optimeDate" : ISODate("2021-09-28T12:10:55Z"),
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "",
                        "electionTime" : Timestamp(1632831015, 2),
                        "electionDate" : ISODate("2021-09-28T12:10:15Z"),
                        "configVersion" : 1,
                        "configTerm" : 2,
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值