实验准备:
MYSQL软件包:mysql-5.5.24-linux2.6-i686.tar.gz
corosync软件包:corosync-1.2.7-1.1.el5.i386.rpm和corosynclib-1.2.7-1.1.el5.i386.rpm
pacemaker软件包: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
其他依赖包有:cluster-glue-1.0.6-1.6.el5.i386.rpm,cluster-glue-libs-1.0.6-1.6.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
实验环境:
本实验是基于虚拟机操作的。相关信息如下拓扑图:
实验步骤:
在NFS服务器上
1、首先创建逻辑卷并挂载共享目录
- 创建两个分区并调整其类型为8e
- #pvcreate /dev/sda{5,6}
- vgcreate myvg /dev/sda{5,6}
- #lvcreate -n mylv -L 20G /dev/myvg
- #mke2fs -j /dev/myvg/mylv //格式化分区
- #mkdir /sharedata
- #mount /dev/myvg/mylv /sharedata
- 使其能够开机自动挂载
- 编辑/etc/fstab文件,添加如下行后保存退出
- /dev/myvg/mylv /sharedata ext3 defaults 0 0
- #chown -R mysql.mysql /sharedata
- //此目录只有是mysql组的用户才能访问
2、启动NFS服务
(1)#service nfs start
(2)编辑/etc/exports文件,添加如下行后保存退出
/sharedata 192.168.0.11(rw,no_root_squash) 192.168.0.66(rw,no_root_squash)
(3)#exportfs -ra //导出共享目录
(4)使用showmount -e 192.168.0.100 查看共享是否成功
在集群节点上
1、首先集群节点要做好高可用的事前工作
(1)同步时间
(2)主机名解析。主机名要与执行uname -n命令得到结果保持一致。
在/etc/hosts文件中添加两节点的解析条目。
192.168.0.11 node1
192.168.0.66 node2
(3)建立双发互信
使用ssh-keygen -t rsa 此时在当前目录下生成.ssh隐藏目录,生成私钥
使用ssh-copy-id -i ./ssh/id_rsa.pub root@node2 将私钥发送给两外一个节点。
ssh node2 'ifconfig' 如果此时不用输入密码等信息就可直接得到node2的IP值,则说明互信配置成功
在node1上也做相应的操作。
2、安装MYSQL
(1)配置node1
- #mkdir -pv /data/sqldata
- #mount -t nfs 192.168.0.100:/sharedata /data/sqldata //挂载共享数据
- #groupadd -r mysql
- #useradd -g mysql -r 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.tar.gz mysql
- #cd mysql
- #chown -R mysql:mysql .
- #cp support-files/my-large.cnf /etc/my.cnf
- #scripts/mysql_install_db --user=mysql --datadir=/data/sqldata
- //初始化
- #chown -R root .
- 编辑配置文件
- thread_concurrency = 2
- datadir = /data/sqldata //指定mysql数据存放位置
- #cp support-files/mysql.server /etc/rc.d/init.d/mysqld
- //sysV脚本
- #chmod +x /etc/rc.d/init.d/mysqld
- 启动服务
- #service mysqld start
- #/usr/local/mysql/bin/mysql //进入mysql
- create database testdb; //创建测试数据库
node1与node2的数据文件是保持一致的,所以在此直接将node1的配置文件远程发送到node2上即可。
- #scp /etc/my.cnf node2:/etc
- #service mysqld stop
- #chkconfig mysqld off
(2)配置node2。
- #mkdir -pv /data/sqldata
- #mount -t nfs 192.168.0.100:/sharedata /data/sqldata //挂载共享数据
- #groupadd -r mysql
- #useradd -g mysql -r 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.tar.gz mysql
- #cd mysql
- #chown -R mysql:mysql .
- #cp support-files/my-large.cnf /etc/my.cnf
- #chown -R root .
启动服务
#service mysqld start
注:在node2上已经初始化了数据库,所以在node2上不用再次初始化数据库。
进入命令行查看node1创建的数据库是否存在。此时可能出错,因为root用户没有对数据操作的权限。切换至mysql用户即可。
此时查看。
如图所示,testdb可以顺利访问。
3、安装corosync
- 使用yum安装‘实验准备’中的rpm包
- #yum -y --nogpgcheck localinstall *.rpm
(1)编辑配置文件corosync.conf
- #cd /etc/corosync
- #cp corosync.conf.example corosync.conf
- 编辑corosync.conf文件
- bindnetaddr:192.168.0.0 //IP地址为网卡所在网络的网络地址
- to_syslog: no
- 添加如下内容:
- service {
- ver: 0
- name: pacemaker //启用pacemaker
- }
- aisexec {
- user: root
- group: root
- }
(2)生成节点间通信时用到的认证密钥文件并分别为两个节点创建corosync生成的日志所在的目录。
- #scp -p corosync authkey node2:/etc/corosync/
- #mkdir /var/log/cluster
- #ssh node2 'mkdir /var/log/cluster'
- 启动服务
- #service corosync start
(3)启动服务后检查日志文件中的有关配置信息
- 查看corosync引擎是否正常启动:
- # grep -e "Corosync Cluster Engine" -e "configuration file"
- /var/log/cluster/corosync.log
- 查看初始化成员节点通知是否正常发出:
- # grep TOTEM /var/log/cluster/corosync.log
- 检查启动过程中是否有错误产生:
- # grep ERROR: /var/log/cluster/corosync.log | grep -v unpack_resources
- 查看pacemaker是否正常启动:
- # grep pcmk_startup /var/log/cluster/corosync.log
(4)如果上面命令执行均没有问题,接着可以执行如下命令启动node2上的corosync
# ssh node2 '/etc/init.d/corosync start'
注:启动node2需要在node1上使用如上命令进行,不要在node2节点上直接启动
(5)查看集群节点的启动状态
由上述信息可知,两节点以正常启动。
4、为集群添加集群资源。(本实验在node1上设置)
(1)配置集群属性
- #crm configure property stonith-enabled=fals
- //禁用stonith
- #crm configure property no-quorum-policy=ignore
- //当投票数不足时设置忽略策略
- #crm configure rsc_defaults resource-stickiness=100
- //设置资源粘性
查看配置:
(2)添加资源
- 将VIP定义为高可用资源
- #crm configure primitive vip ocf:heartbeat:IPaddr params ip=172.16.19.1
- 将NFS定义为高可用资源
- #crm configure primitive mynfs ocf:heartbeat:Filesystem params
- device='192.168.0.100:/sharedata' directory='/data/sqldata'
- fstype="nfs" op start timeout=60 op stop timeout=60
- //这里的两个op选项必须设置
- 定义mysqld服务
- #crm configure primitive mysqld lsb:mysqld
(3)定义约束
- #crm configure colocation mysql_with_mynfs inf: mynfs mysqld vip
- 定义次序
- #crm configure order mynfs_befrore_mysql madatory: mynfs mysqld:start
- #crm configure order myip_befrore_mysql madatory: vip mysqld:start
此时资源已经添加成功,而且都被定义在了node1上。
5、测试
(1)集群是否自动挂载数据
查看集群信息发现,此时可知共享资源定义在了node1上,那么查看挂载数据目录是否有数据。
之前创建的数据库testdb依然存在。集群挂载数据成功。
(2)测试远程用户
- 进入mysql命令,授权用户
- grant all to *.* on root@‘%’ identified by '123456';
- flush privileges;
此时便可以使用远程的root用户访问数据库。
到此,基于corosync/openais的MYSQL的高可用便配置完成。