在AWS EC2上安裝MongoDB並進行複寫配置
关于MongoDB的安装和复制配置,我写了一个简要的摘要备忘录。
有关详细信息,请查看文章末尾的参考网站。
今天要做的事情
-
MongoDBをEC2にインストール
レプリケーションの設定と確認
今回せっていするレプリケーションの形式は、以下の図の通り、「Primary with Secondary Members」です。

◆ 版本
-
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 … 技術評論社