آموزش راه اندازیه سیستم DRBD Clustering&HA Clustering برای سرویس Asterisk
کلاسترینگ چیست؟
کلاسترینگ به گروهی از سرورها شامل یک یا بیشتر از یک سرور گفته میشود که با یکدیگر نرم افزاری مشخص را اجرا میکنند که نتیجه ی آن احتمال خطای کمتر و سرعت لد بالاتر برنامه هاست. سرویس کلاسترینگ بیشتر برای سازمان و شرکتهایی به کار میرود که برنامه ی آنها تحت هر شرایطی باید اجرا شود و در حالت اجرا باقی بماند حتی زمانی که یکی از سرورها از سرویس خارج شده باشد. در سرویس کلاسترینگ تمامی سرورها همان برنامه و قوانینی را که باقی سرورها اجرا میکنند اجرا خواهند کرد لذا اگر سروری از سرویس خارج شود باقی سرورها بلافاصه شروع به کار خواهند کرد که به آن Failover گفته میشود.
»ما در این آموزش از سیستم عامل اوبونتو استفاده کرده ایم!
ما بوسیله DRBD میتوانیم دیوایسهایی نظیر هارد شبکه و… برای استفاده در مجموعه کلاسترینگ و برای برنامه خاصی بکار ببریم٫که در اینجا ما برای ساخت یک پارتیشن از دیوایس استوریج بین دو سرور بکار میبریم.DRBD یک پارتیشن مجازی برای تمامیه سرورها میسازد و آنرا بر اساس قوانین خودش بین سرورها پاس میدهد.در اصل DRBD وقتی که سرور اصلی fail میشود٫ پارتیشن مجازی را به سرور slave پاس میدهد٫ و پارتیشن را برای آن مانت میکند!
Heartbeat/HA clustering
ماشین های مجازی به وسیله لینک اختصاصی جهت ارتباط لحظه به لحظه (Heartbeat) و لینک عمومی به یکدیگر متصل هستند.کار اصلی Heartbeat این است که بدنبال سرور زنده و پایا میباشد٫ البته با حفظ اولویت!یعنی اگر سرور master در شبکه وجود داشته باشد سرویسه مربوطه برروی آن اجرا میشود٫ در غیر این صورت روی سرورهای بعدی اجرا میشود.همچنین Heartbeat* وظیفه ساختن IP مجازی را بر عهده دارد٫ پس کانفیگ آن از اهمیت بالایی برخوردار است!!!
پیش نیازها:
این آموزش در هر توضیع از لینوکس قابل پیاده سازیست!
نکته:فقط توجه داشته باشین که هنگام نصب لینوکس یک پارتیشن از نوع روت و یک حافظه swp کافی میباشد٫ و حتما یک بخش از فضای هارد خالی باشد که بعدا ما برای پارتیشن مجازی DRBD به آن نیاز خواهیم داشت!
در آغاز ما آیپی eth0 دو سرور را در رنج متوالی هم قرار میدهیم و بعد نام آنها را عوض مینماییم٫به این صورت:
server 1 ۱۹۲٫۱۶۸٫۲٫۲
server2 ۱۹۲٫۱۶۸٫۲٫۳
و بعد از آن virtual IP یا IP مجازی را هم تعریف میکنیم!
برای اینکار ما فایلهایه hosts و hostname را تغییر میدهیم:
۱۹۲٫۱۶۸٫۰٫۱۰۰ failover1
۱۹۲٫۱۶۸٫۰٫۱۰۱ failover2
۱۹۲٫۱۶۸٫۰٫۱۰۵ VIP
Virtual IP:
کار آی پی مجازی این است که یک آی پی واسط بینه سرورها ایجاد میکند تا گوشیها و دستگاها و کلاینتها به آن متصل شوند!
۲- در فایل hostname نام گرها را وارد میکنیم!
و حالا ما باید کارت شبکه های دومeth1 را آدرس دهی کنیم٫به این صورت:
server1:10.1.1.1
server2:10.1.1.2
ما باید همه IPها را IP استاتیک دهیم ٫ در سیستم عامل اوبونتو بصورت زیر میباشد:
root@failover1#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@failover2#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
۲۵۵ 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 * ۲۰۴۸ ۴۰۹۵۹۹ ۲۰۳۷۷۶ ۷ HPFS/NTFS/exFAT
/dev/sda2 ۴۰۹۶۰۰ ۳۱۷۱۵۷۳۷۵ ۱۵۸۳۷۳۸۸۸ ۷ HPFS/NTFS/exFAT
/dev/sda3 ۴۵۴۲۶۸۹۲۶ ۵۹۲۲۴۰۶۳۹ ۶۸۹۸۵۸۵۷ ۵ Extended
/dev/sda4 ۳۱۷۱۵۷۳۷۶ ۴۵۴۲۶۶۸۷۹ ۶۸۵۵۴۷۵۲ ۸۳ Linux
/dev/sda5 ۵۷۴۹۷۱۹۰۴ ۵۹۲۲۴۰۶۳۹ ۸۶۳۴۳۶۸ ۸۲ Linux swap / Solaris
/dev/sda6 ۴۵۴۲۶۸۹۲۸ ۵۷۴۹۶۹۸۵۵ ۶۰۳۵۰۴۶۴ ۸۳ 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
۸۳
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 failover1 {
device /dev/drbd0;
disk /dev/sda3;
address 10.1.1.1:7788;
meta-disk internal;
}
on failover2 {
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 failover1
node failover2
respawn hacluster /usr/lib/heartbeat/dopd
apiauth dopd gid=haclient uid=hacluster
keepalive تعداد دفعاتی که heartbeat پکت میفرستد.
Node که بیانگر گره ها میباشد.
Bcast ست آپ کردن کارت شبکهeth
دو خط آخر برای وقتی است که برای کابلها یا کارتهای شبکه مشکل پیش آید و عملیات sync را دوباره انجام دهد.
۲.فایل haresource:
failover1 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
۱ 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/ این خط را به انتهای آن اضافه کنید:
*/۱ * * * * 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 این خط را اضافه کنید:
*/۱ * * * * 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=habili@linux-zone.org (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=habili@linux-zone.org *
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:habili@linux-zone.org:smtp.gmail.com:587
البته من این ۲ فایل را با ایمیل خودم مثال زدم٫ هر جا که ایمیل من بود شما باید ایمیل مورد نظر خود را جایگزین نمایید!
کلاسترینگ چیست؟
کلاسترینگ به گروهی از سرورها شامل یک یا بیشتر از یک سرور گفته میشود که با یکدیگر نرم افزاری مشخص را اجرا میکنند که نتیجه ی آن احتمال خطای کمتر و سرعت لد بالاتر برنامه هاست. سرویس کلاسترینگ بیشتر برای سازمان و شرکتهایی به کار میرود که برنامه ی آنها تحت هر شرایطی باید اجرا شود و در حالت اجرا باقی بماند حتی زمانی که یکی از سرورها از سرویس خارج شده باشد. در سرویس کلاسترینگ تمامی سرورها همان برنامه و قوانینی را که باقی سرورها اجرا میکنند اجرا خواهند کرد لذا اگر سروری از سرویس خارج شود باقی سرورها بلافاصه شروع به کار خواهند کرد که به آن Failover گفته میشود.
»ما در این آموزش از سیستم عامل اوبونتو استفاده کرده ایم!
ما بوسیله DRBD میتوانیم دیوایسهایی نظیر هارد شبکه و… برای استفاده در مجموعه کلاسترینگ و برای برنامه خاصی بکار ببریم٫که در اینجا ما برای ساخت یک پارتیشن از دیوایس استوریج بین دو سرور بکار میبریم.DRBD یک پارتیشن مجازی برای تمامیه سرورها میسازد و آنرا بر اساس قوانین خودش بین سرورها پاس میدهد.در اصل DRBD وقتی که سرور اصلی fail میشود٫ پارتیشن مجازی را به سرور slave پاس میدهد٫ و پارتیشن را برای آن مانت میکند!
Heartbeat/HA clustering
ماشین های مجازی به وسیله لینک اختصاصی جهت ارتباط لحظه به لحظه (Heartbeat) و لینک عمومی به یکدیگر متصل هستند.کار اصلی Heartbeat این است که بدنبال سرور زنده و پایا میباشد٫ البته با حفظ اولویت!یعنی اگر سرور master در شبکه وجود داشته باشد سرویسه مربوطه برروی آن اجرا میشود٫ در غیر این صورت روی سرورهای بعدی اجرا میشود.همچنین Heartbeat* وظیفه ساختن IP مجازی را بر عهده دارد٫ پس کانفیگ آن از اهمیت بالایی برخوردار است!!!
پیش نیازها:
- دو سرور
- برای هر سرور ۲ کارت شبکه٫یک کابل کراس٫ یک سوییچ
- و نرم افزارهای DRBD,Heartbeat,ntp,ntpdate,اسکریپتهای مربوطه برای هدایت سرویس و سرورها
این آموزش در هر توضیع از لینوکس قابل پیاده سازیست!
نکته:فقط توجه داشته باشین که هنگام نصب لینوکس یک پارتیشن از نوع روت و یک حافظه swp کافی میباشد٫ و حتما یک بخش از فضای هارد خالی باشد که بعدا ما برای پارتیشن مجازی DRBD به آن نیاز خواهیم داشت!
در آغاز ما آیپی eth0 دو سرور را در رنج متوالی هم قرار میدهیم و بعد نام آنها را عوض مینماییم٫به این صورت:
server 1 ۱۹۲٫۱۶۸٫۲٫۲
server2 ۱۹۲٫۱۶۸٫۲٫۳
و بعد از آن virtual IP یا IP مجازی را هم تعریف میکنیم!
برای اینکار ما فایلهایه hosts و hostname را تغییر میدهیم:
- فایل hosts :
۱۹۲٫۱۶۸٫۰٫۱۰۰ failover1
۱۹۲٫۱۶۸٫۰٫۱۰۱ failover2
۱۹۲٫۱۶۸٫۰٫۱۰۵ VIP
Virtual IP:
کار آی پی مجازی این است که یک آی پی واسط بینه سرورها ایجاد میکند تا گوشیها و دستگاها و کلاینتها به آن متصل شوند!
۲- در فایل hostname نام گرها را وارد میکنیم!
و حالا ما باید کارت شبکه های دومeth1 را آدرس دهی کنیم٫به این صورت:
server1:10.1.1.1
server2:10.1.1.2
ما باید همه IPها را IP استاتیک دهیم ٫ در سیستم عامل اوبونتو بصورت زیر میباشد:
root@failover1#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@failover2#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
۲۵۵ 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 * ۲۰۴۸ ۴۰۹۵۹۹ ۲۰۳۷۷۶ ۷ HPFS/NTFS/exFAT
/dev/sda2 ۴۰۹۶۰۰ ۳۱۷۱۵۷۳۷۵ ۱۵۸۳۷۳۸۸۸ ۷ HPFS/NTFS/exFAT
/dev/sda3 ۴۵۴۲۶۸۹۲۶ ۵۹۲۲۴۰۶۳۹ ۶۸۹۸۵۸۵۷ ۵ Extended
/dev/sda4 ۳۱۷۱۵۷۳۷۶ ۴۵۴۲۶۶۸۷۹ ۶۸۵۵۴۷۵۲ ۸۳ Linux
/dev/sda5 ۵۷۴۹۷۱۹۰۴ ۵۹۲۲۴۰۶۳۹ ۸۶۳۴۳۶۸ ۸۲ Linux swap / Solaris
/dev/sda6 ۴۵۴۲۶۸۹۲۸ ۵۷۴۹۶۹۸۵۵ ۶۰۳۵۰۴۶۴ ۸۳ 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
۸۳
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 failover1 {
device /dev/drbd0;
disk /dev/sda3;
address 10.1.1.1:7788;
meta-disk internal;
}
on failover2 {
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 failover1
node failover2
respawn hacluster /usr/lib/heartbeat/dopd
apiauth dopd gid=haclient uid=hacluster
keepalive تعداد دفعاتی که heartbeat پکت میفرستد.
Node که بیانگر گره ها میباشد.
Bcast ست آپ کردن کارت شبکهeth
دو خط آخر برای وقتی است که برای کابلها یا کارتهای شبکه مشکل پیش آید و عملیات sync را دوباره انجام دهد.
۲.فایل haresource:
failover1 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
۱ 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/ این خط را به انتهای آن اضافه کنید:
*/۱ * * * * 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 این خط را اضافه کنید:
*/۱ * * * * 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=habili@linux-zone.org (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=habili@linux-zone.org *
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:habili@linux-zone.org:smtp.gmail.com:587
البته من این ۲ فایل را با ایمیل خودم مثال زدم٫ هر جا که ایمیل من بود شما باید ایمیل مورد نظر خود را جایگزین نمایید!
کامنت