Blogdan yazılar

hosting image
blog list image

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

En iyisi için bizimle iletişime geçerek hemen teklif alın

İletişim