k8s部署mongodb副本集

1.什么mongodb?

MongoDB 是一个基于分布式文件存储的数据库,由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。 MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

2、MongoDB 概念

2.1、数据库

MongoDB 的单个实例可以容纳多个独立的数据库,每个数据库都有自己的集合和权限。 数据库通过名字来标识;数据库名为 UTF-8 字符串,需满足以下条件:

  • 不能是空字符串("")。
  • 不得含有 ' '(空格)、.、$、/、\ 和 \0 (空字符)。
  • 应全部小写。
  • 最多 64 字节。

内置数据库:

  • admin:管理数据库。将一个用户添加到这个数据库,则这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如关闭服务器。
  • **local:**这个数据永远不会被复制,可以用来存储限于本地单台服务器的集合。
  • **config:**当 MongoDB 使用分片时,config 数据库用于保存分片的相关信息。

2.2、文档(Document)

文档是一组键值(key-value)对(即 BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。一个简单的文档例子如下:

复制代码
{"name":"李白", "age":30}

文档有如下特性:

  1. 文档中的键/值对是有序的。
  2. 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
  3. MongoDB 区分类型和大小写。
  4. MongoDB 的文档不能有重复的键。
  5. 文档的键是字符串。除了少数例外情况,键可以使用任意 UTF-8 字符。

文档键命名规范:

  • 键不能含有\0 (空字符)。这个字符用来表示键的结尾。
  • .和$有特别的意义,只有在特定环境下才能使用。
  • 以下划线"_"开头的键是保留的(不是严格要求的)。

2.3、集合

集合就是文档组,类似于关系数据库中的表。集合没有固定的结构,可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。 比如,我们可以将以下不同数据结构的文档插入到同一集合中:

{"name":"杜甫", "age":29}
{"name":"李白", "age":30}
{"name":"白居易", "age":31, "height":175}

集合名的命名规范:

  • 集合名不能是空字符串""。
  • 集合名不能含有\0字符(空字符),这个字符表示集合名的结尾。
  • 集合名字不能含有保留字符;集合名中不要有$。

Capped collections 是固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。和标准的集合不同,你必须要显式的创建一个 capped collection,指定一个集合的大小,单位是字节。固定集合的数据存储空间值提前分配的。固定集合不能删除一个文档,可以使用 drop() 方法删除整个集合。

2.4、MondoDB 和 RDBMS 的对比

RDBMS 术语/概念 MongoDB 术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins $lookup
primary key primary key 主键,MongoDB 自动将 _id 字段设置为主键
transaction transaction
group by aggregation

3.如何部署

mongodb有三种部署模式

  • Replica Set(副本集)
  • Sharded Cluster(分片)
  • Standalone MongoDB Instance(测试学习用)

实验目标

在k8s里面部署mongodb副本集

克隆项目

复制代码
git clone https://github.com/mongodb/mongodb-enterprise-kubernetes.git

create namespace

kubectl create namespace mongodb

Create CustomResourceDefinitions

kubectl apply -f crds.yaml -n namespace

install the Operator

kubectl apply -f mongodb-enterprise.yaml  -n namespace

Projects

A Project object is a Kubernetes ConfigMap that points to an Ops Manager installation and a Project. This ConfigMap has the following structure:

$ cat my-project.yaml
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-project
  namespace: mongodb
data:
  projectName: myProjectName # this is an optional parameter
  orgId: 5b890e0feacf0b76ff3e7183 # this is an optional parameter
  baseUrl: https://my-ops-manager-or-cloud-manager-url

Apply this file to create the new Project:

kubectl apply -f my-project.yaml -n middleware

Credentials

kubectl -n mongodb create secret generic my-credentials --from-literal="user=my-public-api-key" --from-literal="publicApiKey=my-private-api-key" -n middleware

Creating a MongoDB Resource

kubectl apply -f samples/mongodb/minimal/replica-set.yaml -n mongodb

Create Admin Credentials Secret

kubectl create secret generic ops-manager-admin-secret  --from-literal=Username="user.name@example.com" --from-literal=Password="Passw0rd."  --from-literal=FirstName="User" --from-literal=LastName="Name" -n <namespace>

Create MongoDBOpsManager Resource

kubectl apply -f samples/ops-manager/ops-manager-external.yaml -n <namespace>

4.验证

为了从 Kubernetes 集群外部访问 Ops Manager UI,您必须在 Ops Manager 资源定义中启用 spec.externalConnectivity。最简单的方法是配置 LoadBalancer 服务类型。

测试Ops Manager UI

您将能够从 Operator 创建的 Service 对象中获取用于连接到 Ops Manager UI 的 URL。

访问http//:{节点ip}:31147

用户名和密码是前面创建的

测试mongodb连接

MongoDB Connection String:

复制代码
mongodb://redacted-credentials@ops-manager-external-db-0.ops-manager-external-db-svc.middleware.svc.cluster.local:27017,ops-manager-external-db-1.ops-manager-external-db-svc.middleware.svc.cluster.local:27017,ops-manager-external-db-2.ops-manager-external-db-svc.middleware.svc.cluster.local:27017/?authMechanism=SCRAM-SHA-256&authSource=admin&connectTimeoutMS=20000&replicaSet=ops-manager-external-db&serverSelectionTimeoutMS=20000

用mongo compass客户端工具测试,可以登录

5.引用

相关推荐
景天科技苑42 分钟前
【云原生开发】K8S多集群资源管理平台架构设计
云原生·容器·kubernetes·k8s·云原生开发·k8s管理系统
wclass-zhengge1 小时前
K8S篇(基本介绍)
云原生·容器·kubernetes
颜淡慕潇2 小时前
【K8S问题系列 |1 】Kubernetes 中 NodePort 类型的 Service 无法访问【已解决】
后端·云原生·容器·kubernetes·问题解决
川石课堂软件测试3 小时前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
昌sit!10 小时前
K8S node节点没有相应的pod镜像运行故障处理办法
云原生·容器·kubernetes
A ?Charis12 小时前
Gitlab-runner running on Kubernetes - hostAliases
容器·kubernetes·gitlab
wclass-zhengge13 小时前
Docker篇(Docker Compose)
运维·docker·容器
北漂IT民工_程序员_ZG13 小时前
k8s集群安装(minikube)
云原生·容器·kubernetes
梦魇梦狸º16 小时前
腾讯轻量云服务器docker拉取不到镜像的问题:拉取超时
docker·容器·github
齐 飞17 小时前
MongoDB笔记02-MongoDB基本常用命令
前端·数据库·笔记·后端·mongodb