CentOS 7 Linux İşletim Sistemi Üzerinde MongoDB Kurulumu
Merhabalar,
Sizlere CentOS 7 Linux işletim sistemi üzerinde kolay,sağlam ve de sorunsuz bir şekilde MongoDB kurulumunun nasıl yapıldığını anlatmaya çalışacağım.
İyi okumalar,
MongoDB Nedir?
MongoDB ücretsiz, açık kaynaklı, belge odaklı bir veritabanıdır. NoSQL veritabanı olarak sınıflandırılır, çünkü geleneksel tablo tabanlı ilişkisel veritabanı yapısına dayanmaz. Bunun yerine, dinamik şemalara sahip JSON benzeri belgeler kullanır. İlişkisel veritabanlarının aksine, MongoDB, veritabanı’na veri eklemeden önce,önceden tanımlanmış bir şema gerektirmez. Güncel bir şema ile yeni bir veritabanı oluşturmak zorunda kalmadan şemayı istediğiniz zaman ve gerektiği kadar değiştirebilirsiniz.
Bu eğitici yazı, MongoDB Topluluk Sürümü’nü bir CentOS 7 sunucusuna yükleme konusunda size yol gösterir.
Ön şartlar;
İşlemlere başlamadan önce, Linux üzerinde profesyonel değilseniz sudo ayrıcalıklarına sahip, düzenli ve root olmayan bir kullanıcımız olduğundan emin olun.
Adım 1 — MongoDB Deposunu Ekleme
Mongodb CentOS’un varsayılan depolarında mevcut değildir. Bu yüzden sunucumuza MongoDB deposunu manuel eklememiz gerekli.
Nano veya farklı bir editör ile, CentOS’un paket yönetim aracı olan yum için bir repo dosyası oluşturmamız gerekli.
sudo nano /etc/yum.repos.d/mongodb-org.repo
Oluşturmuş olduğumuz repo uzantılı dosyaya aşağıda bulunan MongoDB repo bilgilerini kopyalayıp yapıştıralım ve ardından kayıt edelim.
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
MongoDB sistesinden en son repo bilgilerine https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/#configure-the-package-management-system-yum linkinden ulaşabilirsiniz.
Reponun düzgün bir şekilde oluştuğunu kontrol etmek için yum repolist komutu ile kontrol edebilirsiniz.
sudo yum repolist
Çıkan listede aşağıdakine benzer bir çıktı varsa repo eklenmiş demektir.
mongodb-org-4.0/7 MongoDB Repository
Adım 2 — MongoDB’nin Kurulması
sudo yum install mongodb-org
Komutunu kullanarak kurulum işlemine başlayın kurulum sırasında 2 defa evet veya hayır seçeneği çıkar her ikisine de Y ile evet seçeneğini seçiniz. Kurulum tamamlandıktan sonra
sudo systemctl start mongod
MongoDB çalıştırılır.
sudo systemctl status mongod
Komutu ile MongoDB’nin çalışma durumunu görebilirsiniz aşağıdaki gibi bir çıktı varsa sorunsuz bir şekilde kurulumun tamamlandığı ve MongoDB’nin çalıştığını gösterir.
mongod.service — MongoDB Database Server
Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2019–02–14 19:11:56 +03; 8s ago
Sonrasında bir kaç ayar için tekrardan MongoDB yi durdurmamız gerekiyor.
sudo systemctl stop mongod
Komutu ile MongoDB yi durduruyoruz.
MongoDB’nin başlangıçta otomatik olarak çalışmasını sağlamak için aşağıdaki işlemleri yapmamız yeterli olacaktır.
sudo systemctl is-enabled mongod; echo $?
sudo systemctl enable mongod
sudo systemctl restart mongod
MongoDB kurulumu tamamlandı.
Adım 3 — MongoDB ile Alakalı Diğer Ayarlar
MongoDB kurulduktan sonra,linux bash ekranında
mongo
komutu ile MongoDB ye ait bash ekranına geçiş sağlarız. Geçiş sağladığımızda karşıma altta bulunan uyarılar çıkmakta.
Server has startup warnings:
2019–02–14T19:19:05.604+0300 I CONTROL [initandlisten]
2019–02–14T19:19:05.604+0300 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2019–02–14T19:19:05.604+0300 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2019–02–14T19:19:05.604+0300 I CONTROL [initandlisten]
2019–02–14T19:19:05.604+0300 I CONTROL [initandlisten]
2019–02–14T19:19:05.604+0300 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is ‘always’.
2019–02–14T19:19:05.604+0300 I CONTROL [initandlisten] ** We suggest setting it to ‘never’
2019–02–14T19:19:05.604+0300 I CONTROL [initandlisten]
2019–02–14T19:19:05.604+0300 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is ‘always’.
2019–02–14T19:19:05.604+0300 I CONTROL [initandlisten] ** We suggest setting it to ‘never’
2019–02–14T19:19:05.604+0300 I CONTROL [initandlisten]
— –
Temiz ve kusursuz bir çalışma sağlanması adına yukarıdaki uyarıları tamamen ortadan kaldırmak için izleyeceğimiz yolları sırası ile açıklayacağım.
1: WARNING: Access control is not enabled for the database.
Erişim kontrolü ve de DB nin güvenliğini sağlamak adına bir kaç ayarın yapılması gerektiğini söyleyen uyarıdır. Öncelikle veri tabanında bir kullanıcı oluşturup bu kullanıcıya bir takım roller atamamız gereklidir.
Mongo bash ekranında
use admin
komutunu giriyoruz sonra aşağıdaki komutu kendinize göre ayarlayıp admin kullanıcısının erişim yetkilerini tanımlıyoruz.
db.createUser(
{
user: “admin”,
pwd: “şifre”,
roles: [ { role: “root”, db: “admin” } ]
});
aşağıdaki çıktıdan anlaşıldığı gibi işlem başarılı bir şekilde gerçekleşti.
Successfully added user: {
“user” : “admin”,
“roles” : [
{
“role” : “root”,
“db” : “admin”
}
]
}
>
exit yazıp çıkıyoruz.
sonrasında
sudo systemctl stop mongod
komutu ile MongoDB yi durduruyoruz.
sudo nano /etc/mongod.conf
Komutu ile MongoDB’nin ayar dosyasını açıyoruz. Burada dikkat etmemiz gereken en önemli unsur boşluklara dikkat etmenizdir. Eğer boşlukları düzgün olarak ayarlamazsanız MongoDB başlarken hata alacağı için çalışmaz.
Ayar dosyası açıldığında öncelikle güvenlik ayarını yapacağımız
security sekmesi #security olarak karşımıza çıkar buradan # işaretini kaldırıp aşağıda ki ayarı yazmamız gerekiyor.
security:
authorization: enabled
** Boşluklara dikkat!!
Örnek bir ayar dosyası,
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# Where and how to store data.
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# 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 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
security:
authorization: enabled
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options
#auditLog:
#snmp:
Madem MongoDB ayar dosyasında çalışmaya başladık burada yapabileceğiniz diğer ayarlardan da söz etmek istiyorum.
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
Bu ayar MongoDB’nin kullanmış olduğu port ve de MongoDB ye erişim sağlayan Network IP lerini belirlemenizi sağlar.
Yukarıdaki ayarda MongoDB varsayılan olarak 27017 port numarasını kullanmakta isterseniz bu port numarasını değiştirebilirsiniz. Güvenlik açısından şiddetle değiştirmenizi öneririm. Port değişimi yapıldığında yapmanız gereken bir kaç ayar daha ortaya çıkmış olur. Firewall üzerinde ve de Selinux açık ise bu iki öge üzerinde ayar yapmazsanız MongoDB ye erişim sağlayamazsınız.
Sırasıyla ayarlar,
net:
port: 27017
olan port numarasını 23456 yapıyoruz (Siz farklı bir port yazabilirsiniz. Kullanacağınız port numarasının kullanımda olmadığından emin olun. Bunu test etmek için nc -l komutunu kullanabilirsiniz. Linux bash ekranında nc -l 23456 komutundan sonra nc: Address already in use uyarısını görüyorsanız port kullanımda demektir ama herhangi bir şey olmuyorsa port kullanımda değildir.)
net:
port: 23456
sonrasında kayıt altına alıyoruz.
Firewall üzerinde ilgili port numarasına aşağıdaki komut ile izin veriyoruz.
sudo firewall-cmd --permanent --zone=public --add-port=23456/tcpsonrasındasudo firewall-cmd --reload
komutu ile Firewall üzerinde yeni ayarların yüklemesini sağlıyoruz.
Selinux açık ise
sudo semanage port -a -t mongod_port_t -p tcp 23456
komutu ile Selinux üzerinde MongoDB ye izin veriyoruz.
İsterseniz
/etc/mongo.conf
alta ki ayardan MongoDB ye hangi IP bloklarının erişebileceğini de ayarlayabilirsiniz
bindIp: 127.0.0.1 / Sedece Local Makine
bindIp: 0.0.0.0 / Her yerden erişim
bindIp: <192.168.0.1,10.10.0.5,192.168.2.2> / Spesifik erişim
2: Disable Transparent Huge Pages (THP) Şeffaf Büyük Sayfalar (ŞBS)
Şeffaf Büyük Sayfalar (THP), daha büyük bellek sayfalarını kullanarak büyük miktarda bellek içeren makinelerde Çeviri Bakışı Tamponu (TLB) aramalarının ek yükünü azaltan bir Linux bellek yönetim sistemidir.
Bununla birlikte, veritabanı iş yükleri THP ile sıklıkla düşük performans gösterir, çünkü bunlar bitişik bellek erişim düzenlerinden ziyade seyrek olma eğilimindedir. MongoDB ile en iyi performansı sağlamak için Linux makinelerinde THP’yi devre dışı bırakmalısınız.
Bunun içim ufak bir servis oluşturacağız. Servis oluşturmamızın nedeni daha kararlı ve de sağlam bir şekilde bu servisi isteğimiz zaman aktif ve de istediğimiz zaman pasif yapabilmemizdir.
sudo nano /etc/systemd/system/disable-thp.service
Komutu ile servis dosyamızı açıp aşağıdaki kodu yazıp kayıt ediyoruz.
[Unit]
Description=Disable Transparent Huge Pages (THP)
[Service]
Type=simple
ExecStart=/bin/sh -c “echo ‘never’ > /sys/kernel/mm/transparent_hugepage/enabled && echo ‘never’ > /sys/kernel/mm/transparent_hugepage/defrag”
[Install]
WantedBy=multi-user.target
Aşağıdaki komut ile Systemd daemon u yeniden yüklüyoruz.
sudo systemctl daemon-reload
Bundan sonra oluşturmuş olduğumuz bu servisi aşağıdaki komutlar ile her zaman kontrol altında tutabiliriz.
systemctl enable disable-thp / Servisi sunucu her açılıp kapandığında yeniden başlatır ve servis her zaman aktif olur
systemctl start disable-thp / Servisi başlatır
systemctl status disable-thp / Servisin çalışıp,çalışmadığını kotrol etmemizi sağlar
systemctl stop disable-thp / Sevisi durdurur
— — — — — –
systemctl disable disable-thp / Servisi siz aktif yapana kadar kaldırır. İlk komutta enable etmiştik eğer bunu kullanırsak servis kalkar ve sunucu her açıldığında manuel olarak
systemctl start disable-thp
komutunu çalıştırmanız gerekir.
Son olarak da
sudo systemctl start mongod
komutu ile MongoDB yi tekrardan çalıştırıyoruz.
Adım 3 — Son İşlem
Bütün ayarlamaları yaptık MongoDB kullanıma hazır. Bu ayarlar ile çok sağlam bir MongoDB ve MongoDB alt yapısı hazırladık
Son olarak
mongo — port 23456 -u “kullanıcı adınız “ -p “Şifreniz “ — authenticationDatabase “admin”
Komutu ile MongoDB ye giriş yaptığımızda aşağıda görüldüğü gibi bütün uyarılar ortadan kalkmış durumdadır. Bu çıktı MongoDB’nin sorunsuz bir şekilde hizmet vermeye hazır olduğunu gösterir.
MongoDB shell version v4.0.6
connecting to: mongodb://127.0.0.1:23456/?authSource=admin&gssapiServiceName=mongodb
Implicit session: session { “id” : UUID(“7d678c3b-978f-4c96-bbed-cc4f6847bd80”) }
MongoDB server version: 4.0.6