MongoDB分片集群在k8s上的部署实战(二)

前戏 小白:你好,老花!前面我们已经用kind创建了一个k8s集群, 接下来我们怎么部署sharded cluster? 老花:当然可以,小白!我们先从 Helm 的安装开始,然后详细介绍 Helm 中的每个角色配置,最后解释 Helm 应用是如何运行起来的。 helm 简介 安装 helm 老花:Helm 是 Kubernetes 的包管理器,它帮助我们管理 Kubernetes 应用。安装 Helm 的步骤如下: 下载 Helm:访问 Helm 的官方 GitHub 页面,下载最新版本的 Helm。 解压并移动 Helm 到你的 PATH 中: tar -zxvf helm-v3.0.0-linux-amd64.tar.gz cd linux-amd64 sudo mv helm /usr/local/bin/ 验证 Helm 是否安装成功: helm version 老花:Helm也安装好了,我们可以开始部署 MongoDB Sharded 集群了。再安装之前, 我们先了解 Helm 的基本命令。 Helm 常见命令汇总 helm init:初始化 Tiller(在 Helm 3 中不再需要)。 helm repo add <repo_name> <repository_url>:添加一个新的 Helm 仓库。 helm repo list:列出所有已添加的 Helm 仓库。 helm repo update:更新本地仓库的缓存。 helm search repo <keyword>:在所有仓库中搜索 Chart。 helm search hub <keyword>:在 Helm Hub 中搜索 Chart。 helm install <release_name> <chart>:安装一个 Helm Chart,并给它一个发布名称。 helm install --namespace <namespace> <release_name> <chart>:指定命名空间安装 Helm Chart。 helm list:列出所有的 Helm 发布。 helm status <release_name>:获取指定 Helm 发布的状态信息。 helm upgrade <release_name> <new_chart>:升级一个现有的 Helm 发布到新版本的 Chart。 helm rollback <release_name> <revision>:将 Helm 发布回滚到指定的版本。 helm uninstall <release_name>:卸载一个 Helm 发布。 helm history <release_name>:查看一个 Helm 发布的更新历史。 helm package <chart_dir>:将 Helm Chart 打包成 tgz 文件。 helm show chart <chart>:查看一个 Helm Chart 的详细信息。 helm get values <release_name>:查看指定 Helm 发布的配置值。 helm get all <release_name>:查看指定 Helm 发布的所有配置和值。 helm dependency list <chart>:列出一个 Helm Chart 的依赖。 helm dependency update <chart_dir>:更新一个 Helm Chart 目录中的依赖。 helm lint <chart_dir>:对一个 Helm Chart 进行 lint 检查。 MongoDB Helm Chart 中的每个角色配置 前文提到过, MongoDB Sharded 集群主要包括以下几个角色: ...

十一月 28, 2024 · 4 分钟 · 661 字 · zhu733756

MongoDB分片集群在k8s上的部署实战(一)

前戏 小白:你好,老花!我对在 Kubernetes 上使用 Helm 部署 MongoDB Sharded 集群很感兴趣,但我对 Kind 和 Helm 不太熟悉,你能详细教我一下吗? 老花:当然可以,小白!我们先从 Kind 和 Helm 的安装开始,然后详细介绍 Helm 中的每个角色配置,最后解释 Helm 应用是如何运行起来的。 Kind 快速构建集群 Kind 是一个使用 Docker 容器作为节点来运行本地 Kubernetes 集群的工具。可以通过以下步骤安装 Kind: 安装 Docker Kind 需要 Docker 来运行 Kubernetes 集群,所以首先确保你已经安装了 Docker。 安装 Kind 可以使用以下两种方式中一种下载: > sudo apt-get install kind > go install sigs.k8s.io/kind@v0.25.0 Tip: 如果镜像无法拉取, 可以配置一些国内源: cat /etc/docker/daemon.json { "registry-mirrors": [ "https://docker.m.daocloud.io", "https://dockerproxy.com", "https://docker.mirrors.ustc.edu.cn", "https://docker.nju.edu.cn" ] } 或者使用代理: { "proxies": { "default": { "httpProxy": "http://xxxx:xx", "httpsProxy": "https://xxxx:xx", "noProxy": "docker.m.daocloud.io,127.0.0.0/8" } } } 创建Kind集群: 配置docker和环境 下面的命令修改了docker运行时, 并配置了ulimits上限: ...

十一月 27, 2024 · 3 分钟 · 563 字 · zhu733756

MongoDB分片集群Sharded Cluster容器化部署实战

前戏 上回说了 MongoDB 的高可用架构有两种, 副本集合分片集群, 这一回我们来探索,分片集群怎么部署吧! 小白: 你好,老花!我想学习如何部署 MongoDB 的分片集群,你能帮帮我吗? 老花: 当然可以!MongoDB 的分片集群(Sharded Cluster)是一种分布式数据库架构,可以帮你处理大量数据和高吞吐量请求。接下来,我会一步步带你完成部署。 docker-compose 部署实战 第一步:准备工作 在我们开始之前,你需要确保已经克隆了这个 GitHub 仓库,并且切换到了with-keyfile-auth这个文件夹。这个文件夹包含了我们需要的带认证的 docker-compose 配置文件。 git clone https://github.com/minhhungit/mongodb-cluster-docker-compose.git cd mongodb-cluster-docker-compose/with-keyfile-auth 第二步:创建密钥文件 为了设置认证,我们需要一个密钥文件。我已经帮你创建了一个,但如果你自己想要创建一个,可以按照以下步骤操作: 在 Linux 上,你可以使用以下命令: openssl rand -base64 756 > mongodb-keyfile chmod 400 mongodb-keyfile 创建好mongodb-keyfile后,记得替换文件夹with-keyfile-auth/mongodb-build/auth/中的文件,然后进行下一步。 第三步:启动所有容器 更新或者安装 docker-compose: pip install docker-compose -U 现在,我们来启动所有的 Docker 容器。切换到with-keyfile-auth目录下,然后运行: docker-compose up -d Tip: 如果镜像无法拉取, 可以配置一些国内源: cat /etc/docker/daemon.json { "registry-mirrors": [ "https://docker.m.daocloud.io", "https://dockerproxy.com", "https://docker.mirrors.ustc.edu.cn", "https://docker.nju.edu.cn" ] } docker pull docker.m.daocloud.io/mongo:6.0.2 docker tag docker.m.daocloud.io/mongo:6.0.2 mongo:6.0.2 docker-compose up -d 预期的输出如下, 可以看到目前我们已经启动三个分片副本集合, ...

十一月 25, 2024 · 3 分钟 · 430 字 · zhu733756

MongoDB 高可用架构: 副本(ReplicaSet)/分片(Sharding)集群是什么回事

前戏 小白:嗨,老花,我听说 MongoDB 挺火的,但我对它不是很了解。你能给我讲讲 MongoDB 是啥,它和 MySQL 这样的 SQL 数据库有啥不同吗? 老花:当然可以!MongoDB 是一种 NoSQL 数据库,它以文档存储的形式存储数据,这使得它在处理大量半结构化数据时非常灵活和高效。与 MySQL 这样的关系型数据库相比,MongoDB 不需要预定义的模式,支持动态字段,这对于快速发展和频繁变更的数据模型来说是一个很大的优势。 以下是 MySQL 和 MongoDB 进行增删改查操作的基本 SQL 语句和命令的对比: MySQL CRUD INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); DELETE FROM table_name WHERE condition; UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition; SELECT column1, column2, ... FROM table_name WHERE condition; MongoDB CRUD db.collection_name.insert({ field1: value1, field2: value2, field3: value3, ... }); db.collection_name.insertMany([ { field1: value1, field2: value2, field3: value3, ... }, { field1: value1, field2: value2, field3: value3, ... }, ... ]); db.collection_name.remove({ condition: value }); db.collection_name.deleteMany({ condition: value }); db.collection_name.update( { <filter> }, { $set: { <field1>: <value1>, <field2>: <value2>, ... } }, { multi: <boolean> } ); db.collection_name.find({ field: value }); 在 MongoDB 中,<filter> 是查询条件,<field1> 和 <value1> 是要更新的字段和值,multi 参数是一个布尔值,如果设置为 true,则更新所有匹配的文档,否则只更新第一个匹配的文档。 ...

十一月 22, 2024 · 2 分钟 · 362 字 · zhu733756