当前位置: 首页 > news >正文

十、mongodb分片集群运维相关

一、k8s集群部署分片集群

1、规划:

角色IP地址端口
cluster01-router01192.168.86.2127017
cluster01-router02192.168.86.2227017
cluster01-router03192.168.86.2327017
cluster01-configsvr01192.168.86.2127018
cluster01-configsvr02192.168.86.2227018
cluster01-configsvr03192.168.86.2327018
shard01-shardsvr01192.168.86.2127019
shard01-shardsvr02192.168.86.2227019
shard01-shardsvr03192.168.86.2327019
shard02-shardsvr01192.168.86.2427019
shard02-shardsvr02192.168.86.2527019
shard02-shardsvr03192.168.86.2627019

2、测试步骤:
1> 部署1个3副本集群,有密码认证并写入数据
2> 副本集集群扩展为单个shard集群通过shard方式管理集群
3> 部署第2个副本集群并添加到shard集群内进行数据均衡

3、分别在3个节点部署部署3副本集群
1> cat /etc/kubernetes/manifests/shard01-shardsvr01.yaml

apiVersion: v1
kind: Pod
metadata:
  labels:
    app: mongodb
  name: shard01-shardsvr01
spec:
  terminationGracePeriodSeconds: 60
  containers:
  - name: mongo
    image: harbor.y9000p.chandz.com/infra/mongo:4.2.14
    command:
    - mongod
    - --replSet
    - shard01
    - --shardsvr
    - --wiredTigerCacheSizeGB=2
    - --bind_ip_all
    - --port=27019
    resources:
      limits:
        memory: 2Gi
        cpu: 1000m
      requests:
        memory: 1Gi
        cpu: 500m
    volumeMounts:
    - name: data
      mountPath: /data/db
  hostNetwork: true
  volumes:
  - name: data
    hostPath:
      path: /data/shard01-shardsvr

2> cat /etc/kubernetes/manifests/shard01-shardsvr02.yaml

apiVersion: v1
kind: Pod
metadata:
  labels:
    app: mongodb
  name: shard01-shardsvr02
spec:
  terminationGracePeriodSeconds: 60
  containers:
  - name: mongo
    image: harbor.y9000p.chandz.com/infra/mongo:4.2.14
    command:
    - mongod
    - --replSet
    - shard01
    - --shardsvr
    - --wiredTigerCacheSizeGB=2
    - --bind_ip_all
    - --port=27019
    resources:
      limits:
        memory: 2Gi
        cpu: 1000m
      requests:
        memory: 1Gi
        cpu: 500m
    volumeMounts:
    - name: data
      mountPath: /data/db
  hostNetwork: true
  volumes:
  - name: data
    hostPath:
      path: /data/shard01-shardsvr

3> cat /etc/kubernetes/manifests/shard01-shardsvr03.yaml

apiVersion: v1
kind: Pod
metadata:
  labels:
    app: mongodb
  name: shard01-shardsvr03
spec:
  terminationGracePeriodSeconds: 60
  containers:
  - name: mongo
    image: harbor.y9000p.chandz.com/infra/mongo:4.2.14
    command:
    - mongod
    - --replSet
    - shard01
    - --shardsvr
    - --wiredTigerCacheSizeGB=2
    - --bind_ip_all
    - --port=27019
    resources:
      limits:
        memory: 2Gi
        cpu: 1000m
      requests:
        memory: 1Gi
        cpu: 500m
    volumeMounts:
    - name: data
      mountPath: /data/db
  hostNetwork: true
  volumes:
  - name: data
    hostPath:
      path: /data/shard01-shardsvr

4> 初始化集群

安装mongo客户端
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.14.tgz -P /opt/
tar -xf /opt/mongodb-linux-x86_64-rhel70-4.2.14.tgz -C /opt/
export PATH=$PATH:/opt/mongodb-linux-x86_64-rhel70-4.2.14/bin/

初始化mongo集群
mongo 192.168.86.21:27019
use admin
rs.initiate({ _id: "shard01", members: [ { _id: 0, host : "192.168.86.21:27019" } ] } )
rs.add('192.168.86.22:27019')
rs.add('192.168.86.23:27019')

创建管理员用户
mongo 192.168.86.21:27019
use admin
db = db.getSiblingDB("admin");db.createUser({user:"root",pwd:"rootPassw0rd",roles:["root"]});

添加密码认证
openssl rand -base64 745 >> key
chmod 600 key
scp key root@common01:/data/shard01-shardsvr/
scp key root@common02:/data/shard01-shardsvr/
scp key root@common03:/data/shard01-shardsvr/

#各个节点修改yaml添加keyfile配置
sed -i '/port/a\    - --keyFile=/data/db/key' /etc/kubernetes/manifests/shard01-*.yaml

尝试登陆验证密码
mongo mongodb://root:rootPassw0rd@192.168.86.21:27019,192.168.86.22:27019,192.168.86.23:27019/admin?replicaSet=shard01

插入数据
use duanshuaixing-mongodb
for(i=1; i<=5000;i++){
  db.user.insert( {id:'user'+i, level:i} )
}

4、副本集集群扩展为单个shard集群通过shard方式管理集群
1>部署3节点configsvr集群

部署(启动参数中指定了角色为configsrv)
cat cluster01-configsvr0{1,2,3}.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: mongodb
  name: cluster01-configsvr0{1,2,3}
spec:
  terminationGracePeriodSeconds: 60
  containers:
  - name: configsvr
    image: harbor.y9000p.chandz.com/infra/mongo:4.2.14
    command:
    - mongod
    - --replSet
    - configsvr
    - --configsvr
    - --wiredTigerCacheSizeGB=2
    - --bind_ip_all
    - --port=27018
    resources:
      limits:
        memory: 2Gi
        cpu: 1000m
      requests:
        memory: 1Gi
        cpu: 500m
    volumeMounts:
    - name: data
      mountPath: /data/configdb
  hostNetwork: true
  volumes:
  - name: data
    hostPath:
      path: /data/cluster01-configsvr

初始化mongo集群
mongo 192.168.86.21:27018
use admin
rs.initiate({ _id: "configsvr", members: [ { _id: 0, host : "192.168.86.21:27018" } ] } )
rs.add('192.168.86.22:27018')
rs.add('192.168.86.23:27018')

创建管理员用户
mongo 192.168.86.21:27018
use admin
db = db.getSiblingDB("admin");db.createUser({user:"root",pwd:"rootPassw0rd",roles:["root"]});

#拷贝副本集的key并在各个节点修改yaml添加keyfile配置
cp -a /data/shard01-shardsvr/key /data/cluster01-configsvr/
sed -i '/port/a\    - --keyFile=/data/configdb/key' /etc/kubernetes/manifests/cluster01-configsvr*.yaml

尝试登陆验证密码
mongo mongodb://root:rootPassw0rd@192.168.86.21:27018,192.168.86.22:27018,192.168.86.23:27018/admin?replicaSet=configsvr

2>部署单节点router集群
router说明
mongodb中的router角色只负责提供一个入口,不存储任何的数据, 配置多个router,任何一个都能正常的获取数据

router最重要的配置,指定configsvr的地址,使用副本集id+ip端口的方式指定

cat /etc/kubernetes/manifests/cluster01-router01.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: mongodb
  name: cluster01-router01
spec:
  terminationGracePeriodSeconds: 60
  containers:
  - name: mongo
    image: harbor.y9000p.chandz.com/infra/mongo:4.2.14
    command:
    - mongos
    - --configdb
    - configsvr/192.168.86.21:27018,192.168.86.22:27018,192.168.86.23:27018
    - --bind_ip_all
    - --port=27017
    - --keyFile=/data/db/key
    resources:
      limits:
        memory: 2Gi
        cpu: 1000m
      requests:
        memory: 1Gi
        cpu: 500m
    volumeMounts:
    - name: data
      mountPath: /data/db
  hostNetwork: true
  volumes:
  - name: data
    hostPath:
      path: /data/cluster01-router

3>分片集群配置

mongo 192.168.86.21:27017(鉴权用的是configsvr集群密码)
use admin
sh.addShard("shard01/192.168.86.21:27019,192.168.86.22:27019,192.168.86.23:27019")
sh.status()

5、扩展第2个分片进行数据均衡

三、分片集群管理
1、常用命令

1>列出分片信息
use admin
db.runCommand( { listshards : 1 } )
或者
use config
db.shards.find()

2>整体分片查看
sh.status()

3>

相关文章:

  • 每日十(?)题之20220903
  • 2.数据结构与算法 进阶知识
  • 下载JDK8 JVM源码
  • 基于某钉探索针对CEF框架的一些逆向思路
  • C++迭代器
  • 关联容器(字典)map
  • 欧拉函数——最大公约数(gcd+筛质数+欧拉函数)
  • 【小程序】网络请求API介绍及网络请求的封装
  • ALTERA FPGA IPCORE核之单口RAM详细教程
  • Windows与网络基础-17-组策略应用
  • Python机器学习-多元分类的5种模型
  • k8s之client-go和ctrl的各种k8s client
  • 排序1:快速排序(三种)、归并排序、计数排序
  • LeetCode每日一题——1582. 二进制矩阵中的特殊位置
  • 【最长递增系列】动态规划法和贪心法
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • flask接收请求并推入栈
  • js操作时间(持续更新)
  • LintCode 31. partitionArray 数组划分
  • spring boot 整合mybatis 无法输出sql的问题
  • vue:响应原理
  • vue-loader 源码解析系列之 selector
  • 阿里研究院入选中国企业智库系统影响力榜
  • 订阅Forge Viewer所有的事件
  • 设计模式走一遍---观察者模式
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 自制字幕遮挡器
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 从如何停掉 Promise 链说起
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #git 撤消对文件的更改
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (20050108)又读《平凡的世界》
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (编译到47%失败)to be deleted
  • (十八)三元表达式和列表解析
  • (十六)串口UART
  • (十三)Maven插件解析运行机制
  • (四)图像的%2线性拉伸
  • (未解决)macOS matplotlib 中文是方框
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • .net Application的目录
  • .NET Reactor简单使用教程
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .Net 中Partitioner static与dynamic的性能对比
  • .net(C#)中String.Format如何使用
  • .netcore如何运行环境安装到Linux服务器
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • .ui文件相关
  • :如何用SQL脚本保存存储过程返回的结果集
  • @Autowired和@Resource装配