说明:mysql高可用集群方案设计 
server1 mysqld服务器    172.16.23.11
server2 mysqld服务器    172.16.23.12
数据存放 nfs 服务器     172.16.23.6
 
   server1,2为了实现高可用,需要一个共享存储,这里用一个nfs服务器提供,nfs服务器上新建一个逻辑卷,把它挂载在/mydata目录下,这样方便mysql数据的存储。nfs只需把这个目录以读写方式共享给server1,2,且三台服务器都有同一个mysql用户,mysql组,且id号都一样。这样mysql服务器上只需挂载这个目录到本地,那么就可以共享数据。这篇博客与上一篇共同实现
 
一、nfs服务器配置
1、新建分区,并挂载到/mydata下
fdisk /dev/sda
新建一个20G的分区,8e逻卷
partprob /dev/sda
pvcreate /dev/sda5
vgcreate myvg /dev/sda5
lvcreate -L 10G -n mydata myvg
mke2fs -j  -L MYDATA /dev/myvg/mydata //格式化
 
mkdir /mydata
vim /etc/fstab //实现开机自动挂载
LABLE=MYDATA    /mydata    ext3    default  0 0
mount -a   //读取文件,进行挂载
mount  //查看是否挂载
 
 
groupadd -g 355 -r mysql
useradd -g mysql -r -u 355 -s /sbin/nologin mysql
id mysql
chown -R mysql:mysql  /mydata     
 
2、启动nfs服务器,并导出文件系统
vim /etc/exports  添加如下一行
mydata    172.16.23.11(rw,no_root_squash) 172.16.23.12(rw,no_root_squash)
 
service nfs start
 
rpcinfo -p localhost  查看是否启动
chkconfig nfs on    开机自动启动
 
showmount -e localhost   查看共享给谁
 
二、mysql服务器设置 server1,server2一样
(1)保证三台服务器时间同步
(2)增加用户:
 groupadd -g 355 -r mysql
 useradd -g mysql -r  -u 355 mysql
(3)挂载文件系统,
mkdir /mydata
mount -t nfs 172.16.23.6:/mydata  /mydata
su - mysql 
touch   aa    测试是否有写权限
mkdir /mydata/data    //属于mydata用户、组,这样mysql数据才能写入
 
(4) 下载安装mysql lftp 172.16.0.1/pub/Sources/mysql-5.5   mysql-5.5.22
tar xf mysql-5.5.22..... -C /usr/local
ln -sv mysql-5.5.22... mysql
cd mysql
chown -R msyql:mysql .
scripts/mysql_install_db --user=mysql --datadir=/mydata/data  重要
cp support-files/my-large.cnf   /etc/my.cnf
vim /etc/my.cnf 添加一行datadir=/mydata/data
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --list mysqld
chkconfig mysqld off    //不能开机自动启动,服务器集群
 
(5)server2安装mysql跟server1基本一样
  server2不需要初始化,因为/mydata已经有元数据了。
 hostname 要设置,date要一致
 
(6)由于前面已经配置了Corosync+Pacemaker高可用集群,
这里只需保证以下配置
crm configure property stonith-enabled=false //由于没stonith设备,启用会报错,这里禁用
crm configure no-quorum-policy=ignore //由于这里是两台服务群集,不需要quorum,ignore表示一台故障,另一台仍能用
crm configrue rsc_defaults resource-stickiness=100  设置默认资源粘性值,表示一台故障时,再次启动服务时是否会再转移回来,正值表示更愿留在当前服务器上
 
查看资源属性: crm(live)ra# meta ocf:heartbeat:IPaddr
primitive myip ocf:heartbeat:IPaddr params ip="172.16.23.6"  添加一条基本资源
show 
commit 提效crm configure property no-quorum-policy=ignore
 
(7)给nfs服务器上的/mydata目录定义为高可用资源
umount /mydata   两服务器都需卸载,只有active的服务器才能访问数据
#crm ra  list ocf heartbeat    有一个Filesystem代理脚本
crm ra meta ocf:heartbeat:Filesystem   查看这个脚本里的参数,方便我们设置  
定义资源:
crm(live)configure# primitive mynfs ocf:heartbeat:Filesystem params device="172.16.23.6:/mydata" directory="/mydata" fstype="nfs" op start timeout=60s op stop timeout=60s   
设备为nfs那台服务器上共享的目录,目录为当前主机挂载的目录,类型为nfs类型 op 选项里面的值最好大于脚本文件只定义的最小值,否则会报错
commit 提交
crm status 查看挂载到那个主机上,在那个主机上查看 ls /mydata  如果在server1上
让server1变为被动,查看内容 
crm node standby
crm node online
(8)、添加mysqld服务,nfs与mysqld应在同一个主机上,且nfs先于mysqld挂载
crm(live)configure# primitive mysqld lsb:mysqld  添加mysql服务
crm(live)configure# colocation  mysqld_and-mynfs inf: mysqld mynfs myip  排列约束,mysqld与nfs一定要在一起(如果错可delete)
crm(live)configure# order mysqld_after_mynfs mandatory:mynfs mysqld:start  //mysqld启动必须晚于nfs
crm(live)configure# show xml
crm(live)configure# order mysql_after_myip mandatory: myip mysqld   //ip地址早于mysqld启动
commit
[定义组  group web WebIP mynfs]
crm status  看那台服务器上
(9)、验证测试
/usr/local/mysql/bin/mysql 
创建远程连接的用户:
grant all on *.* to root@'172.16.%.%' identified by '12345'
flush privileges;
172.16.23.9这台客户端连接测试
mysql -uroot -h172.16.23.6 -p12345
创建数据库测试
 
(10)、模拟正在工作的mysql服务器故障
crm node standby
crm status
172.16.23.9这台客户端连接测试
mysql -uroot -h172.16.23.6 -p12345
创建数据库测试
(11)、查看当前系统支持stonith设备
stonith -L
man stonith
stonith -t meatware -n