设为首页 收藏本站
查看: 1512|回复: 0

[经验分享] Heartbeat+MySQL+NFS 实现高可用(HA)的MySQL集群

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-7-29 11:06:41 | 显示全部楼层 |阅读模式
目录
一、环境准备
二、拓扑准备
三、安装与配置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 命令的执行结果一致
1
2
3
4
5
6
7
8
9
10
11
12
13
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互信
1
2
3
4
5
6
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).各节点之间时间同步
1
2
3
4
5
6
7
8
9
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源
1
2
3
4
5
node1,node2:
# wget http://dl.fedoraproject.org/pub/ ... ease-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
1
2
3
4
node1,node2:
# service iptables stop
# vim /etc/selinux/config
SELINUX=disabled



二、拓扑准备

wKiom1PWah_DLIMiAAFImGr7U5o839.jpg

三、安装与配置heartbrat
1.heartbeat v2安装与配置
(1).安装heartbrat
1
2
3
4
5
node1:
# yum -y install heartbeat*  (  --skip-broken 可能需要参数)

node2:
# yum -y install heartbeat*




(2).配置heartbeat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
说明:默认安装好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数据文件)
1
2
3
4
5
6
7
8
9
# 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组
1
2
3
4
5
6
7
8
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.修改数据目录的用户与组
1
2
3
4
# chow -R mysql.mysql /mydata/data/
# ll /mydata/  
总计 12  
drwxr-xr-x 6 mysql mysql 4096 08-12 13:40 data



4.修改nfs配置文件
1
2
# vim /etc/exports
/mydata              192.168.0.0/24(no_root_squash,rw,async)




5.重新输出一下nfs
1
2
# exportfs -arv  
exporting 192.168.0.0/24:/mydata




6.查看输出的nfs共享存储
1
2
3
# showmount -e 192.168.0.208  
Export list for 192.168.0.208:  
/mydata 192.168.0.0/24




7.测试挂载
1
2
3
4
5
6
7
8
9
10
11
12
13
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
1
2
3
4
# 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

1
# /usr/local/mysql/scripts/mysql_install_db --datadir=/mydata/data/ --user=mysql




3.提供mysql配置文件
1
2
3
4
# 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启动脚本
1
2
# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# chmod +x /etc/init.d/mysqld




5.启动mysql
1
2
# service mysqld start  
Starting MySQL...                                          [  OK  ]



6.查看数据目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 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.登录测试一下
1
2
3
4
5
6
7
8
9
10
11
12
13
# mysql  

mysql> show databases;  
+--------------------+  
| Database          |  
+--------------------+  
| information_schema |  
| mydb              |  
| mysql              |  
| performance_schema |  
| test              |  
+--------------------+  
5 rows in set (0.02 sec)



注:node1节点mysql配置完成,下面我们来配置node2
node2:
1.卸载数据文件目录
1
2
3
4
# service mysqld stop  
                                      [  OK  ]  
# cd  
# umount /mydata/



2.挂载数据目录到node2上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 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上
1
2
3
4
5
6
7
8
# 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.登录并查看
1
2
3
4
5
6
7
8
9
10
11
12
13
# mysql  

mysql> show databases;  
+--------------------+  
| Database          |  
+--------------------+  
| information_schema |  
| mydb              |  
| mysql              |  
| performance_schema |  
| test              |  
+--------------------+  
5 rows in set (0.01 sec)




6.停止mysql并卸载数据目录
1
2
3
4
# service mysqld stop  
Shutting down MySQL.                                      [  OK  ]  
# cd  
# umount /mydata/




注:到这里mysql配置全部完成,下面我们来具体配置一下,高可用的mysql集群
1.为hacluster用户设置密码
1
# echo "123456" |passwd --stdin hacluster



2.启动heartbeat 图形化界面配置mysql高可用集群资源
1
# hb_gui &



3.打开heartbeat运行状态检测器
1
2
3
4
5
6
7
8
9
#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高可用集群资源的截图
wKioL1PWa5vAQyQGAAF8mXzxjkU659.jpg
wKioL1PWa52SC0UUAAI0ZwIRlIY404.jpg
wKiom1PWaoWQ568LAAOZ0_7M5Qw601.jpg
wKiom1PWaomS5ooxAAOUwuF2Zag003.jpg
wKiom1PWaouizwTtAAOQzyougOc704.jpg

从下图可以看出node2为主节点,所有资源在node2中
wKiom1PWao-i8l4TAAHBzeaKBg4845.jpg



切换node2为备用节点:如图
wKiom1PWapDwVLrXAAItIFwkUfE191.jpg

从下图可以看出node1为主节点,所有资源在node1中
wKiom1PWaoCjvcgIAAHH1vi4TQs989.jpg
至此,本实验结束。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-22841-1-1.html 上篇帖子: heartbeat+DRBD+mysql高可用集群实战 下篇帖子: heartbeat v1 实现 MariaDB数据库的高可用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表