BG8: Uzman Seviyesi Linux Kernel Ayarları
Linux kernel ayarlarını varsayılanda bıraksak da sıkıntı olmaz ancak biz bu makineleri big data için kullanacağız bu sebeple bazı konfigürasyon değişikliği yapmak hem faydalı hem de performans artırıcı olacaktır. Bu ayarları yapmadan devam edebilirsiniz.
1. Tavsiye Edilen Linux Kernel Parametreleri:
Değiştireceğimiz temel kernel ayarları /etc/sysctl.conf
dosyasındadır.
[root@basecentos7min ~]# nano /etc/sysctl.conf # sysctl settings are defined through files in # /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/. # # Vendors settings live in /usr/lib/sysctl.d/. # To override a whole file, create a new file with the same in # /etc/sysctl.d/ and put new settings there. To override # only specific settings, add a file with a lexically later # name in /etc/sysctl.d/ and put new settings there. # # For more information, see sysctl.conf(5) and sysctl.d(5). fs.file-max=6815744 fs.aio-max-nr=1048576 net.core.rmem_default=262144 net.core.wmem_default=262144 net.core.rmem_max=16777216 net.core.wmem_max=16777216 net.ipv4.tcp_rmem=4096 262144 16777216 net.ipv4.tcp_wmem=4096 262144 16777216
Girdiğimiz değerleri kontrol edelim.
[root@basecentos7min ~]# sysctl fs.file-max fs.file-max = 6815744 [root@basecentos7min ~]# sysctl net.core.rmem_default net.core.rmem_default = 262144 [root@basecentos7min ~]# sysctl net.ipv4.tcp_rmem net.ipv4.tcp_rmem = 4096 262144 16777216
Evet değiştirdik.
2. Disk ve Dizinler için noatime ve noadiratime atama
POSIX ailesi İşletim sistemleri her dosya için en son erişim zamanına ait bir metadata tutar. Access time anlamında atime denir. Diğer iki değer değiştirme (ctime) ve modifiye (mtime) zamanıdır. Bu güzel özeliğin bazı sıkıntıları var. Örneğin okumaya biz sadece okuma olarak bakarız ancak en son erişim zamanı tutulduğu için aslında her okuma bir yazma operasyonunu da gerektirir. Bildiğimiz gibi yazma hep daha maliyetlidir. Bir programın çalışırken onlarca kütüphaneyi gidip biryerlerden okuduğunu düşünün. Aşağıdaki değişiklikleri yapıyoruz.
[root@basecentos7min ~]# nano /etc/fstab [root@basecentos7min ~]# cat /etc/fstab # # /etc/fstab # Created by anaconda on Sun Sep 24 18:11:36 2017 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos-root / xfs defaults,noatime 0 0 UUID=b4c94bc3-721a-4d60-a957-40d56f7c9eaf /boot xfs defaults,noatime 0 0 /dev/mapper/centos-swap swap swap defaults,noatime 0 0
Kontrol edelim
[root@basecentos7min ~]# mount | grep noatime /dev/mapper/centos-root on / type xfs (rw,noatime,attr2,inode64,noquota) /dev/sda1 on /boot type xfs (rw,noatime,attr2,inode64,noquota)
3. Testing Disk I/O Speed
Disk hızını ölçmek için küçük bir programcık kuralım. Sonra test edelim
[root@basecentos7min ~]# yum install hdparm [root@basecentos7min ~]# hdparm -t /dev/sda1 /dev/sda1: Timing buffered disk reads: 604 MB in 3.01 seconds = 200.78 MB/sec
Makinem SSD üzerinde olduğu için fena bir performans göstermedi. HDD için 70 MB/s iyi sayılır.
4. Sunucu BIOS Ayarlarını Kontrolü
BIOS ayarları optimal performans için ayarlandığından emin olun. Örneğin disk sürücülerinin IDE emülasyonu kapalı olmalıdır. Diskleri mount etmeden önce tüm Hadoop dizinlerinin dosya yetkilerinin 700’e ayarlayın.
5. NIC Bonding
Verimliliği ve performansı ve güvenirliği arttırmak için NIC bounding kullanın.
6. NTP Kullanma
Cluster’daki tüm sunucuların saatlerinin senkronize olduğundan emin olun. Bunu NTP ile yapabilirsiniz. Eğer clusterınız internete erişmiyorsa sunuculardan birini NTP server yapabilirsiniz. Bu özellikle ZooKeeper, Kerberos and HBase servisleri için önemlidir.
7. DNS
Cluster içindeki her bir sunucu hem ip hem de sunucu ismi ile birbirine erişebilmelidir ( forward lookup (of its hostname) and a reverse lookup (with its IP address)). Bunu DNS servisinden ya da tüm /etc/hosts
dosyalarını güncelleyerek yapabilirsiniz.
Hadoop tabiatı gereği dağıtık hesaplama yaptığı için ağı çok kullanır dolayısıyla DNS hizmetini de. Dolayısıyla isim sunucusunun tampon belleğini (name server cache deamon) açmak iyi bir fikirdir. Bu ayarlama isim çözümlemesinden kaynaklı gecikmeleri asgariye indirir.
8. Swap’i Kapatma
İşletim sistemi RAM’a ilave olarak diskte bir alanı RAM gibi kullanır. Swapiness değeri düştükçe RAM’i kullanma ve diske başvurma oranı da azalır. Değer sıfır ise bellek taşması aşamasına gelmedikçe disk kullanılmaz. Bu oran arttıkça diske müracaat da artar dolayısıyla performans düşer. Bu değeri 10 yapabiliriz. nano editör ile /etc/sysctl.conf
içine girip son satıra değeri ekliyoruz.
[root@basecentos7min ~]# nano /etc/sysctl.conf [root@basecentos7min ~]# grep swappiness /etc/sysctl.conf vm.swappiness=10
grep ile eklediğimiz değeri kontrol ettik. Sunucuyu yeniden başlatmalıyız.
9. ipv6 Kapatma
Aşağıdaki komutları giriyoruz.
[root@basecentos7min ~]# sysctl -w net.ipv6.conf.all.disable_ipv6=1 net.ipv6.conf.all.disable_ipv6 = 1 [root@basecentos7min ~]# sysctl -w net.ipv6.conf.default.disable_ipv6=1 net.ipv6.conf.default.disable_ipv6 = 1 [root@basecentos7min ~]# cat /proc/sys/net/ipv6/conf/all/disable_ipv6 1
Ayarın kalıcı olması için /etc/sysctl.conf
içine girip aşağıdaki satırları dosyanın son satırına ekliyoruz.
[root@basecentos7min ~]# nano /etc/sysctl.conf net.ipv6.conf.all.disable_ipv6=1 net.ipv6.conf.default.disable_ipv6 = 1
Tekrar başladıktan sonra kontrol yapalım:
[root@basecentos7min ~]# cat /proc/sys/net/ipv6/conf/all/disable_ipv6 1
Sonuçta 1 görmeliyiz. Bu ipv6’nın kapandığı anlamına gelir.
10. Ulimits’i Ayarlama
Bir dosyayı açtığımızda işletim sistemi bu dosyayı temsil eden bir kayıt (entry) açar. Yüz dosya açılmışsa çekirdekte (kernel) bir yerde bunu temsil eden 100 kayıt açılır. Bu kayıtlar 1,2,3…100 şeklinde rakamlarla numaralandırılır. Bu kayıt numaralarına dosya tarifleyicisi (file descriptor) denir. Bu kayıt sayısı parametrelerle ayarlanır eğer bir kullanıcı yada hizmet (process) bu sayıyı taşarsa file descriptor error alır. Biz clusterımızda bu hatayı almamak için bu parametreyi yükselteceğiz. Kullanıcılar için shell limitleri belirliyoruz. nofile özelliği her bir kullanıcı prosesi için açık file descriptor için sınır tanımlar. nproc, proses sayısının üst değerini, soft uyarı limitini ve hard limit settings are the actual resource limits. nano editör ile limits.conf dosyasının en altına aşağıdaki satırları ekliyoruz.
[root@basecentos7min ~]# nano /etc/security/limits.conf * soft nofile 32768 * hard nofile 32768 * soft nproc 32768 * hard nproc 32768
Değerleri kontrol edelim:
ulimit -a
komutuyla açılan listede open files (-n) 32768
ve max user processes (-u) 32768
olduğunu görüyoruz.
11. Transparent Huge Pages (THP) Compaction’ı Kapatma
Cloudera ve Hortonworks uzmanlarına göre THP sıkılaştırması Hadoop performansını kötüleştiriyor. Bu sebeple birleştirmeyi (dfragmentation) kapatmak gerekiyor. Önce THP ne durumda görelim:
[root@basecentos7min ~]# cat /sys/kernel/mm/transparent_hugepage/enabled [always] madvise never [root@basecentos7min ~]# cat /sys/kernel/mm/transparent_hugepage/defrag [always] madvise never
Açık. Temelli kapatmak için aşağıdaki işlemleri yapıyoruz.
[root@basecentos7min ~]# nano /etc/systemd/system/disable-thp.service [root@basecentos7min ~]# cat /etc/systemd/system/disable-thp.service [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
Systemd deamon u çalıştırıyoruz ve oluşturduğumuz scriptleri (disable-thp.service ve disable-thp.service) çalıştırıyoruz.
[root@basecentos7min ~]# systemctl daemon-reload [root@basecentos7min ~]# systemctl start disable-thp [root@basecentos7min ~]# systemctl enable disable-thp Created symlink from /etc/systemd/system/multi-user.target.wants/disable-thp.service to /etc/systemd/system/disable-thp.service.
Sunucuyu tekrar başlattıktan sonra tekrar kontrol edelim kapanmışlar mı?
[root@basecentos7min ~]# cat /sys/kernel/mm/transparent_hugepage/enabled always madvise [never] [root@basecentos7min ~]# cat /sys/kernel/mm/transparent_hugepage/defrag always madvise [never]
Evet gördüğümüz gibi ikisi de never oldu.
Böylelikle uzman seviyesinde yapılacak Linux kernel ayarlarını bitirdik. Bu ayarları şuan kurduğumuz gibi eğitim amaçlı küçük zorlama clusterler için yapmasak da olur ancak gerçek clusterlerda canlı ortamda mutlaka yapılmalıdır. Söylentilere göre %30-40 performans artışı sağlıyormuş.