corosync + pacemaker + drbd 实现mysql存储的高可用(一)

 

规划
    vip                      172.16.45.2
    node1.yue.com            172.16.45.11
    node2.yue.com            172.16.45.12   
需要用到的相关软件包: 
drbd83-8.3.8-1.el5.centos.i386.rpm   
kmod-drbd83-8.3.8-1.el5.centos.i686.rpm

cluster-glue-1.0.6-1.6.el5.i386.rpm             
cluster-glue-libs-1.0.6-1.6.el5.i386.rpm         
corosync-1.2.7-1.1.el5.i386.rpm            
corosynclib-1.2.7-1.1.el5.i386.rpm           
heartbeat-3.0.3-2.3.el5.i386.rpm                
heartbeat-libs-3.0.3-2.3.el5.i386.rpm                            
libesmtp-1.0.4-5.el5.i386.rpm                              
pacemaker-1.1.5-1.1.el5.i386.rpm                                    
pacemaker-cts-1.1.5-1.1.el5.i386.rpm                                     
pacemaker-libs-1.1.5-1.1.el5.i386.rpm                                    
resource-agents-1.0.4-1.1.el5.i386.rpm

mysql-5.5.24(绿色版)

另外还要准备好系统光盘作为yum源

1. 配置双机互信       
    # ssh-keygen -t rsa
    # ssh-copy-id -i ~/.ssh/id_rsa.pub      root@node2
       
2. 主机名(在 /etc/hosts 文件中)
    172.16.45.11    node1.yue.com    node1
    172.16.45.12    node2.yue.com    node2
                       
3. 时间同步

    #hwcolock    -s

一、

在node1 上的相关设置

1. 创建一个512M的磁盘分区: 

  
  
  
  
  1. root@node1 ~]# fdisk -l 
  2.  
  3. Disk /dev/sda: 128.8 GB, 128849018880 bytes 
  4. 255 heads, 63 sectors/track, 15665 cylinders 
  5. Units = cylinders of 16065 * 512 = 8225280 bytes 
  6.  
  7.    Device Boot      Start         End      Blocks   Id  System 
  8. /dev/sda1   *           1          13      104391   83  Linux 
  9. /dev/sda2              14        5235    41945715   8e  Linux LVM 
  10. /dev/sda3            5236        5366     1052257+  82  Linux swap / Solaris 
  11.  
  12. Disk /dev/sdb: 21.4 GB, 21474836480 bytes 
  13. 255 heads, 63 sectors/track, 2610 cylinders 
  14. Units = cylinders of 16065 * 512 = 8225280 bytes 
  15.  
  16. Disk /dev/sdb doesn't contain a valid partition table 
  17. [root@node1 ~]# fdisk /dev/sdb 
  18. Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel 
  19. Building a new DOS disklabel. Changes will remain in memory only, 
  20. until you decide to write them. After that, of course, the previous 
  21. content won't be recoverable. 
  22.  
  23. The number of cylinders for this disk is set to 2610. 
  24. There is nothing wrong with that, but this is larger than 1024, 
  25. and could in certain setups cause problems with
  26. 1) software that runs at boot time (e.g., old versions of LILO) 
  27. 2) booting and partitioning software from other OSs 
  28.    (e.g., DOS FDISK, OS/2 FDISK) 
  29. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) 
  30.  
  31. Command (m for help): n 
  32. Command action 
  33.    e   extended 
  34.    p   primary partition (1-4) 
  35. Partition number (1-4): 
  36. First cylinder (1-2610, default 1):  
  37. Using default value 1 
  38. Last cylinder or +size or +sizeM or +sizeK (1-2610, default 2610): +512M 
  39.  
  40. Command (m for help): p 
  41.  
  42. Disk /dev/sdb: 21.4 GB, 21474836480 bytes 
  43. 255 heads, 63 sectors/track, 2610 cylinders 
  44. Units = cylinders of 16065 * 512 = 8225280 bytes 
  45.  
  46.    Device Boot      Start         End      Blocks   Id  System 
  47. /dev/sdb1               1          63      506016   83  Linux 
  48.  
  49. Command (m for help): w 
  50. The partition table has been altered! 
  51.  
  52. Calling ioctl() to re-read partition table. 
  53. Syncing disks. 
  54. [root@node1 ~]# partprobe 
  55. Warning: Unable to open /dev/hdc read-write (Read-only file system).  /dev/hdc has been opened read-only.

2. 安装drbd

  
  
  
  
  1. [root@node1 tmp]# yum -y --nogpgcheck localinstall drbd83-8.3.8-1.el5.centos.i386.rpm kmod-drbd83-8.3.8-1.el5.centos.i686.rpm

3.为drbd提供配置文件

  
  
  
  
  1. [root@node1 tmp]# cp /usr/share/doc/drbd83-8.3.8/drbd.conf  /etc/ 
  2. cp: overwrite `/etc/drbd.conf'? y  
  3. [root@node1 tmp]# cd /etc/drbd.d/ 
  4. [root@node1 drbd.d]# cp global_common.conf global_common.conf.back 
  5. [root@node1 drbd.d]# ll 
  6. total 16 
  7. -rwxr-xr-x 1 root root 1418 Jun  4  2010 global_common.conf 
  8. -rwxr-xr-x 1 root root 1418 Aug 10 00:45 global_common.conf.back     

4.编辑配置文件

  
  
  
  
  1. [root@node1 drbd.d]# vi /etc/drbd.d/global-common.conf 
    
  2. global { 
  3.         usage-count no
  4.         # minor-count dialog-refresh disable-ip-verification 
  5. common { 
  6.         protocol C; 
  7.         handlers { 
  8.                 pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f"
  9.                 pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f"
  10.                 local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f"
  11.                 # fence-peer "/usr/lib/drbd/crm-fence-peer.sh"; 
  12.                 # split-brain "/usr/lib/drbd/notify-split-brain.sh root"; 
  13.                 # out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root"; 
  14.                 # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k"; 
  15.                 # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh; 
  16.         } 
  17.         startup { 
  18.                 #wfc-timeout 120; 
  19.                 #degr-wfc-timeout 120; 
  20.         } 
  21.         disk { 
  22.                 on-io-error detach
  23.                 #fencing resource-only; 
  24.         } 
  25.         net { 
  26.                cram-hmac-alg "sha1"
  27.                shared-secret "mydrbdlab"
  28.         } 
  29.         syncer { 
  30.                 rate 1000M; 
  31.         } 

5. 定义一个资源

  
  
  
  
  1. [root@node1 ~]# vi /etc/drbd.d/web.res   内容如下
  2.  
  3. resource web { 
  4.   on node1.yue.com { 
  5.     device    /dev/drbd0; 
  6.     disk      /dev/sdb1;  对应刚才创建的新分区
  7.     address   172.16.45.11:7789; 
  8.     meta-disk internal; 
  9.   } 
  10.  
  11.  on node2.yue.com { 
  12.     device    /dev/drbd0; 
  13.     disk      /dev/sdb1; 
  14.     address   172.16.45.12:7789; 
  15.     meta-disk internal; 
  16.   } 

6. 在node2 上做和以上相同的设置

7. 在两个节点上初始化已定义的资源并启动服务:

1)初始化资源,在Node1和Node2上分别执行:

  
  
  
  
  1. [root@node1 tmp]# drbdadm create-md web 
  2. Writing meta data... 
  3. initializing activity log 
  4. NOT initialized bitmap 
  5. New drbd meta data block successfully created. 
  6.  
  7. [root@node1 tmp]# ssh node2 'drbdadm create-md web'  在node1 上利用双机互信远程执行node2上的资源初始化
  8. NOT initialized bitmap 
  9. Writing meta data... 
  10. initializing activity log 
  11. New drbd meta data block successfully created

2)启动服务,在Node1和Node2上分别执行

# /etc/init.d/drbd start

3)查看启动状态:        -->也可以使用drbd-overview命令来查看

  
  
  
  
  1. [root@node1 ~]# drbd-overview 
  2.   0:web  Connected Secondary/Secondary Inconsistent/Inconsistent C r----   

从上面的信息中可以看出此时两个节点均处于Secondary状态。于是,我们接下来需要将其中一个节点设置为Primary。

  
  
  
  
  1. [root@node1 ~]# drbdsetup /dev/drbd0  primary -o  设置为Primary的节点
  2. [root@node1 ~]# drbd-overview 
  3.   0:web  SyncSource Primary/Secondary UpToDate/Inconsistent C r----  
  4.     [===>................] sync'ed: 20.2% (408716/505964)K delay_probe: 8  数据同步过程已经开始
  5. [root@node1 ~]# drbd-overview 
  6.   0:web  Connected Primary/Secondary UpToDate/UpToDate C r----  数据同步完成

8. 创建文件系统
文件系统的挂载只能在Primary节点进行,因此,也只有在设置了主节点后才能对drbd设备进行格式化

  
  
  
  
  1. [root@node1 ~]# mke2fs -j /dev/drbd0 
  2. mke2fs 1.39 (29-May-2006) 
  3. Filesystem label= 
  4. OS type: Linux 
  5. Block size=1024 (log=0) 
  6. Fragment size=1024 (log=0) 
  7. 126976 inodes, 505964 blocks 
  8. 25298 blocks (5.00%) reserved for the super user 
  9. First data block=1 
  10. Maximum filesystem blocks=67633152 
  11. 62 block groups 
  12. 8192 blocks per group, 8192 fragments per group 
  13. 2048 inodes per group 
  14. Superblock backups stored on blocks:  
  15.     8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409 
  16.  
  17. Writing inode tables: done                             
  18. Creating journal (8192 blocks): done 
  19. Writing superblocks and filesystem accounting information: done 
  20.  
  21. This filesystem will be automatically checked every 32 mounts or 
  22. 180 days, whichever comes first.  Use tune2fs -c or -i to override. 

挂载文件系统

  
  
  
  
  1. [root@node1 ~]# mkdir /data              建立挂载目录 
  2. [root@node1 ~]# mount /dev/drbd0 /data 
  3. [root@node1 ~]# cd /data/ 
  4. [root@node1 data]# ls 
  5. lost+found 
  6. [root@node1 data]# cp /etc/fstab .       拷贝一个文件到当前目录中 
  7. [root@node1 data]# ls 
  8. fstab  lost+found 

9. 切换Primary和Secondary节点
对主Primary/Secondary模型的drbd服务来讲,在某个时刻只能有一个节点为Primary,因此,要切换两个节点的角色,只能在先将原有的Primary节点设置为Secondary后,才能原来的Secondary节点设置为Primary

  
  
  
  
  1. [root@node1 ~]# umount /data/ 
  2. [root@node1 ~]# drbdadm secondary web 
  3. [root@node1 ~]# drbd-overview 
  4.   0:web  Connected Secondary/Secondary UpToDate/UpToDate C r----  
  5.  
  6. 设置node2 为主,查看文件
  7.  
  8. [root@node2 ~]# drbd-overview 
  9.   0:web  Connected Secondary/Secondary UpToDate/UpToDate C r----  
  10. [root@node2 ~]# drbdadm primary web 
  11. [root@node2 ~]# drbd-overview 
  12.   0:web  Connected Primary/Secondary UpToDate/UpToDate C r----  
  13. [root@node2 ~]# mkdir /data  建立挂载目录,注意此时是在node2 上
  14. [root@node2 ~]# mount /dev/drbd0 /data/  
  15. [root@node2 ~]# ls /data/ 
  16. fstab  lost+found 

先让drbd切换回到node1 上

  
  
  
  
  1. [root@node2 tmp]# umount /data/ 
  2. [root@node2 tmp]# drbdadm secondary web 
  3. [root@node2 tmp]# drbd-overview 
  4.   0:web  Connected Secondary/Secondary UpToDate/UpToDate C r---- 
  5.   
  6. [root@node1 tmp]# drbdadm primary web 
  7. [root@node1 tmp]# drbd-overview 
  8.   0:web  Connected Primary/Secondary UpToDate/UpToDate C r---- 
  9. [root@node1 tmp]# mount /dev/drbd0 /data/ 

二、安装MySQL-5.5.24

1.创建Mysql用户

  
  
  
  
  1. [root@node1 tmp]# useradd -u 189 mysql 
  2. [root@node1 tmp]# id mysql 
  3. uid=189(mysql) gid=189(mysql) groups=189(mysql) context=root:system_r:unconfined_t:SystemLow-SystemHigh 

2. 数据目录

  
  
  
  
  1. [root@node1 tmp]# chown -R mysql:mysql /data  更改属主属组
  2. [root@node1 tmp]# ll /data/ 
  3. total 14 
  4. -rw-r--r-- 1 mysql mysql   651 Aug 10 09:45 fstab 
  5. drwx------ 2 mysql mysql 12288 Aug 10 09:44 lost+found 
  
  
  
  
  1. [root@node1 tmp]# tar xf  mysql-5.5.24-linux2.6-i686.tar.gz -C /usr/local/  解压
  2. [root@node1 tmp]# cd /usr/local/ 
  3. [root@node1 local]# ln -sv mysql-5.5.24-linux2.6-i686/ mysql    创建软连接 
  4. create symbolic link `mysql' to `mysql-5.5.24-linux2.6-i686/' 
  5. [root@node1 local]# cd mysql 
  6. [root@node1 mysql]# chown -R mysql:mysql . 将当前目录下的文件的属主属组都改为mysql

3. 初始化

  
  
  
  
  1. [root@node1 mysql]# scripts/mysql_install_db --datadir=/data --user=mysql  指定数据目录和用户
  2. Installing MySQL system tables... 
  3. OK 
  4. Filling help tables... 
  5. OK 
  6.  
  7. To start mysqld at boot time you have to copy 
  8. support-files/mysql.server to the right place for your system 
  9.  
  10. PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! 
  11. To do so, start the server, then issue the following commands: 
  12.  
  13. ./bin/mysqladmin -u root password 'new-password' 
  14. ./bin/mysqladmin -u root -h node1.yue.com password 'new-password' 
  15.  
  16. Alternatively you can run: 
  17. ./bin/mysql_secure_installation 
  18.  
  19. which will also give you the option of removing the test 
  20. databases and anonymous user created by default.  This is 
  21. strongly recommended for production servers. 
  22.  
  23. See the manual for more instructions. 
  24.  
  25. You can start the MySQL daemon with
  26. cd . ; ./bin/mysqld_safe & 
  27.  
  28. You can test the MySQL daemon with mysql-test-run.pl 
  29. cd ./mysql-test ; perl mysql-test-run.pl 
  30.  
  31. Please report any problems with the ./bin/mysqlbug script! 

4. 配置文件

  
  
  
  
  1. [root@node1 mysql]# cp support-files/my-large.cnf /data/my.cnf  将mysql的配置文件放在drbd0上,以便于当文件修改时可以同步到两台主机上
  2. [root@node1 mysql]# vi /data/my.cnf
  3. 在[mysqld]段修改如下两项:
  4. thread_concurrency = 2
  5. datadir=/data
  6. [root@node1 mysql]# ln -sv /data/my.cnf  /etc/my.cnf  为mysql的主配置文件创建一个链接文件
  7. create symbolic link `/etc/my.cnf' to `/data/my.cnf' 
  8. [root@node1 mysql]# ll /etc/my.cnf 
  9. lrwxrwxrwx 1 root root 12 Aug 10 10:15 /etc/my.cnf -> /data/my.cnf 
  10.  
  11. [root@node1 mysql]# cp support-files/mysql.server  /etc/rc.d/init.d/mysqld  提供mysql的启动脚本
  12. [root@node1 mysql]# chown -R root . 将当前文件夹下文件属主改为root

5. 启动mysql

  
  
  
  
  1. [root@node1 mysql]# export PATH=$PATH:/usr/local/mysql/bin/  为了简化实验过程,这里的设置只时临时有效,(若想要永久有效需要写入相应的配置文件中,具体内容可以参考本博客的其它文章)
  2.  
  3. [root@node1 mysql]# /etc/init.d/mysqld start 
  4. Starting MySQL.......                                      [  OK  ]  
  5. [root@node1 mysql]# mysql  mysql在第一次登录时密码为空,最好在登录后为mysql建立一个密码
  6. Welcome to the MySQL monitor.  Commands end with ; or \g. 
  7. Your MySQL connection id is 1 
  8. Server version: 5.5.24-log MySQL Community Server (GPL) 
  9.  
  10. Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. 
  11.  
  12. Oracle is a registered trademark of Oracle Corporation and/or its 
  13. affiliates. Other names may be trademarks of their respective 
  14. owners. 
  15.  
  16. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 
  17.  
  18. mysql> SHOW DATABASES; 
  19. +---------------------+ 
  20. Database            | 
  21. +---------------------+ 
  22. | information_schema  | 
  23. | #mysql50#lost+found | 
  24. | mysql               | 
  25. | performance_schema  | 
  26. | test                | 
  27. +---------------------+ 
  28. rows in set (0.00 sec) 
  29.  
  30. mysql> CREATE DATABASE testdb;  创建一个数据库
  31. Query OK, 1 row affected (0.04 sec) 
  32.  
  33. mysql> SHOW DATABASES; 
  34. +---------------------+ 
  35. Database            | 
  36. +---------------------+ 
  37. | information_schema  | 
  38. | #mysql50#lost+found | 
  39. | mysql               | 
  40. | performance_schema  | 
  41. | test                | 
  42. | testdb              | 
  43. +---------------------+ 
  44. rows in set (0.00 sec) 
  45.  
  46. mysql> quit 
  47. Bye 
  
  
  
  
  1. [root@node1 mysql]# drbd-overview 
  2.   0:web  Connected Primary/Secondary UpToDate/UpToDate C r---- /data ext3 479M 40M 415M 9%  
  3.    
  4. [root@node1 mysql]# /etc/init.d/mysqld stop 
  5. Shutting down MySQL.                                       [  OK  ] 
  6. [root@node1 mysql]# umount /data 
  7. [root@node1 mysql]# drbdadm secondary web 
  8. [root@node1 mysql]# drbd-overview 
  9.   0:web  Connected Secondary/Secondary UpToDate/UpToDate C r----   
  10. [root@node1 mysql]# scp /etc/rc.d/init.d/mysqld node2:/etc/rc.d/init.d/ 将mysql的启动脚本传到node2上
    mysqld 100% 10KB 10.4KB/s 00:00

mysql在node2 上的相关设置注意:此时的mysql不能再初始化了

  
  
  
  
  1. [root@node2 tmp]# useradd -u 189 mysql 
  2. [root@node2 tmp]# id mysql 
  3. uid=189(mysql) gid=189(mysql) groups=189(mysql) context=root:system_r:unconfined_t:SystemLow-SystemHigh 
  4.  
  5. [root@node2 tmp]# tar xf mysql-5.5.24-linux2.6-i686.tar.gz -C /usr/local/ 
  6.  
  7. [root@node2 tmp]# cd /usr/local/ 
  8. [root@node2 local]# ln -sv mysql-5.5.24-linux2.6-i686/ mysql 
  9. create symbolic link `mysql' to `mysql-5.5.24-linux2.6-i686/' 
  10. [root@node2 local]# cd mysql 
  11. [root@node2 mysql]# chown -R root:mysql .

设置node2 为primary

  
  
  
  
  1. [root@node2 ~]# drbd-overview 
  2.   0:web  Connected Secondary/Secondary UpToDate/UpToDate C r----  
  3. [root@node2 ~]# drbdadm primary web 
  4. [root@node2 ~]# drbd-overview 
  5.   0:web  Connected Primary/Secondary UpToDate/UpToDate C r----  
  
  
  
  
  1. [root@node2 ~]# mkdir /data 
  2. [root@node2 ~]# mount /dev/drbd0 /data/ 
  3. [root@node2 mysql]# drbd-overview 
  4.   0:web  Connected Primary/Secondary UpToDate/UpToDate C r---- /data ext3 479M 40M 415M 9%  
  5. [root@node2 ~]# ln -sv /data/my.cnf  /etc/my.cnf  软链接到mysql的主配置文件加
  6. create symbolic link `/etc/my.cnf' to `/data/my.cnf' 
  7. [root@node2 ~]# export PATH=$PATH:/usr/local/mysql/bin/ 

启动mysql验证是否是可以使用相同的数据目录:

  
  
  
  
  1. [root@node2 mysql]# mysql 
  2. Welcome to the MySQL monitor.  Commands end with ; or \g. 
  3. Your MySQL connection id is 1 
  4. Server version: 5.5.24-log MySQL Community Server (GPL) 
  5.  
  6. Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. 
  7.  
  8. Oracle is a registered trademark of Oracle Corporation and/or its 
  9. affiliates. Other names may be trademarks of their respective 
  10. owners. 
  11.  
  12. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 
  13.  
  14. mysql> SHOW DATABASES; 
  15. +--------------------+ 
  16. Database           | 
  17. +--------------------+ 
  18. | information_schema | 
  19. | mysql              | 
  20. | performance_schema | 
  21. | test               | 
  22. testdb             | 
  23. +--------------------+ 
  24. rows in set (0.09 sec) 
  25.  
  26. mysql> quit 
  27. Bye 

三、安装corosync 和 pacemaker (在node1 和node2 上都要安装和配置

 首先停掉node1和node2 上的mysql、drbd,不能让其开机自动启动

  
  
  
  
  1. [root@node2 ~]# /etc/init.d/mysqld stop 
  2. Shutting down MySQL.                                       [  OK  ] 
  3. [root@node2 ~]# /etc/init.d/drbd status 
  4. drbd driver loaded OK; device status: 
  5. version: 8.3.8 (api:88/proto:86-94) 
  6. GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by [email protected], 2010-06-04 08:04:16 
  7. m:res  cs         ro                 ds                 p  mounted  fstype 
  8. 0:web  Connected  Primary/Secondary  UpToDate/UpToDate  C  /data    ext3 
  9.  
  10. [root@node2 ~]# umount /data/ 
  11. [root@node2 ~]# /etc/init.d/drbd status 
  12. drbd driver loaded OK; device status: 
  13. version: 8.3.8 (api:88/proto:86-94) 
  14. GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by [email protected], 2010-06-04 08:04:16 
  15. m:res  cs         ro                 ds                 p  mounted  fstype 
  16. 0:web  Connected  Primary/Secondary  UpToDate/UpToDate  C 
  17. [root@node2 ~]# /etc/init.d/drbd stop
    Stopping all DRBD resources: .
  18. [root@node2 ~]# drbd-overview 
  19. drbd not loaded 
  20.  
  21. [root@node2 ~]# chkconfig --list drbd 
  22. drbd            0:off   1:off   2:on    3:on    4:on    5:on    6:off 
  23. [root@node2 ~]# chkconfig  drbd off 
  24. [root@node2 ~]# chkconfig --list drbd 
  25. drbd            0:off   1:off   2:off   3:off   4:off   5:off   6:off 
  26. [root@node1 ~]# /etc/init.d/drbd stop
    Stopping all DRBD resources: .
  27. [root@node1 ~]# chkconfig drbd off

在node1 上的安装和配置:

需要用到以下几个rpm包:

  
  
  
  
  1. cluster-glue-1.0.6-1.6.el5.i386.rpm              
  2. cluster-glue-libs-1.0.6-1.6.el5.i386.rpm          
  3. corosync-1.2.7-1.1.el5.i386.rpm             
  4. corosynclib-1.2.7-1.1.el5.i386.rpm            
  5. heartbeat-3.0.3-2.3.el5.i386.rpm                 
  6. heartbeat-libs-3.0.3-2.3.el5.i386.rpm                             
  7. libesmtp-1.0.4-5.el5.i386.rpm                               
  8. pacemaker-1.1.5-1.1.el5.i386.rpm                                     
  9. pacemaker-cts-1.1.5-1.1.el5.i386.rpm                                      
  10. pacemaker-libs-1.1.5-1.1.el5.i386.rpm                                     
  11. resource-agents-1.0.4-1.1.el5.i386.rpm  

1. 安装: # yum -y --nogpgcheck localinstall *.rpm 
2. 关闭 heartbeat服务:  # chkconfig  heartbeat off 
3. 提供 corosync的配置文件

  
  
  
  
  1. [root@node1 cluster]# cd /etc/corosync/ 
  2. [root@node1 corosync]# cp corosync.conf.example corosync.conf 
  3.  # vi /etc/corosync/corosync.conf
  4.  
  5. compatibility: whitetank                            兼容性,兼容以前的版本 
  6.  
  7. totem {                                        多个corosynce 的节点之间心跳信息的传递方式 
  8.         version: 2                            
  9.         secauth: off                        安全认证 
  10.         threads: 0                            启动几个线程 
  11.         interface {                            通过哪个网络接口传递心跳信息,若有多个接口,则ringnumber不能相同 
  12.                 ringnumber: 0 
  13.                 bindnetaddr: 172.16.45.0        绑定的网络地址 
  14.                 mcastaddr: 226.94.100.1            多播地址 
  15.                 mcastport: 5405 
  16.         } 
  17.  
  18. logging { 
  19.         fileline: off 
  20.         to_stderr: no                            发往到标准错误输出 
  21.         to_logfile: yes 
  22. #        to_syslog: yes 
  23.         logfile: /var/log/cluster/corosync.log            
  24.         debug: off 
  25.         timestamp: on                            是否记录时间戳 
  26.         logger_subsys { 
  27.                 subsys: AMF                    想要启用AMF         需要安装OpenAIS  和OpenAis-libs 
  28.                 debug: off 
  29.         } 
  30.  
  31. amf { 
  32.         mode: disabled 
  33.     
  34.     另外在配置文件中还需要添加如下内容: 
  35. service { 
  36.         ver:  0 
  37.         name: pacemaker 
  38.         use_mgmtd: yes 
  39.  
  40. aisexec { 
  41.         user:   root 
  42.         group:  root    
  43.         } 

 
4. 节点密钥文件

  
  
  
  
  1. [root@node1 corosync]# corosync-keygen                    生成节点密钥文件 
  2. Corosync Cluster Engine Authentication key generator. 
  3. Gathering 1024 bits for key from /dev/random. 
  4. Press keys on your keyboard to generate entropy. 
  5. Writing corosync key to /etc/corosync/authkey. 
  6.  
  7. [root@node1 corosync]# scp -p authkey corosync.conf  node2:/etc/corosync/        传送到node2 
  8. authkey                                                                 100%  128     0.1KB/s   00:00    
  9. corosync.conf                                                           100%  526     0.5KB/s   00:00     

5. 记得在node2 安装corosync和其相关的rpm包

6. 启动corosync  服务

  
  
  
  
  1. root@node1 ~]# /etc/init.d/corosync start  
  2. Starting Corosync Cluster Engine (corosync):               [  OK  ]   
  3.       
  4. [root@node1 ~]#  grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/corosync.log   查看corosync引擎是否正常启动    
  5.       
  6. [root@node1 ~]# grep "TOTEM" /var/log/corosync.log   查看初始化成员节点通知是否正常发出 
  7.  
  8.  
  9. [root@node1 ~]# grep pcmk_startup /var/log/corosync.log   查看pacemaker是否正常启动     
  10.  
  11. [root@node1 ~]# grep "ERROR" /var/log/corosync.log    检查启动过程中是否有错误产生 

如果上面命令执行均没有问题,接着可以执行如下命令启动node2上的corosync
注意:启动node2需要在node1上使用如上命令进行,不要在node2节点上直接启动

  
  
  
  
  1. [root@node1 corosync]# ssh node2 '/etc/init.d/corosync start' 
  2. Starting Corosync Cluster Engine (corosync): [  OK  ]

配置集群的工作属性,禁用stonith
corosync默认启用了stonith,而当前集群并没有相应的stonith设备,因此此默认配置目前尚不可用, 我们里可以通过如下方式先禁用stonith

  
  
  
  
  1. [root@node1 ~]# crm configure 
  2. crm(live)configure# show 
  3. node node1.yue.com \ 
  4.     attributes standby="off" 
  5. node node2.yue.com 
  6. property $id="cib-bootstrap-options" \ 
  7.     dc-version="1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f" \ 
  8.     cluster-infrastructure="openais" \ 
  9.     expected-quorum-votes="2" 
  10. crm(live)configure# property stonith-enabled=false  禁用stonith
  11. crm(live)configure# property no-quorum-policy=ignore 
  12. crm(live)configure# show 
  13. node node1.yue.com \ 
  14.     attributes standby="off" 
  15. node node2.yue.com 
  16. property $id="cib-bootstrap-options" \ 
  17.     dc-version="1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f" \ 
  18.     cluster-infrastructure="openais" \ 
  19.     expected-quorum-votes="2" \ 
  20.     stonith-enabled="false" \ 
  21.     no-quorum-policy="ignore" 
  22. crm(live)configure# commit 
  23. crm(live)configure# exit 
  24. bye 

7. 查看集群节点状态

  
  
  
  
  1. [root@node1 ~]# crm status 
  2. ============ 
  3. Last updated: Fri Aug 10 12:51:26 2012 
  4. Stack: openais 
  5. Current DC: node1.yue.com - partition with quorum 
  6. Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f 
  7. 2 Nodes configured, 2 expected votes 
  8. 0 Resources configured. 
  9. ============ 
  10.  
  11. Online: [ node1.yue.com node2.yue.com ] 

你可能感兴趣的:(mysql,drbd,pacemaker,corosync)