CentOS-8 Üzerinde MongoDB Kurulumu

Zekiye AYDEMİR
5 min readApr 21, 2020

MongoDB büyük miktarda veriyi verimli bir şekilde işlemek üzere tasarlanan açık kaynaklı ve belge tabanlı NoSQL bir veritabanıdır. Verileri Binary JSON belgeleri (BSON) olarak depolar. MongoDB 4.0 ve sonrasındaki sürümlerinde ACID desteği sağlar.

MongoDB’yi yüksek performans ve hızlı hale getirmek için RDBMS sistemlerinde yaygın olarak bulunan bazı özellikler mevcut değildir. Tablo, satır ve sütun kavramlarına sahip değildir. Dinamik şema yapısına sahiptir böylece belgeler farklı şemalara sahip olabilir, bu da uygulama geliştikçe şemanın değişebileceği anlamına gelir.

Tek bir MongoDB instance’ı birden çok veritabanı barındırabilir. Her veritabanı bir koleksiyon kümesidir. Koleksiyonlar ilişkisel veritabanındaki tablo kavramına benzer; ancak, bunlar şematiktir. Bir koleksiyonda birden fazla belge olabilir, belgeyi ilişkisel veritabanındaki satır(row) gibi düşünebiliriz.

CentOS 8 sunucusu üzerinde MongoDB kurulumunu ele alacağız.

MongoDB Kurulumu

Kurulum için /etc/yum.repos.d/mongodb-org-4.2.repo repo dosyasını vim komutu ile oluşturuyoruz ve dosya içerisine aşağıdaki satırları ekliyoruz, kaydedip çıkıyoruz:

vim /etc/yum.repos.d/mongodb-org-4.2.repo[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc

MongoDB’nin mongodb-org paketini kuruyoruz:

dnf install mongodb-org

Kurulumunu gerçekleştirdiğimiz mongodb-org paketi mongos, server, shell ve tools paketlerinin toplamını oluşturur.

mongodb-org-server : Mongod programını ve init komutunu içerir.

mongodb-org-mongos : Mongos programını içerir.

mongodb-org-shell :Mongo kabuk programını içerir.

mongodb-org-tools :Mongo komutlarını içerir; mongodump, mongorestore, mongoexport, mongoimport, mongostat, mongotop vb.

MongoDB servisi olan mongod’u başlatıyoruz ve sunucu açılışlarında otomatik olarak başlaması için enable ediyoruz:

systemctl start mongod
systemctl enable mongod

Mongod servisinin çalışmasını aşağıdaki gibi kontrol edebiliriz:

systemctl status mongod

MongoDB konfigürasyon dosyası varsayılan olarak /etc/mongod.conf dosyasıdır. Varsayılan ayarlarla 127.0.0.1 adresinde 27017 portunda çalışır.

mongo komutu ile veritabanına bağlanıyoruz:

mongo

show dbs komutuyla mevcut veritabanlarını görüntüleyebiliriz:

MongoDB kurulumunda varsayılan olarak admin, local ve config veritabanlarına sahiptir.

admin :Yönetim işlemleri için kök(root) veritabanıdır. Admin veritabanına bir kullanıcı eklenirse, kullanıcı tüm veritabanlarının izinlerini otomatik olarak devralır. Ayrıca, tüm veritabanlarını listeleme veya servisi kapatma işlemleri gibi yalnızca admin veritabanından çalıştırılabilen servis genelinde bazı komutlar da vardır.

local : MongoDB servisinin replikasyon işlemlerindeki bilgilerini ve kendine özgü bilgileri barındırdığı veritabanıdır. Replikasyon işlemleri sırasında da kopyalanmaz.

config : Sharded cluster bilgilerinin depolandığı veritabanıdır.

MongoDB kurulduğunda varsayılan olarak kimlik doğrulama (authotentication) ayarı disable olarak ayarlanmıştır. Örnek komut çıktısında yer alan “WARNING: Access control is not enabled for the database.” uyarısının sebebi bu ayardır. Veritabanında yetkili bir kullanıcı oluşturduktan sonra varsayılan konfigürasyon dosyası olan /etc/mongod.conf dosyasında kimlik doğrulama ayarını aktif edip servisi yeniden başlattığımızda bu uyarıyı almayacağız.

MongoDB daha iyi bir performansla çalışabilmek için Transparent HugePages’in devre dışı bırakılmasını önerir . Bu ayar çoğu Linux dağıtımında varsayılan olarak aktiftir. Örnek komut çıktısında “WARNING: /sys/kernel/mm/transparent_hugepage/enabled is ‘always’.” uyarısını almamızın sebebi bu ayardır. Veritabanında kullanıcı oluşturma işlemlerinin ardından bu ayarı önerildiği şekilde değiştireceğiz.

MongoDB Kullanıcı Oluşturma ve Veritabanı İşlemleri

Aşağıdaki komutla admin veritabanına bağlanarak tüm cluster’da yetkili bir kullanıcı oluşturuyoruz:

use admin
db.createUser(
{
user: "zaydemir",
pwd: "mypassword",
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)

Örnek komut çıktısı aşağıdaki gibidir:

exit komutuyla veritabanından çıkıp /etc/mongod.conf dosyasına aşağıdaki satırı ekliyoruz:

security:
authorization: enabled

/etc/mongod.conf dosyasının son hali aşağıdaki gibidir:

cat /etc/mongod.confsystemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
# how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
timeZoneInfo: /usr/share/zoneinfo
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
security:
authorization: enabled

Mongod servisini yeniden başlatıyoruz:

systemctl restart mongod

Aşağıdaki komut ile veritabanına bağlandığımızda authentication uyarısını artık almadığımızı göreceğiz:

mongo --port 27017 --host 127.0.0.1  --authenticationDatabase "admin" -u zaydemir -p 'mypassword'

Yeni bir veritabanı ve collection oluşturarak aşağıdaki komutlar ile kayıt ekleyelim:

use customer : customer adında bir veritabanına bağlanır, bu isimde bir veritabanı yoksa oluşturur. Veritabanında bir nesne oluşturmadan çıkarsak veritabanı silinecektir.

db : Bağlı olduğumuz veritabanını gösterir.

db.people.insert() : customer veritabanında people adındaki collection’a kayıt ekler, collection yoksa oluşturur.

db.people.find() : people collection’ında yer alan tüm kayıtları getirir.

show dbs : Mevcut veritabanı listesini verir.

show collections : Bağlandığımız veritabanındaki collection’ların listesini verir.

Transparent HugePages’i Devre Dışı Bırakma (THP)

Transparent HugePages(THP), çoğu Linux işletim sisteminde varsayılan olarak etkinleştirilen bir bellek yönetim sistemidir. MongoDB’nin Linux üzerinde daha performanslı çalışması için THP devre dışı bırakılmalıdır.

Bir servis dosyası oluşturup sunucunun her açılışında mongodb servisi başlamadan önce THP’yi devre dışı bırakacak şekilde ayarlayalım:

vim /etc/systemd/system/disable-transparent-huge-pages.service
[Unit]
Description=Disable Transparent Huge Pages (THP)
DefaultDependencies=no
After=sysinit.target local-fs.target
Before=mongod.service
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null'
[Install]
WantedBy=basic.target

Oluşturduğumuz disable-transparent-huge-pages.service servisini kullanabilir hale getirmek için systemd’yi reload ediyoruz:

systemctl daemon-reload

Servisi başlatıyoruz ve sunucu her açıldığında servisin aktif olabilmesi için enable ediyoruz:

systemctl start disable-transparent-huge-pages
systemctl enable disable-transparent-huge-pages

Aşağıdaki komutla THP ayarının [never] olduğunu görebiliriz:

cat /sys/kernel/mm/transparent_hugepage/enabled

Örnek çıktı aşağıdaki gibidir:

Transparent HugePages’i devre dışı bırakırmanın servis dosyası oluşturmak dışında daha farklı yöntemleri de mevcut, MongoDB sayfasında bulabilirsiniz.

Bu yazımda temel seviyede MongoDB kurulumuna değindim. Fiziksel, sanal ve cloud ortamlara kurulum yaparken daha detaylı yapılandırma işlemleri gerekecektir. MongoDB kurulumu hakkında resmi web sayfası olan https://docs.mongodb.com/manual/ adresinde çok daha detaylı ve kapsamlı anlatım mevcuttur.

--

--

Zekiye AYDEMİR

PostgreSQL Certified DBA | MongoDB Certified DBA | AWS Certified Admin