安装配置mongodb副本集3.4在RHEL7.2
1、安装环境及配置yum
# more /etc/redhat-release
Red Hat Enterprise Linux Server release 7.2 (Maipo)
# vi /etc/yum.repos.d/mongodb-org-3.4.repo
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
注:如果要省去gpg验证,可以修改 gpgcheck=0
2、安装MongoDB 3.4
# yum update
# yum -y install mongodb-org
要安装特定版本的MongoDB,请分别指定每个组件包,并将版本号附加到包名称中,如以下示例所示:
sudo yum install -y mongodb-org-3.4.6 mongodb-org-server-3.4.6 mongodb-org-shell-3.4.6 mongodb-org-mongos-3.4.6 mongodb-org-tools-3.4.6
3、配置启动
# mongo
MongoDB shell version v3.4.6
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.6
Server has startup warnings:
2017-07-08T01:20:58.281+0800 I CONTROL [initandlisten]
2017-07-08T01:20:58.281+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-07-08T01:20:58.281+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2017-07-08T01:20:58.281+0800 I CONTROL [initandlisten]
2017-07-08T01:20:58.281+0800 I CONTROL [initandlisten]
2017-07-08T01:20:58.281+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2017-07-08T01:20:58.281+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2017-07-08T01:20:58.281+0800 I CONTROL [initandlisten]
2017-07-08T01:20:58.281+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2017-07-08T01:20:58.281+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2017-07-08T01:20:58.281+0800 I CONTROL [initandlisten]
上面的告警,可以用如下消除,建议加入到/etc/rc.local
echo "mongod soft nofiles 64000" >> /etc/security/limits.conf
echo "mongod soft nproc 64000" >> /etc/security/limits.conf
echo never > /sys/kernel/mm/transparent_hugepage/enabled;
echo never > /sys/kernel/mm/transparent_hugepage/defrag;
启动:sudo systemctl start mongod
重启:sudo systemctl restart mongod
停止:sudo systemctl stop mongod
设置开机启动
sudo systemctl enable mongod
4、配置副本集
mkdir -p /data/mongodb/37017
touch /var/log/mongodb/mongod37017.log
chown mongodb: /data/mongodb/37017
chown mongodb: /var/log/mongodb/mongod37017.log
cp /etc/mongod.conf /etc/mongod37017.conf
vi /etc/mongod37017.conf
processManagement:
fork: true
pidFilePath: /var/run/mongodb/mongod37017.pid
net:
port: 37017
bindIp: 0.0.0.0
ipv6: false
unixDomainSocket:
enabled: true
pathPrefix: /var/run/mongodb
filePermissions: 0700
http:
enabled: true
RESTInterfaceEnabled: false
storage:
dbPath: /data/mongodb/37017
indexBuildRetry: true
journal:
enabled: true
directoryPerDB: true
syncPeriodSecs: 60
engine: wiredTiger
wiredTiger:
engineConfig:
cacheSizeGB: 35
statisticsLogDelaySecs: 0
journalCompressor: snappy
directoryForIndexes: false
collectionConfig:
blockCompressor: snappy
indexConfig:
prefixCompression: true
operationProfiling:
slowOpThresholdMs: 100
mode: off
replication:
replSetName: mgofbj
systemLog:
path: /var/log/mongodb/mongod37017.log
destination: file
timeStampFormat: ctime
在三台机器上任意一台机器登陆mongodb,我是在10.1.73.7进行登陆配置
$ mongo -port 37017
#使用admin数据库
> use admin
#然后配置副本集
> config={_id:"mgofbj",members:[{_id:0,host:"10.1.73.6:37017"},{_id:1,host:"10.1.73.7:37017"},{_id:2,host:"10.1.73.8:37017"}]}
回车后输出:
{
"_id" : "mgofbj",
"members" : [
{
"_id" : 0,
"host" : "10.1.73.6:37017"
},
{
"_id" : 1,
"host" : "10.1.73.7:37017"
},
{
"_id" : 2,
"host" : "10.1.73.8:37017"
}
]
}
>rs.initiate(config) #初始化配置
{ "ok" : 1 }
> rs.status() #查看状态
{
"set" : "mgofbj",
"date" : ISODate("2017-07-10T17:17:12.051Z"),
"myState" : 1,
"term" : NumberLong(1),
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1499707030, 1),
"t" : NumberLong(1)
},
"appliedOpTime" : {
"ts" : Timestamp(1499707030, 1),
"t" : NumberLong(1)
},
"durableOpTime" : {
"ts" : Timestamp(1499707030, 1),
"t" : NumberLong(1)
}
},
"members" : [
{
"_id" : 0,
"name" : "10.1.73.6:37017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 153,
"optime" : {
"ts" : Timestamp(1499707030, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1499707030, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-07-10T17:17:10Z"),
"optimeDurableDate" : ISODate("2017-07-10T17:17:10Z"),
"lastHeartbeat" : ISODate("2017-07-10T17:17:11.651Z"),
"lastHeartbeatRecv" : ISODate("2017-07-10T17:17:11.934Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "10.1.73.8:37017",
"configVersion" : 1
},
{
"_id" : 1,
"name" : "10.1.73.7:37017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 240,
"optime" : {
"ts" : Timestamp(1499707030, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-07-10T17:17:10Z"),
"electionTime" : Timestamp(1499706889, 1),
"electionDate" : ISODate("2017-07-10T17:14:49Z"),
"configVersion" : 1,
"self" : true
},
{
"_id" : 2,
"name" : "10.1.73.8:37017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 153,
"optime" : {
"ts" : Timestamp(1499707030, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1499707030, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-07-10T17:17:10Z"),
"optimeDurableDate" : ISODate("2017-07-10T17:17:10Z"),
"lastHeartbeat" : ISODate("2017-07-10T17:17:11.649Z"),
"lastHeartbeatRecv" : ISODate("2017-07-10T17:17:11.909Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "10.1.73.7:37017",
"configVersion" : 1
}
],
"ok" : 1
}
注:如果运行,如下返回
> rs.initiate(config_rs1)
{
"ok" : 0,
"errmsg" : "'10.1.73.7:27017' has data already, cannot initiate set.",
"code" : 110,
"codeName" : "CannotInitializeNodeWithData"
}
则执行如下命令清空,我的数据没用,是因为在创建副本集前,写了测试数据
> db.dropDatabase()
{
"ok" : 0,
"errmsg" : "not master",
"code" : 10107,
"codeName" : "NotMaster"
}
但是还是建议重新安装一个全部的实例,来创建副本集。
5、测试副本集数据复制功能
在Primary(10.1.73.7:37017)上插入数据:
repset:PRIMARY> for(var i=0;i<10000;i++){db.test.insert({"name":"test"+i,"age":123})}
repset:PRIMARY> db.test.count()
#在副本节点 10.1.73.6、10.1.73.8 上连接到mongodb的37017查看数据是否复制过来
mgofbj:SECONDARY> show dbs;
2017-07-11T01:54:57.274+0800 E QUERY [thread1] Error: listDatabases failed:{
"ok" : 0,
"errmsg" : "not master and slaveOk=false",
"code" : 13435,
"codeName" : "NotMasterNoSlaveOk"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:769:19
shellHelper@src/mongo/shell/utils.js:659:15
@(shellhelp2):1:1
mgofbj:SECONDARY>
#mongodb默认是从主节点读写数据的,副本节点上不允许读,需要设置副本节点可以读。
repset:SECONDARY> db.getMongo().setSlaveOk();
#可以看到数据已经复制到了副本集。
repset:SECONDARY> db.test.find();
{ "_id" : ObjectId("5963beb69de80e506c218ef8"), "name" : "test5", "age" : 123 }
{ "_id" : ObjectId("5963beb69de80e506c218ef4"), "name" : "test1", "age" : 123 }
{ "_id" : ObjectId("5963beb69de80e506c218efa"), "name" : "test7", "age" : 123 }
{ "_id" : ObjectId("5963beb69de80e506c218ef6"), "name" : "test3", "age" : 123 }
{ "_id" : ObjectId("5963beb69de80e506c218ef3"), "name" : "test0", "age" : 123 }
{ "_id" : ObjectId("5963beb69de80e506c218ef5"), "name" : "test2", "age" : 123 }
{ "_id" : ObjectId("5963beb69de80e506c218ef9"), "name" : "test6", "age" : 123 }
{ "_id" : ObjectId("5963beb69de80e506c218ef7"), "name" : "test4", "age" : 123 }
{ "_id" : ObjectId("5963beb69de80e506c218efb"), "name" : "test8", "age" : 123 }
{ "_id" : ObjectId("5963beb69de80e506c218efc"), "name" : "test9", "age" : 123 }
{ "_id" : ObjectId("5963beb69de80e506c218efd"), "name" : "test10", "age" : 123 }
{ "_id" : ObjectId("5963beb69de80e506c218eff"), "name" : "test12", "age" : 123 }
{ "_id" : ObjectId("5963beb69de80e506c218efe"), "name" : "test11", "age" : 123 }
{ "_id" : ObjectId("5963beb69de80e506c218f00"), "name" : "test13", "age" : 123 }
{ "_id" : ObjectId("5963beb69de80e506c218f01"), "name" : "test14", "age" : 123 }
{ "_id" : ObjectId("5963beb69de80e506c218f02"), "name" : "test15", "age" : 123 }
{ "_id" : ObjectId("5963beb69de80e506c218f06"), "name" : "test19", "age" : 123 }
{ "_id" : ObjectId("5963beb69de80e506c218f03"), "name" : "test16", "age" : 123 }
{ "_id" : ObjectId("5963beb69de80e506c218f04"), "name" : "test17", "age" : 123 }
{ "_id" : ObjectId("5963beb69de80e506c218f05"), "name" : "test18", "age" : 123 }
评论