最近的一个小项目需要用到mongo,作为一名MySQL DBA,能在实际生产中用到其他数据库这种机会当然是求之不得啦。虽然以前也玩过redis,但mongo还是第一次玩(MySQL已让我沉醉,,,嘿嘿嘿)。咳咳,,,言归正传,本打算开三台虚机严格按照生产来配置,然后发现有点带不动,所以决定在一台上通过三个端口来模拟。具体过程如下,如有错误,欢迎指正。
1、获取安装包
curl -O http://downloads.mongodb.org/linux/mongodb-linux-x86_64-amazon-v3.4-latest.tgz?_ga=2.171604200.975923994.1528767763-1028766958.1526889489
其中,目录格式如下:
[root@localhost data]# tree /data/backup /data/lost+found /data/replset /data/backup /data/lost+found /data/replset ├── file ├── logs └── mongodb └── mongodb-linux-x86_64-amazon-v3.4-latest.tgz
2、解压并创建软连接
tar -zxvf mongodb-linux-x86_64-amazon-v3.4-latest.tgz ln -s mongodb-linux-x86_64-amazon-v3.4-latest.tgz mongodb
3、创建用户及目录
groupadd mongo useradd mongo -g mongo mongo用户: mkdir -p /data/replset/mongodb mkdir -p /data/replset/file/ mkdir -p /data/replset/logs
4、操作系统层参数及配置
vi /etc/selinux/config #SELINUX=enforcing#注释掉 #SELINUXTYPE=targeted#注释掉 SELINUX=disabled#增加 setenforce 0 #使配置立即生效
5、编辑mongodb.conf文件(此文件就相当于MySQL中的my.cnf文件,将其放在/data/replset/mongodb下)
[root@localhost ~]# cat /data/replset/mongodb/mongodb/mongodb.conf storageEngine=wiredTiger wiredTigerCacheSizeGB= 2 syncdelay = 60 wiredTigerCollectionBlockCompressor= snappy port=27017 dbpath=/data/replset/file/ logpath=/data/replset/logs/log1 smallfiles=true logappend=true oplogSize=87040 replSet=rs01 #keyFile=/data/replset/mongodb/keyr1 fork = true #noauth = true auth= false directoryperdb=true pidfilepath=/data/replset/mongodb/mongod_rep1.pid maxConns = 800
6、配置环境变量
echo "export PATH=/data/replset/mongodb/mongodb/bin:$PATH" >> /etc/profile7、 初始化数据库
mongod -f /data/replset/mongodb/mongodb.conf
8、登陆mongo(至此,但实例mongo便安装成功,非常简单,下面开始配置副本集)
9、为了配置副本集,至少再需要两个mongo实例,所以只需要再创建两份数据目录就可以了。
10、并创建两份配置文件,在上面的配置文件中修改相应的目录以及优先级即可,然后初始化另两个实例
11、配置副本集(在任意一个实例上配置即可)
config = { _id:"rs01", members:[ {_id:0,host:"192.168.179.134:27017"}, {_id:1,host:"192.168.179.134:27018"}, {_id:2,host:"192.168.179.134:27019"}] } rs.initiate(config))
12、添加仲裁节点
rs.addArb("192.168.179.134:27019");
13、查看集群配置情况
rs01:PRIMARY> rs.status() { "set" : "rs01", "date" : ISODate("2018-06-12T08:25:05.701Z"), "myState" : 1, "term" : NumberLong(2), "syncingTo" : "", "syncSourceHost" : "", "syncSourceId" : -1, "heartbeatIntervalMillis" : NumberLong(2000), "optimes" : { "lastCommittedOpTime" : { "ts" : Timestamp(1528791898, 1), "t" : NumberLong(2) }, "appliedOpTime" : { "ts" : Timestamp(1528791898, 1), "t" : NumberLong(2) }, "durableOpTime" : { "ts" : Timestamp(1528791898, 1), "t" : NumberLong(2) } }, "members" : [ { "_id" : 0, "name" : "192.168.179.134:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 1122, "optime" : { "ts" : Timestamp(1528791898, 1), "t" : NumberLong(2) }, "optimeDate" : ISODate("2018-06-12T08:24:58Z"), "syncingTo" : "", "syncSourceHost" : "", "syncSourceId" : -1, "infoMessage" : "", "electionTime" : Timestamp(1528790796, 1), "electionDate" : ISODate("2018-06-12T08:06:36Z"), "configVersion" : 1, "self" : true, "lastHeartbeatMessage" : "" }, { "_id" : 1, "name" : "192.168.179.134:27018", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 1109, "optime" : { "ts" : Timestamp(1528791898, 1), "t" : NumberLong(2) }, "optimeDurable" : { "ts" : Timestamp(1528791898, 1), "t" : NumberLong(2) }, "optimeDate" : ISODate("2018-06-12T08:24:58Z"), "optimeDurableDate" : ISODate("2018-06-12T08:24:58Z"), "lastHeartbeat" : ISODate("2018-06-12T08:25:04.352Z"), "lastHeartbeatRecv" : ISODate("2018-06-12T08:25:04.352Z"), "pingMs" : NumberLong(0), "lastHeartbeatMessage" : "", "syncingTo" : "192.168.179.134:27017", "syncSourceHost" : "192.168.179.134:27017", "syncSourceId" : 0, "infoMessage" : "", "configVersion" : 1 }, { "_id" : 2, "name" : "192.168.179.134:27019", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 1107, "optime" : { "ts" : Timestamp(1528791898, 1), "t" : NumberLong(2) }, "optimeDurable" : { "ts" : Timestamp(1528791898, 1), "t" : NumberLong(2) }, "optimeDate" : ISODate("2018-06-12T08:24:58Z"), "optimeDurableDate" : ISODate("2018-06-12T08:24:58Z"), "lastHeartbeat" : ISODate("2018-06-12T08:25:04.379Z"), "lastHeartbeatRecv" : ISODate("2018-06-12T08:25:03.831Z"), "pingMs" : NumberLong(0), "lastHeartbeatMessage" : "", "syncingTo" : "192.168.179.134:27017", "syncSourceHost" : "192.168.179.134:27017", "syncSourceId" : 0, "infoMessage" : "", "configVersion" : 1 } ], "ok" : 1 }
Tip:
1、第一次启动时,发现mongo无法启动,报错当时没有记录(印象中报错是和副本集有关,因为当时配置文件中写了 “replSet=rs01” 申明了副本集),于是把该参数去掉后发现能正常启动。
然后新建另一个实例(想复现此问题),也写了 “replSet=rs01” ,启动时却没有报错,能够正常启动(很奇怪)。于是又做了两个实例,发现还是能正常启动。至此,怀疑是和版本有关系,或者是偶发性的bug,后面有时间会继续测试下这个问题。