基于Corosync/openais和NFS服务器实现MySQL的高可用
1、操作系统redhat5.8
2、实验准备三台服务器:
node1:172.16.0.22 (Corosync+mysql)---->/mydata
node2:172.16.0.23 (Corosync+mysql)---->/mydata
NFS:172.16.0.24 (nfs)---->/mydata
实验拓扑图如下:
目录:
一、安装与配置NFS服务
二、安装与配置mysql
三、安装与配置node1和node2关系
四、安装与配置Corosync/openais
五、进入命令行模式,添加集群资源
六、测试
一、安装与配置NFS服务
- 一、安装与配置NFS服务
- 1、创建逻辑卷
- #fdisk /dev/sda
- #partprobe /dev/sda
- #fdisk -l
- #pvcreate /dev/sda4
- #vgcreate myvg /dev/sda4
- #lvcreate -L 10G -n lvmy myvg
- #mke2fs -j -L MYDATA /dev/myvg/lvmy
- 2、建立目录/mydata,设置开机自动挂载
- #mkdir /mydata
- #vim /etc/fstab
- 添加以下内容
- LABEL=MYDATA /mydata ext3 defaults 0 0
- #mount -a
- #mount
- 3、添加mysql账号,让mysql有读写权限
- #groupadd -r -g 306 mysql
- #useradd -g mysql -r -u 306 mysql
- #chown -R mysql.mysql /mydata
- 4、配置nfs
- #vim /etc/exports
- 添加以下内容
- /mydata 172.16.0.22(rw,no_root_squash) 172.16.0.23(rw,no_root_squash)
- #/etc/init.d/nfs start
- #chkconfig --add nfs
- #chkconfig nfs on
二、安装mysql
- 新建用户
- #groupadd -r -g 306 mysql
- #useradd -g mysql -r -u 306 mysql
- 解压mysql并创建软链接
- tar xf mysql-5.5.24-linux2.6-i686.tar.gz -C /usr/local
- cd /usr/local
- ln -sv mysql-5.5.24-linux2.6-i686 mysql
- 修改属主和组并初始化mysql-5.5.24
- cd /usr/local/mysql
- chown -R mysql:mysql .
- /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/mydata/data
- chown -R root .
- 为mysql提供主配置文件:
- cd /usr/local/mysql
- cp support-files/my-large.cnf /etc/my.cnf
- 并修改此文件中thread_concurrency的值为你的CPU个数乘以2,比如这里使用如下行:
- thread_concurrency = 2
- 并添加数据存放路径
- datadir = /mydata/data
- 为mysql提供sysv服务脚本:
- cd /usr/local/mysql
- cp support-files/mysql.server /etc/rc.d/init.d/mysqld
- #chkconfig mysqld off
- #service mysqld stop
三、配置node1和node2的关系
- 1、修改主机名
- #vim /etc/sysconfig/network
- HOSTNAME=node1
- #hostname node1
- 注意:确保与uname -n结果一样
- 2、修改/etc/hosts文件,使node1和node2能解析成不同IP
- #vim /etc/hosts
- 172.16.0.22 node1
- 172.16.0.23 node2
- 3、配置双方的ssh信任
- #ssh-keygen -t rsa
- #ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected] #把公钥复制到远程主机上去
- 提示:node2操作也是一样,最后配置完成进行测试一下:
- 在node1上测试:
- #ssh node1 'ifconfig' #命令可以执行并返回结果,表示配置成功
- 4、调整双方主机的时间
- #date 0807132912
- #hwclock -w
四、安装与配置Corosync
- 列出所需要的软件包
- cluster-glue-1.0.6-1.6.el5.i386.rpm heartbeat-3.0.3-2.3.el5.i386.rpm pacemaker-cts-1.1.5-1.1.el5.i386.rpm
- cluster-glue-libs-1.0.6-1.6.el5.i386.rpm heartbeat-libs-3.0.3-2.3.el5.i386.rpm pacemaker-libs-1.1.5-1.1.el5.i386.rpm
- corosync-1.2.7-1.1.el5.i386.rpm libesmtp-1.0.4-5.el5.i386.rpm perl-TimeDate-1.16-5.el5.noarch.rpm
- corosynclib-1.2.7-1.1.el5.i386.rpm pacemaker-1.1.5-1.1.el5.i386.rpm resource-agents-1.0.4-1.1.el5.i386.rpm
- #cd /etc/corosync/
- #mv corosync.conf.example corosync.conf
- vim corosync.conf
- 添加和修改以下内容
- compatibility: whitetank #打开兼容corosync-0.8之前的版本
- totem { #定义节点之间心跳信息如何传递
- version: 2 #协议版本
- secauth: on #是否开启节点之间安全认证
- threads: 0 #启动的线程,与CPU个数相等,0为自动管理
- interface { #定义传递心跳的接口信息
- ringnumber: 0 #如果有多个接口,ringunmber不能相同
- bindnetaddr: 172.16.0.0 #指定接口所在的网络或者接口的IP地址
- mcastaddr: 226.94.1.1 #指定多播地址
- mcastport: 5405 #多播的端口
- }
- }
- logging { #定义日志相关信息
- fileline: off
- to_stderr: no #是否把错误信息发送到标准输出
- to_logfile: yes #是否存储到logfile中指定的日志文件
- to_syslog: no #是否存储到系统日志文件也就是messages
- logfile: /var/log/cluster/corosync.log #日志文件存放路径
- debug: off #是否开启调试
- timestamp: on #日志信息是否记录时间戳
- logger_subsys { #定义日志子系统
- subsys: AMF
- debug: off
- }
- }
- amf { #定义amf相关信息,如果要启用需安装openais和openais-lib
- mode: disabled
- }
- service { #自定义的服务
- ver: 0 #版本
- name: pacemaker #整合pacemaker,当corosync启动时也启动pacemaker
- }
- service {
- ver: 0
- name: pacemaker #定义pacemaker资源管理器
- # use_mgmtd: yes #使用mgmtd进程
- }
- aisexec { #定义执行者的身份
- user: root
- group: root
- }
- # corosync-keygen #生成节点间通信时用到的认证密钥文件
- #mkdir -pv /var/log/cluster #建立日志目录
- #/etc/init.d/corosync start #启动服务
- #netstat -unlp | grep 5404 #查看是否有corosync进程监听udp的5404端口
五、进入命令行模式,添加集群资源
- [root@localhost corosync]# crm #使用crm命令进入命令行模式
- crm(live)# configure #使用configure进入configure模式
- crm(live)configure# property stonith-enabled=false #禁用stonith
- crm(live)configure# property no-quorum-policy=ignore #关闭票数策略
- crm(live)configure# verify #使用verify验证是否有语法错误
- crm(live)configure# commit #提交前面的操作,使用其生效
- crm(live)configure# primitive myvip ocf:heartbeat:IPaddr params ip=172.16.0.100 #定义vip资源
- crm(live)configure# primitive mynfs ocf:heartbeat:Filesystem \ #定义nfs资源高可用,使用其自动挂载
- > params device="172.16.0.23:/mydata" directory="/mydata" \
- > fstype="nfs" op start timeout=60s op stop timeout=60s
- crm(live)configure# primitive mysql lsb:mysqld #定义mysql服务资源
- crm(live)configure# colocation mysql_and_mynfs_myvip inf: mysql mynfs myvip #定义排列约束,使用mysql,mynfs,myvip三个在一起
- crm(live)configure# order mysql_after_mynfs mandatory: mynfs mysql:start #定义顺序,先启动mynfs再启动mysql
- crm(live)configure# order mysql_after_myvip mandatory: myvip mysql:start #定义顺序,先启动vip再启动mysql
- crm(live)configure# verify
- crm(live)configure# commit
- crm(live)configure# show #使用show命令查看定义的资源
- crm(live)configure# cd #回到上一级
- crm(live)# status #查看状态
- ============
- Last updated: Tue Aug 7 16:27:11 2012
- Stack: openais
- Current DC: node1 - partition with quorum
- Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
- 2 Nodes configured, 2 expected votes
- 3 Resources configured.
- ============
- Online: [ node1 node2 ]
- myvip (ocf::heartbeat:IPaddr): Started node2
- mynfs (ocf::heartbeat:Filesystem): Started node2
- mysql (lsb:mysqld): Started node2
- 测试:此时可以停止node2节点,然后查看是否能切换到node1节点上,并查看vip,mysql和nfs是否正常
六、测试
建立一个账号
mysql> grant all on *.* to root@'%' identified by '123456';
测试成功
提示:此时可以crm node standby node2命令,使用node2节点停止,测试是否切换,并连接数据库,写入数据,然后使用crm node online node2让node2重新上线,再次查看测试。
总结:
1、mysql初始化以后,安装第二台服务器请不要初始化了,不然数据会覆盖,会有错误
2、安装好mysql以后,只能有一台mysql服务器能启动,如果启动两个会报错误
3、装好两台mysql服务后,建立/mydata目录, 不要忘记改属主和属组了,不然定义nfs资源的时候,无法自动挂载
4、安装好mysql服务后,不要开机启动,把mysqld服务停止