a elastix clustering
TRANSCRIPT
Building Elastix-1.6.0 High Availability Clusters with DRBD and Heartbeat
The following steps are to be performed on both primary and secondary servers: 1. Boot Elastix-1.6.0 Install CD 2. From boot menu, type „advanced‟ and enter. 3. During install routine choose to manually partition hard drive. The following is based on a
160.0 GB SATA
Create root (/), ext3 partition with 6144MB (sda1)
Create swap partition with 3072MB (sda2) 4. The remainder of the install routine is standard. 5. After installation and booting perform upgrade
yum –y update
6. You need also to Update Mysql due to this bug To do so, Add the following lines in a file by a name say remi.repo under /etc/yum.repos.d directory [remi] name=Les RPM de remi pour Enterprise Linux 5 - $basearch baseurl=http://rpms.famillecollet.com/el5.$basearch/ http://remi.collet.free.fr/rpms/el5.$basearch/ http://iut-info.univ-reims.fr/remirpms/el5.$basearch/ enabled=0 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi failovermethod=priority [remi-test] name=Les RPM de remi en test pour Enterprise Linux $releasever - $basearch baseurl=http://rpms.famillecollet.com/test-el5.$basearch/ enabled=0 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
7. We need to import RPM-GPG-KEY-remi with following command: rpm --import http://syslogserver.googlecode.com/files/RPM-GPG-KEY-remi
8. Lunch the Update: yum --skip-broken --enablerepo remi update mysql
9. Create partition that will contain the replicated data
fdisk /dev/sda
Add a new partion (n)
Primary (p)
Partition number (3)
Press enter until returned to fdisk command prompt
NOTE: if your servers have two different sized hard drives it is imperative that the third partition is identical in size or they will never synchronize over DRBD. Do this by accepting the default first cylinder and then specifying the Last cylinder with the +sizeM option. Ex. +6048M. Make these same specifications on both servers.
Press “t” to change the partition system ID
Press “3” to choose partition number
Choose HEX 83 for type
Press “w” to save changes
RESTART SERVER
10. Format newly made partition mke2fs –j /dev/sda3
11. Now we delete the file system from the disk we just created dd if=/dev/zero bs=1M count=1 of=/dev/sda3; sync
12. Install DRBD, Heartbeat and dependencies with yum.
yum install heartbeat drbd83 kmod-drbd83
13. To ensure proper host name to IP resolution it is recommended that you manually update the /etc/hosts file to reflect proper host-to-IP mapping.
10.1.1.1 server1.drbd 10.1.1.2 server2.drbd 127.0.0.1 server1.drbd
14. Edit /etc/drbd.conf on Server1.drbd. Modify this sample to meet your particular needs.
global { usage-count no; } resource r0 { protocol C; startup { wfc-timeout 0; degr-wfc-timeout 120; } disk { on-io-error detach; } # or panic, ... net { cram-hmac-alg "sha1"; shared-secret "Cent0Sru!3z"; } syncer { rate 10M; } on server1.drbd { device /dev/drbd0; disk /dev/sda3; address 192.168.0.1:7788; meta-disk internal; } on server2.drbd { device /dev/drbd0; disk /dev/sda3; address 192.168.0.2:7788; meta-disk internal; } }
15. replicate this config file (/etc/drbd.conf) to the second server
scp /etc/drbd.conf [email protected]:/etc/
16. Initialize the meta-data area on disk before starting drbd (! on both server!)
drbdadm create-md r0
17. start drbd on both nodes (service drbd start) service drbd start
18. Verify that both server are secondary cat /proc/drbd
19. As you can see, both nodes are secondary, which is normal. we need to decide which node
will act as a primary now (server1.drbd) : that will initiate the first 'full sync' between the two nodes : drbdadm -- --overwrite-data-of-peer primary r0
20. Lunch the command and wait until it‟s finish synchronizing watch -n 1 cat /proc/drbd
21. we can now format /dev/drbd0 and mount it on server1.drbd: mkfs.ext3 /dev/drbd0
mkdir /replica
mount /dev/drbd0 /replica
22. Now we will copy all of the directories we want synchronized between the two servers to our new partition, remove the original directories and then create symbolic links to replace them on server1.drbd
cd /replica tar -zcvf etc-asterisk.tgz /etc/asterisk tar -zxvf etc-asterisk.tgz tar -zcvf var-lib-asterisk.tgz /var/lib/asterisk tar -zxvf var-lib-asterisk.tgz tar -zcvf usr-lib-asterisk.tgz /usr/lib/asterisk/ tar -zcvf var-www.tgz /var/www/ tar -zxvf usr-lib-asterisk.tgz tar -zcvf var-spool-asterisk.tgz /var/spool/asterisk/ tar -zxvf var-spool-asterisk.tgz tar -zcvf var-lib-mysql.tgz /var/lib/mysql/ tar -zxvf var-lib-mysql.tgz tar -zcvf var-log-asterisk.tgz /var/log/asterisk/ tar -zxvf var-log-asterisk.tgz tar -zxvf var-www.tgz 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
23. Restart mysql server on server1.drbd
service mysqld restart
24. now switch manually to the second server : [[email protected] /]# umount /replica ; drbdadm secondary r0 [[email protected] /]# mkdir /replica ; drbdadm primary r0 ; mount /dev/drbd0 /replica
[[email protected] /]# ls /replica/
Great, data was replicated ....
25. Now we will remove and link on server2.drbd 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
26. Restart mysql server on server2.drbd
service mysqld restart
27. Now switch back to the first server : [[email protected] /]# umount /replica/ ; drbdadm secondary r0 [[email protected] /]# drbdadm primary r0 ; mount /dev/drbd0 /replica 28. Drbd is working ... let's be sure that it will always be started:
chkconfig drbd83 on
Heartbeat Configuration 1. Remember to stop any boot up services on both servers that should be controlled by
heartbeat. These services will be controlled by heartbeat on the server that is in control. chkconfig asterisk off
chkconfig mysqld off
chkconfig httpd off
service mysqld stop
service asterisk stop
service httpd stop
2. Let's configure a simple /etc/ha.d/ha.cf file on server1.drbd :
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 server1.drbd node server2.drbd
3. Create also the /etc/ha.d/authkeys on server1.drbd:
auth 1 1 sha1 MySecret
4. Change permissions on the /etc/ha.d/authkeys file on server1.drbd: chmod 600 /etc/ha.d/authkeys
5. Edit /etc/ha.d/haresources on server1.drbd: (It is one line!!!!!!! Formating is important) server1.drbd drbddisk::r0 Filesystem::/dev/drbd0::/replica::ext3 IPaddr::10.1.1.3/24/eth0/10.1.1.255 mysqld asterisk httpd
6. Start the heartbeat service on server1.drbd : service heartbeat start
7. Replicate now the ha.cf, authkeys and haresources to server2.drbd and start heartbeat [[email protected] ha.d]# scp /etc/ha.d/ha.cf /etc/ha.d/authkeys /etc/ha.d/haresources [email protected]:/etc/ha.d/ [[email protected] ha.d]# service heartbeat start
8. Configure heartbeat to initialize at boot on both server chkconfig --add heartbeat
9. Verify server1.drbd status (Primary/Secondary) cat /proc/drbd
Credits
Telesoft Integrando Technologies
Redfone
References
http://wiki.centos.org/HowTos/Ha-Drbd http://support.red-fone.com/downloads/elastix/Elastix_HA_Cluster.pdf http://bugs.mysql.com/bug.php?id=31575 http://danielaliaman.com/blog/files/phonecube/cluster/AsteriskCluster.pdf
Originator: Amjad Jabali