GlusterFS, Gluster Inc tarafından geliştirilen ve şu anda Redhat tarafından sürdürülen açık kaynaklı bir yazılımdır. Nesne, blok ve dosya depolama arayüzlerini sağlamak için kullanılır. Yapılandırılmamış veriler için uygun maliyetli ve esnek depolama sağlar ve genellikle bulut depolama ortamı akışı ve CDN’yi içeren yüksek veri yoğunluklu iş yüklerinde kullanılır. Şirket içinde veya bulutta dağıtılabilir ve NFS, SMB, CIFS, HTTP ve FTP dahil sayısız protokolü destekler.
Heketi, RESTful yönetim arayüzü sağlayarak Gluster Storage birimlerinin yaşam döngüsünü yönetmek için kullanılabilir. Bu, birimlerin dinamik tedariği için GlusterFS’nin Kubernetes, OpenStack Manila ve OpenShift gibi bulut hizmetleriyle entegre olmasını kolaylaştırır. Heketi, kümedeki tuğlaların konumlarını otomatik olarak belirler ve bunları ve kopyalarını farklı arıza alanlarına yerleştirir. Aynı zamanda sayısız GlusterFS kümesini de destekleyerek tek bir GlusterFS kümesi sınırlaması olmaksızın ağ dosya depolaması sağlamayı mümkün kılar. Genel olarak Heketi, sistem yöneticisinin tuğlaları, diskleri veya güvenilir depolama havuzlarını yönetmesini veya yapılandırmasını kolaylaştırır. Bu hizmet, isteğe bağlı olarak depolama konumunun belirlenmesini sağlayan yönetici için tüm donanımı yönetir.
Bugün Heketi ile Ubuntu 22.04 üzerinde GlusterFS’nin nasıl yapılandırılacağını öğreneceğiz.
Başlangıç
Bu kılavuz için gösterildiği gibi yapılandırılmış bir ortamımız olacak:
- GlusterFS için 3 Ubuntu 22.04 sunucusu
- Her sunucuya bağlı 10 GB’lık 3 ikincil disk bulunur
- sudo erişimi
- Heketi sunuculardan birinde kurulacak
DNS sunucusu olmayanlar için her sunucuda DNS çözünürlüğü /etc/hosts konumunda yapılandırılabilir.
$ sudo vim /etc/hosts
192.168.200.90 gluster01.computingforgeeks.com gluster01
192.168.200.91 gluster02.computingforgeeks.com gluster02
192.168.200.92 gluster03.computingforgeeks.com gluster03
1. NTP zaman senkronizasyonunu yapılandırma
Başlamadan önce, 3 sunucunun tümünün saatlerinin senkronize olması önemlidir. Bu, Ağ Zaman Protokolü (NTP) veya Chrony arka plan programı kullanılarak yapılabilir.
Bunu başarmak için Chrony’nin kurulu olduğundan emin olun:
sudo apt -y install chrony
Hizmeti başlatın ve etkinleştirin:
sudo systemctl enable --now chronyd
3 sunucunun tümünde Saat Dilimini ayarlayın:
sudo timedatectl set-timezone Africa/Nairobi --adjust-system-clock
sudo timedatectl set-ntp yes
Değişiklikleri doğrulayın:
$ timedatectl
Local time: J5 2023-06-14 14:44:50 EAT
Universal time: J5 2023-06-14 11:44:50 UTC
RTC time: J5 2023-06-14 11:44:50
Time zone: Africa/Nairobi (EAT, +0300)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
2. GlusterFS paketlerini yükleyin
GlusterFS, varsayılan Ubuntu 22.04 depolarında mevcuttur. Bu, kurulumu çok kolaylaştırır. GlusterFS’yi Ubuntu 22.04’e kurmak için aşağıdaki komutu yürütün:
sudo apt install glusterfs-server
Kurulduktan sonra hizmetin başlatıldığından ve etkinleştirildiğinden emin olun:
sudo systemctl enable --now glusterd
Hizmetin durumunu görüntüleyin:
$ systemctl status glusterd
● glusterd.service - GlusterFS, a clustered file-system server
Loaded: loaded (/lib/systemd/system/glusterd.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2023-06-14 14:46:22 EAT; 4s ago
Docs: man:glusterd(8)
Process: 14472 ExecStart=/usr/sbin/glusterd -p /var/run/glusterd.pid --log-level $LOG_LEV>
Main PID: 14473 (glusterd)
Tasks: 9 (limit: 4617)
Memory: 11.0M
CPU: 1.481s
CGroup: /system.slice/glusterd.service
└─14473 /usr/sbin/glusterd -p /var/run/glusterd.pid --log-level INFO
Jun 14 14:46:21 gluster01.computingforgeeks.com systemd[1]: Starting GlusterFS,
Etkinleştirilmiş bir güvenlik duvarınız varsa, hizmetin bunun üzerinden geçmesine izin verin:
sudo ufw allow 24007/tcp
Kurulum 3 düğümün tamamında tamamlandıktan sonra kümedeki diğer düğümleri araştıracağız. Bir düğüm gluster01 diyelim, aşağıdaki komutları yürütün:
# Perform on Node 01
sudo gluster peer probe gluster02
sudo gluster peer probe gluster03
Durumu görüntüle:
sudo gluster peer status
Örnek Çıktı:
3. Heketi’yi yükleyin
Daha önce de belirtildiği gibi Heketi, kümedeki yalnızca bir düğüme kurulacak. Bu kılavuz için gluster01’e kuracağız. Heketi’nin en son sürümünü GitHub sürümler sayfasından indirin.
Dosyayı şu komutla da çekebilirsiniz:
wget https://github.com/heketi/heketi/releases/download/v10.4.0/heketi-v10.4.0-release-10.linux.amd64.tar.gz
Arşivi çıkartın:
for i in `ls | grep heketi | grep .tar.gz`; do tar xvf $i; done
Çıkarılan dosyaları PATH’inize kopyalayın:
sudo cp heketi/{heketi,heketi-cli} /usr/local/bin
Şimdi kurulumu doğrulayın:
$ heketi --version
Heketi v10.4.0-release-10 (using go: go1.15.14)
$ heketi-cli --version
heketi-cli v10.4.0-release-10
4. Heketi’yi yapılandırma
Heketi’nin kullanılabilmesi için yapmamız gereken birkaç konfigürasyon var. Öncelikle Heketi için özel bir kullanıcı oluşturun:
sudo groupadd --system heketi
sudo useradd -s /sbin/nologin --system -g heketi heketi
Ardından Heketi için konfigürasyonları ve veri yollarını oluşturun ve oluşturun:
sudo mkdir -p /var/lib/heketi /etc/heketi /var/log/heketi
sudo cp heketi/heketi.json /etc/heketi
Artık oluşturulan yapılandırma dosyasını istediğimiz gibi değiştirebiliriz:
sudo vim /etc/heketi/heketi.json
Dosyada değiştirilebilecek çeşitli değişkenler vardır; bunlar arasında şunlar bulunur:
##Set service port##
"port": "8080"
##Set admin and use secrets##
"_jwt": "Private keys for access",
"jwt": {
"_admin": "Admin has access to all APIs",
"admin": {
"key": "jvd7df8RN7QNeKV1"
},
"_user": "User only has access to /volumes endpoint",
"user": {
"key": "lMPgdZ8NtFNj6jgk"
}
},
##Configure glusterfs executor##
_sshexec_comment": "SSH username and private key file information",
"sshexec": {
"keyfile": "/etc/heketi/heketi_key",
"user": "root",
"port": "22",
"fstab": "/etc/fstab",
......
},
##database path settings
"_db_comment": "Database file name",
"db": "/var/lib/heketi/heketi.db",
....
},
Ayrıca dosyada, gösterildiği gibi (_) ekleyerek aşağıdaki satırları yorumlayın:
"_sshexec_comment": "SSH username and private key file information",
....
"_xfs_sw": "Optional: Specify number of data disks in the underlying RAID device",
"_xfs_su": "Optional: Specifies a stripe unit or RAID chunk size.",
"_gluster_cli_timeout": "Optional: Timeout, in seconds, passed to the gluster cli invocations",
"_debug_umount_failures": "Optional: boolean to capture more details in case brick unmounting fails",
"_kubeexec_comment": "Kubernetes configuration",
"_xfs_sw": "Optional: Specify number of data disks in the underlying RAID device.",
"_xfs_su": "Optional: Specifies a stripe unit or RAID chunk size.",
"_gluster_cli_timeout": "Optional: Timeout, in seconds, passed to the gluster cli invocations",
"_debug_umount_failures": "Optional: boolean to capture more details in case brick unmounting fails",
.....
Root dışında bir SSH kullanıcısı kullanıyorsanız sudo için şifresiz yapılandırma yaptığınızdan emin olun. İstenilen değişiklikler yapıldıktan sonra dosyayı kaydedin ve kullanıcı için sağlanan SSH anahtarlarını (örneğin kök) oluşturun:
sudo -i
ssh-keygen -f /etc/heketi/heketi_key -t rsa -N ''
chown heketi:heketi /etc/heketi/heketi_key*
Öncelikle, kullanıcı olarak root kullanılıyorsa 3 sunucunun tümünde root oturum açma iznine izin verildiğinden emin olun:
$ vim /etc/ssh/sshd_config
PermitRootLogin yes
Hizmeti yeniden başlatın:
sudo systemctl restart sshd
Oluşturulan ortak anahtarı şu komutu kullanarak diğer tüm GlusterFS düğümlerine kopyalayın:
for i in gluster01 gluster02 gluster03; do
ssh-copy-id -i /etc/heketi/heketi_key.pub root@$i
done
Gluster01’den GlusterFS düğümlerine erişimi özel anahtarla doğrulayın:
root@gluster01:~# ssh -i /etc/heketi/heketi_key root@gluster02
Welcome to Ubuntu 22.04 LTS (GNU/Linux 5.19.0-41-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
460 updates can be applied immediately.
255 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable
Last login: Wed Jun 14 17:10:36 2023 from 192.168.200.90
root@gluster02:~# exit
Bu SSH anahtarlarının istenildiği gibi çalıştığını gösterir. Oturumdan çıkın ve aşağıdaki yapılandırmalara devam edin.
Heketi için bir hizmet dosyası oluşturun:
sudo vim /etc/systemd/system/heketi.service
Bu satırları dosyaya ekleyin:
[Unit]
Description=Heketi Server
[Service]
Type=simple
WorkingDirectory=/var/lib/heketi
EnvironmentFile=-/etc/heketi/heketi.env
User=heketi
ExecStart=/usr/local/bin/heketi --config=/etc/heketi/heketi.json
Restart=on-failure
StandardOutput=syslog
StandardError=syslog
[Install]
WantedBy=multi-user.target
Dosyayı kaydedin ve bir ortam dosyası indirin:
sudo wget -O /etc/heketi/heketi.env https://raw.githubusercontent.com/heketi/heketi/master/extras/systemd/heketi.env
Heketi kullanıcısı için gerekli tüm izinleri atayın:
sudo chown -R heketi:heketi /var/lib/heketi /var/log/heketi /etc/heketi
Heketi’nin ihtiyaç duyduğu tüm Çekirdek modüllerini yükleyin:
for i in dm_snapshot dm_mirror dm_thin_pool; do
sudo modprobe $i
done
Daemon’u yeniden yükleyin ve hizmeti başlatın:
sudo systemctl daemon-reload
sudo systemctl enable --now heketi
Hizmetin çalışır durumda olup olmadığını doğrulayın:
$ systemctl status heketi
● heketi.service - Heketi Server
Loaded: loaded (/etc/systemd/system/heketi.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2023-06-14 17:48:36 EAT; 4s ago
Main PID: 4545 (heketi)
Tasks: 7 (limit: 4617)
Memory: 5.7M
CPU: 16ms
CGroup: /system.slice/heketi.service
└─4545 /usr/local/bin/heketi --config=/etc/heketi/heketi.json
Jun 14 17:48:36 gluster01.computingforgeeks.com heketi[4545]: Heketi v10.4.0-release-10 (using go: go1.15.14)
Jun 14 17:48:36 gluster01.computingforgeeks.com heketi[4545]: [heketi] INFO 2023/06/14 17:48:36 Loaded mock executor
....
Jun 14 17:48:36 gluster01.computingforgeeks.com heketi[4545]: Listening on port 8080
5. Heketi Topolojisi dosyasını oluşturun
Bu kılavuzda, JSON dosyasını manuel olarak düzenlemek yorucu olabileceğinden, Heketi topoloji dosyasını oluşturmak ve sürdürmek için Ansible komut dosyalarını kullanacağız.
Bunu kolaylaştırmak için sisteminize Ansible’ı yükleyin:
sudo apt update
sudo apt install software-properties-common
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt install ansible
Sonra bir proje klasörü oluşturun:
mkdir -p ~/projects/ansible/roles/heketi/{tasks,templates,defaults}
Şimdi Topoloji dosyası için şablonu oluşturun:
$ vim ~/projects/ansible/roles/heketi/templates/topology.json.j2
{
"clusters": [
{
"nodes": [
{% if gluster_servers is defined and gluster_servers is iterable %}
{% for item in gluster_servers %}
{
"node": {
"hostnames": {
"manage": [
"{{ item.servername }}"
],
"storage": [
"{{ item.serverip }}"
]
},
"zone": {{ item.zone }}
},
"devices": [
"{{ item.disks | list | join ("\",\"") }}"
]
}{% if not loop.last %},{% endif %}
{% endfor %}
{% endif %}
]
}
]
}
Bu dosyayı kaydedin ve tanımlanan değerlerle eşleşen bir değişkenler dosyası oluşturun:
vim ~/projects/ansible/roles/heketi/defaults/main.yml
Gerektiğinde doğru şekilde değiştirerek aşağıdaki satırları ekleyin:
---
# GlusterFS nodes
gluster_servers:
- servername: gluster01
serverip: 192.168.200.90
zone: 1
disks:
- /dev/sdb
- /dev/sdc
- /dev/sdd
- servername: gluster02
serverip: 192.168.200.91
zone: 1
disks:
- /dev/sdb
- /dev/sdc
- /dev/sdd
- servername: gluster03
serverip: 192.168.200.92
zone: 1
disks:
- /dev/sdb
- /dev/sdc
- /dev/sdd
Bir Ansible görevi oluşturun:
vim ~/projects/ansible/roles/heketi/tasks/main.yml
Dosyada aşağıdaki içeriği sağlayın:
---
- name: Copy heketi topology file
template:
src: topology.json.j2
dest: /etc/heketi/topology.json
- name: Set proper file ownership
file:
path: /etc/heketi/topology.json
owner: heketi
group: heketi
Ansible oynatma kitabı dosyasını oluşturun:
vim ~/projects/ansible/heketi.yml
Bu satırları dosyaya ekleyin:
---
- name: Generate Heketi topology file and copy to Heketi Server
hosts: gluster01
become: yes
become_method: sudo
roles:
- heketi
Host dosyasını oluşturun:
$ vim ~/projects/ansible/hosts
gluster01
Dizine gidin:
cd ~/projects/ansible
Oluşturulan her şeyi görüntüleyin:
$ tree
.
├── heketi.yml
├── hosts
└── roles
└── heketi
├── defaults
│ └── main.yml
├── tasks
│ └── main.yml
└── templates
└── topology.json.j2
5 directories, 5 files
Şimdi Ansible playbook’unu şu komutu kullanarak çalıştırın:
ansible-playbook -i hosts --user myuser --ask-pass --ask-become-pass heketi.yml
Alternatif olarak, root kullanıcısını veya sudo Passwordless kullanıcısını şu komutla kullanabilirsiniz:
ansible-playbook -i hosts --user myuser heketi.yml
Örnek Çıktı:
Artık gösterildiği gibi oluşturulmuş bir topoloji dosyanız olacak:
$ cat /etc/heketi/topology.json
{
"clusters": [
{
"nodes": [
{
"node": {
"hostnames": {
"manage": [
"gluster01"
],
"storage": [
"192.168.200.90"
]
},
"zone": 1
},
"devices": [
"/dev/sdb","/dev/sdc","/dev/sdd"
]
}, {
"node": {
"hostnames": {
"manage": [
"gluster02"
],
"storage": [
"192.168.200.91"
]
},
"zone": 1
},
"devices": [
"/dev/sdb","/dev/sdc","/dev/sdd"
]
}, {
"node": {
"hostnames": {
"manage": [
"gluster03"
],
"storage": [
"192.168.200.92"
]
},
"zone": 1
},
"devices": [
"/dev/sdb","/dev/sdc","/dev/sdd"
]
} ]
}
]
}
6. Heketi Topoloji Dosyasını Yükleme
Yukarıdaki adımlarla topoloji dosyası oluşturulduktan sonra Heketi’ye yükleyip kullanabiliriz. CI kullanarak yüklemek için komutu aşağıdaki sözdizimiyle çalıştırın.
heketi-cli topology load --user admin --secret <heketi_admin_secret> --json=/etc/heketi/topology.json
Örneğin heketi_admin_secret’i değiştirin:
heketi-cli topology load --user admin --secret jvd7df8RN7QNeKV1 --json=/etc/heketi/topology.json
Örnek Çıktı:
Şimdi değişkenleri dışa aktarın:
$ vim ~/.bashrc
export HEKETI_CLI_SERVER=http://heketiserverip:8080
export HEKETI_CLI_USER=admin
export HEKETI_CLI_KEY="Adminsecret"
Profilin kaynağı:
source ~/.bashrc
Şimdi kümeyi görüntüleyin:
$ heketi-cli cluster list
Clusters:
Id:e36f3593c6abde17ff69665043765e17 [file][block]
Mevcut düğümleri göster:
$ heketi-cli node list
Id:111dcab88510035789f3551a359e27fe Cluster:e36f3593c6abde17ff69665043765e17
Id:3649b21cb354e55c3588868ddfa7ff92 Cluster:e36f3593c6abde17ff69665043765e17
Id:b9dbcd4773319d28e3f265d6ab6b52b6 Cluster:e36f3593c6abde17ff69665043765e17
Düğümleri görüntülemek için aşağıdaki komutu da kullanabilirsiniz:
$ sudo gluster pool list
UUID Hostname State
44c4384a-313b-4726-87c7-89622250ab83 gluster02 Connected
d1f8f291-f2cd-4a8b-8b26-91243d192ecf gluster03 Connected
d1f8f291-f2cd-4a8b-8b26-91243d192ece localhost Connected
Kümenin daha fazla ayrıntısını görüntüleyin
heketi-cli node info <NODE_ID>
Örneğin:
$ heketi-cli node info 111dcab88510035789f3551a359e27fe
Node Id: 111dcab88510035789f3551a359e27fe
State: online
Cluster Id: e36f3593c6abde17ff69665043765e17
Zone: 1
Management Hostname: gluster03
Storage Hostname: 192.168.200.92
Devices:
Id:1072f75242b8f7cd32d450344c2bf9b4 Name:/dev/sdd State:online Size (GiB):500 Used (GiB):0 Free (GiB):500 Bricks:0
Id:49e832b9834ec185b21960f411891292 Name:/dev/sdc State:online Size (GiB):500 Used (GiB):0 Free (GiB):500 Bricks:0
Id:a8aca352fb2d742e9bda4d04e48877a9 Name:/dev/sdb State:online Size (GiB):500 Used (GiB):0 Free (GiB):500 Bricks:0
Gluster birimlerinin istendiği gibi çalışıp çalışmadığını doğrulamak için bir birim oluşturmak üzere Heketi’yi kullanacağız:
# heketi-cli volume create --size=1
Name: vol_e3791aa3f720f8e1e50c3d433326030f
Size: 1
Volume Id: e3791aa3f720f8e1e50c3d433326030f
Cluster Id: e36f3593c6abde17ff69665043765e17
Mount: 192.168.200.92:vol_e3791aa3f720f8e1e50c3d433326030f
Mount Options: backup-volfile-servers=192.168.200.91,192.168.200.90
Block: false
Free Size: 0
Reserved Size: 0
Block Hosting Restriction: (none)
Block Volumes: []
Durability Type: replicate
Distribute Count: 1
Replica Count: 3
Oluşturulan birimi görüntüleyin:
# heketi-cli volume list
Id:e3791aa3f720f8e1e50c3d433326030f Cluster:e36f3593c6abde17ff69665043765e17 Name:vol_e3791aa3f720f8e1e50c3d433326030f
Topolojiyi görüntülemek için şunu yürütün:
heketi-cli topology info
Artık oyuncak ilerleyebilir ve GlusterFS’yi istediği gibi kullanabilir.
Yazının orijianlini buradan okuyabilirsiniz.