எளிய தமிழில் DevOps-10

Airflow

 

Airflow என்பது அப்பாச்சி நிறுவனம் வழங்குகின்ற திறந்த மூல மென்பொருள் கருவி ஆகும். கணினியில் நடைபெறும் ஒரு சில செயல்கள் தொடர்ச்சியாக எப்போதெல்லாம் நடைபெற வேண்டும் எனத் திட்டமிடுவது workflow scheduling எனப்படும். இவ்வாறு அதிக அளவில் திட்டமிடப்பட்ட பணிகளின் எண்ணிக்கை உயர உயர அவற்றைக் கண்காணிப்பது கடினமாகி விடுகிறது. இப்பிரச்சினைக்காக Airbnb என்ற நிறுவனம் முதன்முதலில் Airflow என்ற கருவியை உருவாக்கியது. இக்கருவி திட்டமிடப்பட்டு நடைபெற்றுக்கொண்டிருக்கும் பல்வேறு பணிகளை UI எனும் இடைமுகப்புத் திரை மூலம் மேலாண்மை செய்கிறது. ஒன்று, இரண்டு எனும் எண்ணிக்கையில் jobs ஓடிக் கொண்டிருக்கும்போது எந்தப் பிரச்சனையும் இல்லை.  ஆனால் ஆயிரக்கணக்கில் அவற்றின் எண்ணிக்கை உயரும் போதும், பல்வேறு கணினிகளில் பல்வேறு கால அளவில் அவை ஓடிக் கொண்டிருக்கும் போதும், ஏதேனும் சிக்கல் ஏற்பட்டு ஒன்றிரண்டு jobs நின்றுவிட்டாலோ தோல்வியுற்றாலோ அவற்றைத் தெரிந்து கொள்வதற்கு இது வாய்ப்பளிக்கிறது. இதற்கென ஒரு இடைமுகப்புத் திரையை (UI Interface) Airflow வழங்குகிறது.

இதனைப் பற்றித் தெரிந்து கொள்வதற்கு முன்னர், முதலில் jobs-ஐ உருவாக்கி schedule செய்வது எப்படி என்று பார்ப்போம்.

Scheduling Jobs

இப்பகுதியில் தொடர்ச்சியான கால இடைவெளிகளில் MySQL டேட்டாபேசை backup எடுத்தல் மற்றும் அவற்றை ரிமோட் சர்வருக்கு அனுப்புதல் போன்ற இருவேறு பணிகளை உருவாக்கி Schedule செய்து பார்க்கப் போகிறோம்.

பணி 1:
ஒருமணி நேரத்திற்கு ஒருமுறை டேட்டாபேசை நமது கணினியில் backup எடுத்து சேமித்து வைத்துக் கொள்வது.

பணி 2:
இவ்வாறு சேமிக்கப்பட்ட கோப்பினை ஒரு நாளைக்கு ஒருமுறை வேறு ஒரு சர்வருக்கு அனுப்பி பாதுகாப்பாக வைத்துக்கொள்வது.
இதில் உள்ள படிகள் பின்வருமாறு.

படி 1:
முதலில் mysql டேட்டாபேசுக்கான சேவையைத் துவக்கவும். பின் பயனர் பெயர் மற்றும் கடவுச்சொல் கொடுத்து உள்நுழையவும்.

$ sudo service mysql start
$ mysql -u root -p


படி 2:
என்னென்ன டேட்டாபேஸ் உள்ளது என கீழ்க்கண்ட கட்டளை மூலம் தெரிந்து கொள்ளவும். இதில் sample எனும் பெயரில் உள்ள டேட்டாபேசைத்தான் ஒருமணி நேரத்திற்கு ஒருமுறை பேக்கப் எடுக்கப் போகிறோம்.
mysql> show databases;

படி 3:
அதற்கு முன்னர் அதில் என்னென்ன அட்டவணைகள் மற்றும் தரவுகள் உள்ளன எனக் கீழ்க்கண்ட கட்டளைகள் மூலம் தெரிந்து கொள்ளவும்.

mysql> use sample;
mysql> show tables;

படி 4:
பின் ctrl-d எனக் கொடுத்து mysql-க்கான ஷெல்லில் இருந்து வெளிவந்த பின்னர்
mysqldump எனும் கட்டளை மூலம் நாம் விரும்பும் டேட்டாபேசை பிரதி எடுத்து வைத்துக் கொள்ளலாம். இங்கு இக்கட்டளையைத் தொடர்ந்து root என்பது பயனர் பெயராகவும், password என்பது கடவுச்சொல்லாகவும் கொடுக்கப்பட்டுள்ளது. பின் sample எனும் டேட்டாபேஸ் sample.sql எனும் பெயரில் நமது கணினியின் தற்போதைய டைரக்டரியில் ஒரு கோப்பாக சேமிக்கப்படுகிறது..
$ mysqldump -u root -ppassword sample > sample.sql

இக்கோப்பினை எங்கு வேண்டுமானாலும் அனுப்பி mysql-க்குள் பின்வருமாறு இம்போட் செய்து கொள்ளலாம். mysql -u root -ppassword sample < sample.sql;
ஆகவே job2 என்பது இக்கோப்பினை ஒரு ரிமோட் சர்வருக்கு அனுப்புவதற்கான கட்டளைகளை உள்ளடக்கியிருக்கும். அதற்கு முன்னர் job1- ஐ உருவாக்கி schedule செய்வோம்.

படி 5:
job1 என்பது டேட்டாபேசை பேக்கப் எடுப்பதற்கான கட்டளையை ஒரு ஷெல் ஸ்கிரிப்டிலிட்டு, பின் அந்த ஸ்கிரிப்ட் ஒருமணி நேரத்திற்கு ஒருமுறை ஓட வேண்டும் என crontab கொண்டு அமைப்பதன் மூலம் உருவாக்கப்படும். இது பின்வருமாறு..
$ vim bkp.sh
mysqldump -u root -ppassword sample > “/home/shrini/backups/”sample_”$(date +”%Y%m%d_%H%M%S”).sql”

இந்த ஸ்கிரிப்டை பின்வருமாறு இயக்கி கோப்பு சேமிக்கப்படுகிறதா என சோதித்துக் கொள்ளவும்.
$ sh bkp.sh
$ ls /home/shrini/backups/

எந்த இடத்தில் கோப்பினை சேமிக்க வேண்டும் என்பதும், எந்தப் பெயரில் சேமிக்க வேண்டும் என்பதும் ஸ்கிரிப்ட்க்குள் கொடுக்கப்பட்டுள்ளது.  வெறும் sample.sql எனும் பெயரில் சேமிக்காமல் ஒவ்வொரு முறையும் அப்போதைய நேரத்துடன் சேர்த்து சேமிக்கிறோம். ஏனெனில் ஒரே பெயரில் அடுத்தடுத்து கோப்புகள் சேமிக்கப்படுவதை இது தவிர்க்கிறது.
படி 6:
கோப்புகள் சேமிக்கப்பட்டுள்ள இடத்திலிருந்து வேறு ஒரு இடத்திற்கு அதனை அனுப்பும் வேலையை rsync எனும் கட்டளை செய்கிறது. இக்கட்டளையைத் தொடர்ந்து நமது கணினியில் கோப்புகள் உள்ள இடத்தின் பாதையைக் கொடுக்க வேண்டும். பின் அதைத்தொடர்ந்து ரிமோட் சர்வரின் ஐபி முகவரி, பயனர் பெயர் மற்றும் அக்கணினியில் எந்த இடத்தில் சேர்க்க வேண்டும் ஆகிய விவரங்களைப் பின்வருமாறு அளிக்க வேண்டும்.
$ rsync -arv /home/shrini/backups shrini@139.59.47.5:/home/shrini

-arv என்பது archive, recursive, verbose எனப் பொருள்படும். இதற்கும் FTP-க்கும் ஒரு சிறு வித்தியாசம் உள்ளது. இரண்டையுமே முதல் முறை இயக்கும்போது ஓரிடத்திலிருந்து அடுத்த இடத்திற்கு கோப்புகளை கொண்டு சேர்க்கும் வேலையைத் தான் செய்கிறது. ஆனால் அதையே மறுமுறை இயக்கும்போது rsync என்பது கோப்புகள் சேர்க்கப்பட வேண்டிய இடத்தில் அவை ஏற்கனவே இருப்பின் அவற்றை விடுத்து, புதிய கோப்புகளை மட்டும் அனுப்பும். மேலும் ஏற்கனவே இருக்கும் கோப்புகளில் ஏதேனும் மாற்றங்கள் இருந்தால் அக்கோப்பினையும் அனுப்பும். எவையெல்லாம் மாற்றம் செய்யப்பட்டவை எனக் கண்டுபிடிக்க md5sum எனும் கட்டளையை rsync பயன்படுத்துகிறது. இக்கட்டளையானது ஓவ்வொரு கோப்பின் மீதும் செயல்பட்டு அதற்கென்று ஒரு நெடிய string-ஐ உருவாக்கும். அதுவே அக்கோப்பிற்கான அடையாளமாக அமையும். இரண்டு இடங்களிலும் இக்கட்டளை மூலம் உருவாக்கப்படும் நெடிய string ஒத்துப் போகவில்லை என்றால் கோப்புகளில் ஏதோ மாற்றம் நிகழ்ந்துள்ளது என்று அர்த்தம். ஆகவே அதனை மட்டும் rsync அனுப்பும். ஆனால் FTP என்பது ஒவ்வொரு முறையும் அனைத்துக் கோப்புகளையும் மொத்தமாகக் கொண்டு சேர்க்கும். ஆகவே ஏற்கனவே அவை இருந்தால் கூட அதன் மீதே overwrite செய்யும்.

படி 7:
job2 என்பது இந்த rsync கட்டளையை ஒரு ஷெல் ஸ்கிரிப்டிலிட்டு, பின் அந்த ஸ்கிரிப்ட் ஒரு நாளைக்கு ஒருமுறை ஓட வேண்டும் என crontab கொண்டு அமைப்பதன் மூலம் உருவாக்கப்படும். ஆனால் மேற்கண்ட படியில் rsync-ஐ இயக்கும்போது ஒவ்வொரு முறையும் அது நம்மிடம் பாஸ்வேர்ட் கேட்டு நிற்பதைக் காணலாம். நாம் பாஸ்வேர்ட் வழங்கிய பின்னரே தனது செயல்பாட்டைத் தொடங்கும்.

ஒரு ஷெல் ஸ்கிரிப்ட் என்பது தன்னிச்சையாக இயங்கி முடியக்கூடிய கட்டளைகளைத் தான் பெற்றிருக்க வேண்டும். இதுபோன்று பாஸ்வேர்ட் கேட்டு நிற்கக்கூடாது. ஆகவே நாம் கோப்புகளை செலுத்த இருக்கும் கணினியின் பாஸ்வேர்டுக்கு இணையான அதன் pem file எங்கு இருக்கிறது என இக்கட்டளையுடன் சேர்த்துக் கொடுக்க வேண்டும். இதைத்தான் ஷெல் ஸ்கிரிப்ட் உள்ளும் கொடுக்க வேண்டும்.
$ rsync -arv -e “ssh -i /home/shrini/shrini-freepem.pem” /home/shrini/backups ubuntu@35.166.185.40:/home/ubuntu

ஒருமுறை pem file துணைகொண்டு பாஸ்வேர்ட் இல்லாமல் உள்நுழைய முடிகிறதா என ssh செய்து பார்த்துக் கொள்ளவும்.
$ ssh -i /home/shrini/shrini-freepem.pem ubuntu@35.166.185.40

பின் ஷெல் ஸ்கிரிப்டை உருவாக்கவும். இதில் rsync முடிந்தவுடன் கோப்புகள் அனைத்தையும் நீக்கும் கட்டளை இணைக்கப்பட்டுள்ளது.
$ vim push_remote.sh

rsync -arv -e “ssh -i /home/shrini/shrini-freepem.pem” /home/shrini/backups ubuntu@35.166.185.40:/home/ubuntu
rm -f /home/shrini/backups/*

படி 8:
இரண்டு ஷெல் ஸ்கிரிப்டையும் இயக்குவதற்கு அனைத்து பயனர்களுக்கும் execute அனுமதி அளிக்கவும்.
$ chmod a+x bkp.sh
$ chmod a+x push_remote.sh

படி 9:
கடைசியாக crontab மூலம் bkp.sh எனும் ஸ்கிரிப்ட் ஒருமணி நேரத்திற்கு ஒருமுறை ஓடுமாறும், push_remote.sh எனும் ஸ்கிரிப்ட் ஒரு நாளைக்கு ஒருமுறை நள்ளிரவு 12:20 மணிக்கு ஓடுமாறும் பின்வருமாறு அமைக்கப்படுகிறது.
$ crontab -e
0 * * * * /bin/bash /home/shrini/bkp.sh
20 0 * * * /bin/bash /home/shrini/push_remote.sh
ctrl+O , ENTER, ctrl+X
-e எனக் கொடுத்து edit செய்த பின்னர், -l எனக் கொடுத்து schedule செய்யப்பட்டுள்ள கட்டளைகளை சரிபார்த்துக் கொள்ளவும்.
$ crontab -l

%d bloggers like this: