欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

用MySQL+HeartBeat实现MySQL主主自动切换来保证网站不中断服务

程序员文章站 2024-02-17 21:09:58
...

对于数据库的高可用性,各商业软件的厂商都有各自的解决方案,比如Oracle OPS server和IBM DB2 (share-nothing architecture)。最

Mysql HA实现MYSQL的高可用

一、背景

当前大多网站采用MYSQL+Linux+APACHE这种经典配置,如何防止单点失败造成的整个网站的不可用是网站管理者必须要考虑的问题,其中数据库的高可用性(Database server’s high availability)是重中之重。

对于数据库的高可用性,各商业软件的厂商都有各自的解决方案,比如Oracle OPS server和IBM DB2 (share-nothing architecture)。最近MYSQL AB也发布了MYSQL cluster 软件,使用与IBM DB2类似的技术。

MySQL cluster可能会是日后最理想的方案,但是从资源、可集成度方面考虑,,给出一个简单实用的方案借鉴。本文介绍的是性价比比较高的一种: 使用Heartbeat 2.0配置Linux高可用性集群。

二、实现原理

通过Linux HA 软件 heartbeat 实现IP的自动漂移,即当一台服务器宕机后,浮动IP(整个cluster的对外IP )自动漂移到另外一台服务器。

用MySQL+HeartBeat实现MySQL主主自动切换来保证网站不中断服务

通过Mysql自身的replication 实现不同机器上多个数据库的同步整体性能此方案将会降低MYSQL 1%左右的性能,可用性及数据安全性将大有提高,同时服务器的切换对终端使用者是透明的,终端应用不需要进行更改。

所需硬件

安装有双网卡的配置大致相同的服务器或工作机两台 一条交叉网线(用于双机对连的心跳线)

所需软件

Linux HA 软件 heartbeat (只支持两个节点),安装盘里集成的有这个软件的rpm包

软件主页:

Mysql软件

软件主页:

实现步骤

一、设置硬件环境:如下表:

计算机名: 网卡 ip地址

primary Eth0

eth1

192.168.0.10/255.255.255.0

10.0.0.1/255.0.0.0 (用于心跳)

backup Eth0

eth1

192.168.0.11/255.255.255.0

10.0.0.2/255.0.0.0 (用于心跳

primary和backup的eth0分别连接到你的交换机

primary和backup的eth1之间用心跳线直连起来,做心跳

浮动IP为192.168.0.8/255.255.255.0

二、安装MYSQL

在primary节点上安装mysql数据库

这里我开始都把它下载到本地了,所以这里我用软件把mysql包上传到服务器root目录下

1、在linux系统中添加运行Mysql的用户和组

[root@primary ~]# groupadd mysql

[root@primary ~]# useradd -g mysql mysql

2、解压缩源码包

[root@primary ~]# tar -zxvf mysql-5.0.22.tar.gz

[root@primary ~]# cd mysql-5.0.22

3、配置编译

配置mysql的安装目录,并制定数据库的存放位置

[root@primary mysql-5.0.22]# ./configure –prefix=/usr/local/mysql \

–localstatedir=/var/lib/mysql

4、编译并安装

[root@primary mysql-5.0.22]#make

[root@primary mysql-5.0.22]#make install

5、装载原始授权到数据库

[root@primary mysql-5.0.22]#./scripts/mysql_install_db

6、copy配置文件到/etc目录

[root@primary mysql-5.0.22]# cp support-files/my-medium.cnf /etc/my.cnf

7、copy启动脚本到资源目录

cp support-files/mysql.server /etc/rc.d/init.d/mysqld

8、添加mysql服务,让系统启动时自动启动mysql服务

[root@primary mysql-5.0.22]#chmod +x /etc/rc.d/init.d/mysqld

[root@primary mysql-5.0.22]#chkconfig –level 235 mysqld on

9、更改目录属主/var/lib/mysql

[root@primary mysql-5.0.22]#chown -R mysql.mysql /var/lib/mysql

10、启动mysql

[root@primary mysql-5.0.22]#service mysqld start

11、设置环境变量

[root@primary ~]# vi /etc/profile添加一行就 ,在运行mysql的时候就不用输入很长的路经了

export PATH=$PATH:/usr/local/mysql/bin

设置好之后,用下行命令是设置立即生效

# source /etc/profile

在backup服务器上安装mysql如同上面的步骤

在mysql数据库中创建一个库,用来同步数据和测试用,mysql安装完后有一个练习库test这里就不建了直接就用它了。在test库里面先建一个表

登陆mysql数据库

mysql -u root -p

(执行后提示输入密码,正确输入mysql root用户密码后,登入mysql,以下操作在mysql命令行下进行)

要使用test数据库,先用use命令选择该数据库:

mysql> use test

创建一个表

下面使用create table语句指定你要建的表的布局,下面只是用于一个测试的表。我就随便建了一个:

mysql> create table data(name VARCHAR(20), address VARCHAR(50), phone VARCHAR(20));

Query OK, 0 rows affected (0.11 sec)

在表中添加一条记录,用insert into语句:

mysql> insert into data(name,address,phone) values(‘jhone’,'beijing’,’138000000′);

Query OK, 1 row affected (0.02 sec)

查看表中的记录

mysql> select * from data;

+——-+———+———–+

| name | address | phone |

+——-+———+———–+

| jhone | beijing | 138000000 |

+——-+———+———–+

1 row in set (0.05 sec)

用MySQL+HeartBeat实现MySQL主主自动切换来保证网站不中断服务