2台mysql集成_2台mysql实现HA的架构,并同步启用replication模式

万志专
2023-12-01

一、背景

当前大多网站采用Linux +MYSQL+APACHE+PHP这种经典配置,如何防止单点失败造成的整个网站的不可用是网站管理者必须要考虑的问题,其中数据库的高可用性(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高可用性集群,同时使用Heartbeat也可以实现简单的web集群。

二、实现原理

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

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

所需硬件:

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

所需软件:

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

软件主页:http://www.linux-ha.org/

Mysql软件

软件主页:http://www.mysql.com/

安装步骤:

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也按以上的方式进行安装

2、mysqlA设置

设置同步数据库:

在这里我就用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

重启两边的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下载地址如下:

http://download.opensuse.org/repositories/server:/ha-clustering:/lha-2.1/CentOS_5/i386/下载对应的版本,在此我的系统是centos 5.2rpm -ivh libnet-1.1.2.1-2.1.i386.rpmrpm -ivh heartbeat-pils-2.1.4-2.1.i386.rpmrpm -ivh --nodeps heartbeat-stonith-2.1.4-2.1.i386.rpmrpm -ivh --nodeps heartbeat-2.1.4-2.1.i386.rpmrpm -ivh --nodeps heartbeat-devel-2.1.4-2.1.i386.rpmrpm -ivh --nodeps heartbeat-ldirectord-2.1.4-2.1.i386.rpmrpm -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 11 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.cflogfile /var/log/ha_log/ha-log.log   ## ha的日志文件记录位置。如没有该目录,则需要手动添加bcast eth1     ##使用eht1做心跳监测keepalive 2    ##设定心跳(监测)时间时间为2秒warntime 10deadtime 30initdead 120hopfudge 1udpport 694    ##使用udp端口694 进行心跳监测auto_failback onnode mysqlA  ##节点1,必须要与 uname -n 指令得到的结果一致。node mysqlB  ##节点2ping 192.168.8.100   ##通过ping 网关来监测心跳是否正常。respawn hacluster /usr/lib/heartbeat/ipfailapiauth ipfail gid=root uid=rootdebugfile /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 –listHA服务的启动、关闭以及测试启动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的正常运行

 类似资料: