在AWS EC2上安裝MongoDB並進行複寫配置

关于MongoDB的安装和复制配置,我写了一个简要的摘要备忘录。
有关详细信息,请查看文章末尾的参考网站。

今天要做的事情

    MongoDBをEC2にインストール
    レプリケーションの設定と確認

    今回せっていするレプリケーションの形式は、以下の図の通り、「Primary with Secondary Members」です。

mongorepl.png

◆ 版本

    MongoDB 3.2
    Linux 4.4.30-32.54.amzn1.x86_64 #1 SMP Thu Nov 10 15:52:05 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

◆ 实施部分

> 安装到EC2

sudo yum update -y
sudo vim /etc/yum.repos.d/mongodb-org-3.2.repo

[mongodb-org-3.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/3.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc
sudo yum install -y mongodb-org
sudo service mongod start

sudo chkconfig mongod on

设定环境

    WoredTigerストレージエンジンの主な設定

    cacheSizeGB: システムメモリの6、7割
    blockCompressor:デフォルトはsnappy(中間です)

# Where and how to store data.
storage:
  dbPath: /data
  journal:
    enabled: true
  wiredTiger:
    engineConfig:
       cacheSizeGB: 1
       journalCompressor: snappy
    collectionConfig:
       blockCompressor: snappy

将EBS卷附加

    EBSボリュームにmongoのデータを溜めるようにする。

按照亚马逊弹性计算云(Amazon Elastic Compute Cloud)的要求,使得可以使用亚马逊弹性块存储(Amazon EBS)卷进行挂载。

    パーミッションを変更するのを忘れないように。
sudo chown -R mongod:mongod /data
    /etc/mongod.conf
# Where and how to store data.
storage:
  dbPath: /data

复制的设置

MongoDB中,主服务器被称为“primary”,从服务器被称为“secondary”。
MongoDB复制的最小配置需要三个节点。

    ネットワークインターフェイスの設定で、レプリケーションを組むサーバのIPを記述しておくこと

在进行复制设置之前,必须确保彼此可以进行通信。《MongoDB手册3.4 – 修复副本集问题》

MongoDB默认的监听IP地址是127.0.0.1,只允许本地访问。
通过更改mongod.conf中的bind_ip设置的IP地址来监听,可以允许外部连接。
将其设置为0.0.0.0将允许来自所有IP地址的连接。

# network interfaces
net:
  port: 27017
  bindIp: [127.0.0.1,10.1.52.111,10.1.51.227,10.1.51.68]


    レプリケーション名を決める
    Oplogのサイジングと設定サイズを決める
replication:
   oplogSizeMB: 500
   replSetName: testRepl

第四章:构建MongoDB的复制体验:在MongoDB中体验轻松的数据库|gihyo.jp …技术评议社

由于Oplog是Capped Collection,所以在创建后无法更改大小。 默认Oplog的大小为“1GB或磁盘剩余空间的5%”。为了避免过时,Oplog的大小非常重要。 Oplog的大小可以在mongod首次启动时通过oplogSize选项进行更改。 估算Oplog的适当大小的一种方法是进行面向生产环境的写入测试,并获取生成的Oplog的大小。在进行约1小时的面向生产环境的写入测试后,通过以下命令获取复制的最新信息。

> db.getReplicationInfo()

如果我们知道在1小时内创建的Oplog的大小,就可以用来估算Oplog的大小。建议至少保证可以耐受8小时的从服务器宕机。

    レプリケーションの設定

进入任意服务器,并执行以下命令。

config = {
  _id : "testRepl",
  members : [
    { _id : 0, host : "10.1.51.227:27017" },
    { _id : 1, host : "10.1.51.68:27017" },
    { _id : 2, host : "10.1.52.111:27017"} ] }

rs.initiate(config)
    スレーブの読み取り専用動作設定

直接設定以下内容,否則無法讓從器無法以唯讀方式進行存取。

在从属节点上执行以下指令。

 db.getMongo().setSlaveOk()
    レプリケーションステータスの確認
testRepl:PRIMARY> rs.status();
{
    "set" : "connobaRepl",
    "date" : ISODate("2017-01-12T07:03:05.556Z"),
    "myState" : 1,
    "term" : NumberLong(6),
    "heartbeatIntervalMillis" : NumberLong(2000),
    "members" : [
        {
            "_id" : 0,
            "name" : "10.1.51.227:27017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 100310,
            "optime" : {
                "ts" : Timestamp(1484182286, 1),
                "t" : NumberLong(6)
            },
            "optimeDate" : ISODate("2017-01-12T00:51:26Z"),
            "electionTime" : Timestamp(1484104344, 1),
            "electionDate" : ISODate("2017-01-11T03:12:24Z"),
            "configVersion" : 3,
            "self" : true
        },
        {
            "_id" : 1,
            "name" : "10.1.51.68:27017",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 100245,
            "optime" : {
                "ts" : Timestamp(1484182286, 1),
                "t" : NumberLong(6)
            },
            "optimeDate" : ISODate("2017-01-12T00:51:26Z"),
            "lastHeartbeat" : ISODate("2017-01-12T07:03:04.017Z"),
            "lastHeartbeatRecv" : ISODate("2017-01-12T07:03:04.020Z"),
            "pingMs" : NumberLong(0),
            "syncingTo" : "10.1.51.227:27017",
            "configVersion" : 3
        },
        {
            "_id" : 2,
            "name" : "10.1.52.47:27017",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 99751,
            "optime" : {
                "ts" : Timestamp(1484182286, 1),
                "t" : NumberLong(6)
            },
            "optimeDate" : ISODate("2017-01-12T00:51:26Z"),
            "lastHeartbeat" : ISODate("2017-01-12T07:03:05.025Z"),
            "lastHeartbeatRecv" : ISODate("2017-01-12T07:03:05.022Z"),
            "pingMs" : NumberLong(2),
            "syncingTo" : "10.1.51.227:27017",
            "configVersion" : 3
        }
    ],
    "ok" : 1
}

消除mongo登录时的警告消息的方法是什么?

    mongoシェル起動時のwarningを消す
[ec2-user@ip-10-1-52-47 ~]$ mongo
MongoDB shell version: 3.2.11
connecting to: test
Server has startup warnings:
2017-01-11T03:10:18.308+0000 I CONTROL  [initandlisten]
2017-01-11T03:10:18.308+0000 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2017-01-11T03:10:18.308+0000 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2017-01-11T03:10:18.308+0000 I CONTROL  [initandlisten]
testRepl:SECONDARY>

◆ 参考网站

    Install MongoDB Community Edition on Amazon Linux — MongoDB Manual 3.4
    [Black Belt Online Seminar] AWSで使うMongoDB
    mongoDBの公式おすすめ設定、mongodb.conf、クエリチューニングなど
    MongoDBでゆるふわDB体験:連載|gihyo.jp … 技術評論社
bannerAds