MongoDB是一个NoSQL企业级数据库,提供高性能,高可用性和自动缩放。 在NoSQL数据库中,因此您不能使用SQL(结构化查询语言)来插入和检索数据,并且不将数据存储在像MySQL或Postgres这样的表中。 数据以JSON格式(在MongoDB中称为BSON)存储在“文档”结构中。 MongoDB于2009年首次推出,目前由MongoDB Inc.开发。
在本教程中,我将引导您逐步构建MongoDB中的副本集。 我们将使用安装了CentOS 7的3个服务器节点,然后安装和配置MongoDB。
先决条件
- 安装了CentOS 7的三台服务器
10.0.15.21 mongo1
10.0.15.22 mongo2
10.0.15.23 mongo3
- 根权限
第1步 - 准备服务器
在本教程中,我将禁用SELinux for MongoDB。 我们需要编辑SELinux配置文件,并将值“强制”更改为禁用。
使用ssh连接到所有服务器节点。
ssh root@mongo1
ssh root@mongo2
ssh root@mongo3
使用vim编辑hosts文件。
vim /etc/hosts
将主机配置粘贴到下面:
10.0.15.21 mongo1
10.0.15.22 mongo2
10.0.15.23 mongo3
保存文件并退出。
接下来,我们将通过使用vim编辑配置文件来禁用SELinux。
vim /etc/sysconfig/selinux
将值“ 强制 ”更改为“ 禁用 ”。
SELINUX=disabled
保存并退出,然后重新启动服务器。
reboot
使用命令检查SELinux状态。
getenforce
确保您得到“ 禁用 ”作为结果。
第2步 - 在所有节点上安装MongoDB
在这一步中,我们将从官方的仓库安装MongoDB。 第一步是将新的MongoDB 3.4存储库添加到“/etc/yum.repos.d/”目录中。
运行以下命令来添加存储库。
cat <<'EOF' >> /etc/yum.repos.d/mongodb.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
EOF
接下来,使用yum命令安装mongodb-org包。
sudo yum -y install mongodb-org
MongoDB已经安装在所有CentOS 7节点上。
注意:
如果你想要一个关于“MongoDB安装”的完整教程,你会看到这个链接 。
第3步 - 配置Firewalld
在第一步,我们已经禁用了SELinux。 为了安全起见,我们现在将在所有节点上启用firewalld,并只打开MongoDB和SSH使用的端口。
使用yum命令安装Firewalld。
yum -y install firewalld
启动firewalld并启用它在启动时启动。
systemctl start firewalld
systemctl enable firewalld
接下来,打开你的ssh端口和MongoDB默认端口27017。
firewall-cmd --permanent --add-port=22/tcp
firewall-cmd --permanent --add-port=27017/tcp
重新加载firewalld以应用更改。
firewall-cmd --reload
第4步 - 配置MongoDB副本集
副本集是MongoDB中一组保持相同数据和信息的mongod进程。 副本集为数据库的生产部署提供了高可用性和容错能力。
mongodb中的复制由运行mongod进程的几个MongoDB服务器实例组成,只有一个实例作为“ PRIMARY ”运行,所有其他实例都是“ SECONDARY ”。 数据仅在“ PRIMARY ”实例上写入,然后将数据集复制到所有“ SECONDARY ”实例。
在此步骤中,我们将准备所有服务器节点以在MongoDB中实现副本集。
使用vim编辑MongoDB配置文件mongod.conf文件。
vim /etc/mongod.conf
在'net'部分第27行中,注释'bindIP'。
net:
port: 27017
# bindIP: 127.0.0.1
接下来,取消注释复制行36,并将复制名称设置为' myreplica01 '。
replication:
replSetName: "myreplica01"
保存文件并退出vim。
在所有节点上重新启动MongoDB。
systemctl restart mongod
现在检查mongodb并使其在服务器ipadress上运行,而不是localhost ipaddress。
netstat -plntu
第5步 - MongoDB副本集启动
在此步骤中,我们将创建副本集。 我们将' mongo1 '服务器用作' PRIMARY '节点,' mongo2 '和' mongo3 '作为' SECONDARY '节点。
登录到mongo1服务器并启动mongo shell。
ssh root@mongo1
mongo
使用以下查询从mongo1服务器启动副本集。
rs.initiate()
确保“确定”值为1。
现在将'mongo2'和'mongo3'节点添加到副本集。
rs.add("mongo2")
rs.add("mongo3")
您将看到下面的结果,并确保没有错误。
接下来,使用下面的rs查询检查副本集的状态。
rs.status()
检查状态的另一个查询是:
rs.isMaster()
第6步 - 测试复制
从'PRIMARY'实例'mongo1'到'SECONDARY'节点'mongo2'和'mongo3'测试数据集复制。
在此步骤中,我们将尝试在'PRIMARY'节点'mongo1'上编写或创建一个新数据库,然后通过检查'SECONDARY'节点'mongo2'和'mongo3'上的数据库来检查复制是否正常工作。
登录到' mongo1 '服务器并打开mongo shell。
ssh root@mongo1
mongo
现在为数据库创建一个新的数据库' lemp '和新的' stack '集合。
use lemp
db.stack.save(
{
"desc": "LEMP Stack",
"apps": ["Linux", "Nginx", "MySQL", "PHP"],
})
接下来,转到'SECONDARY'节点' mongo2 '并打开mongo shell。
ssh root@mongo2
mongo
启用从'SECONDARY'节点读取查询'rs.slaveOk()',然后检查“lemp”数据库是否存在于“SECONDARY”节点上。
rs.slaveOk()
show dbs
use lemp
show collections
db.stack.find()
如果没有错误,您将看到以下结果:
“PRIMARY”节点的数据库已被复制到“SECONDARY”节点,“mongo1”实例中的数据库“lemp”成功复制到“mongo2”和“mongo3”实例。
MongoDB副本集已成功创建。