Mongo安装并配置副本集

最近的一个小项目需要用到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/profile
7、 初始化数据库
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,后面有时间会继续测试下这个问题。


猜你喜欢

转载自blog.csdn.net/qq_19558795/article/details/80666653