23 Haziran 2013 Pazar

Supervisord nedir ?

Twitter storm kullanarak bir (job scheduler) iş planlayıcı üstünde çalışıyordum. Gel gör ki Storm'un sitesinde şöyle birşey yazmışlar ve bende bunu Nimbus'u çalıştırmaya çalışırken gördüm.
"Launches the nimbus daemon. This command should be run under supervision with a tool like daemontools or monit. See Setting up a Storm cluster for more information."
Asıl kafamı kurcalayan kelimeler şunlar;
"This command should be run under supervision with a tool like daemontools or monit."
Birşeyi supervision altında çalıştırmak ta ne demek? Ne farkı var? Normal çalıştırınca olmuyor mu?
Aslında normal çalıştırınca da bir sorun çıkmaz anladığım kadarı ile. Fakat, Storm'u çalıştırırken öğrendim ki, bir uygulamayı ayağa kaldırmak için, o uygulamanın bağımlı olduğu bir sürü farklı uygulamaları da ayağa kaldırmak gerekiyor.
Herşeyi komut satırında teker teker komutlarla yapması ise ömrü kısaltan bir iş. Birde o uygulamalardan birinde hata çıkarsa, ve sistemi göçertirse ayıkla pirincin taşını. Herşeyi komut satırından tek tek kapat, sonra dosya vs bir sürü şeyi temizle. Sonra herşeyi komut satırından tekrar başlat...
Supervision tool bu işi otomatikleştiren birşeymiş. Yani siz ona ne yapması gerektiğini söylüyorsunuz o da yapıyor. Herşeyi toplu halde kapatıp açabiliryor, log dosyaları tutuyor falan filan (Aslında daha bir sürü dalgası vardır ama şu an için ben bu kadarını kullanıyorum).
Problem daemontools' u bir türlü birlgisayarıma kuramamamdı. Bayağı zaman harcadımda. Monit' i deneyecektim ki, storm-user posta listesinden bir bakayım dedim ve "Supervisord" diye birşeyle karşılaştım. Acayip kolay göründü kullanması. Bende bu uygulamayı yükledim ve işlerimi bayağı kolaylaştırdı. Yaptığım tek iş /usr/local/ altında supervisord.conf adında bir dosya açmaktı. Bu dosyaya ne yapması gerektiğini belirttim.
Şu komutlar ile herşeyi halleder hale geldim;
  • $ supervisord  # Uygulamayı başlatıyor.
  • $ supervisorctl reread  # Configurasyon dosyasını tekrar okuyor (değişiklikler falan yapılmışsa).
  • $ supervisorctl update  # Yeniden okunan .conf, taki değişiklikleri uyguluyor.
  • $ supervisorctl start all  # Herşeyi başlatıyor.
  • $ supervisorctl start <group_name>:  # Belirli bir grubu başlatıyor sadece.
  • $ supervisorctl start <process_name>  # Belirtilen process başlatılıyor sadece.
  • $ supervisorctl stop all  # Herşeyi durduruyor. 
Görünen o ki test işleri için böyle bir araç şart.

Faydalı birkaç link;
Storm için pluggable Scheduler geliştirmek
Hemen üstteki linke ait kodlar
Storm kullanıcı mail listesi
Storm komut listesi
Supervisord
Supervisord .conf dosyası hakkında
Supervisord hakkında birkaç numara öğrediğim bir meslektaş

Bu arada kullandığım configurasyon dosyası şu şekilde;


[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)
;chmod=0700                 ; socket file mode (default 0700)
;chown=nobody:nogroup       ; socket file uid:gid owner
;username=user              ; (default is no username (open server))
;password=123               ; (default is no password (open server))

;[inet_http_server]         ; inet (TCP) server disabled by default
;port=127.0.0.1:9001        ; (ip_address:port specifier, *:port for all iface)
;username=user              ; (default is no username (open server))
;password=123               ; (default is no password (open server))

[supervisord]
logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB        ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10           ; (num of main logfile rotation backups;default 10)
loglevel=info                ; (log level;default info; others: debug,warn,trace)
pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false               ; (start in foreground if true;default false)
minfds=1024                  ; (min. avail startup file descriptors;default 1024)
minprocs=200                 ; (min. avail process descriptors;default 200)
;umask=022                   ; (process file creation umask;default 022)
;user=chrism                 ; (default is current user, required if root)
;identifier=supervisor       ; (supervisord identifier, default is 'supervisor')
;directory=/tmp              ; (default is not to cd during start)
;nocleanup=true              ; (don't clean up tempfiles at start;default false)
;childlogdir=/tmp            ; ('AUTO' child log dir, default $TEMP)
;environment=KEY=value       ; (key value pairs to add to environment)
;strip_ansi=false            ; (strip ansi escape codes in logs; def. false)

; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket
;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
;username=chris              ; should be same as http_username if set
;password=123                ; should be same as http_password if set
;prompt=mysupervisor         ; cmd line prompt (default "supervisor")
;history_file=~/.sc_history  ; use readline history if available

[program:zookeeper]
command=/home/matara/Tools/zookeeper-3.3.5/bin/zkServer.sh start-foreground
process_name=%(program_name)s
autostart=true
autorestart=false
stopsignal=KILL
startsecs=1
startretries=999
redirect_stderr=false
stopasgroup=true
stdout_logfile=/home/matara/Tools/storm-0.8.2/logs/supervisord/zookeeperout
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=10
stdout_events_enabled=true
stderr_logfile=/home/matara/Tools/storm-0.8.2/logs/supervisord/zookeepererr
stderr_logfile_maxbytes=100MB
stderr_logfile_backups=10
stderr_events_enabled=true

[program:nimbus]
command=/home/matara/Tools/storm-0.8.2/bin/storm nimbus
process_name=%(program_name)s ; _%(process_num)02d
; numprocs=3
autostart=true
autorestart=false
startsecs=1
startretries=999
redirect_stderr=false
stopsignal=KILL
stopasgroup=true
stdout_logfile=/home/matara/Tools/storm-0.8.2/logs/supervisord/nimbusout
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=10
stdout_events_enabled=true
stderr_logfile=/home/matara/Tools/storm-0.8.2/logs/supervisord/nimbuserr
stderr_logfile_maxbytes=100MB
stderr_logfile_backups=10
stderr_events_enabled=true

[program:supervisor]
command=/home/matara/Tools/storm-0.8.2/bin/storm supervisor
process_name=%(program_name)s ; _%(process_num)02d
; numprocs=1
autostart=true
autorestart=false
startsecs=1
startretries=999
redirect_stderr=false
stopsignal=KILL
stopasgroup=true
stdout_logfile=/home/matara/Tools/storm-0.8.2/logs/supervisord/supervisor_%(process_num)02dout
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=10
stdout_events_enabled=true
stderr_logfile=/home/matara/Tools/storm-0.8.2/logs/supervisord/supervisor_%(process_num)02derr
stderr_logfile_maxbytes=100MB
stderr_logfile_backups=10
stderr_events_enabled=true

[program:workload]
command=/home/matara/Tools/storm-0.8.2/bin/storm jar /home/matara/Desktop/hw2/static_scheduled.jar Main
process_name=%(program_name)s
autostart=false
autorestart=false
startsecs=1
startretries=999
redirect_stderr=false
stopsignal=KILL
stopasgroup=true
stdout_logfile=/home/matara/Tools/storm-0.8.2/logs/supervisord/workloadout
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=10
stdout_events_enabled=true
stderr_logfile=/home/matara/Tools/storm-0.8.2/logs/supervisord/workloaderr
stderr_logfile_maxbytes=100MB
stderr_logfile_backups=10
stderr_events_enabled=true

[group:storm]
programs=zookeeper,nimbus,supervisor ; each refers to 'x' in [program:x] definitions
priority=999   

18 Haziran 2013 Salı

Supervisor Kurulumu

Install the Python install tools to install the Supervisor package:
# apt-get -y install python-setuptools
Install the Supervisor package and add it to the system services:
# easy_install supervisor
# curl https://raw.github.com/gist/176149/88d0d68c4af22a7474ad1d011659ea2d27e35b8d/supervisord.sh > supervisord
# chmod +x supervisord
# mv supervisord /etc/init.d/supervisord
# update-rc.d supervisord defaults
Specify the configuration file by adding "-c /etc/supervisord.conf" to the "DAEMON_ARGS" variable:

# vi /etc/init.d/supervisord
DAEMON_ARGS="-c /etc/supervisord.conf"
Create the supervisor configuration files:
# echo_supervisord_conf > /etc/supervisord.conf
# echo [include] >> /etc/supervisord.conf
# echo files=/etc/supervisord/*.conf >> /etc/supervisord.conf
# mkdir /etc/supervisord
Start the service:
# /etc/init.d/supervisord start
Bu "hata.: Başka bir program zaten HTTP sunucularından birini kullanmak üzere yapılandırılmış bir bağlantı noktasını dinlediğini supervisord başlamadan önce ilk olarak bu programı kapatın." Alabilirsiniz Sunucu başladığında. / Tmp / supervisor.sock bağlantısını kesmek bu sorunu giderir.
# unlink /tmp/supervisor.sock
Yapılandırma aşağıdaki komutu kullanın yeniden:
# supervisorctl reload