首页 > 代码库 > Heartbeat+MySQL+NFS 实现高可用(HA)的MySQL集群
Heartbeat+MySQL+NFS 实现高可用(HA)的MySQL集群
目录
一、环境准备
二、拓扑准备
三、安装与配置heartbrat
四、配置NFS服务
五、安装与配置mysql
六、crm配置资源
一、环境准备
1.操作系统
redhat 5.4 i386 位系统
2.软件环境
mysql-5.5.20
heartbeat-2.1.4-11.el5.i386.rpm
heartbeat-pils-2.1.4-11.el5.i386.rpm
heartbeat-stonith-2.1.4-11.el5.i386.rpm
heartbeat-gui-2.1.4-11.el5.i386.rpm
额外依赖包:libnet-1.1.4-3.el5.i386.rpm perl-MailTools-1.77-1.el5.noarch.rpm
3.高可用集群使用条件
(1).节点名称必须跟 uname -n 命令的执行结果一致
node1: # uname -n node1.example.com # vim /etc/hosts 192.168.0.101 node1.example.com node1 192.168.0.102 node2.example.com node2 node2: # uname -n node2.example.com #vim /etc/hosts 192.168.0.101 node1.example.com node1 192.168.0.102 node2.example.com node2
(2).各节点之间ssh互信
node1: #ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ‘‘ #ssh-copy-id -i .ssh/id_rsa.pub root@node2.example.com node2: #ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ‘‘ #ssh-copy-id -i .ssh/id_rsa.pub root@node2.example.com
(3).各节点之间时间同步
node1: # ntpdate -u 210.72.145.44 #crontab -e */30 * * * * /sbin/ntpdate -u 210.72.145.44 node2: # ntpdate -u 210.72.145.44 #crontab -e */30 * * * * /sbin/ntpdate -u 210.72.145.44 210.72.145.44是中国国家授时中心的官方服务器
4.增加EPEL yum源
node1,node2: # wget http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm # rpm -ivh epel-release-5-4.noarch.rpm # rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 # yum list
5.关闭防火墙与SELinux
node1,node2: # service iptables stop # vim /etc/selinux/config SELINUX=disabled
二、拓扑准备
三、安装与配置heartbrat
1.heartbeat v2安装与配置
(1).安装heartbrat
node1: # yum -y install heartbeat* ( --skip-broken 可能需要参数) node2: # yum -y install heartbeat*
(2).配置heartbeat
说明:默认安装好heartbeat没有配置文件,但是样例文件 # cd /usr/share/doc/heartbeat-2.1.4/ #cp authkeys ha.cf /etc/ha.d/ 注:这里我们只需要两个文件,ha.cf 与 authkeys #cd /etc/ha.d/ # dd if=/dev/random bs=512count=1| openssl md5 #生成密钥随机数 a4d20b0dd3d5e35e0f87ce4266d1dd64 #chmod 600 authkeys # vim /etc/ha.d/authkeys auth 1 1 md5 a4d20b0dd3d5e35e0f87ce4266d1dd64 # chmod 600 authkeys #修改密钥文件的权限为600 # vim ha.cf 主要修改两处(其它都可以默认): (1).修改心跳信息的传播方式(这里是组播) mcast eth0 225.100.100.100 694 1 0 (2).配置集群中的节点数 node node1.example.com node node2.example.com (3).启用crm crm on 2.复制以上两个配置文件到node2上 # scp authkeys ha.cf node2:/etc/ha.d/ 3.启动节点 # ssh node2 "service heartbeat start" # service heartbeat start 4.查看一下端口 node1: # netstat -ntulp Active Internet connections (only servers) tcp 0 0 0.0.0.0:5560 0.0.0.0:* LISTEN 3170/mgmtd t node2: # netstat -ntulp tcp 0 0 0.0.0.0:5560 0.0.0.0:* LISTEN 3170/mgmtd t 注:上面端口号5560可以看出,heartbeat已经正常启动。 5.查看一下集群状态 注:两个节点都在线,资源暂时还没有配置。
6.测试一下hb_gui图形配置界面
# hb_gui &
注:必须在dc目录上配置集群。
四、配置NFS服务
1.创建LVM逻辑卷(用来存放mysql数据文件)
# pvcreate /dev/sdb #创建物理卷 # vgcreate myvg /dev/sdb #创建卷组 # lvcreate -L 10G -n mydata myvg #创建逻辑卷 # mkfs.ext3 /dev/myvg/mydata #格式化逻辑卷 # lvs #查看逻辑卷 # mkdir /mydata #创建挂载目录 # mount /dev/myvg/mydata /mydata/ #挂载 # cd /mydata/ #进入挂载目录 # mkdir data #创建数据目录
2.创建mysql的用户与mysql组
node1,node2,nfs:(三个节点都要创建相同的用户与组) (1).创建mysql组 # groupadd -g 3306 mysql (2).创建mysql用户 # useradd -u 3306 -g mysql -s /sbin/nologin -M mysql (3).查看 # id mysql uid=3306(mysql) gid=3306(mysql) groups=3306(mysql)
说明:在node1与node2也要创建相同的用户和组
3.修改数据目录的用户与组
# chow -R mysql.mysql /mydata/data/ # ll /mydata/ 总计 12 drwxr-xr-x 6 mysql mysql 4096 08-12 13:40 data
4.修改nfs配置文件
# vim /etc/exports /mydata 192.168.0.0/24(no_root_squash,rw,async)
5.重新输出一下nfs
# exportfs -arv exporting 192.168.0.0/24:/mydata
6.查看输出的nfs共享存储
# showmount -e 192.168.0.208 Export list for 192.168.0.208: /mydata 192.168.0.0/24
7.测试挂载
node1: # mkdir /mydata # mount -t nfs 192.168.0.100:/mydata/ /mydata/ # ll /mydata/ total 12 drwxr-xr-x 6 mysql mysql 4096 Aug 12 13:40 data node2: #mkdir /mydata # mount -t nfs 192.168.0.100:/mydata/ /mydata/ # ll /mydata/ total 12 drwxr-xr-x 6 mysql mysql 4096 Aug 12 13:50 data
五、安装与配置mysql
node1:
1.解压并链接mysql
# tar -zxvf mysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/local/ #直接解压到/usr/local目录下 # ln -sv mysql-5.5.33-linux2.6-x86_64 mysql #设置一个软链接 # cd /usr/local/mysql #chown root:mysql *
2.初始化mysql
# /usr/local/mysql/scripts/mysql_install_db --datadir=/mydata/data/ --user=mysql
3.提供mysql配置文件
# cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf # vim /etc/my.cnf datadir = /mydata/data #指定数据目录 innodb_file_per_table = 1 #innodb表单独表空间
4.提供mysql启动脚本
# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld # chmod +x /etc/init.d/mysqld
5.启动mysql
# service mysqld start Starting MySQL... [ OK ]
6.查看数据目录
# mount /dev/sda2 on / type ext3 (rw) 192.168.0.100:/mydata/ on /mydata type nfs (rw,addr=192.168.0.100) # cd /mydata/data/ # ll total 28784 -rw-rw---- 1 mysql mysql 18874368 Aug 12 13:40 ibdata1 -rw-rw---- 1 mysql mysql 5242880 Aug 12 14:27 ib_logfile0 -rw-rw---- 1 mysql mysql 5242880 Aug 12 08:05 ib_logfile1 -rw-r--r-- 1 root root 4721 Aug 12 07:55 my.cnf drwx------ 2 mysql mysql 4096 Aug 12 08:07 mydb drwx------ 2 mysql root 4096 Aug 12 07:39 mysql -rw-rw---- 1 mysql mysql 126 Aug 12 13:40 mysql-bin.000001 -rw-rw---- 1 mysql mysql 19 Aug 12 13:18 mysql-bin.index -rw-r----- 1 mysql root 18748 Aug 12 14:28 node1.example.com.err -rw-rw---- 1 mysql mysql 6 Aug 12 14:27 node1.example.com.pid drwx------ 2 mysql mysql 4096 Aug 12 07:39 performance_schema drwx------ 2 mysql root 4096 Aug 12 07:39 test
7.登录测试一下
# mysql mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mydb | | mysql | | performance_schema | | test | +--------------------+ 5 rows in set (0.02 sec)
注:node1节点mysql配置完成,下面我们来配置node2
node2:
1.卸载数据文件目录
# service mysqld stop [ OK ] # cd # umount /mydata/
2.挂载数据目录到node2上
# mount -t nfs 192.168.0.100:/mydata/ /mydata/ # mount 192.168.0.100:/mydata/ on /mydata type nfs (rw,addr=192.168.0.100) # cd /mydata/data/ # ll total 28780 -rw-rw---- 1 mysql mysql 18874368 Aug 12 14:30 ibdata1 -rw-rw---- 1 mysql mysql 5242880 Aug 12 14:30 ib_logfile0 -rw-rw---- 1 mysql mysql 5242880 Aug 12 08:05 ib_logfile1 -rw-r--r-- 1 root root 4721 Aug 12 07:55 my.cnf drwx------ 2 mysql mysql 4096 Aug 12 08:07 mydb drwx------ 2 mysql root 4096 Aug 12 07:39 mysql -rw-rw---- 1 mysql mysql 126 Aug 12 13:40 mysql-bin.000001 -rw-rw---- 1 mysql mysql 19 Aug 12 13:18 mysql-bin.index -rw-r----- 1 mysql root 19162 Aug 12 14:30 node1.example.com.err -rw-r----- 1 mysql root 4442 Aug 12 13:40 node2.example.com.err drwx------ 2 mysql mysql 4096 Aug 12 07:39 performance_schema drwx------ 2 mysql root 4096 Aug 12 07:39 test
3.将配置文件与启动脚本复制到node2上
# scp /etc/my.cnf node2:/etc/ my.cnf 100% 4721 4.6KB/s 00:00 # scp /etc/init.d/mysqld node2:/etc/init.d/ mysqld 100% 11KB 10.6KB/s 00:00 4.启动mysql # service mysqld start Starting MySQL.. [ OK ]
5.登录并查看
# mysql mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mydb | | mysql | | performance_schema | | test | +--------------------+ 5 rows in set (0.01 sec)
6.停止mysql并卸载数据目录
# service mysqld stop Shutting down MySQL. [ OK ] # cd # umount /mydata/
注:到这里mysql配置全部完成,下面我们来具体配置一下,高可用的mysql集群
1.为hacluster用户设置密码
# echo "123456" |passwd --stdin hacluster
2.启动heartbeat 图形化界面配置mysql高可用集群资源
# hb_gui &
3.打开heartbeat运行状态检测器
#crm_mon 监视heartbeat运行情况 Last updated: Mon Jul 28 23:54:16 2014 Current DC: node2.example.com (ea4acb13-d59e-4948-b17b-18177d30e6ca) 2 Nodes configured. 1 Resources configured. ============ Node: node2.example.com (ea4acb13-d59e-4948-b17b-18177d30e6ca): standby Node: node1.example.com (8b2d315f-af4e-4b91-a14d-105103ba6004): online
以下为配置mysql高可用集群资源的截图
从下图可以看出node2为主节点,所有资源在node2中
切换node2为备用节点:如图
从下图可以看出node1为主节点,所有资源在node1中
至此,本实验结束。
本文出自 “天行健,君子自强不息” 博客,请务必保留此出处http://feilong0663.blog.51cto.com/3265903/1531806