ElasticSearch Unassigned shards hatası ve çözümü

ElasticSearch Unassigned shards hatası ve çözümü

Eğer benim gibi single node cluster kullanıyor iseniz aşağıdaki komutu ssh tan basarak replica sayısını tekrar set edip bahsi geçen hatayı giderebilirsiniz. Tabi ElasticSearch portunuz farklı ise komutta değiştiriniz. Ya da replica sayınızı örneğin 5 ten 4  indirdiyseniz number of replicas bölümünden sisteminize uygun olacak şekilde değiştiriniz.

curl -XPUT ‘localhost:9200/_settings’ -d ‘
{
“index” : {
“number_of_replicas” : 0
}
}’

Ayhan ARDA

logstash forwarder log gönderme

Cpaneldeki Sitelerin Access Loglarını Logstash-Forwarder ile ElkStack ta Logstash Server a Gönderme

Daha önceki yazılarımızda bir elkstack server kurmuştuk ancak henüz farklı bir serverdan log göndermemiştik , şimdi örnek olarak elimizde bir cpanel sunucu olduğunu ve içinde yüzlerce site olduğunu varsayalım , cpaneldeki sitelerin erişim logları bilindiği üzere /usr/local/apache/domlogs/ altında yer almaktadır , her bir site için bu yolda birer klasör ve içinde sitelerin logları yer almaktadır.

Şimdi elkstack serverın adı elkstack.ayhanarda.com olsun , ip adresi 192.168.1.1 olduğunu varsayalım , cpanel sunucu adı ise cpanel.ayhanarda.com , ip adresi de 192.168.1.2 olsun.

Eğer bu isimler için bir dns serverda kaydımız yok ise cpanel sunucuda aşağıdaki dosyaya elkstack serverın ip ve hostname ini girelim ki aramak ile vakit kaybetmesin. /etc/hosts dosyasını açıp aşağıdaki kaydı girelim , tabi hostname ve ip adresi Sizin yapınıza göre olmalı.

root@cpanel.ayhanarda.com [~]# nano /etc/hosts
192.168.1.1           elkstack.ayhanarda.com

Şimdi centos repo suna logstash forwarder için kayıt ekleyelim.

rpm –import http://packages.elasticsearch.org/GPG-KEY-elasticsearch

cat >> /etc/yum.repos.d/logstash-forwarder.repo << REPO
[logstash-forwarder]
name=logstash-forwarder repository
baseurl=http://packages.elasticsearch.org/logstashforwarder/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1
REPO

Artık logstash-forwarder kurmaya hazırız.

yum -y install logstash-forwarder

Elkstack serverda oluşturduğumuz sertifikayı aşağıdaki dosyanın içine girip kaydedelim , bu dosya yok ise oluşturalım.

nano /etc/pki/tls/certs/logstash-forwarder.crt

—–BEGIN CERTIFICATE—–
MIIDDTCCAfWgAwIBAgIJANcKD2AfHuraMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNV
BAMMEmVsa3N0YWNrLm5hdHJvLmNvbTAeFw0xNTEwMjcxMTI4NTFaFw0yNTEwMjQx



—–END CERTIFICATE—–

Şimdi logstash-forwarder ın conf dosyasını oluşturalım.

nano /etc/logstash-forwarder.conf

{
  “network”: {
“servers”: [ “elkstack.ayhanarda.com:5001” ],
“timeout”: 15,
“ssl ca”: “/etc/pki/tls/certs/logstash-forwarder.crt
  },

“files”: [
{
      “paths”: [
        “/usr/local/apache/domlogs/*/*
       ],
      “fields”: { “type”: “apache-access” }
    }
]
}

Yukarıdaki dosyada dikkat ederseniz 4 farklı ve önemli bölümü işaretledim , birincisi logları nereye ve hangi porta ileteceğimiz , ikincisi bir önceki adımda hazırladığımız ssl dosyasının yolu , üçüncüsü cpanel sunucudaki hangi logları göndereceğimiz , dördüncüsü ise bu logların çeşidi.

Şimdi logstash forwarder ı başlatalım ve aynı zamanda sunucunun bir sonraki açılışında otomatik olarak çalışmasını sağlayalım.

service logstash-forwarder restart && chkconfig logstash-forwarder on

Conf dosyamızda 5001 nolu porta göndereceğimizi belirtmiştik , o halde cpanel server üzerinde bir firewall kullanıyor isek dışarıya doğru bu portu aktif etmeliyiz , ben cpanel sunucularda csf kullanmaya özen gösteriyorum , aşağıdaki dosyasyı açıp tcp_out ve udp_out bölümlerine 5001 nolu portu ekliyorum. Buradaki 5001 portu elkstack serverınız ile ilgili bir durum , yani orada kullanmayı seçtiğiniz porttur , Sizin elkstack ya da logstash server da bu farklı olabilir.

root@cpanel.ayhanarda.com [/usr/local/apache/logs]# cat /etc/csf/csf.conf | grep TCP_OUT
TCP_OUT = “20,21,25,37,43,53,80,110,113,443,587,993,995,2086,2087,2089,2703,3306,4443,5001,6343,30000:35000,65000:65535″
root@cpanel.ayhanarda.com [/usr/local/apache/logs]# cat /etc/csf/csf.conf | grep UDP_OUT
UDP_OUT = “53,113,123,873,5001,6277,6343″

sonrasında csf -r komutu ile csf yi restart edelim. Eğer csf kullanmıyor iseniz iptables üzerinden direkt olarak ta açabilirsiniz.

Şimdi eğer elkstack bu portu dinliyor , cpanel de log gönderiyor ise bunu aşağıdaki dosyayı izleyerek görebilirsiniz

tail -f /var/log/logstash-forwarder/logstash-forwarder.err

2015/11/03 06:57:38.745365 Setting trusted CA from file: /etc/pki/tls/certs/logstash-forwarder.crt
2015/11/03 06:57:38.745939 Connecting to [192.168.1.1]:5001 (elkstack.ayhanarda.com)
2015/11/03 06:57:38.838187 Connected to 192.168.1.1

Hepsi bu kadar , iyi çalışmalar..

Ayhan ARDA

Ubuntu 14.04 üzerine Hadoop 2.6.0 Kurulumu

Bu yazımızda tek bir node üzerine Hadoop kurulumu yapacağız.

Gereksinimler;

1 – Oracle Java 8 Kuralım.

ayhanarda@ubuntu:~$ sudo apt-get install software-properties-common
ayhanarda@ubuntu:~$ sudo add-apt-repository ppa:webupd8team/java
ayhanarda@ubuntu:~$ sudo apt-get update
ayhanarda@ubuntu:~$ sudo apt-get install oracle-java8-installer

Apache Hadoop bir java framework ü , dolayısı ile çalışabilmesi için java kurulu bir sunucu olmalı. Yukarıdaki işlem java yı /usr/lib/jvm/java-8-oracle path ine kuracaktır. Kurulumu test etmek için aşağıdaki komutu girebilirsiniz.

ayhanarda@ubuntu:~$ java -version

2 – HDFS ve MapReduce Erişimi İçin Bir Grup ve Kullanıcı Oluşturalım.

ayhanarda@ubuntu:~$ sudo addgroup hadoop
ayhanarda@ubuntu:~$ sudo adduser --ingroup hadoop hduser

3 – SSH Kuralım ve Konfigüre Edelim.

Hadoop diğer düğümlere ulaşmak ve yönetmek için ssh kullanacak.

ayhanarda@ubuntu:~$ sudo apt-get install openssh-server
ayhanarda@ubuntu:~$ /etc/init.d/ssh start
#Öncelikle hduser ile login olalim.
ayhanarda@ubuntu:~$ sudo su hduser
 
#Key olusturuyoruz , key adi soracak , bos geçebilirsiniz.
hduser@ubuntu:~$ ssh-keygen -t rsa -P ""
 
#Key i authorized_keys dosyamiza yaziyoruz.
hduser@ubuntu:~$ cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys

Key i test etmek için ssh localhost yazabilirsiniz , şifre sormuyor ise tamam demektir.

4 – IPV6 yı kapatalım.

Hadoop henüz ipv6 ile çalışmamakta dolayısı ile kapatmamız gerekiyor. Bu işlem için /etc/sysctl.conf dosyamızı açalım ve dosyanın sonuna aşağıdakileri ekleyip kaydedelim , sonrasında reboot gerekmekte.

hduser@ubuntu:~$ sudo nano /etc/sysctl.conf
# disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

Kurulum;

1 – Apache Hadoop indirelim.

#hadoop kuracağımız dizinin üstüne gidelim.
ayhanarda@ubuntu:~$ cd /usr/local
 
#hadoop u indirelim.
ayhanarda@ubuntu:/usr/local$ sudo wget https://www.apache.org/dist/hadoop/core/hadoop-2.6.0/hadoop-2.6.0.tar.gz
 
#hadoop u açalım.
ayhanarda@ubuntu:/usr/local$ sudo tar -xzvf hadoop-2.6.0.tar.gz
 
#hadoop u taşıyalım.
ayhanarda@ubuntu:/usr/local$ sudo mv hadoop-2.6.0 /usr/local/hadoop
 
#hadoop klasörü sahiplik ayarlarını yapalım.
ayhanarda@ubuntu:/usr/local$ sudo chown hduser:hadoop -R /usr/local/hadoop
 
#Namenode ve Datanode için hadoop temp dizini açalım.
ayhanarda@ubuntu:/usr/local$ sudo mkdir -p /usr/local/hadoop_tmp/hdfs/namenode
ayhanarda@ubuntu:/usr/local$ sudo mkdir -p /usr/local/hadoop_tmp/hdfs/datanode
 
#Hadoop temp dizininin sahiplik ayarlarını yapalım.
ayhanarda@ubuntu:/usr/local$ sudo chown hduser:hadoop -R /usr/local/hadoop_tmp/

2 – Hadoop Konfigürasyon Dosyalarını Güncelleyelim.

#Kullanıcı profilini güncellemek için aşağıdaki dosyayı açalım. 
hduser@ubuntu:~$ sudo nano $HOME/.bashrc
 
#Aşağıdakileri .bashrc dosyasının en altına yazıp kaydedelim. (Burada Java_Home ve Hadoop_Home pathlerinizi kontrol etmenizi öneririm)
# -- HADOOP-bigdatatr.com-- #
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
# -- HADOOP-bigdatatr.com-- #

hadoop-env.sh Dosyası İçin;

export JAVA_HOME= ile başlayan satırı aşağıdaki şekilde düzenleyin.
export JAVA_HOME=/usr/lib/jvm/java-8-oracle

Core-site.xml Dosyası İçin;

#Dosyada göreceğiniz <configuration> tagları arasına aşağıdakilerini girin.
 
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>

hdfs-site.xml Dosyası İçin;

#Dosyada göreceğiniz <configuration> tagları arasına aşağıdakilerini girin.
 
<property>
      <name>dfs.replication</name>
      <value>1</value>
 </property>
 <property>
      <name>dfs.namenode.name.dir</name>
      <value>file:/usr/local/hadoop_tmp/hdfs/namenode</value>
 </property>
 <property>
      <name>dfs.datanode.data.dir</name>
      <value>file:/usr/local/hadoop_tmp/hdfs/datanode</value>
 </property>

yarn-site.xml Dosyası İçin;

#Dosyada göreceğiniz <configuration> tagları arasına aşağıdakilerini girin.
 
<property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
</property>
<property>
      <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
      <value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>

mapred-site.xml Dosyası İçin;

Bu dosyanın adı default olarak mapred-site.xml.template olarak gelir , bunu mapred-site.xml olarak değiştirmeliyiz.

hduser@ubuntu:~$ cp /usr/local/hadoop/etc/hadoop/mapred-site.xml.template /usr/local/hadoop/etc/hadoop/mapred-site.xml

Şimdi editleyebiliriz.

#Dosyada göreceğiniz <configuration> tagları arasına aşağıdakilerini girin.
 
<property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
</property>

3 – NameNode u Formatlayalım.

#hadoop dizinine gidelim.
hduser@ubuntu:~$ cd /usr/local/hadoop
 
#hadoop u formatlayalım
hduser@ubuntu:/usr/local/hadoop$ bin/hdfs namenode -format

3 – Hadoop Daemonlarını Başlatalım.

#sbin dizinine gidelim.
hduser@ubuntu:~$ cd /usr/local/hadoop/sbin
 
#hdfs i başlatalım.
hduser@ubuntu:/usr/local/hadoop$ ./start-dfs.sh
 
#MapReduce i başlatalım.
hduser@ubuntu:/usr/local/hadoop$ ./start-yarn.sh

4 – Hadoop Daemonlarını Test Edelim.

hduser@ubuntu:/usr/local/hadoop/sbin$ jps
2082 ResourceManager
1941 SecondaryNameNode
2184 NodeManager
1785 DataNode
2475 Jps
1661 NameNode

Şimdi Resource Manager ve NameNode a Browserdan erişebilirsiniz.

ResourceManager için- Http://localhost:8088 ya da http://ipadresi:8088

ResourceManager

Name Node için- Http://localhost:50070 ya da http://ipadresi:50070

NameNode

Gelecek makalede görüşmek üzere..

Ayhan ARDA

Tavsiye;

Hadoop in Practice

Hadoop The Definite Guide