MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Gambaran Umum Operator Percona MongoDB Kubernetes

MongoDB dan Kubernetes adalah kombinasi yang hebat, terutama dalam hal kompleksitas. Namun, Percona's MongoDB (PSMDB) menawarkan lebih banyak fleksibilitas untuk database NoSQL, dan dilengkapi juga dengan alat yang efisien untuk produktivitas saat ini; tidak hanya lokal tetapi juga tersedia untuk cloud native.

Tingkat adopsi Kubernetes terus meningkat. Masuk akal bahwa suatu teknologi harus memiliki operator untuk melakukan hal berikut:pembuatan, modifikasi, dan penghapusan item Percona Server untuk lingkungan MongoDB. Operator Kubernetes MongoDB Percona berisi pengaturan k8s yang diperlukan untuk mempertahankan Server Percona yang konsisten untuk instans MongoDB. Sebagai opsi alternatif, Anda dapat membandingkan ini dengan https://github.com/kubedb/mongodb tetapi KubeDB untuk MongoDB memang menawarkan opsi yang sangat terbatas untuk ditawarkan terutama pada sistem tingkat produksi.

Operator Percona Kubernetes yang membanggakan konfigurasinya berbasis dan mengikuti praktik terbaik untuk konfigurasi set replika PSMDB. Yang paling penting, operator untuk MongoDB sendiri memberikan banyak manfaat tetapi menghemat waktu, lingkungan yang konsisten adalah yang paling penting. Di blog ini, kita akan mengambil gambaran tentang bagaimana hal ini bermanfaat terutama di lingkungan kemas.

Apa yang Dapat Ditawarkan Operator Ini?

Operator ini berguna untuk PSMDB menggunakan set replika. Artinya, arsitektur desain database Anda harus sesuai dengan diagram berikut di bawah

Gambar dipinjam dari Tinjauan Desain Dokumentasi Percona

Gambar dipinjam dari Tinjauan Desain Dokumentasi Percona

Saat ini, platform yang didukung yang tersedia untuk operator ini adalah:

  • OpenShift 3.11
  • OpenShift 4.5
  • Google Kubernetes Engine (GKE) 1,15 - 1,17
  • Layanan Kontainer Elastis Amazon untuk Kubernetes (EKS) 1.15
  • Minikube 1.10
  • VMWare Tanzu

Platform Kubernetes lain mungkin juga berfungsi tetapi belum diuji.

Batas Sumber Daya

Kluster yang menjalankan platform yang didukung secara resmi berisi setidaknya tiga Node, dengan sumber daya berikut:

  • 2GB RAM
  • 2 CPU thread per Node untuk penyediaan Pod
  • setidaknya 60 GB penyimpanan yang tersedia untuk penyediaan Volume Pribadi

Keamanan Dan/Atau Kendala Pembatasan

Kubernetes berfungsi seperti saat membuat Pod, setiap Pod memiliki alamat IP di jaringan virtual internal cluster. Membuat atau menghancurkan Pod adalah proses yang dinamis, jadi tidak disarankan untuk mengikat Pod Anda ke alamat IP tertentu yang ditetapkan untuk komunikasi antar Pod. Hal ini dapat menyebabkan masalah karena berbagai hal berubah dari waktu ke waktu sebagai akibat dari penskalaan cluster, kesalahan yang tidak disengaja, pemadaman atau bencana dc, atau pemeliharaan berkala, dll. Dalam hal ini, operator sangat menyarankan Anda untuk terhubung ke Server Percona untuk MongoDB melalui internal Kubernetes Nama DNS di URI (mis. mongodb+srv://userAdmin:[email protected]-rs0..svc.cluster.local/admin?replicaSet=rs0&ssl=false).

Operator Kubernetes PSMDB ini juga menggunakan affinity/anti-affinity yang memberikan batasan agar pod Anda dapat dijadwalkan untuk dijalankan atau dimulai pada node tertentu. Affinity mendefinisikan pod yang memenuhi syarat yang dapat dijadwalkan pada node yang sudah memiliki pod dengan label tertentu. Anti-afinitas mendefinisikan pod yang tidak memenuhi syarat. Pendekatan ini mengurangi biaya dengan memastikan beberapa pod dengan pertukaran data intensif menempati zona ketersediaan yang sama atau bahkan node yang sama atau, sebaliknya, menyebarkan pod pada node yang berbeda atau bahkan zona ketersediaan yang berbeda untuk ketersediaan tinggi dan tujuan penyeimbangan. Meskipun operator menganjurkan Anda untuk mengatur afinitas/anti-afinitas, namun ini memiliki batasan saat menggunakan Minikube.

Saat menggunakan Minikube, Minikube memiliki batasan khusus platform berikut. Minikube tidak mendukung konfigurasi cluster multi-node karena sifatnya yang lokal, yang bertentangan dengan persyaratan afinitas default Operator. Untuk mengaturnya, instruksi Instal Server Percona untuk MongoDB di Minikube menyertakan langkah tambahan yang menonaktifkan persyaratan memiliki tidak kurang dari tiga Node.

Di bagian berikut dari blog ini, kita akan menyiapkan Operator Kubernetes PMSDB menggunakan Minikube dan kita akan mengikuti set anti-afinitas untuk membuatnya bekerja. Apa perbedaannya dengan menggunakan anti-afinitas, jika Anda mengubah AntiAffinity, Anda meningkatkan risiko untuk ketersediaan cluster. Katakanlah, jika tujuan utama Anda menyebarkan PSMDB Anda ke lingkungan kemas adalah untuk menyebarkan dan memiliki ketersediaan yang lebih tinggi namun skalabilitas, maka ini mungkin mengalahkan tujuannya. Namun menggunakan Minikube terutama di tempat dan untuk menguji pengaturan PSMDB Anda dapat dilakukan tetapi untuk beban kerja produksi Anda pasti ingin menjalankan node pada host yang terpisah, atau dalam pengaturan lingkungan sedemikian rupa sehingga kegagalan beberapa pod secara bersamaan tidak mungkin terjadi.

Data Dalam Transit/Data Tidak Aktif

Untuk keamanan data dengan PSMDB, operator menawarkan TLS/SSL untuk transit, kemudian juga menawarkan enkripsi saat data tidak aktif. Untuk in transit, opsi yang dapat Anda pilih adalah menggunakan cert-manager, atau membuat sertifikat Anda sendiri secara manual. Tentu saja, Anda secara opsional dapat menggunakan PSMDB tanpa TLS untuk operator ini. Lihat dokumentasi mereka terkait penggunaan TLS.

Untuk data saat istirahat, diperlukan perubahan dalam Operator Kubernetes PSMDB mereka setelah Anda mengunduh cabang github, lalu menerapkan perubahan pada file deploy/cr.yaml. Untuk mengaktifkan ini, lakukan hal berikut seperti yang disarankan oleh dokumentasi:

  • Kunci security.enableEncryption harus disetel ke true (nilai default).
  • Kunci security.encryptionCipherMode harus menentukan mode sandi yang tepat untuk dekripsi. Nilai dapat berupa salah satu dari dua varian berikut:
    • AES256-CBC (default untuk Operator dan Server Percona untuk MongoDB)
    • AES256-GCM
security.encryptionKeySecret should specify a secret object with the encryption key:

mongod:

  ...

  security:

    ...

    encryptionKeySecret: my-cluster-name-mongodb-encryption-key

Rahasia kunci enkripsi akan dibuat secara otomatis jika tidak ada. Jika Anda ingin membuatnya sendiri, perhatikan bahwa kuncinya harus berupa string 32 karakter yang dikodekan di base64.

Menyimpan Informasi Sensitif

Operator Kubernetes PSMDB menggunakan Rahasia Kubernetes untuk menyimpan dan mengelola informasi sensitif. Rahasia Kubernetes memungkinkan Anda menyimpan dan mengelola informasi sensitif, seperti kata sandi, token OAuth, dan kunci ssh. Menyimpan informasi rahasia dalam Rahasia lebih aman dan lebih fleksibel daripada meletakkannya secara verbatim dalam definisi pod atau dalam gambar kontainer.

Untuk operator ini, pengguna dan kata sandi yang dibuat untuk pod Anda disimpan dan dapat diperoleh menggunakan kubectl get secret -o yaml set di deploy/cr.yaml Anda .

Untuk blog ini, contoh penyiapan saya mencapai yang berikut dengan hasil base64 yang didekodekan.

 kubectl get secrets mongodb-cluster-s9s-secrets -o yaml | egrep '^\s+MONGODB.*'|cut -d ':' -f2 | xargs -I% sh -c "echo % | base64 -d; echo "

WrDry6bexkCPOY5iQ

backup

gAWBKkmIQsovnImuKyl

clusterAdmin

qHskMMseNqU8DGbo4We

clusterMonitor

TQBEV7rtE15quFl5

userAdmin

Setiap entri untuk pencadangan, pengguna cluster, pengguna monitor cluster, dan pengguna untuk penggunaan administratif ditampilkan berdasarkan hasil di atas.

Hal lain juga adalah, Operator Kubernetes PSMDB menyimpan juga akses AWS S3 dan kunci rahasia melalui Rahasia Kubernetes.

Cadangan

Operator ini mendukung pencadangan yang merupakan fitur yang sangat bagus. Ini mendukung pencadangan sesuai permintaan (manual) dan pencadangan terjadwal dan menggunakan alat pencadangan Percona Backup untuk MongoDB. Perhatikan bahwa cadangan hanya disimpan di AWS S3 atau penyimpanan apa pun yang kompatibel dengan S3.

Pencadangan yang dijadwalkan dapat ditentukan melalui file deploy/cr.yaml, sedangkan pencadangan manual dapat dilakukan kapan saja kapan pun diperlukan. Untuk akses S3 dan kunci rahasia, itu harus didefinisikan dalam file deploy/backup-s3.yaml file dan menggunakan Rahasia Kubernetes untuk menyimpan informasi berikut seperti yang kami sebutkan sebelumnya.

Semua tindakan yang didukung untuk Operator Kubernetes PSMDB ini adalah sebagai berikut:

  • Membuat pencadangan terjadwal
  • Membuat cadangan sesuai permintaan
  • Pulihkan cluster dari cadangan yang disimpan sebelumnya
  • Hapus cadangan yang tidak diperlukan

Menggunakan Operator Kubernetes PSMDB Dengan Minikube

Di bagian ini, kita akan membuat penyiapan sederhana menggunakan Kubernetes dengan Minikube, yang dapat Anda gunakan secara lokal tanpa memerlukan penyedia cloud. Untuk penyiapan cloud-native terutama untuk lingkungan perusahaan dan kelas produksi yang lebih banyak, Anda dapat memeriksa dokumentasinya.

Sebelum kita melanjutkan langkah-langkahnya, perlu diingat bahwa seperti yang disebutkan di atas, ada batasan yang diketahui dengan Minikube karena tidak mendukung konfigurasi cluster multi-node yang bertabrakan dengan persyaratan afinitas default dari operator. Kami akan menyebutkan ini tentang cara menanganinya dalam langkah-langkah berikut di bawah ini.

Untuk blog ini, host OS tempat Minikube kita akan diinstal ada di Ubuntu 18.04 (Bionic Beaver).

Mari Instal Minikube

$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb

$ sudo dpkg -i minikube_latest_amd64.deb

Secara opsional, Anda dapat mengikuti langkah-langkah di sini jika Anda menggunakan sistem Linux yang berbeda.

Mari tambahkan kunci yang diperlukan untuk mengautentikasi paket Kubernetes dan menyiapkan repositori

$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

$ cat <<eof > /etc/apt/sources.list.d/kubernetes.list

deb https://apt.kubernetes.io/ kubernetes-xenial main

deb https://apt.kubernetes.io/ kubernetes-yakkety main

eof

Sekarang mari kita instal paket yang diperlukan

$ sudo apt-get update

$ sudo apt-get install kubelet kubeadm kubectl

Mulai Minikube yang mendefinisikan memori, jumlah CPU, dan CIDR yang akan ditetapkan oleh node saya,

$ minikube start --memory=4096 --cpus=3 --extra-config=kubeadm.pod-network-cidr=192.168.0.0/16

Contoh hasil menunjukkan seperti,

minikube v1.14.2 on Ubuntu 18.04

Automatically selected the docker driver

docker is currently using the aufs storage driver, consider switching to overlay2 for better performance

Starting control plane node minikube in cluster minikube

Creating docker container (CPUs=3, Memory=4096MB) ...

Preparing Kubernetes v1.19.2 on Docker 19.03.8 ...

kubeadm.pod-network-cidr=192.168.0.0/16

 > kubeadm.sha256: 65 B / 65 B [--------------------------] 100.00% ? p/s 0s

 > kubectl.sha256: 65 B / 65 B [--------------------------] 100.00% ? p/s 0s

 > kubelet.sha256: 65 B / 65 B [--------------------------] 100.00% ? p/s 0s

 > kubeadm: 37.30 MiB / 37.30 MiB [---------------] 100.00% 1.46 MiB p/s 26s

 > kubectl: 41.01 MiB / 41.01 MiB [---------------] 100.00% 1.37 MiB p/s 30s

 > kubelet: 104.88 MiB / 104.88 MiB [------------] 100.00% 1.53 MiB p/s 1m9s

Verifying Kubernetes components...

Enabled addons: default-storageclass, storage-provisioner

Done! kubectl is now configured to use "minikube" by default

Seperti yang Anda perhatikan, itu juga menginstal alat utilitas untuk mengelola dan mengelola node atau pod Anda.

Sekarang, mari kita periksa node dan pod dengan menjalankan perintah berikut,

$ kubectl get pods -A

NAMESPACE     NAME                               READY   STATUS    RESTARTS   AGE

kube-system   coredns-f9fd979d6-gwngd            1/1     Running   0          45s

kube-system   etcd-minikube                      0/1     Running   0          53s

kube-system   kube-apiserver-minikube            1/1     Running   0          53s

kube-system   kube-controller-manager-minikube   0/1     Running   0          53s

kube-system   kube-proxy-m25hm                   1/1     Running   0          45s

kube-system   kube-scheduler-minikube            0/1     Running   0          53s

kube-system   storage-provisioner                1/1     Running   1          57s

$ kubectl get nodes -owide

NAME       STATUS   ROLES    AGE    VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE           KERNEL-VERSION      CONTAINER-RUNTIME

minikube   Ready    master   2d4h   v1.19.2   192.168.49.2   <none>        Ubuntu 20.04 LTS   4.15.0-20-generic   docker://19.3.8

Sekarang, unduh Operator Kubernetes PSMDB,

$ git clone -b v1.5.0 https://github.com/percona/percona-server-mongodb-operator

$ cd percona-server-mongodb-operator

Kami sekarang siap untuk men-deploy operator,

$ kubectl apply -f deploy/bundle.yaml

Seperti yang disebutkan sebelumnya, keterbatasan Minikube memerlukan penyesuaian agar semuanya berjalan seperti yang diharapkan. Mari lakukan hal berikut:

  • Tergantung pada kapasitas perangkat keras Anda saat ini, Anda dapat mengubah hal berikut seperti yang disarankan oleh dokumentasi. Karena minikube berjalan secara lokal, file deploy/cr.yaml default harus diedit untuk mengadaptasi Operator untuk instalasi lokal dengan sumber daya yang terbatas. Ubah kunci berikut di bagian replsets:
    • komentari kunci resources.requests.memory dan resources.requests.cpu (ini akan sesuai dengan batasan default Minikube Operator)
    • setel kunci affinity.antiAffinityTopologyKey ke "none" (Operator tidak akan dapat menyebarkan cluster pada beberapa node)
  • Selain itu, alihkan kunci allowUnsafeConfigurations ke true (opsi ini menonaktifkan kontrol Operator atas konfigurasi cluster, sehingga memungkinkan untuk menerapkan Server Percona untuk MongoDB sebagai cluster satu node).

Sekarang, kami siap menerapkan perubahan yang dibuat ke file deploy/cr.yaml.

$ kubectl apply -f deploy/cr.yaml

Pada titik ini, Anda mungkin dapat memeriksa status pod dan Anda akan melihat kemajuan berikut seperti di bawah ini,

$ kubectl get pods

NAME                                              READY   STATUS              RESTARTS   AGE

percona-server-mongodb-operator-588db759d-qjv29   0/1     ContainerCreating   0          15s



$ kubectl get pods

NAME                                              READY   STATUS     RESTARTS   AGE

mongodb-cluster-s9s-rs0-0                         0/2     Init:0/1   0          4s

percona-server-mongodb-operator-588db759d-qjv29   1/1     Running    0          34s



$ kubectl get pods

NAME                                              READY   STATUS            RESTARTS   AGE

mongodb-cluster-s9s-rs0-0                         0/2     PodInitializing   0          119s

percona-server-mongodb-operator-588db759d-qjv29   1/1     Running           0          2m29s



kubectl get pods

NAME                                              READY   STATUS            RESTARTS   AGE

mongodb-cluster-s9s-rs0-0                         0/2     PodInitializing   0          2m1s

percona-server-mongodb-operator-588db759d-qjv29   1/1     Running           0          2m31s



kubectl get pods

NAME                                              READY   STATUS    RESTARTS   AGE

mongodb-cluster-s9s-rs0-0                         2/2     Running   0          33m

mongodb-cluster-s9s-rs0-1                         2/2     Running   1          31m

mongodb-cluster-s9s-rs0-2                         2/2     Running   0          30m

percona-server-mongodb-operator-588db759d-qjv29   1/1     Running   0          33m

Sekarang kita hampir sampai. Kami akan mendapatkan rahasia yang dihasilkan oleh operator sehingga kami dapat terhubung ke pod PSMDB yang dibuat. Untuk melakukan itu, Anda perlu membuat daftar objek rahasia terlebih dahulu, lalu mendapatkan nilai yaml sehingga Anda bisa mendapatkan kombinasi pengguna/kata sandi. Di sisi lain, Anda dapat menggunakan perintah gabungan di bawah ini dengan format username:password. Lihat contoh di bawah ini,

$ kubectl get secrets

NAME                                          TYPE                                  DATA   AGE

default-token-c8frr                           kubernetes.io/service-account-token   3      2d4h

internal-mongodb-cluster-s9s-users            Opaque                                8      2d4h

mongodb-cluster-s9s-mongodb-encryption-key    Opaque                                1      2d4h

mongodb-cluster-s9s-mongodb-keyfile           Opaque                                1      2d4h

mongodb-cluster-s9s-secrets                   Opaque                                8      2d4h

percona-server-mongodb-operator-token-rbzbc   kubernetes.io/service-account-token   3      2d4h



$ kubectl get secrets mongodb-cluster-s9s-secrets -o yaml | egrep '^\s+MONGODB.*'|cut -d ':' -f2 | xargs -I% sh -c "echo % | base64 -d; echo" |sed 'N; s/\(.*\)\n\(.*\)/

\2:\1/'

backup:WrDry6bexkCPOY5iQ

clusterAdmin:gAWBKkmIQsovnImuKyl

clusterMonitor:qHskMMseNqU8DGbo4We

userAdmin:TQBEV7rtE15quFl5

Sekarang, Anda dapat mendasarkan nama pengguna:format kata sandi dan menyimpannya di suatu tempat dengan aman.

Karena kita tidak dapat langsung terhubung ke Server Percona untuk node MongoDB, kita perlu membuat pod baru yang memiliki klien mongodb,

$ kubectl run -i --rm --tty percona-client --image=percona/percona-server-mongodb:4.2.8-8 --restart=Never -- bash -il

Terakhir, kami sekarang siap untuk terhubung ke node PSMDB kami sekarang,

bash-4.2$ mongo "mongodb+srv://userAdmin:[email protected]/admin?replicaSet=rs0&ssl=false"

Atau, Anda dapat terhubung ke masing-masing node dan memeriksa kesehatannya. Misalnya,

bash-4.2$ mongo --host "mongodb://clusterAdmin:[email protected]:27017/?authSource=admin&ssl=false"

Percona Server for MongoDB shell version v4.2.8-8

connecting to: mongodb://mongodb-cluster-s9s-rs0-2.mongodb-cluster-s9s-rs0.default.svc.cluster.local:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb&ssl=false

Implicit session: session { "id" : UUID("9b29b9b3-4f82-438d-9857-eff145be0ee6") }

Percona Server for MongoDB server version: v4.2.8-8

Welcome to the Percona Server for MongoDB shell.

For interactive help, type "help".

For more comprehensive documentation, see

        https://www.percona.com/doc/percona-server-for-mongodb

Questions? Try the support group

        https://www.percona.com/forums/questions-discussions/percona-server-for-mongodb

2020-11-09T07:41:59.172+0000 I  STORAGE  [main] In File::open(), ::open for '/home/mongodb/.mongorc.js' failed with No such file or directory

Server has startup warnings:

2020-11-09T06:41:16.838+0000 I  CONTROL  [initandlisten] ** WARNING: While invalid X509 certificates may be used to

2020-11-09T06:41:16.838+0000 I  CONTROL  [initandlisten] **          connect to this server, they will not be considered

2020-11-09T06:41:16.838+0000 I  CONTROL  [initandlisten] **          permissible for authentication.

2020-11-09T06:41:16.838+0000 I  CONTROL  [initandlisten]

rs0:SECONDARY> rs.status()

{

        "set" : "rs0",

        "date" : ISODate("2020-11-09T07:42:04.984Z"),

        "myState" : 2,

        "term" : NumberLong(5),

        "syncingTo" : "mongodb-cluster-s9s-rs0-0.mongodb-cluster-s9s-rs0.default.svc.cluster.local:27017",

        "syncSourceHost" : "mongodb-cluster-s9s-rs0-0.mongodb-cluster-s9s-rs0.default.svc.cluster.local:27017",

        "syncSourceId" : 0,

        "heartbeatIntervalMillis" : NumberLong(2000),

        "majorityVoteCount" : 2,

        "writeMajorityCount" : 2,

        "optimes" : {

                "lastCommittedOpTime" : {

                        "ts" : Timestamp(1604907723, 4),

                        "t" : NumberLong(5)

                },

                "lastCommittedWallTime" : ISODate("2020-11-09T07:42:03.395Z"),

                "readConcernMajorityOpTime" : {

                        "ts" : Timestamp(1604907723, 4),

                        "t" : NumberLong(5)

                },

                "readConcernMajorityWallTime" : ISODate("2020-11-09T07:42:03.395Z"),

                "appliedOpTime" : {

                        "ts" : Timestamp(1604907723, 4),

                        "t" : NumberLong(5)

                },

                "durableOpTime" : {

                        "ts" : Timestamp(1604907723, 4),

                        "t" : NumberLong(5)

                },

                "lastAppliedWallTime" : ISODate("2020-11-09T07:42:03.395Z"),

                "lastDurableWallTime" : ISODate("2020-11-09T07:42:03.395Z")

        },

        "lastStableRecoveryTimestamp" : Timestamp(1604907678, 3),

        "lastStableCheckpointTimestamp" : Timestamp(1604907678, 3),

        "members" : [

                {

                        "_id" : 0,

                        "name" : "mongodb-cluster-s9s-rs0-0.mongodb-cluster-s9s-rs0.default.svc.cluster.local:27017",

                        "health" : 1,

                        "state" : 1,

                        "stateStr" : "PRIMARY",

                        "uptime" : 3632,

                        "optime" : {

                                "ts" : Timestamp(1604907723, 4),

                                "t" : NumberLong(5)

                        },

                        "optimeDurable" : {

                                "ts" : Timestamp(1604907723, 4),

                                "t" : NumberLong(5)

                        },

                       "optimeDate" : ISODate("2020-11-09T07:42:03Z"),

                        "optimeDurableDate" : ISODate("2020-11-09T07:42:03Z"),

                        "lastHeartbeat" : ISODate("2020-11-09T07:42:04.246Z"),

                        "lastHeartbeatRecv" : ISODate("2020-11-09T07:42:03.162Z"),

                        "pingMs" : NumberLong(0),

                        "lastHeartbeatMessage" : "",

                        "syncingTo" : "",

                        "syncSourceHost" : "",

                        "syncSourceId" : -1,

                        "infoMessage" : "",

                        "electionTime" : Timestamp(1604904092, 1),

                        "electionDate" : ISODate("2020-11-09T06:41:32Z"),

                        "configVersion" : 3

                },

                {

                        "_id" : 1,

                        "name" : "mongodb-cluster-s9s-rs0-1.mongodb-cluster-s9s-rs0.default.svc.cluster.local:27017",

                        "health" : 1,

                        "state" : 2,

                        "stateStr" : "SECONDARY",

                        "uptime" : 3632,

                        "optime" : {

                                "ts" : Timestamp(1604907723, 4),

                                "t" : NumberLong(5)

                        },

                        "optimeDurable" : {

                                "ts" : Timestamp(1604907723, 4),

                                "t" : NumberLong(5)

                        },

                        "optimeDate" : ISODate("2020-11-09T07:42:03Z"),

                        "optimeDurableDate" : ISODate("2020-11-09T07:42:03Z"),

                        "lastHeartbeat" : ISODate("2020-11-09T07:42:04.244Z"),

                        "lastHeartbeatRecv" : ISODate("2020-11-09T07:42:04.752Z"),

                        "pingMs" : NumberLong(0),

                        "lastHeartbeatMessage" : "",

                        "syncingTo" : "mongodb-cluster-s9s-rs0-2.mongodb-cluster-s9s-rs0.default.svc.cluster.local:27017",

                        "syncSourceHost" : "mongodb-cluster-s9s-rs0-2.mongodb-cluster-s9s-rs0.default.svc.cluster.local:27017",

                        "syncSourceId" : 2,

                        "infoMessage" : "",

                        "configVersion" : 3

                },

                {

                        "_id" : 2,

                        "name" : "mongodb-cluster-s9s-rs0-2.mongodb-cluster-s9s-rs0.default.svc.cluster.local:27017",

                        "health" : 1,

                        "state" : 2,

                        "stateStr" : "SECONDARY",

                        "uptime" : 3651,

                        "optime" : {

                                "ts" : Timestamp(1604907723, 4),

                                "t" : NumberLong(5)

                        },

                        "optimeDate" : ISODate("2020-11-09T07:42:03Z"),

                        "syncingTo" : "mongodb-cluster-s9s-rs0-0.mongodb-cluster-s9s-rs0.default.svc.cluster.local:27017",

                        "syncSourceHost" : "mongodb-cluster-s9s-rs0-0.mongodb-cluster-s9s-rs0.default.svc.cluster.local:27017",

                        "syncSourceId" : 0,

                        "infoMessage" : "",

                        "configVersion" : 3,

                        "self" : true,

                        "lastHeartbeatMessage" : ""

                }

        ],

        "ok" : 1,

        "$clusterTime" : {

                "clusterTime" : Timestamp(1604907723, 4),

                "signature" : {

                        "hash" : BinData(0,"HYC0i49c+kYdC9M8KMHgBdQW1ac="),

                        "keyId" : NumberLong("6892206918371115011")

                }

        },

        "operationTime" : Timestamp(1604907723, 4)

}

Karena operator mengelola konsistensi cluster, setiap kali kegagalan atau katakanlah sebuah pod telah dihapus. Operator akan secara otomatis memulai yang baru. Misalnya,

$ kubectl get po

NAME                                              READY   STATUS    RESTARTS   AGE

mongodb-cluster-s9s-rs0-0                         2/2     Running   0          2d5h

mongodb-cluster-s9s-rs0-1                         2/2     Running   0          2d5h

mongodb-cluster-s9s-rs0-2                         2/2     Running   0          2d5h

percona-client                                    1/1     Running   0          3m7s

percona-server-mongodb-operator-588db759d-qjv29   1/1     Running   0          2d5h

$ kubectl delete po mongodb-cluster-s9s-rs0-1

pod "mongodb-cluster-s9s-rs0-1" deleted

$ kubectl get po

NAME                                              READY   STATUS     RESTARTS   AGE

mongodb-cluster-s9s-rs0-0                         2/2     Running    0          2d5h

mongodb-cluster-s9s-rs0-1                         0/2     Init:0/1   0          3s

mongodb-cluster-s9s-rs0-2                         2/2     Running    0          2d5h

percona-client                                    1/1     Running    0          3m29s

percona-server-mongodb-operator-588db759d-qjv29   1/1     Running    0          2d5h

$ kubectl get po

NAME                                              READY   STATUS            RESTARTS   AGE

mongodb-cluster-s9s-rs0-0                         2/2     Running           0          2d5h

mongodb-cluster-s9s-rs0-1                         0/2     PodInitializing   0          10s

mongodb-cluster-s9s-rs0-2                         2/2     Running           0          2d5h

percona-client                                    1/1     Running           0          3m36s

percona-server-mongodb-operator-588db759d-qjv29   1/1     Running           0          2d5h

$ kubectl get po

NAME                                              READY   STATUS    RESTARTS   AGE

mongodb-cluster-s9s-rs0-0                         2/2     Running   0          2d5h

mongodb-cluster-s9s-rs0-1                         2/2     Running   0          26s

mongodb-cluster-s9s-rs0-2                         2/2     Running   0          2d5h

percona-client                                    1/1     Running   0          3m52s

percona-server-mongodb-operator-588db759d-qjv29   1/1     Running   0          2d5h

Sekarang kita sudah siap. Tentu saja, Anda mungkin perlu mengekspos port sehingga Anda mungkin harus berurusan dengan penyesuaian di deploy/cr.yaml. Anda dapat merujuk ke sini untuk mengatasinya.

Kesimpulan

Operator Percona Kubernetes untuk PSMDB dapat menjadi solusi lengkap Anda terutama untuk lingkungan kemas untuk Server Percona Anda untuk pengaturan MongoDB. Ini hampir merupakan solusi lengkap karena memiliki redundansi bawaan untuk set replika Anda, namun operator mendukung pencadangan, skalabilitas, ketersediaan tinggi, dan keamanan.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mencari string dengan karakter khusus dalam dokumen MongoDB

  2. Mongoose JS findOne selalu mengembalikan null

  3. Bagaimana saya bisa menanyakan mongodb menggunakan mongoid/rails tanpa batas waktu?

  4. MongoDB $binarySize

  5. Mongodb:gagal terhubung ke server pada koneksi pertama