博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MongoDB【第二篇】集群搭建
阅读量:6943 次
发布时间:2019-06-27

本文共 5511 字,大约阅读时间需要 18 分钟。

第一步:准备

1.安装包

mongodb-linux-x86_64-rhel70-3.4.2.tgz

2. 架构:

本文为 1-primary、1-secondary、1-arbiter 的 mongoDB 集群:

名称 IP 端口
mongodb 192.168.6.128 27017
mongodb 192.168.6.129 27017
mongodb 192.168.6.130 27017

3. 安装 MongoDB

根据架构信息,参照  来安装架构中的实例。

第二步:配置集群

1. 登录至任意主机,执行 mongodb/bin/mongo,进入 mongo shell 客户端

# cd mongodb/bin# ./mongo

2. 在 mongo shell中,定义集群配置对象

> config = {... "_id" : "rs1",... "members" : [...  {
"_id":0,"host":" 192.168.6.128:27017"},... {
"_id":1,"host":" 192.168.6.129:27017"},... {
"_id":2,"host":" 192.168.6.130:27017", "arbiterOnly":true}... ]...}

其中,"_id" : "rs1"应与配置文件中配置的 replicaction.replSetName 一致,"members" 中的 "host" 为三个节点的 ip 和 port,第三个节点的 "arbiterOnly":true 代表其为仲裁节点。

3. 初始化集群配置

在mongo shell中执行

> rs.initiate(config)

返回信息:

 

4. 查看集群状态

在mongo shell中执行

> rs.status()

返回信息:

{        "set" : "rs1",        "date" : ISODate("2017-02-27T10:02:17.320Z"),        "myState" : 1,        "term" : NumberLong(1),        "heartbeatIntervalMillis" : NumberLong(2000),        "optimes" : {                "lastCommittedOpTime" : {                        "ts" : Timestamp(1488189735, 1),                        "t" : NumberLong(1)                },                "appliedOpTime" : {                        "ts" : Timestamp(1488189735, 1),                        "t" : NumberLong(1)                },                "durableOpTime" : {                        "ts" : Timestamp(1488189735, 1),                        "t" : NumberLong(1)                }        },        "members" : [                {                        "_id" : 0,                        "name" : "192.168.6.128:27017",                        "health" : 1,                        "state" : 1,                        "stateStr" : "PRIMARY",                        "uptime" : 3107,                        "optime" : {                                "ts" : Timestamp(1488189735, 1),                                "t" : NumberLong(1)                        },                        "optimeDate" : ISODate("2017-02-27T10:02:15Z"),                        "electionTime" : Timestamp(1488189594, 1),                        "electionDate" : ISODate("2017-02-27T09:59:54Z"),                        "configVersion" : 1,                        "self" : true                },                {                        "_id" : 1,                        "name" : "192.168.6.129:27017",                        "health" : 1,                        "state" : 2,                        "stateStr" : "SECONDARY",                        "uptime" : 153,                        "optime" : {                                "ts" : Timestamp(1488189735, 1),                                "t" : NumberLong(1)                        },                        "optimeDurable" : {                                "ts" : Timestamp(1488189735, 1),                                "t" : NumberLong(1)                        },                        "optimeDate" : ISODate("2017-02-27T10:02:15Z"),                        "optimeDurableDate" : ISODate("2017-02-27T10:02:15Z"),                        "lastHeartbeat" : ISODate("2017-02-27T10:02:16.990Z"),                        "lastHeartbeatRecv" : ISODate("2017-02-27T10:02:15.681Z"),                        "pingMs" : NumberLong(0),                        "syncingTo" : "192.168.6.128:27017",                        "configVersion" : 1                },                {                        "_id" : 2,                        "name" : "192.168.6.130:27017",                        "health" : 1,                        "state" : 7,                        "stateStr" : "ARBITER",                        "uptime" : 153,                        "lastHeartbeat" : ISODate("2017-02-27T10:02:16.808Z"),                        "lastHeartbeatRecv" : ISODate("2017-02-27T10:02:15.766Z"),                        "pingMs" : NumberLong(0),                        "configVersion" : 1                }        ],        "ok" : 1}

关注 stateStr 字段,如集群配置正确,3个节点应有一个 PRIMARY,一个 SECONDARY,一个 ARBITER 。

如果stateStr字段显示为 STARTUP 或 RECOVERING,说明集群状态还在同步中,稍等几秒后再次运行 rs.status() 即可。

5. 配置集群安全认证

1)使用 mongo shell 连接到 PRIMARY 库

2)创建admin权限用户

> use admin> db.createUser({...   user:"username",...   pwd:"password",...   roles:[...     {role:"clusterAdmin", db:"admin"},...     {role:"dbAdminAnyDatabase", db:"admin"},...     {role:"readWriteAnyDatabase", db:"admin"},...     {role:"userAdminAnyDatabase", db:"admin"}...   ]... })

返回信息:

上面的命令创建了一个具备集群管理者权限、所有数据库dba权限、所有数据库读写权限、所有数据库用户管理权限的超级用户。

3)停止所有 mongodb 服务

# ps -ef|grep mongod |grep -v grep# kill -2 

注意:必须使用 kill -2 命令杀死 mongod 进程,否则会导致数据文件异常,致使 mongod 无法再次正常启动。

4)生成集群内部认证key

# openssl rand -base64 755 > keyfile# chmod 400 keyfile

将 keyfile 拷贝至三台 mongodb 主机中。

5)修改mongodb配置文件

security:    keyFile: /root/mongodb/keyfile    # 此处配置key文件的绝对路径

6)依次启动3个 mongod 实例

注意:启动前注意检查 ulimit 配置

7)身份认证

使用 mongo shell 登入任意 mongod 实例

> use admin> db.auth(“username”,”password”)

认证通过后,再次查看集群状态:

> rs.status()

应返回正确的集群状态。

如果需要创建其他用户,先使用超级用户登录,再执行 db.createUser 命令即可。

第三步:测试

1. 测试同步功能

1)由于从节点默认是不可读的,为验证数据同步,首先要将从节点设为可读:

> rs.slaveOk()

2)登录主节点,执行以下命令:

> db.test1.insert({
"test" : "ok"})

返回信息:

3)登录从节点,查找数据

> db.test1.findOne();

返回信息:

说明数据同步成功。

2. 测试故障自动回复功能

1)停止当前的主节点进程,然后连接从节点,执行命令:

> rs.status();

从输出中可以看到,原来的主节点已经不可用:

同时,原来的从节点已经升级为主节点:

说明故障自动恢复成功。

2)此时在当前主节点上插入一条新数据

> db.test1.insert({
"test1":"ok"});

返回信息:

3)将先前停止的节点启动,并用mongo shell连接

此时新启动的实例应为从节点,从其中查找数据:

> db.test1.find()

验证故障节点恢复后,会自动从当前主节点同步增量数据

至此,mongodb 高可用集群的配置已经完成。

转载于:https://www.cnblogs.com/RUReady/p/6475445.html

你可能感兴趣的文章
Clipboard with Custom Clipboard Formats - Delphi
查看>>
[Step By Step]SAP HANA PAL 异态检测算法Anomaly Detection实现例程ANOMALYDETECTION
查看>>
linux上配置boost手记
查看>>
IIS状态监测(如果状态错误则重启IIS)
查看>>
PostgreSQL中,database,schema,table之间关系
查看>>
12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球(13个呢?)...
查看>>
HDU 2364 (记忆化BFS搜索)
查看>>
两个实用的方法从Base64字符串生成RSAPublicKey及RSAPrivatekey
查看>>
常用验证数字的正则表达式
查看>>
kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)[收藏]
查看>>
java读取excel文件数据
查看>>
Java的RMI远程方法调用实现和应用
查看>>
Linux 上使用 Gmail SMTP 服务器发送邮件通知
查看>>
Dell vsotro 14 3000系列从win10重装win7
查看>>
说说$POST 、$HTTP_RAW_POST_DATA、php://input三者之间的区别
查看>>
(一) Qt Model/View 的简单说明
查看>>
制作自己的MVC框架(三)——应用
查看>>
青云指南
查看>>
thinkphp 3.2 多表查询 group
查看>>
C#.NET 无法直接启动带有类库输出类型的项目怎么办
查看>>