首页 > 代码库 > mysql高可用解决方案之---nfs

mysql高可用解决方案之---nfs

1 背景

sql1  主        sql2 备

nfs

依赖于nfs,nfs挂则都挂了

heartbeat + nfs 实现mysql的高可用性

 

2 实验

web1(mysql主) 192.168.204.5

web2(mysql备) 192.168.204.6

nfs 192.168.204.7

VIP  192.168.204.8

步骤

 如上篇一样利用heartbeta 构建好 高可用的环境,这里不做介绍

 安装mysql  方法及配置nfs

1 nfs上面

[root@nfs .ssh]# yum install -y  nfs-utils  安装nfs

[root@nfs .ssh]# id mysql
uid=500(mysql) gid=500 组=500   确保三者的mysql 用户和组一致,不一致请修改至一致

[root@nfs .ssh]# mkdir -p /data/nfs/mysql  创建mysql的共享目录
[root@nfs .ssh]# chown -R mysql:mysql /data/nfs/mysql/   设置属性

[root@nfs .ssh]# echo "/data/nfs/mysql 192.168.204.5(rw,no_root_squash) 192.168.204.6(rw,no_root_squash)" >> /etc/exports  

    导出共享给 ..注意权限一定是可读写且no_root_squash

[root@nfs .ssh]# /etc/init.d/nfs start  启动nfs

[root@nfs .ssh]# showmount -e 192.168.204.7   查看是否导出正确

 

2 mysql(主)的配置

挂载nfs 

[root@web1 local]# id mysql
uid=500(mysql) gid=500(mysql) 组=500(mysql)
[root@web1 local]# mkdir -pv /data/mysql
[root@web1 local]# chown -R mysql.mysql /data/mysql/
[root@web1 local]# mount -t nfs 192.168.204.7:/data/nfs/mysql /data/mysql

 

准备好 二进制编译的 mysql包

mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz

解压并初始化

cd /usr/local/src

tar xvf mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz

cd ..

ln -s src/mysql-5.6.21-linux-glibc2.5-x86_64 mysql

[root@web1 local]# chown -R mysql.root mysql/

cd mysql
[root@web1 mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql

复制启动文件和 配置文件

[root@web1 mysql]# cp  support-files/mysql.server /etc/init.d/mysql

[root@web1 mysql]# cp support-files/my-default.cnf /etc/my.cnf

修改启动文件/etc/init.d/mysqld

basedir=/usr/local/mysql    程序放置路径
datadir=/data/mysql   数据文件放置的路径

启动mysql

[root@web1 mysql]# /etc/init.d/mysqld start

mysql 登入

/usr/local/mysql/bin/mysql

 

mysql> create database testdb;

测试是否能成功

 

3 msyql 备 操作 与主的区别在于 此处不需要在初始化了,利用主初始化好的,进行运行mysql

挂载nfs  

[root@web2 local]# id mysql
uid=500(mysql) gid=500(mysql) 组=500(mysql)
[root@web2 local]# mkdir -pv /data/mysql
[root@web2 local]# chown -R mysql.mysql /data/mysql/
[root@web2 local]# mount -t nfs 192.168.204.7:/data/nfs/mysql /data/mysql

 

准备好 二进制编译的 mysql包

mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz

解压

cd /usr/local/src

tar xvf mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz

cd ..

ln -s src/mysql-5.6.21-linux-glibc2.5-x86_64 mysql

 

[root@web2 mysql]# cp  support-files/mysql.server /etc/init.d/mysql

[root@web2 mysql]# cp support-files/my-default.cnf /etc/my.cnf

修改启动文件/etc/init.d/mysqld

basedir=/usr/local/mysql    程序放置路径
datadir=/data/mysql   数据文件放置的路径

启动mysql

[root@web2 mysql]# /etc/init.d/mysqld start    (启动前 关闭  主mysql上的mysqld 因为只能同时存在一个)

mysql 登入

/usr/local/mysql/bin/mysql

 

mysql> create database testdb2;

测试是否能成功

 

 

4 测试高可用  

heartbeat.x86_64 

 

修改 ha.cf haresources

修改 ha.cf  重要的两条

node web1

node web2

 

修改 haresources

web1    192.168.204.8/24/eth0 mysqld

[root@web1 ha.d]# scp ha.cf haresources authkeys web2:/etc/ha.d/

 

 

启动heartbeat,前者一定不能手动启动mysqld

[root@web1 ha.d]# /etc/init.d/heartbeat status
[root@web1 ha.d]# ssh web2 ‘/etc/init.d/heartbeat start‘

 

 

测试

[root@web1 ha.d]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:db:d8:64 brd ff:ff:ff:ff:ff:ff
inet 192.168.204.5/24 brd 192.168.204.255 scope global eth0
inet 192.168.204.8/24 brd 192.168.204.255 scope global secondary eth0

[root@web1 ha.d]# /etc/init.d/mysqld status
MySQL running (4511)[确定]

 

 

测试转移

[root@web1 ha.d]# /usr/share/heartbeat/hb_standby
Going standby [all].

 

查看web2上mysql 是否启动

[root@web2 ha.d]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:45:16:6b brd ff:ff:ff:ff:ff:ff
inet 192.168.204.6/24 brd 192.168.204.255 scope global eth0
inet 192.168.204.8/24 brd 192.168.204.255 scope global secondary eth0
inet6 fe80::20c:29ff:fe45:166b/64 scope link
valid_lft forever preferred_lft forever
[root@web2 ha.d]# /etc/init.d/mysqld status
SUCCESS! MySQL running (3798)

 

mysql高可用解决方案之---nfs