Centos 5.2+MYSQL+heartbeat双机互备

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:
一、背景
当前大多网站采用Linux MYSQLAPACHE+PHP这种经典配置,如何防止单点失败造成的整个网站的不可用是网站管理者必须要考虑的问题,其中数据库的高可用性(Database server’s high availability)是重中之重。
对于数据库的高可用性,各商业软件的厂商都有各自的解决方案,比如Oracle OPS serverIBM DB2 (share-nothing architecture)。最近MYSQL AB也发布了MYSQL cluster 软件,使用与IBM DB2类似的技术。
MySQL cluster可能会是日后最理想的方案,但是从资源、可集成度方面考虑,给出一个简单实用的方案借鉴。本文介绍的是性价比比较高的一种使用Heartbeat 2.0配置Linux高可用性集群,同时使用Heartbeat也可以实现简单的web集群。
 
二、实现原理
通过Linux HA 软件 heartbeat 实现IP的自动漂移,即当一台服务器宕机后,浮动IP(整个cluster的对外IP )自动漂移到另外一台服务器。
通过Mysql自身的replication 实现不同机器上多个数据库的同步整体性能此方案将会降低MYSQL 1%左右的性能,可用性及数据安全性将大有提高,同时服务器的切换对终端使用者是透明的,终端应用不需要进行更改。
所需硬件:
安装有双网卡的配置大致相同的服务器或工作机两台 一条交叉网线(用于双机对连的心跳线)
 
所需软件:
Linux HA 软件 heartbeat (只支持两个节点),安装盘里集成的有这个软件的rpm
Mysql软件
 
安装步骤:
1、安装MYSQL
#cd /opt
#useradd mysql -d /usr/local/mysql -s /sbin/nologin
#tar -zxvf mysql-5.1.29-rc.tar.gz
#cd mysql-5.1.29-rc
# ./configure --prefix=/usr/local/mysql --with-mysqld-user=mysql --without-debug --with-big-tables --with-charset=gbk --with-collation=gbk_chinese_ci --with-extra-charsets=all --with-pthread --enable-thread-safe-client --enable-assembler --without-isam --without-innodb --without-ndb-debug --with-mysqli
#make && make install
#/usr/local/mysql/bin/mysql_install_db        //初始化数据库
#chown -R mysql.mysql /usr/local/mysql/     //设置目录宿主
#cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf   //复制配置文件
#cp support-files/mysql.server /etc/rc.d/init.d/mysqld    //设置启动文件 
#chmod 700 /etc/rc.d/init.d/mysqld                         
#/usr/local/mysql/bin/mysqld_safe --user=mysql &         
#/etc/rc.d/init.d/mysqld start
在启动mysql时报错
查看日志发现以下错误:
/etc/my.cnf文件中的skip-federated注释掉即可
#chkconfig --add mysqld
#chkconfig --level 2345 mysqld on
#ln -s /usr/local/mysql/bin/mysql /sbin/mysql
#ln -s /usr/local/mysql/bin/mysqladmin /sbin/mysqladmin
#mysqladmin –u root password 1q2w3e        //设置root 密码
#配置库文件搜索路径
#echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf
#ldconfig
#添加/usr/local/mysql/bin到环境变量PATH
#export PATH=$PATH:/usr/local/mysql/bin
mysqlB也按以上的方式进行安装
2mysqlA设置
设置同步数据库:
   在这里我就用test数据库来做测试,在test数据库里新建一个data表,并添加一些数据,具体操作如下:
#mysql –u root –p1q2w3e
mysql>   create table data(name VARCHAR(20), address VARCHAR(50), phone VARCHAR(20));
mysql> insert into data(name,address,phone) values('jhone','beijing','138000000');
mysql> select * from data;
设置数据库同步帐户:
mysql>GRANT REPLICATION SLAVE,REPLICATION CLIENT,RELOAD,SUPER ON *.* TO 'backup'@'10.0.0.2' IDENTIFIED BY 'qawsed';
(授与从10.0.0.2主机上登录用户backup数据复制权限,4.02版本以前用:GRANT FILE ON *.* TO backup@10.0.0.2 IDENTIFIED BY 'qawsed';)
mysql>flush privileges;
修改配置文件:
停止mysql服务
[root@mysqlA opt]#service mysqld stop
建立用于更新日志的目录,并给于mysql的权限
[root@mysqlA opt]# mkdir /var/log/mysql
[root@mysqlA opt]# chown mysql.mysql /var/log/mysql/
更改Mysql配置文件/etc/my.cnf
[root@mysqlA opt]# vi /etc/my.cnf
server-id=1                 //服务器ID
log-bin=mysql-bin
log-bin=/var/log/mysql/updatelog   //启用更新日志
binlog-do-db=test       //表示需要备份的数据库是test这个数据库
replicate-same-server-id
master-host=10.0.0.2      //指定主服务器IP
master-user=backup       //指定在主服务器上可以同步的帐号
master-password=qawsed //指定帐号对应的密码
master-connect-retry=60  //断点重试间隔为60
replicate-do-db=test      //表示同步test数据库
binlog-ignore-db=mysql   //不同步mysql数据库
test进行备份
[root@mysqlA opt]# service mysqld start    //先启动mysql
[root@mysqlA opt]# /usr/local/mysql/bin/mysqldump -h localhost -u root -p1q2w3e test >test.sql
[root@mysqlA opt]#scp test.sql root@10.0.0.2:/opt     // (将test.sql复制到mysqlB/opt目录下)
至此mysqlA服务器上有关mysql的设置已完成,下一步开始配置mysqlB
设置mysqlB
设置数据库同步帐户:
mysql>GRANT REPLICATION SLAVE,REPLICATION CLIENT,RELOAD,SUPER ON *.* TO 'backup'@'10.0.0.1' IDENTIFIED BY 'qawsed';
(授与从10.0.0.1主机上登录用户backup数据复制权限,4.02版本以前用:GRANT FILE ON *.* TO backup@10.0.0.1 IDENTIFIED BY 'qawsed';)
mysql>flush privileges;
修改配置文件:
停止mysql服务
[root@mysqlA opt]#service mysqld stop
建立用于更新日志的目录,并给于mysql的权限
[root@mysqlA opt]# mkdir /var/log/mysql
[root@mysqlA opt]# chown mysql.mysql /var/log/mysql/
更改Mysql配置文件/etc/my.cnf
[root@mysqlA opt]# vi /etc/my.cnf
server-id=2                 //服务器ID
log-bin=mysql-bin
log-bin=/var/log/mysql/updatelog   //启用更新日志
binlog-do-db=test       //表示需要备份的数据库是test这个数据库
replicate-same-server-id
master-host=10.0.0.1      //指定主服务器IP
master-user=backup       //指定在主服务器上可以同步的帐号
master-password=qawsed //指定帐号对应的密码
master-connect-retry=60  //断点重试间隔为60
replicate-do-db=test      //表示同步test数据库
binlog-ignore-db=mysql   //不同步mysql数据库
 
还原从mysqlA备份过的test.sql
#service mysqld start
# mysql -u root -p1q2w3e test <test.sql
重启两边的mysql服务
查询配置
Show Slave status:此处Slave_IO_Running ,Slave_SQL_Running 都应该是yes,表示从库的I/O,Slave_SQL线程都正确开启.
Mysql中可通过以下命令来查看主从状态
show master status 查看master状态
show slave status 查看slave状态
show processlist G 查看当前进程
stop slave 暂时停止slave进程
start slave 开始slave进程
primary服务器上 MySQL命令符下输入:
mysql>show master status;
mysql>show slave status\G;
如果出现以错误:
解决办法:在/etc/my.cnf [mysqld]下面加上replicate-same-server-id参数
到此mysql的双机互备已基本完成,在两台服务器的mysql数据库中任意添加数据,都可以同步到对端服务器上
安装配置heartbeat:
Heartbeat下载地址如下:
下载对应的版本,在此我的系统是centos 5.2
rpm -ivh libnet-1.1.2.1-2.1.i386.rpm
rpm -ivh heartbeat-pils-2.1.4-2.1.i386.rpm
rpm -ivh --nodeps heartbeat-stonith-2.1.4-2.1.i386.rpm
rpm -ivh --nodeps heartbeat-2.1.4-2.1.i386.rpm
rpm -ivh --nodeps heartbeat-devel-2.1.4-2.1.i386.rpm
rpm -ivh --nodeps heartbeat-ldirectord-2.1.4-2.1.i386.rpm
rpm -ivh ipvsadm-1.24-8.1.i386.rpm
配置 HA的各配置文件:
复制配置文件
[root@mysqlA opt]# cp /usr/share/doc/packages/heartbeat/authkeys /etc/ha.d/
[root@mysqlA opt]# cp /usr/share/doc/packages/heartbeat/haresources /etc/ha.d/
[root@mysqlA opt]# cp /usr/share/doc/packages/heartbeat/ha.cf /etc/ha.d/
配置心跳的加密方式:authkeys
[root@mysqlA opt]#vi /etc/ha.d/authkeys
#如果使用双机对联线(双绞线),可以配置如下:
auth 1
1 crc
#存盘退出,然后
[root@mysqlA opt]#chmod 600 authkeys
 
配置心跳的监控:haresources
[root@mysqlA opt]#vi /etc/ha.d/haresources
#各主机这部分应完全相同。
mysqlA IPaddr::192.168.8.155 ipvsadm mysqld
[root@mysqlA opt]# mkdir -p /var/log/ha_log
[root@mysqlA opt]#chmod 777 /var/log/ha_log/
 
配置心跳的配置文件:ha.cf
[root@mysqlA opt]#vi /etc/ha.d/ha.cf
logfile /var/log/ha_log/ha-log.log   ## ha的日志文件记录位置。如没有该目录,则需要手动添加
bcast eth1     ##使用eht1做心跳监测
keepalive 2    ##设定心跳(监测)时间时间为2
warntime 10
deadtime 30
initdead 120
hopfudge 1
udpport 694    ##使用udp端口694 进行心跳监测
auto_failback on
node mysqlA  ##节点1,必须要与 uname -n 指令得到的结果一致。
node mysqlB  ##节点2
ping 192.168.8.100   ##通过ping 网关来监测心跳是否正常。
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=root uid=root
debugfile /var/log/ha_log/ha-debug.log
 
设置ipvsadm的巡回监测
[root@mysqlA opt]#ipvsadm -A -t 192.168.8.155:3306 -s rr
[root@mysqlA opt]#ipvsadm -a -t 192.168.8.155:3306 -r 192.168.8.151:3306 -m
[root@mysqlA opt]#ipvsadm -a -t 192.168.8.155:3306 -r 192.168.8.152:3306 –m
 
执行后进行监测:
[root@mysqlA opt]#ipvsadm –list
 
 
HA服务的启动、关闭以及测试
启动HA: service heartbeat start
关闭HA; service heartbeat stop
进行监控: service heartbeat status
防火墙设置
heartbeat 默认使用udp 694端口进行心跳监测。 如果系统有使用iptables 做防火墙,应记住把这个端口打开。
iptables -I INPUT -p udp --dport 694 -j ACCEPT
 
到此mysql双机互备已基本完成,不管哪一台服务器菪机都不会影响mysql的正常运行

本文转自king_819 51CTO博客,原文链接:http://blog.51cto.com/kerry/110206,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
关系型数据库 MySQL Linux
centos7.0环境下安装MySql_8.0.12
centos7.0环境下安装MySql_8.0.12
|
2月前
|
监控 关系型数据库 MySQL
HeartBeat监控Mysql状态
HeartBeat监控Mysql状态
|
16天前
|
关系型数据库 MySQL Linux
linux CentOS 7.4下 mysql5.7.20 密码改简单的方法
linux CentOS 7.4下 mysql5.7.20 密码改简单的方法
19 0
|
1月前
|
分布式计算 关系型数据库 MySQL
Sqoop【部署 01】CentOS Linux release 7.5 安装配置 sqoop-1.4.7 解决警告并验证(附Sqoop1+Sqoop2最新版安装包+MySQL驱动包资源)
【2月更文挑战第8天】Sqoop CentOS Linux release 7.5 安装配置 sqoop-1.4.7 解决警告并验证(附Sqoop1+Sqoop2最新版安装包+MySQL驱动包资源)
99 1
|
9天前
|
关系型数据库 MySQL Linux
centos7安装mysql-带网盘安装包
centos7安装mysql-带网盘安装包
56 2
|
16天前
|
关系型数据库 MySQL Linux
CentOS 7 下使用yum安装MySQL5.7.20 最简单 图文详解
CentOS 7 下使用yum安装MySQL5.7.20 最简单 图文详解
74 0
|
存储 关系型数据库 MySQL
【MYSQL】—— MySQL 在 Centos 7环境安装
【MYSQL】—— MySQL 在 Centos 7环境安装
|
1月前
|
关系型数据库 MySQL Linux
【VMware安装+centos 7Linux系统+MySQL安装】——在Linux系统中安装MySQL步骤,以及遇见的各种问题(如:vm两个虚拟网卡消失、vm网络适配器有感叹号等等)
【VMware安装+centos 7Linux系统+MySQL安装】——在Linux系统中安装MySQL步骤,以及遇见的各种问题(如:vm两个虚拟网卡消失、vm网络适配器有感叹号等等)
185 0
|
2月前
|
缓存 关系型数据库 MySQL
百度搜索:蓝易云【CentOS8服务器安装MySQL报错:no match mysql-community-server】
现在,你已经成功安装了MySQL服务器并解决了"no match mysql-community-server"的报错问题。祝你使用愉快!
43 1
|
3月前
|
关系型数据库 MySQL Unix
CentOS安装MySQL5.5
CentOS安装MySQL5.5
85 0