Neo4j — Başlangıç Kiti

Merhabalar, bu yazımda biraz daha pratik yaparak çalışmalar yapmaya gayret edeceğim. Neo4j veritabanı üzerine bir başlangıç kiti hazırlamak istedim.

Neo4j başlangıç kiti kapsamında tüm yönleri ile çalışmayı gerçekleştirmeye çalışacağım. Bu yazının ana başlıkları ve akışı aşağıdaki gibi olacaktır.

  1. Neo4j — İşletim Sistemi Hazırlıkları
  2. Neo4j — Kurulum ve Konfigürasyonları
  3. Neo4j — Monitoring
  4. Neo4j — Backup

Önemli Not: Konfigürasyonlar, cluster yapılandırılması,moniotring ayarları ve yedekleme gibi operasyonel işlemler otomasyon ya da as a service olarak hazırlanabilir. Ancak bu yazıdaki temel motivasyon bu işlemlerin arka planı ve nasıl yapıldığı üzerine odaklanmak. O nedenle bu yazı bu işlemleri uygalamak ya da merak edenler için faydalı olacaktır.

Neo4j — İşletim Sistemi Hazırlıkları

  • Sunucu üzerinde aşağıdaki dökümandaki portların açık ve erişilebilir olduğundan emin olunması gerekmektedir. Bu portlar Neo4j tarafından yayınlanan resmi bağlantı portlarıdır.

https://neo4j.com/docs/operations-manual/current/configuration/ports/

  • Java paketinin yüklü olması gerekmektedir.
#!/bin/bash
apt-get update -y
apt-get install sudo vim wget curl git -y
echo "deb <http://httpredir.debian.org/debian> stretch-backports main" | sudo tee -a /etc/apt/sources.list.d/stretch-backports.list
sudo apt-get update -y
sudo apt-get install openjdk-11-jre -y

Neo4j — Kurulum ve Konfigürasyonları

Neo4j kurulumlarını ve konfigürasyonlarını tamamlamak için işletim sistemi üzerinde gerekli ayarların tamamlanması gerekmektedir. Temel olarak neo4j veritabanına yüklemek ve konfigürasyonlarını düzenlemek için aşağıdaki bash script kullanılabilir.

Neo4j kurulacak tüm sunucularda aşağdaıki script kullanılabilir.

#!/bin/bashsudo apt update -y
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL <https://debian.neo4j.com/neotechnology.gpg.key> | sudo apt-key add -
sudo add-apt-repository "deb <https://debian.neo4j.com> stable 4.1"
sudo apt-get install neo4j-enterprise -y
sudo systemctl enable neo4j.service
sudo systemctl status neo4j.service

Bu işlemlerden sonra neo4j temelde hazır olacaktır. Bu işlemlerden sonra konfigürasyonların düzenlenmesi gerekmektedir. Konfigürasyonları düzenlemeden önce dikkat edilmesi gereken birkaç konsept vardır.

Neo4j cluster yapılandırırken cluster üzerinde birden fazla rol vardır. Yani cluster’a dahil edilen sunucuların kendine ait rolleri vardır. Bu roller CORE ve READ_REPLICA olarak ikiye ayrılmaktadır. CORE rolündeki sunucular yazma isteklerinin karşılandığı sunuculardır. READ_REPLICA sunucuları ise, eventual consistent olarak hizmet veren read only istekleri karşılamaktadır.

Konfigürasyonları tamamlamak için ön tanımlı olarak /etc/neo4j/neo4j.conf dosyasında aşağıdaki konfigürasyonlar aktif olduğu teyit edilir.

dbms.default_listen_address=0.0.0.0
dbms.default_advertised_address=ip_1
dbms.mode=CORE
causal_clustering.initial_discovery_members=ip_2:5000,ip_3:5000,ip_1:5000
causal_clustering.discovery_listen_address=:5000
causal_clustering.transaction_listen_address=:6000
causal_clustering.raft_listen_address=:7000
dbms.connector.bolt.listen_address=:7687
dbms.connector.http.listen_address=:7474
dbms.routing.enabled=true
dbms.routing.listen_address=0.0.0.0:7688
dbms.routing.advertised_address=:7688
dbms.backup.enabled=true
dbms.backup.listen_address=0.0.0.0:6362

Konfigürasyon dosyasında aşağıdaki değişikleri yaptıktan aktif olduklarından emin olmak için clusterdaki tüm neo4j servislerini sıra ile restart edebiliriz.Bu işlemlerden sonra neo4j default kullanıcı bilgilerini kullanakar http://ip:7474 adresini kullanarak browser üzerinden arayüze erişebiliriz.

Not: Bu cluster kurgulanırken aşağıdaki şekilde kurgulanmıştır. Clusterda toplam 5 üye mevcuttur. Bunlardan 3 tanesi CORE rolünde ve 2 tanesi ise READ_REPLICA olacak şekilde ayarlanmıştır. Cluster tipi ise casual cluster olarak kurgulanmıştır.

Kurulum ile ilgili işlemleri bu şekilde tamamlayabiliriz. Cluster’ın durumunu kontrol etmek için ise, aşağıdaki SQL bloğunu kullanabiliriz.

CALL dbms.cluster.overview()

Neo4j — Monitoring

Neo4j monitoring için ise birçok alanda kullanılan prometheus ve grafana araçlarını kullanabiliriz. Neo4j kendi içerisinde prometheus uyumlu bir endpoint servis etmektedir. Bu endpointte neo4j sunucusuna,cluster’ına ve veritabanına ait istatistikler yayınlanmaktadır. Bu endpointleri prometheus’a konfigüre ederek metrikleri anlık olarak toplayabiliriz.

Neo4j’nin prometheus endpointini aktif etmek için aşağıdaki iki konfigürasyon veritabanın konfigürasyon dosyasında aktif edilmelidir. (Bir önceki adımdaki konfigürasyon dosyasını kullanabiliriz).

metrics.prometheus.enabled=true
metrics.prometheus.endpoint=0.0.0.0:2004

Bu konfigürasyonlar aktif edildikten sonrasında endpoint üzerindeki metrikleri browser üzerinden 2004 portu ile erişebiliriz.

Grafana üzerinden de prometheus veri kaynağını ayarladıktan sonra dashboard oluşturarak bu metrikleri görsel olarak analiz edebilir duruma geliriz.

Not: Prometheus ve grafana araçlarının bu setupta var olduğunu varsayarak anlatmaya çalıştım. Ancak bu araçlar yoksa siz de kurabilir ya da kullanabilirsiniz. Bunun için aşağıya kısaca bu araçlar için kullandığım temel kurulum ve konfigürasyon adımlarını içeren scriptleri bırakıyorum.

Grafana ansible deployment

Prometheus yapılandırması için bash

Yukarıdaki işlemleri baz alabilirsiniz. Ancak bu araçların deployment’ları için internetteki kaynakları da kullanabilirsiniz çok fazla karmaşık ve kompleks değiller.

Neo4j — Backup

Neo4j veritabanı sisteminde yedek alabilmek içinde konfigürasyonlar dosyasında gereksinimlerin karşılanması gerekmektedir. Bu konfigürasyonları parça parça yapmak yerine production ortamlar için tek seferde yapmak daha mantıklı olacaktır.

Yine aynı konfigürasyonda dosyasında backup için aşağdaki konfigürasyonları aktif etmemiz gerekmektedir.

Neo4j veritabanı altyapısnda da yedek almak için bir endpoint gereklidir. Yani yedek almak işlemi de API üzerinden gerçekleşmektedir.

dbms.backup.enabled=true
dbms.backup.listen_address=0.0.0.0:6362

Bu işlemlerden sonra clusterımızın yedeğini de alabilir duruma gelebiliriz. Ben yedek almak için aşağıdaki şekilde bir bash script hazırladım bu script’i schedule ederek devam ediyorum.

#!/bin/bash    
#title : neo4j backup script to achive hot and cold backups from a sing neo4j replica
#author : Demir
#version : 1.0
#usage : bash backup_neo4j ip port filesystem_information team_name database_name
#==============================================================================
#backup_variables
TODAY=$(date +%Y-%m-%d)
NEO4J_SERVER=$1
NEO4J_BACKUP_PORT=$2
NEO4j_BACKUP_DESTINATION_FOLDER=$3
TEAM_NAME=$4
DATABASE_NAME=$5
BACKUP_FILE_NAME=neo4j-$4-$TODAY
echo "[CONF] - Today: $TODAY"
echo "[CONF] - Neo4j Backup Destination Folder: $NEO4j_BACKUP_DESTINATION_FOLDER"
echo "[CONF] - Team: $TEAM_NAME"
echo "[CONF] - Database $DATABASE_NAME"
echo "[INFO] - Creating Directory for Backup..."
mkdir -p $NEO4j_BACKUP_DESTINATION_FOLDER/$TODAY
echo "[INFO] - Starting Backup..."
neo4j-admin backup --from=$NEO4J_SERVER:$NEO4J_BACKUP_PORT --check-consistency=true --database=$DATABASE_NAME --backup-dir=$NEO4j_BACKUP_DESTINATION_FOLDER/$TODAY && exit 0
echo "[INFO] - Backup Completed..."

Bu yazıda genel anlamda temel ve fikir vermesi açısından sıfırdan bir neo4j cluster ortamanın hazırlanmasını how to şeklinde anlatmaya çalıştım. Burada, başka ihtiyaçlardan ötürü farklı şekilde yapılması gereken işlemler olabilir. Bu nedenle, neo4j’nin kendi dökümanlarını da kontrol etmek her zaman gereklidir.

Referanslar

  1. https://neo4j.com/docs/operations manual/current/configuration/ports/
  2. https://www.techunits.com/topics/setup-guides/setup-guide-for-neo4j-graph-database-ubuntu-18-04-lts/
  3. https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-neo4j-on-ubuntu-20-04
  4. https://linuxhint.com/install-neo4j-ubuntu/
  5. https://neo4j.com/docs/operations-manual/current/installation/linux/debian/
  6. https://neo4j.com/docs/operations-manual/current/installation/requirements/
  7. https://neo4j.com/developer/kb/how-to-monitor-neo4j-with-prometheus/

Sevgiler,

Demir.

--

--

Database Platform Engineer | Bogazici University — Software Engineering

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store