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