آموزش راه اندازی سیستم DRBD Clustering&HA Clustering برای سرویس Asterisk

آموزش راه اندازی سیستم DRBD Clustering&HA Clustering برای سرویس Asterisk

drbd1

کلاسترینگ چیست؟
کلاسترینگ به گروهی از سرورها شامل یک یا بیشتر از یک سرور گفته می شود که با یک دیگر نرم افزاری مشخص را اجرا می کنند که نتیجه ی آن احتمال خطای کمتر و سرعت بالاتر برنامه هاست. سرویس کلاسترینگ بیشتر برای سازمان و شرکت هایی به کار می رود که برنامه ی آن ها تحت هر شرایطی باید اجرا شود و در حالت اجرا باقی بماند حتی زمانی که یکی از سرورها از سرویس خارج شده باشد. در سرویس کلاسترینگ تمامی سرورها همان برنامه و قوانینی را که باقی سرورها اجرا می کنند اجرا خواهند کرد لذا اگر سروری از سرویس خارج شود باقی سرورها بلافاصه شروع به کار خواهند کرد که به آن Failover گفته می شود.

drbd2

»ما در این آموزش از سیستم عامل اوبونتو استفاده کرده ایم!

drbd3

ما بوسیله DRBD می توانیم دیوایس هایی نظیر هارد شبکه و… برای استفاده در مجموعه کلاسترینگ و برای برنامه خاصی بکار ببریم٫که در اینجا ما برای ساخت یک پارتیشن از دیوایس استوریج بین دو سرور بکار می بریم.

DRBD یک پارتیشن مجازی برای تمامیه سرورها میسازد و آنرا بر اساس قوانین خودش بین سرورها پاس می دهد.

در اصل DRBD وقتی که سرور اصلی fail می شود٫ پارتیشن مجازی را به سرور slave پاس می دهد٫ و پارتیشن را برای آن مانت می کند!

Heartbeat

(HA clustering)

drbd4

ماشین های مجازی به وسیله لینک اختصاصی جهت ارتباط لحظه به لحظه (Heartbeat) و لینک عمومی به یک دیگر متصل هستند.

کار اصلی Heartbeat این است که بدنبال سرور زنده و پایا می باشد٫ البته با حفظ اولویت!

یعنی اگر سرور master در شبکه وجود داشته باشد سرویسه مربوطه برروی آن اجرا می شود٫ در غیر این صورت روی سرورهای بعدی اجرا می شود.

هم چنین Heartbeat‌ وظیفه ساختن IP مجازی را بر عهده دارد٫ پس کانفیگ آن از اهمیت بالایی برخوردار است!!!

پیش نیازها:

  1. دو سرور
  2. برای هر سرور ۲ کارت شبکه٫یک کابل کراس٫ یک سوییچ
  3. و نرم افزارهای:DRBD,Heartbeat,ntp,ntpdate,اسکریپت های مربوطه برای هدایت سرویس و سرورها

این آموزش در هر توضیع از لینوکس قابل پیاده سازیس!

نکته:فقط توجه داشته باشین که هنگام نصب لینوکس یک پارتیشن از نوع روت و یک حافظه swp کافی میباشد٫ و حتما یک بخش از فضای هارد خالی باشد که بعدا ما برای پارتیشن مجازی DRBD به آن نیاز خواهیم داشت!

در آغاز ما آیپی eth0 دو سرور را در رنج متوالی هم قرار می دهیم و بعد نام آنها را عوض می نماییم٫به این صورت:

server 1       192.168.2.2

server2       192.168.2.3

و بعد از آن virtual IP یا IP مجازی را هم تعریف می کنیم!

برای این کار ما فایل های hosts و hostname را تغییر می دهیم:

  1. فایل hosts :

192.168.0.100   kava1

192.168.0.101   kava2

192.168.0.105 VIP

Virtual IP:

کار آی پی مجازی این است که یک آی پی واسط بینه سرورها ایجاد می کند تا گوشی ها و دستگاها و کلاینت ها به آن متصل شوند!

drbd5

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

>>>>

  1. n
  2. p
  3. ۳ or any number for sda,but no number of fdisk -l
  4. enter default or manualy
  5. enter default or manualy
  6. t
  7. ۳ or number of sda
  8. 83
  9. 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 وچک و ران کردن:

  1. modprobe drbd
  2. 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

drbd6

درضمن مطمئن شوید که اسمه نودهای وارد شده در 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 شدن یا سروری ریست شد٫ مانت کردن پارتیشن بعهده این فایل خواهد بود.

حال به کانفیگ اصلی این برنامه می پردازیم:

  1. فایل 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 / رفته وآن را به شیوه زیر ویرایش کنید:

root=ali.hallaji1@gmail.com (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 *

AuthUser=ali.hallaji1@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:your_login@your.domain:mailhub.your.domain[:port]

# where [:port] is an optional port number that defaults to 25.

root:ali.hallaji1@gmail.com:smtp.gmail.com:587

البته من این ۲ فایل را با ایمیل خودم مثال زدم٫ هر جا که ایمیل من بود شما باید ایمیل مورد نظر خود را جایگزین نمایید!

پایان

رای شما با موفقیت ثبت شد.

ثبت رای شما با پیغام خطا همراه بود.

دیدگاه های این مطلب

هیچ نظری ارسال نشده است.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *