- MongoDB进阶与实战:微服务整合、性能优化、架构管理
- 唐卓章
- 915字
- 2021-05-19 17:44:52
5.5 搭建副本集
本节将介绍如何在本机安装MongoDB副本集,真实的项目环境中可以采用多机部署,但具体步骤是类似的。
5.5.1 安装副本集
假设读者已经完成了MongoDB单节点的安装,并且环境变量path中已经包含了MongoDB执行程序的配置。接下来我们需要为副本集定义一个名称,例如myReplSet。
1.准备安装目录
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_104_1.jpg?sign=1739591793-m4soreRELhXVnf6r3cFqnWK997tA7rnH-0-f858b9461883e71f450e6ff504cdec30)
2.配置文件
执行cd/opt/work/mongoReplSet/进入安装目录。编辑配置文件mongo.conf,内容如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_104_2.jpg?sign=1739591793-0C58B2DpmAE8k5plPamF9tZvF0XzbwvT-0-0bb027f403091e6d1ebafd5ce5192c2e)
上述配置仅包含一些公共的配置,由于每个副本集成员会使用不同的端口、数据目录,我们将在命令行中进行指定。
3.创建keyfile
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_104_3.jpg?sign=1739591793-14VJKVoPMI5F7CAaZp5WhChnaCyI2k9T-0-f1e72f567c10be6415ee15ae7c0f1d50)
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_105_1.jpg?sign=1739591793-8arUbRtIFhXytwxqKIpcKKSYTgsYt5ZQ-0-1cbcfac633b5e3975bf2c94a800ad3f2)
mongo.key采用随机算法生成,用作节点内部通信的密钥文件。
4.启动副本集成员
执行mongod程序,启动3个副本集成员,代码如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_105_2.jpg?sign=1739591793-7dF474JIy7Zv9q7aagRmW5039UTRPiD0-0-570a1a6807ea918ff45bc27b5b5f2c40)
除了keyFile、config文件,我们还指定了几个参数,分别如下。
● --port:数据库的监听端口。
● --dbpath:数据的存储目录。
● --logpath:数据库进程的日志文件路径。
执行命令之后,可以看到启动成功的输出日志:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_105_3.jpg?sign=1739591793-3g2lUspMqIci4lTTH5G87F6eoAXMW9C3-0-0070a971d7a0c705cff2bee5a0f5094f)
通过netstat命令同样可以看到启动的几个端口,输出如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_105_4.jpg?sign=1739591793-Z0p2vtfukdkTffsPrRhrFrqc6nhUUrau-0-45899e55f478927457626018ac03cd14)
5.初始化配置
连接其中一个成员节点,并执行初始化命令,代码如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_105_5.jpg?sign=1739591793-vON0y3Ly0ojUmBG6NEqaIyqJNhhvTaU2-0-e34ae100d787e051bba9bde34cee01ce)
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_106_1.jpg?sign=1739591793-NBFlrkKEKuFkEfvBk218RKJQqxr1ihNE-0-8bb6087964beee0a42573afd77c2f17e)
此处,cfg._id表示的是副本集的名称(myReplSet),该值必须和副本集成员启动时指定的--replSet参数保持一致。members则表示当前副本集的成员列表,包括每个成员的主机IP、端口号。
使用rs.initiate命令执行副本集的初始化,当前成员会自动向其他成员同步该配置,之后这些成员在内部完成选举。
6.查看状态
执行db.isMaster命令,用于查看副本集的其他节点,代码如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_106_2.jpg?sign=1739591793-UQTL3aikqnnP4QLQpKOlKdorc4prKxro-0-dceeb73e221424ef416d95949fdfbf19)
从输出上看,当前节点已经成为主节点("ismaster":true),而hosts字段也展示了整个副本集的所有成员。
5.5.2 创建用户
由于使用了--keyFile作为成员节点的启动参数,此时MongoDB会启用鉴权(相当于--auth),因此在操作数据之前需要创建用户,代码如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_107_1.jpg?sign=1739591793-MSrxwpdJu3Nd3QSZHZfViczy9HwKUAyT-0-23d916c3f6c7058686ca01ef579c41a2)
在开启鉴权的情况下,MongoDB允许创建首个用户。一旦数据库中存在用户,所有的操作就必须经过鉴权了。
副本集之间的用户数据会自动进行同步,因此可以使用同一个用户在任一成员节点登录。
5.5.3 写入数据
登录主节点,向test集合写入一条数据,代码如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_107_2.jpg?sign=1739591793-vTr78E01LL3PfdkINRtGZe60bJzN4j5Y-0-a027d9aad4371c8c5d9b5c556de7c72d)
登录某个备节点,查看test集合,可发现新增的数据已经同步,如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_107_3.jpg?sign=1739591793-bCs3c24vZS2ZVHQcgIkANAyxBWXdO3oI-0-6dfea1041fb816b4f38d65f65f90d256)
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_108_1.jpg?sign=1739591793-x44z0V77HqqhZwern0bcQfmHlXAHClgD-0-2c2bfd3060733c3b89bb0e662b9ae966)
5.5.4 主备节点切换
接下来,验证副本集的主备节点切换功能,登录主节点并执行stepDown命令,代码如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_108_2.jpg?sign=1739591793-8uV6ECw7IOguxgxgFjvKAkFr2AY4u2Lj-0-b8186382aec92c3f42ac19a1167642f2)
如果执行成功,则当前节点将会降备,并开启新一轮的选举。通过多次执行isMaster命令可以确认最后的选举结果,代码如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_108_3.jpg?sign=1739591793-XEMdQqsFwdH0mf0b0bVklWRHXVLVdjDJ-0-8f5b66f49f236a47cc41a6c493dfb2a8)
从结果中可以看出,在主备节点切换之后,127.0.0.1:27002成为新的主节点。