MongoDB 3.4te Yüksek Kullanılabilirliğe Sahip Bir Çoğaltma Seti Dağıtma Ubuntuda Erişim Denetimi için Keyfile Kullanma 16.04

2009'daki anlayışından bu yana MongoDB NoSQL endüstrisine liderlik etmektedir. MongoDB'nin temel kavramlarından biri Replica Set'tir, bu yüzden onunla çalışmadan önce konsepti gözden geçirelim.

Çoğaltma Seti Hakkında

Veritabanlarının çoğaltılmasında kullanılan en basit iletişim modeli Master-Slave mimarisidir. Adından da anlaşılacağı gibi, bu modelin benzersiz bir ustada ve birçok kölede yayılmış 2 rolü vardır, ustanın rolü müşteriler tarafından yapılan okuma ve yazma işlemlerini işlemek ve köleler ustanın bir kopyası olarak kabul edilir.

Bu modelin en önemli avantajı, master'ın performansının yedekleme işlemlerinden ödün vermemesi, yedekleme işlemlerinin eşzamansız bir şekilde yapılması ve ana düğüm başarısız olduğunda ciddi bir sorun haline gelebilmesidir. Slave düğümler salt okunurdur ve ana düğüme manuel olarak yükseltilmeleri gerekir, bu nedenle bu zamanda veri kaybı olasılığı vardır.

Kullanılabilirlik sorununu çözmenin bir seçeneği, mimaride birden fazla yöneticiye sahip olmaktır, ancak bu, bu örnekler arasındaki verilerin tutarlılığında ve yapılandırmanın ek karmaşıklığında başka bir soruna yol açabilir.

Şimdi bağlam verildiğinde , MongoDB'nin Replica Set teknolojisini sunabiliriz . Çoğaltma Kümesi, otomatik yük devretme özelliğine sahip Master-Slave mimarisinin adıdır, bu nedenle (şimdi adlandırılmış olan primary) bir ana düğümün düzgün bir şekilde işlevini yerine getirememesi durumunda election, geri kalan slave'lerden yeni bir birincil düğüm seçilir ( olarak anılacaktır secondaries).

Birincil düğüm

Birincil düğüm yazma işlemlerini gerçekleştiren tek düğümdür, varsayılan olarak okuma işlemleri birincil tarafından da işlenir, ancak bu davranış daha sonra değiştirilebilir.

İşlemler oplog(işlem günlüğüne) kaydedilir , daha sonra ikincil düğümler, içeriklerine göre eşzamansız olarak güncelleniroplog

Not: oplogSınırlı bir koleksiyondur, yani koleksiyonun bir sınırı vardır, local.oplog.rsbu koleksiyonun içeriğini herhangi bir küme üyesinde bir mongo kabuğu içinde kontrol edebilirsiniz.

İkincil düğüm

Veritabanının uygun bir yedeğini alanların yanı sıra, ikincil bir düğüm şu rollere sahiptir:

  • Gerekirse okuma işlemlerini kabul edebilir.
  • Birincil düğüm başarısız olursa bir seçimi tetikleyebilir.
  • Seçimlerde oy verebilir.
  • Gerekirse yeni birincil olabilir.

Bu özellikler sayesinde farklı ikincil düğüm türlerine sahip olabiliriz:

  • Öncelik 0 : Bu düğümler primaryseçilemez ve bir seçimi tetikleyemez, yine de seçimlerde oy kullanabilir, tam bir kopyaya sahip olabilir ve okuma işlemlerini kabul edebilir. Bunlar çoklu veri merkezi dağıtımında yardımcı olabilir.
  • Gizli : Bunlar Priority 0üyedir, ancak okuma işlemlerini gerçekleştiremezler. Gerekirse oy kullanabilirler. Bu üyeler için tercih edilen görevler raporlama ve yedeklerdir.
  • Gecikmeli : Bu düğümler zaman içinde bazı birimlerle geciktirilerek "geçmiş verilerden" sorumludur. Gecikmiş üye bir priority 0düğüm olmalıdır ve hiddenayrıca üye olmaları önerilir .

Ön şartlar

  • Aynı sunucu boyutunda en az 3 Ubuntu 16.04 x64 örneğini çalıştırma olanağı.

Çoğaltma kümesini tasarlama

Bir altyapıyı dağıtmadan önce onu tasarlamak önemlidir ve bu tasarımda dikkat edilmesi gereken noktalar vardır.

Üye sayısını seçme

Çoğaltma kümesi oluşturmak için minimum öğe sayısının 3 olduğunu unutmayın . Üç düğüm türünü en az bir birincil ve bir ikincil düğümle karıştırabilirsiniz.

Bu kılavuzda bir birincil ve iki standart ikincil olmak üzere 3 üye kullanıyoruz.

Not: Hakem ve ikincil üyelerden oluşan bir karışımla en fazla 7 oy kullanan üyeye sahip olmanız önerilir.

Bir isim seç

Ad sadece referans içindir, ancak kümenin yapılandırmasında kullanıyorsunuz. Üretim ortamınızda birden fazla Çoğaltma ayarlayabileceğinizi unutmayın, bu nedenle kümenizin adını ihmal etmeyin.

Bu öğretici kullanıcıyı setin adını seçmeye teşvik eder.

Farklı veri merkezlerindeki üyelerin dağılımı

Bu eğitimde, iletişim sorunlarından kaçınabilmeniz için aynı veri merkezinde konuşlandırmanız önerilmektedir.

Not: Farklı veri merkezlerine dağıtılması durumunda, düğümlerinizi bir VPN ile sarmanız önerilir

Dağıtım talimatları

1. Adım: Altyapınız için minimum düğümleri dağıtın

Ubuntu 16.04 x64'ün 3 düğümünü başlatın; mümkünse müşteri portalınızdan aynı bölgede. Bunları, üzerinde çalıştığınız proje türüne göre adlandırmayı unutmayın ve tüm bu düğümlerde aynı sunucu boyutuna sahip olduğunuzdan emin olun .

3 düğümünüzü konuşlandırdıktan sonra, her düğümün geri kalanıyla konuşabileceğinden emin olmanız gerekir. İki düğüme ssh ve kullanarak diğerlerine ulaşmak gerekir ping -c 4 EXAMPLE_IP. Değişim EXAMPLE_IPiçin düğüm gerçek IP numaraları.

Burada iki düğüm arasındaki başarılı iletişimin bir örneğini görebilirsiniz.

root@foo_node:~# ping -c 4 EXAMPLE_IP
PING EXAMPLE_IP (EXAMPLE_IP) 56(84) bytes of data.
64 bytes from EXAMPLE_IP: icmp_seq=1 ttl=59 time=0.594 ms
64 bytes from EXAMPLE_IP: icmp_seq=2 ttl=59 time=0.640 ms
64 bytes from EXAMPLE_IP: icmp_seq=3 ttl=59 time=0.477 ms
64 bytes from EXAMPLE_IP: icmp_seq=4 ttl=59 time=0.551 ms

--- EXAMPLE_IP ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3021ms
rtt min/avg/max/mdev = 0.477/0.565/0.640/0.064 ms

Adım 2: MongoDB'yi altyapınızın her bir düğümüne kurun

Genel olarak Ubuntu'nun MongoDB paketini kullanabilirsiniz, ancak her zaman güncel olduğundan resmi topluluk deposunu kullanmak daha iyidir. Bu repo şu paketleri içeriyor:

  • mongodb-org , dört bileşeni saran grup paketi.
  • mongodb-org-server , bu mongoddaemon'u içerir (veri isteklerini işleyen birincil işlem).
  • mongodb-org-mongos , bu mongosdaemon'u içerir (paylaşılan dağıtımlar için yönlendirme hizmeti).
  • mongodb-org-shell , bu mongo shellJavaScript arayüzüdür.
  • mongodb-org-tools , yönetim faaliyetleri için bazı araçlar.

Paketleri kurmaya devam edin.

Genel anahtarı paket yönetim sistemine aktarın.

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6

MongoDB '/etc/apt/sources.list.d/mongodb-org-3.4.list' için liste dosyasını oluşturun.

echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

Paket veritabanını güncelleyin.

sudo apt-get update

MongoDB meta paketini takın.

sudo apt-get install -y mongodb-org

MongoDB hizmetini başlatın.

sudo service mongod start

Şimdi mongo shellherhangi bir bash oturumunda açabilirsiniz . Bunu yapmak için mongokomutu kullanmanız gerekir . Buna benzer bir şeyle karşılaşacaksınız.

MongoDB shell version v3.4.7
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.7
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:
*Some extra logs are cut by the way*
>

Hizmeti kapatmayı unutmayın sudo service mongod stop, çünkü daha sonra mongodbazı parametrelerle tekrar başlayacağız . Bu işlemi setin 3 düğümünde de tekrarlayın.

3. Adım: Erişim anahtar dosyasını yapılandırma

Bir anahtar dosyası kullanmak, Çoğaltma Kümesi yönetiminde iki kavramı zorlar. İlki Internal Authentication. Varsayılan olarak, mongo shellbir kullanıcı kullanmadan bir oturum başlatabilirsiniz ve bu oturum veritabanı üzerinde tam denetime sahip olacaktır, ancak kimlik doğrulaması için bir anahtar dosyası kullandığınızda mongo shelloturumunuz adlı bir duruma ulaşır localhost exception. Bu durum yalnızca yönetici kullanıcı ve Çoğaltma kümesi oluşturmanıza olanak tanır. İkinci kavram Role-Based Access Controlya da başka bir deyişle yetkilendirmedir. Bu, yönetim düzeylerini Çoğaltma kümesine yönlendirmek için uygulanır.

Anahtar dosyanızı oluşturun

Anahtar dosya, kümede kullanılacak paroladır, bu parola kümenin tüm üyelerinde aynı olmalıdır . Güvenliği artırmak için, seçtiğiniz araçla rastgele bir anahtar kullanmak önemlidir.

İçerik 6 ila 1064 karakter uzunluğunda olmalıdır. Ayrıca read only, anahtar dosyası için izin ayarlamanız gerekir .

chmod 400 PATH_OF_YOUR_KEYFILE
Her dosyaya anahtar dosyasını yerleştirin

Şimdi keyfile dosyasını ayarlanan her üyeye kopyalayın, lütfen ileride başvurmak üzere tutarlı bir klasör kullanın ve çıkarılabilir bir ortamda saklamayın.

Ayrıca mongoderişilebilen dosya için bir klasör kullanın .

Çoğaltma kümesindeki anahtar dosyasını kullanarak zorlama

Bu adımda mongod daemon her set üyesinde başlamamız gerekir . mongodİşlemi başlatmanın iki yolu vardır : bir yapılandırma dosyası kullanmak veya komut satırını kullanmak. Her ikisi de oldukça kolay yöntemlerdir, ancak sadece basitlik için bu öğretici komut satırı sürümünü kullanır.

Komut satırı yapılandırması

Bu komutta daha önce seçtiğiniz adı kullanın.

mongod --keyFile PATH_OF_YOUR_KEYFILE --replSet "YOUR_SET_NAME"

Varsayılan mongodolarak arka plan programı olarak çalışmaz. --forkParametreyi kullanmanız veya upstartbunu daemon olarak tam olarak çalıştırmak için kullanmanız gerekir . Bu eğitimde mongod, günlükleri doğrudan terminalinizde görebilmeniz için bir daemon olarak çalıştırmayı teşvik etmiyoruz .

Not: Çoğaltma kümesinin adını dikkatlice yazın, çünkü oluşturulduktan sonra değiştiremezsiniz.

Adım 4: Ayarlanan üyelerden birinden localhost arayüzüne bağlanın

Not: mongodArka plan programı olmayan bir işlem olarak çalıştırırsanız , çalışmaya devam etmek için başka bir ssh bağlantısı açmanız gerekir.

. mongoKomutunu açmak için komut kullanmalısınız mongo shell. Bu setin herhangi bir üyesinde yapılabilir.

Şu anda adında bir durumdayız localhost exception. İşlemi ayarlamak için bir anahtar dosyası kullanıldığında mongod, okuma-yazma işlemlerini uygulamadan önce bir veritabanı yöneticisi oluşturmanız gerekir, ancak daha sonra buna gireceğiz.

5. Adım: Çoğaltma kümesini başlatma

Bu bizim komutu kullanırken, hassas bir parçasıdır rs.initiate()içindeki mongo shellbu komut edelim inceleme kullanımdan önce adım 4'ten itibaren.

rs.initiate(
  {
    _id : <replicaSetName>,
    members: [
      { _id : 0, host : "example1.net:27017" },
      { _id : 1, host : "example2.net:27017" },
      { _id : 2, host : "example3.net:27017" }
    ]
  }
)

İlk _idalan bir dizedir ve --replSetdaha önce iletilen alanla eşleşmelidir mongod. Ayrıca, her değeri hostÇoğaltma kümesinin her üyesinin ip veya etki alanı adı olmalıdır. Mongo örneğinin kullandığı bağlantı noktasını her üyeye eklemeyi unutmayın.

Şimdi komutu verilerinizle yürütmenin zamanı geldi, bu bir tetikleyecek election, daha sonra bir birincil otomatik olarak seçilecek.

Burada kabuk imlecinizin YOUR_SET_NAME:PRIMARY>veya olarak değiştiğini not etmelisiniz YOUR_SET_NAME:SECONDARY. Bu, bir set oluşturmanın başarılı olduğu anlamına gelir.

Çalışmaya devam etmek için primaryelbette üzerinde değilseniz, bulmanız gerekir . rs.status()Çoğaltma kümesinin bilgilerini göstermek için komutunu kullanın ve öğesini bulun primary. Mülkü arıyorsunuz "stateStr" : "PRIMARY".

6. Adım: Yönetici oluşturma

Öğesini bulduktan sonra , verilerinizi kullanarak sonraki komutu primarygirin mongo shellve çalıştırın.

admin = db.getSiblingDB("admin")
admin.createUser(
  {
    user: "YOUR_USER",
    pwd: "YOU_PASSWORD",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

admin = db.getSiblingDB("admin")Bölüm bizi içine yazmanıza olanak tanır adminfarklı bir veritabanından. Bu adlı bir takma ad oluşturur admin, böylece bunun yerine komutları yürütebiliriz.

İşlem başarılı olursa, kullanıcının eklendiğine dair bir bildirim alırsınız.

Successfully added user: {
    "user" : "YOUR_USER",
    "roles" : [
        {
            "role" : "userAdminAnyDatabase",
            "db" : "admin"
        }
    ]
}

Bu noktada, tüm sunucular için yalnızca bir yöneticimiz var, ancak bir Çoğaltma ayarına sahip olmak bizi bu clusterAdminrolde bir kullanıcıya sahip olmaya zorlar . Endişeleri ayırmak için sadece bu role sahip başka bir kullanıcı oluşturacağız.

7. Adım: Yönetici olarak kimlik doğrulaması

Sınırına ulaştık localhost exception, bu yüzden kimlik doğrulamasını bir adım önce oluşturulan kullanıcıya değiştirmeliyiz.

İçindeki kullanıcıları mongo shellaşağıdakilerle değiştirebilirsiniz.

db.getSiblingDB("admin").auth("YOUR_ADMIN", "YOUR_PASSWORD" )

Henüz bağlanmadıysanız mongo shellbunun yerine bu komutu kullanın.

mongo -u "YOUR_ADMIN" -p "YOUR_PASSWORD" --authenticationDatabase "admin"

Bir kullanıcının değiştiği konusunda bilgilendirileceksiniz ve bir sonraki adıma geçebilirsiniz.

Adım 8: Küme yöneticisi oluşturma

clusterAdminRol Replica setin kullanıcı tam kontrol sağlar. Oluşturmak, yönetici kullanıcı oluşturmak kadar kolaydır.

db.getSiblingDB("admin").createUser(
  {
    "user" : "YOUR_USER",
    "pwd" : "YOUR_PASSWORD",
    roles: [ { "role" : "clusterAdmin", "db" : "admin" } ]
  }
)

Bu kez rolün olarak değiştirildiğini unutmayınclusterAdmin .

Adım 9: Çoğaltma kümesine veri ekleme

Şu anda 2 yönetici kullanıcısı var: biri sunucu üzerinde tam denetime sahip, diğeri de Çoğaltma kümesi düzeyinde yönetim görevlerine erişimi olan. Yine de, bir veritabanını "kullanma" erişimi olan bir kullanıcıya sahip değiliz. Şimdi bu kullanıcıyı yaratacağız.

admin = db.getSiblingDB("admin")
admin.createUser(
  {
    user: "YOUR_USER",
    pwd: "YOUR_PASSWORD",
    roles: [ { role: "userAdminAnyDatabase", db: "cars" } ]
  }
)

Bu kez dbparçayı değiştirdiğimize dikkat edin , orada veritabanını kullanıcı tarafından erişilebilir hale getiriyoruz, bu durumda adında bir veritabanı kullanıyoruz cars.

Veritabanı henüz oluşturulmadı. Bunu yapmak için, dolaylı olarak oluşturmak için bazı komutlar yazmanız gerekir. carsVeritabanına geçin .

use cars

Sen bir bildirim alır: switched to db cars.

Veritabanı hala oluşturulmadı, bunun için bir şeyler yazmanız gerekiyor. Aşağıdaki örneği kullanıyoruz.

db.models.insert({ make: "Dodge", model: "Viper", year: 2010 })

Bu kez bilgilendirileceksiniz WriteResult({ "nInserted" : 1 }).

İsterseniz, find()yöntemdeki veritabanındaki tüm nesneleri alabilirsiniz :

db.models.find()
{ "_id" : ObjectId("59acd8b55334882863541ff4"), "make" : "Dodge", "model" : "Viper", "year" : 2010 }

Not _idçıktınıza farklı olacaktır, ancak diğer veriler aynı olmalıdır. Yeterli zaman verildiğinde, bu veriler diğer üyelere çoğaltılacaktır.

Sonuç

Bir Çoğaltma Seti oluşturmak ilk başta zor olabilir, çünkü anlayacak çok fazla bilgi var, ancak arkasındaki fikri bir kez bir esintiyle dağıtabilirsiniz, bu yüzden ilk kez kavrayamazsanız vazgeçmeyin. MongoDB yönetiminde Çoğaltma kümesinin önemli olduğunu unutmayın, çünkü Yük Dengeleme gibi gelişmiş özellikler ekleme olanağını açar.

Yorum bırak

CentOS 7de LibreNMS Kullanarak Cihazlarınızı İzleyin

CentOS 7de LibreNMS Kullanarak Cihazlarınızı İzleyin

CentOS 7 üzerinde LibreNMS kullanarak ağ cihazlarınızı etkili bir şekilde izleyin. Ağ izleme için gerekli adımları ve yapılandırmaları öğrenin.

Counter-Strike: Global Offensive Server Nasıl Kurulur?

Counter-Strike: Global Offensive Server Nasıl Kurulur?

Counter-Strike: Global Offensive sunucusu kurmak için gerekli adımlar. Gerekli araçlar ve yükleme süreci hakkında bilgi.

Ubuntu 16.04 LTS Üzerinde OpenNMS Kurulumu

Ubuntu 16.04 LTS Üzerinde OpenNMS Kurulumu

OpenNMS, çok sayıda cihazı izlemek ve yönetmek için kullanılabilen bir açık kaynak ağ yönetim platformudur. Ubuntu 16.04 LTS üzerinde OpenNMS kurulumu için tüm adımları keşfedin.

Ubuntu 16.04te LibreNMS Kullanarak Cihazlarınızı İzleyin

Ubuntu 16.04te LibreNMS Kullanarak Cihazlarınızı İzleyin

Farklı Bir Sistem mi Kullanıyorsunuz? LibreNMS tam özellikli bir açık kaynak ağ izleme sistemidir.

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

Büyük Veri Referans Mimarisi Katmanlarının İşlevleri

Büyük Veri Referans Mimarisi Katmanlarının İşlevleri

Büyük Veri Mimarisindeki farklı katmanları ve işlevlerini en basit şekilde öğrenmek için blogu okuyun.

Nintendo Switch Hakkında Son Derece Çılgın 6 Şey

Nintendo Switch Hakkında Son Derece Çılgın 6 Şey

Birçoğunuz Switch'in Mart 2017'de çıkacağını ve yeni özelliklerini biliyorsunuz. Bilmeyenler için, 'Switch'i 'olmazsa olmaz bir gadget' yapan özelliklerin bir listesini hazırladık.

Hala Teslim Edilmeyen Teknoloji Sözleri

Hala Teslim Edilmeyen Teknoloji Sözleri

Teknoloji devlerinin sözlerini yerine getirmesini mi bekliyorsunuz? teslim edilmeyenleri kontrol edin.

Yapay Zeka Süreç Otomasyonunu Nasıl Bir Sonraki Seviyeye Taşıyabilir?

Yapay Zeka Süreç Otomasyonunu Nasıl Bir Sonraki Seviyeye Taşıyabilir?

Yapay Zekanın küçük ölçekli şirketler arasında nasıl popüler hale geldiğini ve onları büyütme ve rakiplerine üstünlük sağlama olasılıklarını nasıl artırdığını öğrenmek için bunu okuyun.

Teknolojik Tekillik: İnsan Uygarlığının Uzak Bir Geleceği mi?

Teknolojik Tekillik: İnsan Uygarlığının Uzak Bir Geleceği mi?

Bilim hızla gelişip birçok çabamızı üstlendikçe, kendimizi açıklanamaz bir Tekilliğe maruz bırakmanın riskleri de artıyor. Okuyun, tekillik bizim için ne anlama gelebilir.