mongodb集群搭建 (仲裁模式)

mongodb集群搭建 (仲裁模式),第1张

8.1 主节点执行

/yuanben/mongodb/mongodb/bin/mongo 192.168.0.11:27017

use admin

mgdb_rscfg={ _id:"yuanben-rs", members:[ {_id:0,host:'192.168.0.11:27017',priority:2}, {_id:1,host:'192.168.0.12:27017',priority:1},{_id:2,host:'192.168.0.13:27017',arbiterOnly:true}] }

rs.initiate(mgdb_rscfg)

通过rs.status()查看是否生效 生效后 mater slave的客户端命令显示皆有变化哦

8.2 设置从节点读权限

让slave节点支持读 *** 作,在slave节点上修改mongorc.js启动文件

vi ~/.mongorc.js

加入以下内容即可:

setSlaveOk()

function setSlaveOk() {

rs.slaveOk()

print('slaveOk has been setted!’)

}

需要重启这个节点

kill -2 12595

./start.sh

8.3 创建用户

use admin

db.createUser(

{

user: “root”,

pwd: “xxxxxx”,

roles: [ { role: "root", db: "admin" } ]

}

)

db.createUser(

{

user: “scms”,

pwd: “xxxxxx”,

roles: [ { role: "readWrite", db: "scms" },{ role: "dbOwner", db: "scms" } ]

}

)

mongoDB主从数据同步

主库数据小于从库,从库回滚到跟主库同步状态

从上可知,假如原来主从数据同步出了问题,主库数据量远大于从库数据量,而你并没有察觉,某次主、从、仲裁进程全部挂了

如果先起原来从库和仲裁,将原来从库选举为现在PRIMARY,然后再启原来的主库成为现在的从库,那么就会导致原来的主库也就是现在的从库数据发生回滚

显然这不是你想看到的的情况,所以务必先启动原来的主库,让其也成为现在的主库,避免此类问题的发生!

针对primary-secondary-arbiter架构,mongoDB的实例重启:

1.从arbiter日志中获取之前主节点IP

2.启动primary节点mongo进程

3.启动arbiter节点的mongo进程

4.启动secondary节点mongo进程

$ cat hosts

$ cat start_primary-secondary-arbiter.yml

$ ansible-playbook -i hosts start_primary-secondary-arbiter.yml

mongoDB副本集 stateStr状态说明

https://www.jianshu.com/p/7f196c22af43

mongodb 集群搭建的方式有三种:

​ 首先我们先来了解一下Mongo集群的概念,Mongo集群有3个主要组件

​ ConfigServer:在集群中扮演存储整个集群的配置信息,负责配置存储,如果需要高可用的ConfigServer那么需要3个节点。

​ Shard:分片,存储真实的数据,每一个Shard分片都负责存储集群中的数据,例如一个集群有3个分片,然后我们定义分片规则为哈希,那么整个集群的数据就会(分割)到3个分片中的某一个分片,那么分片是特别重要的,如果集群中的一个分片全部崩溃了那么集群将不可用,所以我们要保证集群的高可用,那么我们需要一个分片配置3个节点,2个副本集一个仲裁节点,仲裁节点类似于Redis的哨兵模式,如果发现主节点挂了那么让另一个副本集进行数据存储。

​ Mongos:Mongos我们可以理解为整个集群的入口,类似于Kafka的Broker代理,也就是客户端,我们通过客户端连接集群进行查询。

​ 下面是MongoDB的官方集群架构图,我们看到Mongos是一个路由,他们的信息都存储在ConfigServer中,我们通过Mongos进行添加,然后根据条件将数据进行分片到分片的副本集中

首先我们搭建两个config-server

创建两个config-server的配置文件

然后配置文件中配置端口

然后启动容器

然后进入容器初始化

如果ok为1表示成功

下面我们给每个server创建2个分片

创建挂载文件

创建配置文件

然后启动容器

进入第一个分片

进入第二个分片

创建挂载文件

然后启动Mongo

mongo添加分片组

新建数据启用分片

那么我们先来总结一下我们搭建一个高可用集群需要多少个Mongo

mongos : 3台

configserver : 3台

shard: 3片

每一片shard 分别 部署两个副本集和一个仲裁节点 : 3台

那么就是 3 + 3 + 3 * 3 = 15 台,我这里演示采用3台服务器

​ 114.67.80.169 4核16g 部署一个configserver,一个mongos,2个分片组

​ 182.61.2.16 2核4g 部署一个configserver,一个mongos,1个分片组

​ 106.12.113.62 1核2g 部署一个configserver,一个mongos,不搭建分片组

由于此处服务器原因所以不是均衡分布,请根据自身实际情况搭建

​ 我们先来搭建ConfigServer,因为我们知道搭建的话一定要高可用而且一定要权限这里mongo之间通信采用秘钥文件,所以我们先进行生成

创建挂载文件目录

写入配置文件

然后生成keyFile

文件如下,我们,之后我们所以key都采用这个(请采用自己生成的key)

写入key文件

然后启动config-server1容器

创建挂载文件目录

写入配置文件

写入配置文件

文件如下,我们,之后我们所以key都采用这个(请采用自己生成的key)

写入key文件

然后启动config-server2容器

创建挂载文件目录

写入配置文件

文件如下,我们,之后我们所以key都采用这个(请采用自己生成的key)

写入key文件

然后启动config-server3容器

进入第一台容器

输入

如果返回ok则成功

然后我们创建用户

​ 由于mongos是客户端,所以我们先搭建好config以及shard之后再搭建mongos。

在同一台服务器上初始化一组分片

创建挂载文件

配置配置文件

创建keyfile

运行shard1分片组

并且制定第三个副本集为仲裁节点

返回ok后创建用户

然后退出,分片组1搭建完成

在同一台服务器上初始化一组分片

创建挂载文件

配置配置文件

创建keyfile

运行shard2分片组

并且制定第三个副本集为仲裁节点

返回ok后创建用户

然后退出,分片组2搭建完成

在同一台服务器上初始化一组分片

创建挂载文件

配置配置文件

创建keyfile

运行shard3分片组

并且制定第三个副本集为仲裁节点

返回ok后创建用户

然后退出,分片组3搭建完成

创建配置文件

填入配置文件,这里我们删除了认证的信息,因为mongos是不能设置认证的,他也是用的前面使用的密码即可,如configserver的密码

创建keyfile

运行mongos1

创建配置文件

填入配置文件,这里我们删除了认证的信息,因为mongos是不能设置认证的,他也是用的前面使用的密码即可,如configserver的密码

创建keyfile

运行mongos2

创建配置文件

填入配置文件,这里我们删除了认证的信息,因为mongos是不能设置认证的,他也是用的前面使用的密码即可,如configserver的密码

创建keyfile

运行mongos3

进入第一台mongos

先登录(使用前面设置的root用户密码)

进行配置分片信息

全部返回ok则成功

去其他两台mongos执行

mongos2

mongos3

创建用户

插入数据

openssl rand -base64 756 >mongo.key

清空server1两个分片数据

清空server2两个分片数据


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11403481.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存