linux高可用性数据库服务器群集之DRBD+MYSQL+Corosync

 

一,搭建实验环境

 

Vmware8.0.11

node1.liuwei.com: eth0:192.168.101.100   host-only

  添加 sdb1 1G 心跳线: eth1:192.168.2.1       VMnet2

node2.liuwei.com:  eth0: 192.168.101.200   host-only

  添加 sdb1 1G 心跳线:eth1:192.168.2.2        VMnet2

Corosync 虚拟IP: 192.168.101.254  

yum   仓库

在 /root/drbd 有    drbd83-8.3.8-1.el5.centos.i386.rpm 

                     kmod-drbd83-8.3.8-1.el5.centos.i686.rpm 

在 /root/corosync 有

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 corosync的主配置文件 
corosynclib-1.2.7-1.1.el5.i386.rpm corosync的库文件 
heartbeat-3.0.3-2.3.el5.i386.rpm 我们的heartbeat在这里是做四层的资源代理用的 
heartbeat-libs-3.0.3-2.3.el5.i386.rpm heartbeat的库文件 
ldirectord-1.0.1-1.el5.i386.rpm 在高可用性群集中实验对后面realserver的探测 
libesmtp-1.0.4-5.el5.i386.rpm 
openais-1.1.3-1.6.el5.i386.rpm做丰富pacemake的内容使用 
openaislib-1.1.3-1.6.el5.i386.rpm openais 的库文件 
pacemaker-1.1.5-1.1.el5.i386.rpm pacemake的主配置文档 
pacemaker-libs-1.1.5-1.1.el5.i386.rpm pacemaker的库文件 
pacemaker-cts-1.1.5-1.1.el5.i386.rpm 
perl-TimeDate-1.16-5.el5.noarch.rpm 
resource-agents-1.0.4-1.1.el5.i386.rpm 开启资源代理用的 

在 /root/mysql 有

mysql-5.5.15-linux2.6-i686.tar.gz mysql的绿色软件             

 

二, 设置两台服务器的网卡信息、hosts、主机名,时钟同步及sdb硬盘初始化并使相互ping通

注.1-7node1与node2同

1.setup 设置 ip 地址 并添加sdb 硬盘

2.vim /etc/hosts

127.0.0.1       localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6
192.168.101.100 node1.liuwei.com
192.168.101.200 node2.liuwei.com
3.vim /etc/sysconfig/network

 

NETWORKING=yes

NETWORKING_IPV6=yes

HOSTNAME=node1.liuwei.com  (node2为node2.liuwei.com)

4.service network restart

5. hwclock -s

6.fdisk  /dev/sdb

n  p   1 +1000M  w 

7. partprobe /dev/sdb

 

 三.配置DRBD

1.cd  /root/drbd

 

 rpm -ivh drbd83-8.3.8-1.el5.centos.i386.rpm 

 rpm -ivh kmod-drbd83-8.3.8-1.el5.centos.i686.rpm 

2. cd /etc/drbd.d/
3. vim global_common.conf
 

 

 global {

        usage-count yes;

        # minor-count dialog-refresh disable-ip-verification

}

common {

        protocol C;

      startup {

                wfc-timeout 120;

                 degr-wfc-timeout 120;

        }

      disk {

                on-io-error  detach;

                fencing     resource-only; }

net {

cram-hmac-alg "sha1";

shared-secret "liuwei";

}

    syncer {

            rate 100M;

        }

}

4.  vim mysql.res

 resource mysql {

        on node1.liuwei.com {

           device    /dev/drbd0;

           disk     /dev/sdb1;

           address 192.168.101.100:7789;

           meta-disk   internal;

}

          on node2.liuwei.com {

          device    /dev/drbd0;

          disk     /dev/sdb1;

          address 192.168.101.200:7789;

          meta-disk   internal; }

}

5.   vim /etc/drbd.conf

    include "drbd.d/global_common.conf";

    include "drbd.d/*.res";

6. drbdadm  create-md mysql

7. service drbd start

8.创建文件系统(只可以在primary节点上进行) 
[root@node1 drbd.d]# mkfs -t ext3 /dev/drbd0 格式化 
[root@node1 drbd.d]# mkdir /mysql 创建挂载点 
[root@node1 drbd.d]# mount /dev/drbd0 /mysql/ 进行挂载 
[root@node1 drbd.d]#cd /mysql 
[root@node1 mysqldata]#touch f1 f2 创建2个文件 
[root@node1 ~]#umount /mysql 卸载drbd设备 
[root@node1 ~]# drbdadm secondary mysql 将node1设置为secondary节点 
[root@node1 ~]# drbd-overview 
0:mysql Connected Secondary/Secondary UpToDate/UpToDate C r---- 
11:将node2设置为primary节点 
[root@node2 ~]# drbdadm primary mysql 
[root@node2 ~]# drbd-overview 
0:mysql Connected Primary/Secondary UpToDate/UpToDate C r---- 
[root@node2 ~]#mkdir /mysql
[root@node2 ~]#mount /dev/drbd0 /mysql 
[root@node2 ~]# umount /mysql/ 卸载设备 
至此我们的drbd已经正常安装完成!!! 
 

四.mysql的安装和配置 

1:node1上的配置 
添加用户和组: 
# groupadd -r mysql 
# useradd -g mysql -r mysql 
由于主设备才能读写,挂载,故我们还要设置node1为主设备,node2为从设备: 
node2上操作: 
# drbdadm secondary mysql 
node1上操作: 
# drbdadm primary mysql 
[root@node1 ~]# drbd-overview 
0:mysql Connected Primary/Secondary UpToDate/UpToDate C r---- 
挂载drbd设备: 
# mount /dev/drbd0 /mysql 
# mkdir /mysql/data 
data目录要用存放mysql的数据,故改变其属主属组: 
# chown -R mysql.mysql /mysql/data/ 
查看: 
# ls /mysql/ 
data
mysql的安装; 
# tar zxvf mysql-5.5.15-linux2.6-i686.tar.gz -C /usr/local 
# cd /usr/local/ 
# ln -sv mysql-5.5.15-linux2.6-i686  mysql 
# cd mysql 
# chown -R mysql:mysql  . 
初始化mysql数据库: 
# scripts/mysql_install_db --user=mysql --datadir=/mysql/data 
# chown -R root  . 
为mysql提供主配置文件: 
# cp support-files/my-large.cnf  /etc/my.cnf 
并修改此文件中thread_concurrency的值为你的CPU个数乘以2,比如这里使用如下行: 
# vim /etc/my.cnf 
thread_concurrency = 2 
另外还需要添加如下行指定mysql数据文件的存放位置: 
datadir = /mysql/data 
为mysql提供sysv服务脚本,使其能使用service命令: 
# cp support-files/mysql.server  /etc/rc.d/init.d/mysqld 
node2上的配置文件,sysv服务脚本和此相同,故直接复制过去: 
# scp /etc/my.cnf node2:/etc/ 
# scp /etc/rc.d/init.d/mysqld node2:/etc/rc.d/init.d 
添加至服务列表: 
# chkconfig --add mysqld 
确保开机不能自动启动,我们要用CRM控制: 
# chkconfig mysqld off 
而后就可以启动服务测试使用了: 
# service mysqld start 
测试之后关闭服务: 
# ls /mysql/data  查看其中是否有文件 
[root@node1 mysql]# ls /mysql/data/ 
# service mysqld stop 
为了使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用,这里还需要进行如下步骤: 
输出mysql的man手册至man命令的查找路径: 
# vim /etc/man.config 
添加如下行即可: 
MANPATH  /usr/local/mysql/man 
输出mysql的头文件至系统头文件路径/usr/include,这可以通过简单的创建链接实现: 
# ln -sv /usr/local/mysql/include  /usr/include/mysql 
输出mysql的库文件给系统库查找路径:(文件只要是在/etc/ld.so.conf.d/下并且后缀是.conf就可以) 
# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf 
而后让系统重新载入系统库: 
# ldconfig 
修改PATH环境变量,让系统所有用户可以直接使用mysql的相关命令: 
#vim /etc/profile 
PATH=$PATH:/usr/local/mysql/bin  
. /etc/profile 重新读取环境变量 
[root@node1 mysql]# echo $PATH 
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin 
卸载drbd设备: 
# umount /mysql 
2,node2上的配置: 
添加用户和组: 
# groupadd -r mysql 
# useradd -g mysql -r mysql 
由于主设备才能读写,挂载,故我们还要设置node2为主设备,node1为从设备: 
node1上操作: 
# drbdadm secondary mysql 
node2上操作: 
# drbdadm primary mysql 
挂载drbd设备: 
# mount /dev/drbd0 /mysql 
查看: 
# ls /mysql/ 
data  lost+found 
mysql的安装; 
# tar zxfv mysql-5.5.15-linux2.6-i686.tar.gz -C /usr/local 
# cd /usr/local/ 
# ln -sv mysql-5.5.15-linux2.6-i686  mysql 
# cd mysql 
一定不能对数据库进行初始化,因为我们在node1上已经初始化了: 
# chown -R root:mysql  . 
mysql主配置文件和sysc服务脚本已经从node1复制过来了,不用在添加。 
添加至服务列表: 
# chkconfig --add mysqld 
确保开机不能自动启动,我们要用CRM控制: 
# chkconfig mysqld off 
而后就可以启动服务测试使用了:(确保node1的mysql服务停止) 
# service mysqld start 
测试之后关闭服务: 
# ls /mysql/data  查看其中是否有文件 
[root@node2 mysql]# ls /mysql/data/ 
# service mysqld stop 

为了使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用,这里还需要进行一些类似node1上的操作,由于方法完全相同,不再阐述! 
卸载设备: 
# umount /dev/drbd0 

 至此我们的mysql已经正常安装完成!!!

五.corosync的安装和配置

1.hwclock -s

2.ssh-keygen   -t rsa

3.ssh-copy-id  -i .ssh/id_rsa.pub  root@node2

4.cd  /root/corosyns/

yum localinstall *.rpm  --nogpgcheck

5.cd /etc/corosync/

6. cp corosync.conf.example  corosync.conf
7.vim   corosync.conf
8.compatibility: whitetank  (表示兼容corosync 0.86的版本,向后兼容,兼容老的版本,一些
                           新的功能可能无法实用)
 
(图腾的意思  ,多个节点传递心跳时的相关协议的信息)
totem {
        version: 2  版本号
        secauth: off  是否代开安全认证
        threads: 0   多少个现成认证  0 无限制
        interface {
                ringnumber: 0   
                bindnetaddr: 192 168.1.1  通过哪个网络地址进行通讯,可以给个主机地址(给成192.168.2.0
                mcastaddr: 226.94.1.1
                mcastport: 5405
        }   
}
 
logging {
        fileline: off 
        to_stderr: no  是否发送标准出错
        to_logfile: yes  日志
        to_syslog: yes   系统日志  (建议关掉一个),会降低性能
        logfile: /var/log/cluster/corosync.log  (手动创建目录)
        debug: off  排除时可以起来
        timestamp: on 日志中是否记录时间
 
      一下是openais的东西,可以不用代开
        logger_subsys {
                subsys: AMF 
                debug: off 
        }   
}
 
amf {
        mode: disabled
}
补充一些东西,前面只是底层的东西,因为要用pacemaker
 
 
service {
        ver: 0
        name: pacemaker
}
虽然用不到openais ,但是会用到一些子选项
 
aisexec {
        user: root
        group: root
}
9. mkdir /var/log/cluster
10.为了便面其他主机加入该集群,需要认证,生成一个authkey
 [root@node1 corosync]# corosync-keygen    (需要实用/etc/urandom,对于一个新的主机,可能会卡到哪里)
11. 通过到node2上去  (使用 -p  以保留权限)
[root@node1 corosync]# scp -p authkey  corosync.conf node2:/etc/corosync/
authkey                                          100%  128     0.1KB/s   00:00    
corosync.conf                                    100%  513     0.5KB/s   00:00    
12.[root@node1 corosync]# ssh node2 'mkdir /var/log/cluster'
13.在node1上启动服务
 
[root@node1 corosync]# service corosync start

11.验证corosync引擎是否正常启动了

  [root@node1 corosync]# grep -i  -e "corosync cluster engine" -e "configuration file" /var/log/messages  

12.查看初始化成员节点通知是否发出

   [root@node1 corosync]# grep -i totem /var/log/messages 

13.检查过程中是否有错误产生

   grep -i error:  /var/log/messages  |grep -v unpack_resources  (便面stonith的错误)

14.检查pacemaker时候已经启动了

15 .前集群的节点上启动另外一个节点

  [root@node1 corosync]# ssh node2 '/etc/init.d/corosync start'

Starting Corosync Cluster Engine (corosync): [  OK  ]

16.将前面的验证步骤在另外一个节点上再次验证一次

17.在任何一个节点上  查看集群的成员状态

 

[root@node2 corosync]# crm status

 18.如何验证该文件的语法错误

[root@node1 corosync]# crm_verify  -L

可以看到有stonith错误,在高可用的环境里面,会禁止实用任何支援

可以禁用stonith 

 [root@node1 corosync]# crm

crm(live)# configure

crm(live)configure#  property stonith-enabled=false

crm(live)configure# commit 

crm(live)configure# show

19再次进行检查

[root@node1 corosync]# crm_verify  -L

没有错误了

系统上有专门的stonith命令

20.

现在用的资源

ip地址  http服务  共享存储

用资源代理进行配置

ocf  lsb的

使用list可以查看

crm(live)ra# classes 

heartbeat

lsb

ocf / heartbeat pacemaker

stonith

21,配置一个资源,可以在configuration 下面进行配置

 crm(live)configure#  primitive mysqlIP ocf:heartbeat:IPaddr  params ip=192.168.101.254

 crm(live)configure# show

 crm(live)configure# commit

 crm(live)configure#end

 crm(live)# status

22.

定义mysql的资源

 crm(live)configure# primitive mysqlserver lsb:mysqld

 crm(live)configure# show

 crm(live)configure# commit

 crm(live)configure#end

 crm(live)# status

23定义组

 crm(live)configure# group mysql mysqlIP  mysqlserver 

 crm(live)configure# show

 crm(live)configure# commit

 crm(live)configure#end

 crm(live)# status

三、  

    

    1.将节点1 的corosync 服务停止 

      [root@node1 corosync]# service corosync stop

    2. 在节点2上进行观察

     [root@node2 corosync]# crm  status

可以看到没有票数

25.改变quorum

 crm(live)configure# property no-quorum-policy=ignore

 crm(live)configure# show

 crm(live)configure# commit

 crm(live)configure#end

 crm(live)# status

26.在节点2 上停止  corosync  服务  [root@node2 corosync]# service corosync stop

在节点1上查看   [root@node1 corosync]# crm  status

 

 

 

 

本文出自 “碧云天” 博客,转载请与作者联系!

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