kubernetes生产实践之mongodb

简介

先看下生命周期图


image.png

kubedb支持的mongodb版本

[root@qd01-stop-k8s-master001 mysql]# kubectl get mongodbversions
NAME             VERSION   DB_IMAGE                                 DEPRECATED   AGE
3.4.17-v1        3.4.17    kubedb/mongo:3.4.17-v1                                46h
3.4.22-v1        3.4.22    kubedb/mongo:3.4.22-v1                                46h
3.6.13-v1        3.6.13    kubedb/mongo:3.6.13-v1                                46h
3.6.18-percona   3.6.18    percona/percona-server-mongodb:3.6.18       46h
3.6.8-v1         3.6.8     kubedb/mongo:3.6.8-v1                                 46h
4.0.10-percona   4.0.10    percona/percona-server-mongodb:4.0.10       46h
4.0.11-v1        4.0.11    kubedb/mongo:4.0.11-v1                                46h
4.0.3-v1         4.0.3     kubedb/mongo:4.0.3-v1                                 46h
4.0.5-v3         4.0.5     kubedb/mongo:4.0.5-v3                                 46h
4.1.13-v1        4.1.13    kubedb/mongo:4.1.13-v1                                46h
4.1.4-v1         4.1.4     kubedb/mongo:4.1.4-v1                                 46h
4.1.7-v3         4.1.7     kubedb/mongo:4.1.7-v3                                 46h
4.2.3            4.2.3     kubedb/mongo:4.2.3                                        46h
4.2.7-percona    4.2.7     percona/percona-server-mongodb:4.2.7-7    46h

MongoDB ReplicaSet

mongodb复制集模式架构如下图


image.png

1、定义配置文件,创建secret

cat mongod.conf
net:
   maxIncomingConnections: 10000

[root@qd01-stop-k8s-master001 Replication]# kubectl create secret generic -n op mg-configuration --from-file=./mongod.conf
secret/mg-configuration created

[root@qd01-stop-k8s-master001 Replication]# kubectl get secret -n op
NAME                       TYPE                                  DATA   AGE
mg-configuration      Opaque                                1      20s

2、定义mongod-replicaset.yaml文件

apiVersion: kubedb.com/v1alpha2
kind: MongoDB
metadata:
  name: mongodb-replicaset
  namespace: op
spec:
  version: "4.2.3"
  replicas: 3
  replicaSet:
    name: rs0
  configSecret:
    name: mg-configuration
  storage:
    storageClassName: "rbd"
    accessModes:
    - ReadWriteOnce
    resources:
      requests:
        storage: 1Gi

3、执行安装并查看部署结果

[root@qd01-stop-k8s-master001 Replication]# kubectl apply -f mongod-replicaset.yaml
mongodb.kubedb.com/mongodb-replicaset created

[root@qd01-stop-k8s-master001 Replication]# kubectl get po -n op
NAME                   READY   STATUS    RESTARTS   AGE
mongodb-replicaset-0   2/2     Running   0          24m
mongodb-replicaset-1   2/2     Running   0          22m
mongodb-replicaset-2   2/2     Running   0          20m

4、验证集群

# 获取用户名和密码
[root@qd01-stop-k8s-master001 Replication]#  kubectl get secrets -n demo mgo-replicaset-auth -o jsonpath='{.data.\username}' | base64 -d
root
[root@qd01-stop-k8s-master001 Replication]#  kubectl get secrets -n demo mgo-replicaset-auth -o jsonpath='{.data.\password}' | base64 -d
123456

# 登录mongodb-replicaset-0查看集群状态,并测试读写
[root@qd01-stop-k8s-master001 Replication]# kubectl -n op  exec -ti mongodb-replicaset-0 -- /bin/bash
root@mongodb-replicaset-0:/# mongo admin -uroot -p123456
MongoDB shell version v4.2.3
connecting to: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("cc1b6a09-f407-44d8-be3b-8b32db4a10b0") }
MongoDB server version: 4.2.3
Welcome to the MongoDB shell.
......
rs0:PRIMARY>

# 查看当前PRIMARY节点
rs0:PRIMARY> rs.isMaster().primary
mongodb-replicaset-0.mongodb-replicaset-pods.op.svc.cluster.local:27017

# 读写数据
rs0:PRIMARY> use testdb
switched to db testdb
rs0:PRIMARY> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
rs0:PRIMARY> db.movie.insert({"name":"scofield"});
WriteResult({ "nInserted" : 1 })
rs0:PRIMARY> db.movie.find().pretty()
{ "_id" : ObjectId("604b17469d22a18817a5927e"), "name" : "scofield" }

MongoDB Sharding

mongodb分片模式架构如下图


image.png
shard :每个分片包含分片数据的子集。 从MongoDB 3.6开始,分片必须作为副本集部署。
mongos:mongos充当查询路由器,在客户端应用程序和分片群集之间提供接口。
config servers:配置服务器存储群集的元数据和配置设置。 从MongoDB 3.4开始,配置服务器必须部署为副本集(CSRS)。

1、编写mongodb-sharding.yaml

apiVersion: kubedb.com/v1alpha2
kind: MongoDB
metadata:
  name: mongo-sharding
  namespace: op
spec:
  version: 4.2.3
  shardTopology:
    configServer:
      replicas: 3
      storage:
        resources:
          requests:
            storage: 1Gi
        storageClassName: rbd
    mongos:
      replicas: 2
    shard:
      replicas: 3
      shards: 2
      storage:
        resources:
          requests:
            storage: 1Gi
        storageClassName: rbd

2、执行部署,并查看部署状态

[root@qd01-stop-k8s-master001 Sharded]# kubectl apply -f mongodb-sharding.yaml
mongodb.kubedb.com/mongo-sharding created

[root@qd01-stop-k8s-master001 Sharded]# kubectl get po -n op
NAME                         READY   STATUS    RESTARTS   AGE
mongo-sharding-configsvr-0   1/1     Running   0          27m
mongo-sharding-configsvr-1   1/1     Running   0          12m
mongo-sharding-configsvr-2   1/1     Running   0          9m54s
mongo-sharding-mongos-0      1/1     Running   0          7m27s
mongo-sharding-mongos-1      1/1     Running   0          4m23s
mongo-sharding-shard0-0      1/1     Running   0          27m
mongo-sharding-shard0-1      1/1     Running   0          25m
mongo-sharding-shard0-2      1/1     Running   0          24m
mongo-sharding-shard1-0      1/1     Running   0          27m
mongo-sharding-shard1-1      1/1     Running   0          25m
mongo-sharding-shard1-2      1/1     Running   0          22m

和复制集相比,分片集需要更多的资源。以保证整个集群的健壮性,而且能后提供更大容量的存储空间。

3、验证集群状态及读写

# 获取账号密码
kubectl get secrets -n demo mongo-sh-auth -o jsonpath='{.data.\username}' | base64 -d
root
kubectl get secrets -n demo mongo-sh-auth -o jsonpath='{.data.\password}' | base64 -d
123456

# 连接mongo
root@mongo-sharding-mongos-0:/# mongo admin -u root -p
MongoDB shell version v4.2.3
Enter password: 
connecting to: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("948eadef-87b6-4ab2-ba5a-c8f4e23689a7") }
MongoDB server version: 4.2.3
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        http://docs.mongodb.org/
Questions? Try the support group
        http://groups.google.com/group/mongodb-user
Server has startup warnings:
2021-03-12T08:10:48.173+0000 I  CONTROL  [main] ** WARNING: You are running this process as the root user, which is not recommended.
2021-03-12T08:10:48.173+0000 I  CONTROL  [main]
mongos>

# 查看分片集群状态
mongos> sh.status()
--- Sharding Status ---
  sharding version: {
        "_id" : 1,
        "minCompatibleVersion" : 5,
        "currentVersion" : 6,
        "clusterId" : ObjectId("604b201f7fb058e04bb03ef0")
  }
  shards:
        {  "_id" : "shard0",  "host" : "shard0/mongo-sharding-shard0-0.mongo-sharding-shard0-pods.op.svc.cluster.local:27017,mongo-sharding-shard0-1.mongo-sharding-shard0-pods.op.svc.cluster.local:27017,mongo-sharding-shard0-2.mongo-sharding-shard0-pods.op.svc.cluster.local:27017",  "state" : 1 }
        {  "_id" : "shard1",  "host" : "shard1/mongo-sharding-shard1-0.mongo-sharding-shard1-pods.op.svc.cluster.local:27017,mongo-sharding-shard1-1.mongo-sharding-shard1-pods.op.svc.cluster.local:27017,mongo-sharding-shard1-2.mongo-sharding-shard1-pods.op.svc.cluster.local:27017",  "state" : 1 }
  active mongoses:
        "4.2.3" : 2
  autosplit:
        Currently enabled: yes
  balancer:
        Currently enabled:  yes
        Currently running:  no
        Failed balancer rounds in last 5 attempts:  0
        Migration Results for the last 24 hours: 
                No recent migrations
  databases:
        {  "_id" : "config",  "primary" : "config",  "partitioned" : true }
                config.system.sessions
                        shard key: { "_id" : 1 }
                        unique: false
                        balancing: true
                        chunks:
                                shard0  1
                        { "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : shard0 Timestamp(1, 0)

#创建分片
mongos> sh.enableSharding("test");
{
        "ok" : 1,
        "operationTime" : Timestamp(1615538870, 3),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1615538870, 3),
                "signature" : {
                        "hash" : BinData(0,"CTnuwtgOIn+ke0qqarLQIi+VXz8="),
                        "keyId" : NumberLong("6938674968410456068")
                }
        }
}
# 创建集合
mongos> sh.shardCollection("test.testcoll", {"myfield": 1});
{
        "collectionsharded" : "test.testcoll",
        "collectionUUID" : UUID("313cacbe-014c-4e0a-9112-427de2351bdd"),
        "ok" : 1,
        "operationTime" : Timestamp(1615539067, 9),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1615539067, 9),
                "signature" : {
                        "hash" : BinData(0,"1RQN94R6yHvUa0SqBHkiV2hUXNM="),
                        "keyId" : NumberLong("6938674968410456068")
                }
        }
}
# 写入数据
mongos> db.testcoll.insert({"myfield": "scofield", "agefield": "18"});
WriteResult({ "nInserted" : 1 })
mongos> db.testcoll.insert({"myfield": "amos", "otherfield": "d", "kube" : "db" });
WriteResult({ "nInserted" : 1 })

# 获取数据
mongos> db.testcoll.find();
{ "_id" : ObjectId("604b2d099446ca80f20bab7f"), "myfield" : "scofield", "agefield" : "18" }
{ "_id" : ObjectId("604b2d4d9446ca80f20bab80"), "myfield" : "amos", "otherfield" : "d", "kube" : "db" }
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容