MongoDB学习-复制集的搭建(使用Centos7安装)

1. 下载和安装

MongoDB社区版下载地址
在这里插入图片描述
如上图所示,拷贝链接然后到命令行中输入,下载MongoDB服务端的rpm安装包

wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.2/x86_64/RPMS/mongodb-org-server-4.2.7-1.el7.x86_64.rpm

下载完成后,接着进行安装

rpm -ivh mongodb-org-server-4.2.7-1.el7.x86_64.rpm

此时只是安装了MongoDB的服务端,如果还需要用命令行连接 mongoDB,则需要安装 shell 程序包

wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.2/x86_64/RPMS/mongodb-org-shell-4.2.7-1.el7.x86_64.rpm
rpm -ivh mongodb-org-shell-4.2.7-1.el7.x86_64.rpm

如果需要一些附加工具,例如数据导入导出,则需要安装 tool 程序包

wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.2/x86_64/RPMS/mongodb-org-tools-4.2.7-1.el7.x86_64.rpm
rpm -ivh mongodb-org-tools-4.2.7-1.el7.x86_64.rpm

如果要部署集群,则还需要安装 mongos 程序包

wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.2/x86_64/RPMS/mongodb-org-mongos-4.2.7-1.el7.x86_64.rpm
rpm -ivh mongodb-org-mongos-4.2.7-1.el7.x86_64.rpm

2. 默认配置

安装完成之后,在/etc目录下会有一个mongod.conf ,这是mogoDB 的配置文件。
使用cat命令进行查看

cat /etc/mongod.conf

默认配置如下

# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# Where and how to store data.
storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true
#  engine:
#  wiredTiger:

# how the process runs
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile
  timeZoneInfo: /usr/share/zoneinfo

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1  # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.


#security:

#operationProfiling:

#replication:

#sharding:

## Enterprise-Only Options

#auditLog:

#snmp:

一些参数的介绍:
systemLog.path:系统运行日志的路径
storage.dbPath:数据文件存放路径
net:定义了端口号以及绑定的IP,如果想使用其他主机进行连接,IP改为0.0.0.0
security:配置MongoDB的安全项,例如秘钥,权限控制等等
replication:配置复制集
sharding:配置分片集群

3. 配置复制集

这里使用的是两台云服务器,其中Service 1配置为主节点,Service 2配置两个从节点
3.1 Service 1
目录结构如下(data目录存放数据文件,log目录存放日志,mongdo.conf为配置文件):
在这里插入图片描述
接着进行主节点primary配置文件的设置(mongod.conf):

systemLog:
  destination: file
  logAppend: true
  path: /root/mongodb/primary/log/mongod.log

storage:
  dbPath: /root/mongodb/primary/data
  journal:
    enabled: true

net:
  port: 27017 # 主节点用27017端口
  bindIp: 0.0.0.0

replication:
  replSetName: strong # 复制集名称

processManagement:
  fork: true
  pidFilePath: /var/run/mongodb/primary_mongod.pid

启动primary服务:

mongod -f /root/mongodb/primary/mongod.conf
# 这里是mongod已经配置系统变量,如果没有配置,则需要具体的路径

3.2 Service 2
目录结构如下(两个从节点,每个从节点和上面一样的结构):

在这里插入图片描述
在这里插入图片描述
secondary_1的配置文件:

systemLog:
  destination: file
  logAppend: true
  path: /root/mongodb/secondary_1/log/mongod.log

storage:
  dbPath: /root/mongodb/secondary_1/data
  journal:
    enabled: true

net:
  port: 27018 # 从节点1用27018端口
  bindIp: 0.0.0.0

replication:
  replSetName: strong # 复制集名称

processManagement:
  fork: true
  pidFilePath: /var/run/mongodb/secondary_1_mongod.pid

secondary_2的配置文件:

systemLog:
  destination: file
  logAppend: true
  path: /root/mongodb/secondary_2/log/mongod.log

storage:
  dbPath: /root/mongodb/secondary_2/data
  journal:
    enabled: true

net:
  port: 27019 # 从节点2用27019端口
  bindIp: 0.0.0.0

replication:
  replSetName: strong # 复制集名称

processManagement:
  fork: true
  pidFilePath: /var/run/mongodb/secondary_2_mongod.pid

启动secondary_1和secondary_2:

mongod -f /root/mongodb/secondary_1/mongod.conf
mongod -f /root/mongodb/secondary_2/mongod.conf

选择primary节点,在命令行中输入mongo,进入mongodb,输入rs.status()查看复制集的状态信息,提示复制集还未配置。

rs.status()
{
	"operationTime" : Timestamp(0, 0),
	"ok" : 0,
	"errmsg" : "no replset config has been received",
	"code" : 94,
	"codeName" : "NotYetInitialized",
	"$clusterTime" : {
		"clusterTime" : Timestamp(0, 0),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}

定义config初始化参数,并进行初始化。

# _id:0 为主节点的ip和端口号
# _id:1 为从节点1的ip和端口号
# _id:2 为从节点2的ip和端口号
config={"_id":"kgcrs","members":[
{"_id":0,"host":"xxxx:27017"},
{"_id":1,"host":"xxxx:27018"},
{"_id":2,"host":"xxxx:27019"}
]}
rs.initiate(config)

结果如下:

{
	"ok" : 1,
	"$clusterTime" : {
		"clusterTime" : Timestamp(1590839215, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	},
	"operationTime" : Timestamp(1590839215, 1)
}

最后通过rs.status()查看主节点状态

{
	"set" : "strong",
	"date" : ISODate("2020-05-30T11:47:06.271Z"),
	"myState" : 1,
	"term" : NumberLong(1),
	"syncingTo" : "",
	"syncSourceHost" : "",
	"syncSourceId" : -1,
	"heartbeatIntervalMillis" : NumberLong(2000),
	"majorityVoteCount" : 2,
	"writeMajorityCount" : 2,
	"optimes" : {
		"lastCommittedOpTime" : {
			"ts" : Timestamp(0, 0),
			"t" : NumberLong(-1)
		},
		"lastCommittedWallTime" : ISODate("1970-01-01T00:00:00Z"),
		"appliedOpTime" : {
			"ts" : Timestamp(1590839225, 5),
			"t" : NumberLong(1)
		},
		"durableOpTime" : {
			"ts" : Timestamp(1590839225, 5),
			"t" : NumberLong(1)
		},
		"lastAppliedWallTime" : ISODate("2020-05-30T11:47:05.985Z"),
		"lastDurableWallTime" : ISODate("2020-05-30T11:47:05.985Z")
	},
	"lastStableRecoveryTimestamp" : Timestamp(0, 0),
	"lastStableCheckpointTimestamp" : Timestamp(0, 0),
	"electionCandidateMetrics" : {
		"lastElectionReason" : "electionTimeout",
		"lastElectionDate" : ISODate("2020-05-30T11:47:05.947Z"),
		"electionTerm" : NumberLong(1),
		"lastCommittedOpTimeAtElection" : {
			"ts" : Timestamp(0, 0),
			"t" : NumberLong(-1)
		},
		"lastSeenOpTimeAtElection" : {
			"ts" : Timestamp(1590839215, 1),
			"t" : NumberLong(-1)
		},
		"numVotesNeeded" : 2,
		"priorityAtElection" : 1,
		"electionTimeoutMillis" : NumberLong(10000),
		"numCatchUpOps" : NumberLong(0),
		"newTermStartDate" : ISODate("2020-05-30T11:47:05.972Z")
	},
	"members" : [
		{
			"_id" : 0,
			"name" : "xxxx:27017", # 主节点
			"health" : 1,
			"state" : 1,
			"stateStr" : "PRIMARY",
			"uptime" : 508,
			"optime" : {
				"ts" : Timestamp(1590839225, 5),
				"t" : NumberLong(1)
			},
			"optimeDate" : ISODate("2020-05-30T11:47:05Z"),
			"syncingTo" : "",
			"syncSourceHost" : "",
			"syncSourceId" : -1,
			"infoMessage" : "could not find member to sync from",
			"electionTime" : Timestamp(1590839225, 1),
			"electionDate" : ISODate("2020-05-30T11:47:05Z"),
			"configVersion" : 1,
			"self" : true,
			"lastHeartbeatMessage" : ""
		},
		{
			"_id" : 1,
			"name" : "xxxx:27018", # 从节点1
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 10,
			"optime" : {
				"ts" : Timestamp(1590839215, 1),
				"t" : NumberLong(-1)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1590839215, 1),
				"t" : NumberLong(-1)
			},
			"optimeDate" : ISODate("2020-05-30T11:46:55Z"),
			"optimeDurableDate" : ISODate("2020-05-30T11:46:55Z"),
			"lastHeartbeat" : ISODate("2020-05-30T11:47:05.957Z"),
			"lastHeartbeatRecv" : ISODate("2020-05-30T11:47:06.049Z"),
			"pingMs" : NumberLong(2),
			"lastHeartbeatMessage" : "",
			"syncingTo" : "",
			"syncSourceHost" : "",
			"syncSourceId" : -1,
			"infoMessage" : "",
			"configVersion" : 1
		},
		{
			"_id" : 2,
			"name" : "xxxx:27019", # 从节点2
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 10,
			"optime" : {
				"ts" : Timestamp(1590839215, 1),
				"t" : NumberLong(-1)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1590839215, 1),
				"t" : NumberLong(-1)
			},
			"optimeDate" : ISODate("2020-05-30T11:46:55Z"),
			"optimeDurableDate" : ISODate("2020-05-30T11:46:55Z"),
			"lastHeartbeat" : ISODate("2020-05-30T11:47:05.958Z"),
			"lastHeartbeatRecv" : ISODate("2020-05-30T11:47:06.034Z"),
			"pingMs" : NumberLong(2),
			"lastHeartbeatMessage" : "",
			"syncingTo" : "",
			"syncSourceHost" : "",
			"syncSourceId" : -1,
			"infoMessage" : "",
			"configVersion" : 1
		}
	],
	"ok" : 1,
	"$clusterTime" : {
		"clusterTime" : Timestamp(1590839225, 5),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	},
	"operationTime" : Timestamp(1590839225, 5)
}

后续如果想添加从节点

rs.add("xxxx:xxx")
rs.add("xxxx:xxx")

如果想删除某个节点可以用

rs.remove("xxxx:xxx")

如果想关闭服务,可以用下面的命令

mongod --shutdown --dbpath xxx
# mongod 命令的 shutdown 选项能干净的关闭 MongoDB 服务。

如果想对当前节点降级,可以用下面的命令。通过执行 rs.stepDown(30) 命令将当前主库“降级”,30秒内这个实例不会把自己选为primary角色,相当于在30秒内此实例被“降级”了。

rs.stepDown(30)

附录

给出了两个脚本可以方便地开启和关闭全部的MongoDB服务
start.sh

#!/bin/bash
echo -e "start rs !\n"
# 启动primary节点
mongod -f /root/mongodb/primary/mongod.conf
if [ $? -eq 0 ]; then
	echo -e "\nsuccessful start primary !\n"
else
	echo -e "\nfail to start primary !\n"
fi
# 登录其他服务器,开启从节点
ssh user_name@ip "mongod -f /root/mongodb/secondary_1/mongod.conf;mongod -f /root/mongodb/secondary_2/mongod.conf"
if [ $? -eq 0 ]; then
	echo -e "\nsuccessful start secondary !\n"
else
	echo -e "\nfail to start secondary !\n"
fi
echo "done !"

stop.sh

#!/bin/bash
echo -e "stop rs !\n"
# 关闭primary节点
mongod --shutdown --dbpath /root/mongodb/primary/data/
if [ $? -eq 0 ]; then
	echo -e "\nsuccessful stop primary !\n"
else
	echo -e "\nfail to stop primary !\n"
fi
# 登录其他服务器,关闭从节点
ssh user_name@ip "mongod --shutdown --dbpath /root/mongodb/secondary_1/data/;mongod --shutdown --dbpath /root/mongodb/secondary_2/data/"
if [ $? -eq 0 ]; then
	echo -e "\nsuccessful stop secondary !\n"
else
	echo -e "\nfail to stop secondary !\n"
fi
exit
echo "done !"

注:使用ssh生成公钥进行登录,这样就无需输入用户和密码
具体的可以看这里

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值