کلاسترینگ چیست؟
کلاسترینگ به گروهی از سرورها شامل یک یا بیشتر از یک سرور گفته می شود که با یک دیگر نرم افزاری مشخص را اجرا می کنند که نتیجه ی آن احتمال خطای کمتر و سرعت بالاتر برنامه هاست. سرویس کلاسترینگ بیشتر برای سازمان و شرکت هایی به کار می رود که برنامه ی آن ها تحت هر شرایطی باید اجرا شود و در حالت اجرا باقی بماند حتی زمانی که یکی از سرورها از سرویس خارج شده باشد. در سرویس کلاسترینگ تمامی سرورها همان برنامه و قوانینی را که باقی سرورها اجرا می کنند اجرا خواهند کرد لذا اگر سروری از سرویس خارج شود باقی سرورها بلافاصه شروع به کار خواهند کرد که به آن Failover گفته می شود.
»ما در این آموزش از سیستم عامل اوبونتو استفاده کرده ایم!
ما بوسیله DRBD می توانیم دیوایس هایی نظیر هارد شبکه و… برای استفاده در مجموعه کلاسترینگ و برای برنامه خاصی بکار ببریم٫که در اینجا ما برای ساخت یک پارتیشن از دیوایس استوریج بین دو سرور بکار می بریم.
DRBD یک پارتیشن مجازی برای تمامیه سرورها میسازد و آنرا بر اساس قوانین خودش بین سرورها پاس می دهد.
در اصل DRBD وقتی که سرور اصلی fail می شود٫ پارتیشن مجازی را به سرور slave پاس می دهد٫ و پارتیشن را برای آن مانت می کند!
Heartbeat
(HA clustering)
ماشین های مجازی به وسیله لینک اختصاصی جهت ارتباط لحظه به لحظه (Heartbeat) و لینک عمومی به یک دیگر متصل هستند.
کار اصلی Heartbeat این است که بدنبال سرور زنده و پایا می باشد٫ البته با حفظ اولویت!
یعنی اگر سرور master در شبکه وجود داشته باشد سرویسه مربوطه برروی آن اجرا می شود٫ در غیر این صورت روی سرورهای بعدی اجرا می شود.
هم چنین Heartbeat وظیفه ساختن IP مجازی را بر عهده دارد٫ پس کانفیگ آن از اهمیت بالایی برخوردار است!!!
پیش نیازها:
- دو سرور
- برای هر سرور ۲ کارت شبکه٫یک کابل کراس٫ یک سوییچ
- و نرم افزارهای:DRBD,Heartbeat,ntp,ntpdate,اسکریپت های مربوطه برای هدایت سرویس و سرورها
این آموزش در هر توضیع از لینوکس قابل پیاده سازیس!
نکته:فقط توجه داشته باشین که هنگام نصب لینوکس یک پارتیشن از نوع روت و یک حافظه swp کافی میباشد٫ و حتما یک بخش از فضای هارد خالی باشد که بعدا ما برای پارتیشن مجازی DRBD به آن نیاز خواهیم داشت!
در آغاز ما آیپی eth0 دو سرور را در رنج متوالی هم قرار می دهیم و بعد نام آنها را عوض می نماییم٫به این صورت:
server 1 192.168.2.2
server2 192.168.2.3
و بعد از آن virtual IP یا IP مجازی را هم تعریف می کنیم!
برای این کار ما فایل های hosts و hostname را تغییر می دهیم:
- فایل hosts :
192.168.0.100 kava1
192.168.0.101 kava2
192.168.0.105 VIP
Virtual IP:
کار آی پی مجازی این است که یک آی پی واسط بینه سرورها ایجاد می کند تا گوشی ها و دستگاها و کلاینت ها به آن متصل شوند!
2.در فایل hostname نام گرها را وارد می کنیم!
و حالا ما باید کارت شبکه های دومeth1 را آدرس دهی کنیم٫به این صورت:
server1:10.1.1.1
server2:10.1.1.2
ما باید همه IPها را IP استاتیک دهیم ٫ در سیستم عامل اوبونتو بصورت زیر می باشد:
root@kava1#vi /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.0.100
netmask 255.255.255.0
gateway 192.168.0.1 —->ip your gateway
auto eth1
iface eth1 inet static
address 10.1.1.1
netmask 255.255.255.0
و به همین شیوه در سرور دوم:
root@kava2#vi /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.0.101
netmask 255.255.255.0
gateway 192.168.0.1 —->ip your gateway
auto eth1
iface eth1 inet static
address 10.1.1.2
netmask 255.255.255.0
وبعد با دستور
#/etc/init.d/networking restart
و در سیستم عامل های فدورا و رد هت و سنت او اس باید با دستور زیر آی پی استاتیک داد:
system-config-network
بعد وارد محیطی می شوید که تمامیه ethernetها با نامه آن ها ذکر شده که شما باید تغییر دهید!
و بعد با دستور
#/etc/init.d/network restart
نکته:توجه کنید که تنها آی پی که نباید در اینجا دستی وارد کرد آی پی مجازی هست!چون خود برنامه Heartbeat اینکار را خودکار انجام می دهد!
البته برای راه اندازیه Heartbeat و اینکه چه آی پی به کلاین ها بدهد در قسمت Heartbeat کاملا توضیح داده می شود.
حال برای همگام سازی sync دو سرور ما باید برنامه ntp ntpdate از طریق لینک زیر نصب نماییم:
apt-get install ntp ntpdate
حال ما باید یک پارتیشن مجازی و مشترک بین دو سرور راه اندازی کنیم!
با دستور fdisk -l یک وضعیت از پارتیشن ها گرفته:
Disk /dev/sda: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3524ac13
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 409599 203776 7 HPFS/NTFS/exFAT
/dev/sda2 409600 317157375 158373888 7 HPFS/NTFS/exFAT
/dev/sda3 454268926 592240639 68985857 5 Extended
/dev/sda4 317157376 454266879 68554752 83 Linux
/dev/sda5 574971904 592240639 8634368 82 Linux swap / Solaris
/dev/sda6 454268928 574969855 60350464 83 Linux
و با دستور fdisk /dev/sda پارتیشن خود را ساخته:
sudo fdisk /dev/sda
>>>>
- n
- p
- ۳ or any number for sda,but no number of fdisk -l
- enter default or manualy
- enter default or manualy
- t
- ۳ or number of sda
- 83
- w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
و حالابا یک بار زدن دیگر دستور fdisk -l پارتیشن ساخته شده را می بینیم.
و هر دو سرور را ریستارت می کنیم…
حال پارتیشن ساخته شده را با دستور زیر در هر دو سرور فرمت می نماییم:
mke2fs -j /dev/sda(number of your partion for drbd)
dd if=/dev/zero bs=1M count=1 of=/dev/sda(number of your partion for drbd); sync
نوبت به نصب برنامه drbd8-utils میرسد(برای اوبونتو):
apt-get install drbd8-utils
برای فدورا٫ سنت او اس٫ رد هت:
yum install drbd83 kmod-drbd83 -y
این تنظیماتDRBD برای هر۲ سرور میباشد!
و برای لود کردن کرنل ماژول drbd وچک و ران کردن:
- modprobe drbd
- lsmod | grep drbd
و حالا نوبت به کانفیگ فایله drbd.conf می رسد:
این فایل در مسیر etc/drbd.con می باشد
تنظیم فایل drbd.conf :
global { usage-count no; }
common { syncer { rate 100M; } }
resource r0 {
protocol C;
handlers {
fence-peer “/usr/lib/heartbeat/drbd-peer-outdater”;
fence-peer “/usr/lib/drbd/crm-fence-peer.sh”;
after-resync-target “/usr/lib/drbd/crm-unfence-peer.sh”;
pri-on-incon-degr “echo ‘DRBD: primary requested but inconsistent!’ | wall; /etc/init.d/heartbeat stop”; #”halt -f”;
pri-lost-after-sb “echo ‘DRBD: primary requested but lost!’ | wall; /etc/init.d/heartbeat stop”; #”halt -f”;
}
startup {
wfc-timeout 15;
degr-wfc-timeout 60;
}
disk { on-io-error detach; } # or panic, …
net {
cram-hmac-alg sha1;
shared-secret “secret”;
after-sb-0pri discard-younger-primary;
after-sb-1pri consensus;
after-sb-2pri disconnect;
rr-conflict disconnect;
}
on kava1 {
device /dev/drbd0;
disk /dev/sda3;
address 10.1.1.1:7788;
meta-disk internal;
}
on kava2 {
device /dev/drbd0;
disk /dev/sda3;
address 10.1.1.2:7788;
meta-disk internal;
}
}
توجه داشته باشید که در این جا باید آیپی eth1 را وارد کنید٫ و همین طور پارتیشن ساخته شده sda3
درضمن مطمئن شوید که اسمه نودهای وارد شده در drbd.conf با اسم hostname یکی باش!با دستور uname -n
حال ما می خواهیم که دو برنامه Heartbeat و DRBD موازی با هم و در تعامل با هم کار کنن٫برای همین منظور ما دستوراته زیر را برای استفاده کردن Heartbeat از ماژولهای DRBD وارد می نماییم!
فقط توجه داشته باشید که برای این قسمت اول باید heartbeat نصب باشد!!!
chgrb haclient /sbin/drbdsetup
chmod o-x /sbin/drbdsetup
chmod u+x /sbin/drbdsetup
***********************************************************
chgrb haclient /sbin/drbdmeta
chmod o-x /sbin/drbdmeta
chmod u+x /sbin/drbdmeta
حال به سراغ نصب برنامه heartbeat می رویم (برای اوبونتو).
apt-get install heartbeat
برای فدورا٫ سنت او اس٫ رد هت:
yum install heartbeat -y
برنامه heartbeat از سه قسمت(فایل) اساسی تشکیل شده:
ha.cf-haresource-authkeys
که در مسیر /etc/ha.d/ قرار دارد.
فایل ha.cf برای این منظور تعبیه شده که برنامه heartbeat از چه توپولوژی و از چه طریقی از ابزارها و وسیله ها و پورت ها برای راه اندازیه کلاستر استفاده کند.
فایل authkeys کلید یا همان مجوز انتقال داده بین گره ها می باشد.
فایل haresource برای این که به heartbeat بگوید از کدام پارتیشن و از کدام سرور و کدام برنامه برای سوییچ در هنگام Failover شدن سرور اصلی استفاده کند و هم چنین کار اصلی ساختن VIP بعهده این فایل می باشد و همین طور وقتی سرورها Failover شدن یا سروری ریست شد٫ مانت کردن پارتیشن بعهده این فایل خواهد بود.
حال به کانفیگ اصلی این برنامه می پردازیم:
- فایل cf:
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
bcast eth1
auto_failback on
node kava1
node kava2
respawn hacluster /usr/lib/heartbeat/dopd
apiauth dopd gid=haclient uid=hacluster
keepalive تعداد دفعاتی که heartbeat پکت می فرستد.
Node که بیانگر گره ها می باشد.
Bcast ست آپ کردن کارت شبکه eth
دو خط آخر برای وقتی است که برای کابل ها یا کارت های شبکه مشکل پیش آید و عملیات sync را دوباره انجام دهد.
۲.فایل haresource:
kava1 drbddisk::r0 Filesystem::/dev/drbd0::/replica::ext3 \ IPaddr::192.168.5.203/24/eth0 mysqld asterisk httpd kava.py
در اول اسمه نود مستر را وارد کرده و بعد ساخت vip بوسیله این پارامتر:
Ipaddr::VIP/Prefix/interface/broadcast
در خط دوم باز اسم مستر و بعد از آن مانت کردن پارتیشنی که با drbd ساخته اییم بهمراه نوع پارتیشن.و در آخر خط هم باید سرویسی که قرار است روی heartbeat سوییچ شود را می نویسیم٫ که ما در اینجا از استریسک استفاده کرده ایم.
نکته:توجه کنید که بهتر است فایل asterisk در مسیر /etc/init.d/ را در مسیر /etc/ha.d/resource.d/ کپی کرده!
و هم چنین فایل اسکریپتی kava.py که با فایل pdf ضمیمه کرده ام!
این فایل در صورتی که سرور دوم به هر مشکلی بر خورد باعث جلوگیری از down شدن سیستم شده و هم چنین تمامیه سرویس های مورد نیاز برای اجرا شدن درسته استریسک برقرار می نماید!
این فایل باید حالت اجرایی بگیرید با دستور:
chmod +x kava.py
بعد از آن باید در تمامیه این مسیرها کپی شود:
/etc/init.d/
/etc/rc0.d/
/etc/rc6.d/
/etc/ha.d/rc.d/
/etc/ha.d/resource.d/
/etc/ha.d/
فایل authkeys:
auth 1
1 sha1 password
sha1 همان مجوزی هست که در فایل drbd.conf تعریف کرده بودیم.
و بعد از آن پسورد مورد نظر.
نکته:برای فایل authkeys باید مجوز تعریف کنید:
chmod 600 /etc/ha.d/authkeys
نکته:تمام کانفیگ های بالا باید در هردو سرور صورت پذیرد.
حالا ما باید meta-disk ارزش دهی اولیه کنیم(در هر دو سرور=*):
*server1,2# drbdadm create-md r0
با این دستور سرویس را استارت می نماییم:
service drbd start
r0 همان نام ریسورس در drbd.conf می باشد.
با این دستور یک مانیتور از فرایند کار می گیریم.
*cat /proc/drbd
DRBD :
توضیحاتی درباره دستور cat /proc/drbd
Cs → connection state
st → node state(local/remote)
ld → local data consistency
ns → network send
nr → network receive
dw → disk write
dr → disk read
pe → pending (wating for ack)
ua → unack’d (still need to send ack)
al → access log write count
با این دستور ما تعیین می کنیم که کدام سرور اصلی و primary باشه و پارتیشن drbd بر رویه primary ساخته شود
و بعد از آن یک دایرکتوری بنامه replica بسازیم و مانت می کنیم:
server01# drbdadm — –overwrite-data-of-peer primary r0
server01#watch -n 1 cat /proc/drbdاول منتظر بمانیید تا عملیات سینک تمام شود
server01# mkfs.ext3 /dev/drbd0
server01# mkdir /replica
server01# mount /dev/drbd0 /replica
و حالا ما باید یک asterisk همگام سازی شده بین دو سرور بر روی پارتیشن ساخته شده بوسیله drbd ایجاد نماییم:
اول وارد دایرکتوریه replica شده:
cd /replica
و بعد تمام این دستورات را برایه وارد کردن فایل ها و مسیرهای asterisk در مسیر replica برای کلاسترمان وارد می نماییم:
tar -zcvf etc-asterisk.tgz /etc/asterisk
tar -zxvf etc-asterisk.tgz
rm -rf /etc/asterisk
ln -s /replica/etc/asterisk /etc/asterisk
tar -zcvf var-lib-asterisk.tgz /var/lib/asterisk
tar -zxvf var-lib-asterisk.tgz
rm -rf /var/lib/asterisk
ln -s /replica/var/lib/asterisk /var/lib/asterisk
tar -zcvf usr-lib-asterisk.tgz /usr/lib/asterisk
tar -zxvf usr-lib-asterisk.tgz
rm -rf /usr/lib/asterisk
ln -s /replica/usr/lib/asterisk /usr/lib/asterisk
tar -zcvf var-spool-asterisk.tgz /var/spool/asterisk
tar -zxvf var-spool-asterisk.tgz
rm -rf /var/spool/asterisk
ln -s /replica/var/spool/asterisk /var/spool/asterisk
tar -zcvf var-lib-mysql.tgz /var/lib/mysql
tar -zxvf var-lib-mysql.tgz
rm -rf /var/lib/mysql
ln -s /replica/var/lib/mysql /var/lib/mysql
tar -zcvf var-spool.tgz /var/spool/
tar -zxvf var-spool.tgz
rm -rf /var/spool
ln -s /replica/var/spool /var/spool
tar -zcvf var-www-html.tgz /var/www/html
tar -zxvf var-www-html.tgz
rm -rf /var/www/html
ln -s /replica/var/www/html /var/www/html
cd ..
/etc/init.d/myql(in elastix:mysqld) restart
/etc/init.d/myql(in elastix:mysqld) stop #for unmounting
umount /replica ; drbdadm secondary r0
و این دستورات هم در سرور اسلیو:دومی
mkdir /replica ; drbdadm primary r0 ; mount /dev/drbd0 /replica
rm -rf /etc/asterisk
rm -rf /var/lib/asterisk
rm -rf /usr/lib/asterisk/
rm -rf /var/spool/asterisk
rm -rf /var/lib/mysql/
rm -rf /var/log/asterisk/
ln -s /replica/etc/asterisk/ /etc/asterisk
ln -s /replica/var/lib/asterisk/ /var/lib/asterisk
ln -s /replica/usr/lib/asterisk/ /usr/lib/asterisk
ln -s /replica/var/spool/asterisk/ /var/spool/asterisk
ln -s /replica/var/lib/mysql/ /var/lib/mysql
ln -s /replica/var/log/asterisk/ /var/log/asterisk
ln -s /replica/var/www /var/www
/etc/init.d/myql(in elastix:mysqld) restart
/etc/init.d/myql(in elastix:mysqld) stop #for unmounting
umount /replica/ ; drbdadm secondary r0
و حال دوباره در سرور اصلی رفته:
drbdadm primary r0
و در آخر بر روی هر دو گره دستورات زیر را تایپ می نماییم:
/etc/init.d/heartbeat start
chkconfig –add heartbeat
حال می رسیم به کنترل و هدایت سرورها و هدایت Heartbeat و DRBD با اسکریپت ها:
در هر دو سرور یک فولدر بنام cron که در ضمیمه گذاشته ام باید در مسیر /home/ کپی شود.
دقت شود که محتویات cron مستر با cron اسلیو فرق می کند!
بعد در فایل crontab در مسیر /etc/ این خط را به انتهای آن اضافه کنید:
*/1 * * * * root /etc/init.d/pingin.py
اسکریپت pingin.py , pingin2.py را در مسیر /etc/init.d/ کپی نموده و با دستور زیر به آن حالت اجرایی دهید:
chmod +x /etc/init.d/pingin.py
chmod +x /etc/init.d/pingin2.py
و هم چنین اسکریپت ایمیل را در سرور دوم در مسیر بالا کپی کرده و در فایل crontab این خط را اضافه کنید:
*/1 * * * * root /etc/init.d/mail3.py
و هم چنین به این فایل هم حالت اجرایی دهید.
و فایل m-cron هم در همان مسیر سرویس های لینوکس کپی شده و حالت اجرایی بدهید به آن!
فقط برای ایمیل زدن دقت نمایید که سرویس ssmtp را در سرور خود فعال ونصب و راه اندازی نمایید:
نحوه نصب ssmtp بر روی CentOS:
فایل epel-release-5-4.noarch را در فایل های ضمیمه موجود است.
root@server2#rpm -Uvh epel-release-5-4.noarch.rpm
root@server2# yum -y install ssmtp
در سیستم عامل هایی که بر پایه ردهت هستن باید دستور زیر را وارد کرده و گزینه ایی که ssmtp وجود دارد انتخاب شود!
alternatives – -config mta
توضیح کانفیگ سرویس میل:
بعد از نصب ssmtp شما در مسیرetc/ssmtp/ssmtp.conf / رفته وآن را به شیوه زیر ویرایش کنید:
[email protected] (your e-mail)*
# The place where the mail goes. The actual machine name is required
# no MX records are consulted. Commonly mailhosts are named mail.domain.com
# The example will fit if you are in domain.com and your mailhub is so named.
mailhub=smtp.gmail.com:587 *
# Example for SMTP port number 2525
# mailhub=mail.your.domain:2525
# Example for SMTP port number 25 (Standard/RFC)
# mailhub=mail.your.domain
# Example for SSL encrypted connection
# mailhub=mail.your.domain:465
# Where will the mail seem to come from?
RewriteDomain=gmail.com *
AuthPass=****(your pass) *
# The full hostname
#Hostname=
# Set this to never rewrite the “From:” line (unless not given) and to
# use that address in the “from line” of the envelope.
FromLineOverride=YES *
# Use SSL/TLS to send secure messages to server.
UseTLS=YES *
UseSTARTTLS=YES *
# Use SSL/TLS certificate to authenticate against smtp host.
#UseTLSCert=YES
# Use this RSA certificate.
#TLSCert=/etc/pki/tls/private/ssmtp.pem
# Get enhanced (*really* enhanced) debugging information in the logs
# If you want to have debugging of the config file parsing, move this option
# to the top of the config file and uncomment
#Debug=YES
آن هایی که آخرشان ستاره دارن باید قرار داده بشوند!و آن هایی که اولشان علامت # دارن برای توضیحات می باشد!
فایل بعدی که برای کانفیگ لازم است در مسیر etc/ssmtp/revaliases / قرار دارد.
کانفیگ این فایل هم به قرار زیر می باشد:
# sSMTP aliases
#
# Format: local_account:outgoing_address:mailhub
#
# Example: root:[email protected]:mailhub.your.domain[:port]
# where [:port] is an optional port number that defaults to 25.
root:[email protected]:smtp.gmail.com:587
البته من این ۲ فایل را با ایمیل خودم مثال زدم٫ هر جا که ایمیل من بود شما باید ایمیل مورد نظر خود را جایگزین نمایید!
پایان
دیدگاه های این مطلب
هیچ نظری ارسال نشده است.