楼主: liyihongcug

Mysql 复制 是否2台机器都一定需要HEARTBEAT

[复制链接]
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
11#
 楼主| 发表于 2009-6-24 15:43 | 只看该作者
现在需求有所改变
要做 3主 1 主 。  这个可以实现吗?

使用道具 举报

回复
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
12#
 楼主| 发表于 2009-6-25 12:42 | 只看该作者
深入浅出MySQL双向复制技术(一)
2009-4-15   大 | 中 | 小
打印本文章
RSS

导读:设置MySQL数据同步(单向&双向)由于公司的业务需求,需要网通和电信的数据同步,就做了个MySQL的双向同步,记下过程供大家参考。

关键词:如何设置MySQL数据同步 MySQL双向复制 同步服务器
正在加载数据...

  设置MySQL数据同步(单向&双向)由于公司的业务需求,需要网通和电信的数据同步,就做了个MySQL的双向同步,记下过程,以后用得到再翻出来,也贴出来供大家参考。

  一、准备服务器

  由于MySQL不同版本之间的(二进制日志)binlog格式可能会不一样,因此最好的搭配组合是Master的MySQL版本和Slave的版本相同或者更低,Master的版本肯定不能高于Slave版本。

  more.. | less.. | 本文中,我们假设主服务器(以下简称Master)和从服务器(以下简称Slave)的版本都是5.0.27,操作系统是RedHat Linux 9。

  假设同步Master的主机名为:A(IP:192.168.0.1),Slave主机名为:B(IP:192.168.0.2),2个MySQL的basedir目录都是/usr/local/mysql,datadir都是:/var/lib/mysql。

  二、设置同步服务器

  1、设置同步Master

  修改 my.cnf 文件,在   

# Replication Master Server (default)
  # binary logging is required for replication


  添加如下内容:   


log-bin=/var/log/mysql/updatelog
  server-id = 1
  binlog-do-db=test
  binlog-ignore-db=mysql

  重启MySQL,创建一个MySQL帐号为同步专用   


GRANT REPLICATION SLAVE,RELOAD,SUPER, ON *.* TO back@192.168.0.2 IDENTIFIED BY 'back' ;
  FLUSH PRIVILEGES ;

  2、设置同步Slave

  修改my.cnf文件,添加


server-id = 2
  master-host = 192.168.0.1
  master-user = back
  master-password = back
  master-port = 3306
  replicate-ignore-db=mysql (我的是Ver 14.14 Distrib 5.1.22-rc版,这个参数好像用不上)
  replicate-do-db=test

   重启MySQL

  3、启动同步

  在主服务器A MySQL命令符下:

  show master status;

  显示(当然这个是我机器的情况,你的不可能跟我一样哈,只是个例子):

    +------------------+----------+-------------------+------------------+
  | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  +------------------+----------+-------------------+------------------+
  | updatelog.000028 | 313361 | test | mysql |
  +------------------+----------+-------------------+------------------+

  在从服务器A MySQL命令符下:   


slave stop;
  CHANGE MASTER TO MASTER_LOG_FILE='updatelog.000028',MASTER_LOG_POS=313361;
  slave start;

  用show slave status\G;看一下从服务器的同步情况   


Slave_IO_Running: Yes
  Slave_SQL_Running: Yes

  如果都是yes,那代表已经在同步

  往表里面写点数据测试一下看是否同步成功,如果不成功,绝对不是你的RP问题,再检查一下操作步骤!
  4、设置双向同步

  修改B服务器的my.cnf,添加


log-bin=/var/log/mysql/updatelog
  binlog-do-db=test
  binlog-ignore-db=mysql


  重启MySQL,创建一个MySQL帐号为同步专用      


GRANT REPLICATION SLAVE,RELOAD,SUPER, ON *.* TO back@192.168.0.1 IDENTIFIED BY 'back' ;
  FLUSH PRIVILEGES ;


  修改A服务器的my.cnf,添加   


master-host = 192.168.0.2
  master-user = back
  master-password = back
  master-port = 3306
  replicate-ignore-db=mysql
  replicate-do-db=test


  重启MySQL

  在主服务器B MySQL命令符下:


        show master status;
  +------------------+----------+-------------------+------------------+
  | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  +------------------+----------+-------------------+------------------+
  | updatelog.000028 | 13753 | test | mysql |
  +------------------+----------+-------------------+------------------+


  在服务器A MySQL命令符下:   


slave stop;
  CHANGE MASTER TO MASTER_LOG_FILE='updatelog.000028',MASTER_LOG_POS=13753;
  slave start;

使用道具 举报

回复
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
13#
 楼主| 发表于 2009-7-3 15:07 | 只看该作者
linux下mysql 一主2从 多个数据库 复制配置成功数据don't'同步
数据库, linux, mysql, don
linux下mysql   一主2从 同一个数据库 复制配置成功数据也能同步  
1现在的想法是   一主挂2个库(数据库ccxyaccount 数据库ccxydb )  在my.cnf文件里配置这2个库   
主机器ip是10。。149
mysql> show master status;
+----------------+----------+---------------------------------------+------------------+
| File           | Position | Binlog_Do_DB                          | Binlog_Ignore_DB |
+----------------+----------+---------------------------------------+------------------+
| log_bin.000058 |       98 | ccxyaccount,ccxydb,ccxyaccount,ccxydb |                  |  
+----------------+----------+---------------------------------------+------------------+
1 row in set (0.00 sec)
  
2  另外2个从机器
a 10。。150   配置文件设置replicate-do-db      = ccxyaccount  
b 10。。41    配置文件设置replicate-do-db      = ccxydb
  
现在3机器状态信息都是正常的,没有错误。
麻烦的是主机器的2个库的数据增修改删除变化信息无法同步到2台从机器。
回忆上个月3台机器作多库的主住从多库复杂的复制 失败 。 是否复制支持多个库。(上面这个应用应该说比较简单的俄 )

使用道具 举报

回复
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
14#
 楼主| 发表于 2009-7-3 15:09 | 只看该作者
Replication延时的类型

1.        固定性的延时
——Slave的数据持续性的落后于Master并且一直无法与Master的数据保持一致。
——Slave的数据经常在白天落后于Master,而在晚上可以赶上并与Master的记录保持一致。
这种类型的延时通常是由于Slave服务器的负载已经到达了上限或在白天访问量大的时候到达上限造成的。

2.        非固定性的延时
——Slave的数据只是短暂的落后于Master,可在短时间内恢复
这类型的延时通常与批量任务和报表有关,效率差的查询也会导致这类延时

        Mysql Replication的限制

Mysql的Replication是单线程的,意味着只能有效的使用一个CPU内核和一个磁盘,一条复杂的查询或者事务都导致进程被阻塞,不过现在针对5.1版本的多线程Replication补丁,http://forge.mysql.com/wiki/ReplicationFeatures/ParallelSlave,还是pre版,有很多限制,感兴趣的可以去看看。

        Replication的容量

1.        理解什么是Replication的容量
可以将Replication暂停一个小时,重新启动Replication后,观察Slave的数据多久可以与Master一致。从 Replication重新启动到和Master数据一致所花费的时间与Replication暂停的时间的比值就是Replication的容量。

2.        建议保持Replication的容量在3倍以上,即延迟一个小时的数据,Slave只需要20分钟就能与Master的数据一致。

        Replication的优化

1.        5.0的mysql中避免类似以下的更新语句
INSERT … SELECT <complex query>
UPDATE .... WHERE <complex clause>
复杂的查询会导致Replication线程阻塞。如果是insert或update与select结合的语句,可以讲select单独执行并保存在临时表中,然后再执行insert或者update。
如果使用的是5.1的mysql,新功能中的行级Replication(RBR)可以解决这个问题。RBR可以将在Master上通过复杂查询后更新的结果直接传给Slave,Slave可以直接将结果更新到数据库中。

2.        避免大的事务
太大的事务会造成Replication长时间阻塞,数据会严重滞后于Master。

        Slave服务器的硬件选择

更快的CPU内核,对于单线程的Replication多核CPU是没有任何优势的。
更高速的硬盘,包括更高的转速和更好的高速缓存命中率,如果有钱的话上SSD吧

        主从结构的扩展性问题

1.        如何降低写操作的频率
Master的写操作会扩散到所有的Slave上,所以高频率的写操作会降低Slave的读操作效率。
至少保持一台Slave做全库同步,其他的Slave可以只做部分表的同步。当然,这需要web应用程序的配合来分配哪些查询读哪些Slave。
将一些更新操作放到memcached中,例如session和计数器。
Slave使用myisam引擎
将一些写入量很大的更新操作直接在slave上执行,而不通过Replication。

2.        如何更有效的利用Slave的硬件资源
使用分区
有选择的对表进行同步
在Slave上对数据进行归档。
Session的持久化
为不同的应用服务器分配不同的Slave进行读操作。
或者根据查询类型的不同来分配不同的Slave。

3.        如何使你的程序最大化的利用Slave
将对数据更新不敏感的查询放到Slave上,而需要实时数据的查询则放到Master。
通过session的持久化,让做了修改的用户首先看到修改的内容,其他的用户可以等待Slave更新后再查看新内容。
对于某些数据,可以用memcached来存放数据的版本号,读Slave的程序可以先对比Slave的数据和memcached数据的版本,如果不一致则去读master。用户和博客类的信息可以用这种方法。
在查询前可以通过SHOW SLAVE STATUS检测Slave的状态,然后根据返回的结果进行服务器的选择。

使用道具 举报

回复
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
15#
 楼主| 发表于 2009-8-5 11:34 | 只看该作者
进行mysql 双向同步配置
a、 先修改原slave 服务器配置
1)配置原slave服务器/etc/my.cnf文件(红字为添加内容)
server-id = 2 从服务器ID号,不要和主ID相同
master-host = 192.168.1.1 指定主服务器IP地址
master-user = repl 制定在主服务器上可以进行同步的用户名
master-password = 123 密码
master-port = 3306 同步所用的端口
master-connect-retry=60 断点重新连接时间
replicate-ignore-db=mysql 屏蔽对mysql库的同步
replicate-do-db=db1 同步数据库名称
log-bin=/var/log/mysql/updatelog 设定生成log文件名
binlog-do-db=db1 设置同步数据库名
binlog-ignore-db=mysql 避免同步mysql用户配置,以免不必要的麻烦

2)重新启动mysql服务,创建一个同步专用账号
输入密码 ,就进入到mysql命令行中了,一般刚装好的没有密码。
[root@node1 ~]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 5.0.22
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>

mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT,RELOAD,SUPER ON *.* TO 'replication'@'192.168.1.2' IDENTIFIED BY '123456';
#给与从服务器用户replication的同步权限
mysql> Grant ALL PRIVILEGES ON *.* TO li@'%' IDENTIFIED BY '123456';
#如果需要的话添加管理用户,通过mysql的客户端来测试同步的情况
mysql>Flush privileges;
#刷新权限,使设置生效

b、 修改原master主服务器的my.cnf,添加如下内容(红色为添加部分)

log-bin=mysql-bin 启动二进制日志系统
binlog-do-db=db1 二进制需要同步的数据库名
server-id = 1 本机数据库ID 标示为主
log-bin=/var/log/mysql/updatelog #设定生成log文件名
binlog-ignore-db=mysql # 避免同步mysql用户配置,以免不必要的麻烦
master-host = 192.168.1.2 设置从原slave数据库同步更新
master-user = repl 更新用户
master-password = 123 密码
master-port = 3306 端口
replicate-do-db=test 需要更新的库
  

启动mysql服务
[root@node1 ~]#service mysqld restart
在node2服务器执行MySQL命令符下:
mysql> show master status;

看看有无作为主服务器的信息
+------------------+----------+-------------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+-------------------+------------------+
| updatelog.000028 | 313361 |test | mysql |
+------------------+----------+-------------------+------------------+
在node1服务器执行MySQL命令下:
[root@node1 ~]#mysql                           #进入mysql命令行
mysql> slave stop;            #先停止slave服务
mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.2',MASTER_USER='replication',MASTER_PASSWORD='123456',MASTER_PORT=3306MASTER_LOG_FILE='updatelog.000028',MASTER_LOG_POS=313361;

#根据上面主服务器的show master status的结果,进行从服务器的二进制数据库记录回归,达到同步的效果
mysql> slave start;   #启动从服务器同步服务
c、 测试
1)在node1服务器上进入mysql命令行
[root@node1 ~]#mysql     
mysql>SHOW SLAVE STATUS\
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
此处Slave_IO_Running ,Slave_SQL_Running 都应该是yes,表示从库的I/O,Slave_SQL线程都正确开启.
表明数据库正在同步。
2)在node2服务器上进入mysql命令行,用 show slave status;查看
[root@node1 ~]#mysql     
mysql>SHOW SLAVE STATUS\
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
此处Slave_IO_Running ,Slave_SQL_Running 都应该是yes,表示从库的I/O,Slave_SQL线程都正确开启.表明数据库正在同步。
3)这里我找到了一个mysql的客户端。利用在mysql上建立的管理用户登陆数据库,可以直接在表中写入值,去另一个数据库上看能不能刷新出来,在那里数据库上写入的数据。下面可以下载.

http://colderboy.blog.违规广告.com/485582/107836
http://colderboy.blog.违规广告.com/485582/107836

[ 本帖最后由 liyihongcug 于 2009-8-5 11:39 编辑 ]

使用道具 举报

回复
论坛徽章:
0
16#
发表于 2009-8-13 12:48 | 只看该作者
我的实践证明:如果只是实现mysql实时复制,绝对不需要心跳。

使用道具 举报

回复
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
17#
 楼主| 发表于 2010-5-6 20:55 | 只看该作者
实现原理

通过Linux HA 软件 heartbeat 实现IP的自动漂移,即当一台服务器宕机后,浮动IP(整个的对外IP )自动漂移到另外一台服务器。
通过Mysql自身的replication 实现不同机器上多个数据库的同步

整体性能

此方案将会降低MYSQL 1%左右的性能,可用性及数据安全性将大有提高,同时服务器的切换对终端使用者是透明的,终端应用不需要进行更改。

所需硬件

安装有双网卡的配置大致相同的服务器或工作机两台(测试而已,用Vmware虚拟吧)
一条交叉网线(用于双机对连的心跳线)

所需软件

Linux HA 软件 heartbeat (只支持两个节点)
软件主页:http://www.linux-ha.org/

Mysql
软件主页:www.mysql.com

实现步骤

一、设置硬件环境:

Node1:
        计算机名:RHEL1
        eth0    : 192.168.168.1/255.255.255.0
        eth1    : 10.0.0.1/255.0.0.0 (用于心跳)
Node2:
        计算机名:RHEL2
        eth0    : 192.168.168.2/255.255.255.0
        eth1    : 10.0.0.2/255.0.0.0 (用于心跳)

Node1和Node2的eth0分别连接到你的交换机
Node1和Node2的eth1之间用心跳线直连起来,做心跳

二、安装MYSQL

   在每个节点上分别安装mysql,不会装的看下面安装步骤或是参考其它资料

   1.获取软件源码包
   wget

  http://mysql.linuxforum.net/Down ... mysql-4.0.20.tar.gz
   2.解压缩源码包
   tar -zxvf mysql-4.0.20.tar.gz
   cd mysql-4.0.20
   3.在linux系统中添加运行Mysql的用户和组
   groupadd mysql
   useradd -g mysql -d /var/lib/mysql -s /sbin/nologin mysql
   4.配置编译参数
   ./configure --prefix=/usr --localstatedir=/var/lib/mysql
   5.编译并安装
   make
   make install
   6.装载原始授权到数据库
   ./scripts/mysql_install_db
   7.copy配置文件到/etc目录
   cp ./support-files/my-small.cnf /etc/my.cnf
   8.copy启动脚本到资源目录
   cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
   9.添加mysql服务
   chmod +x /etc/rc.d/init.d/mysqld
   chkconfig --add mysqld
(chkconfig --list mysqld 查看状态,默认在运行级2.3.4.5是ON的,如果运行级3是Off,则执行chkconfig --level 3 mysqld on)
   10.更改目录属主
   chown -R mysql.mysql /var/lib/mysql
   11.启动mysql
   service mysqld start
   12.设置mysql root用户密码
   mysql -u root (登入mysql,以下操作在mysql命令行下进行)
   mysql>set password forroot@localhost=password('yourpassword'); (设置从本地主机登录的root用户密码)
   mysql>use mysql;
   mysql>delete from user where user='' ; (删除匿名用户)
   mysql>delete from user where host<>'localhost' ; (只充许从localhost登录)
   mysql>flush privileges ; (使更改生效)
   mysql>\q (退出mysql命令行)

   至此,Mysql基本安装完毕。

三、设置Mysql Replication

   以下步骤在Node1上操作

   1.增加一用于数据库同步的用户replicate
  
   mysql -u root -p (执行后提示输入密码,正确输入mysql root用户密码后,登入mysql,以下操作在mysql命令行下进行)

   mysql>GRANT REPLICATION SLAVE ON *.* TOreplicate@10.0.0.2IDENTIFIED BY 'password' ;
   (授与从10.0.0.2主机上登录用户replicate数据复制权限,4.02版本以前用:GRANT FILE ON *.* TOreplicate@10.0.0.2IDENTIFIED BY 'password'

   mysql>flush privileges; (使权限生效,这步可不做,因为过会要重启mysql)

   mysql>\q (退出mysql命令行界面)
  
   2.停止mysql服务
   service mysqld stop

   3.更改Mysql配置文件/etc/my.cnf

   vi /etc/my.cnf

   在[mysqld]一节中增加以下内容


   server-id=1      #服务器的标识 1~2^32-1,不同主机设为不同的值,否则可能会出现不可预料的错误

   #以下内容为作为Master的配置,如果此服务器只作为Slave,注释掉以下各行
   log-bin                        #允许二进制更新日志
   binlog-do-db=dbname            #指定做二进制更新日志的数据库,多个数据库用多条此语句,如,还有anotherdb,去掉下行的注释
   #binlog-do-db=anotherdb
   binlog-ignore-db=dbname        #指明数据库dbname不做二进制更新日志,没有则注释掉此行,多个数据库用多条此语句,如,还有anotherigdb,去掉下行的注释
   #binlog-ignore-db=anotherigdb

   #以下内容为作为Slave的配置,如果此服务器只作为Master,注释掉以下各行
   master-host=10.0.0.2           #Master服务器地址
   master-user=replicate          #Master服务器上用于replication的用户,必须有replication slave权限
   master-password=replicatepass #Master服务器上用于replication的用户的密码      
   master-port=3306               #Master服务器的TCP端口
   master-connect-retry=60        #如果连接Master服务器失败,重试连接的间隔,以秒为单位
   replicate-do-db=dodbname      #指明要复制的数据库,多个数据库用多条此语句,如,还有anotherdb,去掉下行的注释
   #replicate-do-db=anotherdb
   replicate-ignore-db=igdbname   #指明不做复制的数据库,多个数据库用多条此语句,如,还有anotherigdb,去掉下行的注释
   #replicate-ignore-db=anotherigdb

   4.将要进行复制的数据库打包传到Node2
  
   tar -cvf /tmp/mysql-thisdb-snapshot.tar /var/lib/mysql/thisdb (将要进行复制的thisdb数据库打包)

   scp /tmp/mysql-thisdb-snapshot.tarroot@10.0.0.2:/tmp/ (将mysql-thisdb-snapshot.tar复制到Node2的/tmp目录)

   5.启动Mysql

   service mysqld start

   至此,Node1上的Mysql设置完毕,以下操作在Node2上完成
     
   1.增加一用于数据库同步的用户replicate
  
   mysql -u root -p (执行后提示输入密码,正确输入mysql root用户密码后,登入mysql,以下操作在mysql命令行下进行)

   mysql>GRANT REPLICATION SLAVE ON *.* TOreplicate@10.0.0.1IDENTIFIED BY 'password' ;
   (授与从10.0.0.1主机上登录用户replicate数据复制权限,4.02版本以前用:GRANT FILE ON *.* TOreplicate@10.0.0.1IDENTIFIED BY 'password'

   mysql>flush privileges; (使权限生效,这步可不做,因为过会要重启mysql)

   mysql>\q (退出mysql命令行界面)
  
   2.停止mysql服务
   service mysqld stop

   3.更改Mysql配置文件/etc/my.cnf

   vi /etc/my.cnf

   在[mysqld]一节中增加以下内容


   server-id=2      #服务器的标识 1~2^32-1,不同主机设为不同的值,否则可能会出现不可预料的错误

   #以下内容为作为Master的配置,如果此服务器只作为Slave,注释掉以下各行
   log-bin                        #允许二进制更新日志
   binlog-do-db=dbname            #指定做二进制更新日志的数据库,多个数据库用多条此语句,如,还有anotherdb,去掉下行的注释
   #binlog-do-db=anotherdb
   binlog-ignore-db=dbname        #指明数据库dbname不做二进制更新日志,没有则注释掉此行,多个数据库用多条此语句,如,还有anotherigdb,去掉下行的注释
   #binlog-ignore-db=anotherigdb

   #以下内容为作为Slave的配置,如果此服务器只作为Master,注释掉以下各行
   master-host=10.0.0.1           #Master服务器地址
   master-user=replicate          #Master服务器上用于replication的用户,必须有replication slave权限
   master-password=replicatepass #Master服务器上用于replication的用户的密码      
   master-port=3306               #Master服务器的TCP端口
   master-connect-retry=60        #如果连接Master服务器失败,重试连接的间隔,以秒为单位
   replicate-do-db=dodbname      #指明要复制的数据库,多个数据库用多条此语句,如,还有anotherdb,去掉下行的注释
   #replicate-do-db=anotherdb
   replicate-ignore-db=igdbname   #指明不做复制的数据库,多个数据库用多条此语句,如,还有anotherigdb,去掉下行的注释
   #replicate-ignore-db=anotherigdb

   4.将先前从Node1上发过来的数据库的打包文件解压并替换掉原有文件,并确保属主及权限正确
  
   cd /var/lib/mysql
   tar -xvf /tmp/mysql-thisdb-snapshot.tar
   chown -R mysql.mysql thisdb
   chmod 700 thisdb
   chmod 660 thisdb/*

   5.启动Mysql

   service mysqld start

   至此Node2上的Mysql设置完毕

   在Mysql中可通过以下命令来查看主从状态
  
   show master status 查看master状态
   show slave status    查看slave状态
   show processlist \G 查看当前进程
   stop slave   暂时停止slave进程
   start slave   开始slave进程
  
   其它相关命令及详细配置参数请自行查阅Mysql在线文档

四、安装配置Linux HA软件heartbeat

在每个节点上分别安装heartbeat

1.安装支持包(linux-ha.org站点提供下载)
Linux的版本不同,RPM文件名可能会不同,请选择相应版本的RPM
rpm -iUvh libnet-1.1.0-1.rh.el.1.i386.rpm  
rpm -iUvh ipvsadm-1.21-1.rh.el.1.i386.rpm
rpm -iUvh perl-Parse-RecDescent-1.80-1.rh.el.um.1.noarch.rpm
rpm -iUvh perl-Mail-IMAPClient-2.2.7-1.rh.el.um.1.noarch.rpm
rpm -iUvh perl-Net-SSLeay-1.23-1.rh.el.um.1.i386.rpm
rpm -iUvh perl-Digest-SHA1-2.01-10.i386.rpm
rpm -iUvh perl-Digest-HMAC-1.01-11.noarch.rpm
rpm -iUvh perl-Authen-SASL-2.03-1.rh.el.um.1.noarch.rpm
rpm -iUvh perl-Convert-ASN1-0.16-2.rh.el.um.1.noarch.rpm
rpm -iUvh perl-IO-Socket-SSL-0.92-1.rh.el.um.1.noarch.rpm
rpm -iUvh perl-XML-NamespaceSupport-1.08-1.rh.el.um.1.noarch.rpm
rpm -iUvh perl-XML-SAX-0.12-1.rh.el.um.1.noarch.rpm
rpm -iUvh perl-ldap-0.2701-1.rh.el.um.1.noarch.rpm

2.按装heartbeat
以RPM方式按装(推荐),Linux的版本不同,RPM文件名可能会不同,请选择相应版本的RPM
rpm -iUvh heartbeat-pils-1.3.0-1.rh.el.3.0.i386.rpm
rpm -iUvh heartbeat-stonith-1.3.0-1.rh.el.3.0.i386.rpm
rpm -iUvh heartbeat-ldirectord-1.3.0-1.rh.el.3.0.i386.rpm
rpm -iUvh heartbeat-1.3.0-1.rh.el.3.0.i386.rpm

3.Copy配置文件到/etc/ha.d目录 (只在一个节点上做即可,所有配置完成后copy到其它节点)
cp /usr/share/doc/heartbeat-1.3.0/ha.cf /etc/ha.d/
cp /usr/share/doc/heartbeat-1.3.0/haresources /etc/ha.d/
cp /usr/share/doc/heartbeat-1.3.0/authkeys /etc/ha.d/

4.配置/etc/ha.d/ha.cf (只在一个节点上配即可,配好后copy到其它节点)

vi /etc/ha.d/ha.cf

按如下内容进行修改(文件中#开头的行为注释行,更多的选项及选项的详细说明请参考文件中的注释及相关文档)

debugfile /var/log/ha-debug   #写debug信息到这个文件中
logfile /var/log/ha-log       #写运行日志到这个文件中
keepalive 2                   #设置心跳时间为2秒
deadtime 30                   #设置离最近一次心跳多长时间没有心跳时表明节点失败
warntime 10                   #设置离最近的一次心跳多长时间没有心跳时发出警告
initdead 120                  #机器重启动或是刚开机时,网络能正确开始工作的时间,最小设置为deadtime的两倍
udpport 694                   #bcast/ucast方式心跳通讯所用的UDP端口
#baud   19200                 #串口的波特率,使用串口作心跳时需设置
#serial /dev/ttyS0            #串口设备名,使用串口作心跳时需设置
bcast   eth1                  #使用哪一个设备(网卡)做心跳
#bcast eth1 eth2             #使用多个设备(网卡)做心跳时的设置
auto_failback on              #当主节点从失败状态恢复时是否恢复其主节点的身份,即应用是否返回到其自身运行
                                #on 返回
                                #off 不返回,其它节点继续作为主节点运行
                                #legacy 当所有节点都不支持自动返回时,将自身设为自动返回
node    RHEL1                 #节点的主机名或域名,需在/etc/hosts文件或

DNS服务器中设置
node    RHEL2                 #所有节点都以node开始的行列出
ping    192.168.168.254       #ping节点,不属于cluster内的节点,通常选一台路由器或交换机作为Ping节点,
                                #ipfail模块通过此节点来验证网络的连通性,可指定多个Ping节点,如:
#ping   192.168.168.253 192.168.0.254 ns1.rhel.com ping.linux-ha.org

respawn hacluster /usr/lib/heartbeat/ipfail   #由heartbeat调用并监视ipfail模块                        

5.配置/etc/ha.d/haresources (只在一个节点上配即可,配好后copy到其它节点)

vi /etc/ha.d/haresources

按如下内容进行修改(文件中#开头的行为注释行,更多的选项及选项的详细说明请参考文件中的注释及相关文档)

RHEL1 192.168.168.103 mysqld #设置heartbeat管理的资源或服务
                                #格式为:主节点主机名或域名 浮动IP 服务名
                                #主节点主机名或域名为ha.cf中node行中指定的任一节点
                                #浮动IP 为对外提供访问的IP,主节点失败后会自动漂移到其它节点,继续对外提供服务.
                                #服务名 为 heartbeat管理的服务

#注意,此文件内容所有节点必须保持一致。

6.配置/etc/ha.d/authkeys (只在一个节点上配即可,配好后copy到其它节点)

vi /etc/ha.d/authkeys

按如下内容进行修改(文件中#开头的行为注释行,更多的选项及选项的详细说明请参考文件中的注释及相关文档)

auth 1    #设置认证方式
1 crc     #格式为:auth <number>
#auth 2    # <number> <authmethod>

[<authkey>]
#2 md5 Hello!    #如果是用心跳是用交叉线直接对连两个节点,用crc方式即可,CPU占用最少
#auth 3         #如果心跳位于不安全的网络,如通过共用交换机连接节点,则选用sha1或md5
#3 sha1 HI!     #sha1占用CPU资源更多,但是更安全,md5安全性及CPU占用率居中
                   #sha1和md5都需要提供认证KEY,即用来加密的KEY

#注意,此文件权限必须设置为600

7.copy配置文件到其它节点

scp /etc/ha.d/ha.cf /etc/ha.d/haresources /etc/ha.d/authkeysroot@RHEL2:/etc/ha.d/

8.分别设置各节点/etc/ha.d/authkeys文件权限

chmod 600 /etc/ha.d/authkeys   (文件权限必须设置为600,否则heartbeat不能正常启动)

9.在每个节点上启动heartbeat

service heartbeat start

五、测试

请自行模拟各种宕机情况,进行测试,这里不一一例举。

总结

此方案在Redhat Linux Enterprise Server 3.0 上测试通过,

其它系统请参照本文自行测试。(完)

使用道具 举报

回复
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
18#
 楼主| 发表于 2010-5-6 20:56 | 只看该作者
Mysql HA实现MYSQL的高可用
2008-10-10 21:59:28
 标签:mysql ha   [推送到技术圈]

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://colderboy.blog.违规广告.com/485582/104872
一、背景
当前大多网站采用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 )自动漂移到另外一台服务器。
1
通过Mysql自身的replication 实现不同机器上多个数据库的同步整体性能此方案将会降低MYSQL 1%左右的性能,可用性及数据安全性将大有提高,同时服务器的切换对终端使用者是透明的,终端应用不需要进行更改。
所需硬件
安装有双网卡的配置大致相同的服务器或工作机两台 一条交叉网线(用于双机对连的心跳线)

所需软件

Linux HA 软件 heartbeat (只支持两个节点),安装盘里集成的有这个软件的rpm包
软件主页:http://www.linux-ha.org/
Mysql软件
软件主页:http://www.mysql.com

实现步骤

一、设置硬件环境:如下表:
2
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&gt; select * from data;
+-------+---------+-----------+
| name | address | phone |
+-------+---------+-----------+
| jhone | beijing | 138000000 |
+-------+---------+-----------+
1 row in set (0.05 sec)

三、设置Mysql Replication
3.1、在primary主机上mysql的设置
1)增加一用于数据库同步的用户replicate
mysql -u root -p
(执行后提示输入密码,正确输入mysql root用户密码后,登入mysql,以下操作在mysql命令行下进行)
mysql>GRANT REPLICATION SLAVE,REPLICATION CLIENT,RELOAD,SUPER ON *.* TO 'replicate'@'10.1.1.2' IDENTIFIED BY 'you password';
(授与从10.0.0.2主机上登录用户replicate数据复制权限,4.02版本以前用:GRANT FILE ON *.* TO replicate@10.0.0.1 IDENTIFIED BY 'password'
mysql>flush privileges;
使权限生效,这步可不做,因为过会要重启mysql)
mysql&gt; exit
(退出mysql命令行界面)
2) 停止mysql服务
service mysqld stop
3)建立用于更新日志的目录,并给于mysql的权限
[root@primary ~]# mkdir /var/log/mysql
[root@primary ~]# chown mysql.mysql /var/log/mysql/
4)更改Mysql配置文件/etc/my.cnf 没有的添加上去
vi /etc/my.cnf
3
5)将要进行复制的数据库打包传到server服务器上
[root@primary mysql]# tar -zcvf /root/db.tar test/ (将要进行复制的test数据库打包)
[root@primary ~]# scp db.tar root@10.1.1.2:/var/lib/mysql/ (将.tar复制到server的/var/lib/mysql/目录)
6)启动Mysql
service mysqld start
至此,primary上的Mysql设置完毕,
3.2、在backup主机上mysql的配置
1)增加一用于数据库同步的用户replicate
mysql -u root -p (执行后提示输入密码,正确输入mysql root用户密码后,登入mysql,以下操作在mysql命令行下进行)
GRANT REPLICATION SLAVE,REPLICATION CLIENT,RELOAD,SUPER ON *.* TO 'replicate'@'10.1.1.1' IDENTIFIED BY 'you password';
(授与从10.0.0.1主机上登录用户replicate数据复制权限,4.02版本以前用:GRANT FILE ON *.* TO replicate@10.0.0.1 IDENTIFIED BY 'password'
mysql>flush privileges; (使权限生效,这步可不做,因为过会要重启mysql)
mysql&gt; exit (退出mysql命令行界面)
2)停止mysql服务
service mysqld stop
3)更改Mysql配置文件/etc/my.cnf
vi /etc/my.cnf
4
4)将先前从primary上发过来的数据库的打包文件解压并替换掉原有文件,并确保属主及权限正确
cd /var/lib/mysql
tar -xvf /db.tar
chown -R mysql.mysql test
chmod 700 test
chmod 660 test
5)启动Mysql服务
service mysqld start
至此server服务器上的Mysql设置完毕
3.3、查询配置
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;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| updatelog.000001 | 614 | test | mysql |
+------------------+----------+--------------+------------------+
显示(不同主机结果不同)
用show slave status\G;  看一下从服务器的同步情况
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
主要是看这两行,如果都是yes,那代表已经在同步
更多详细信息以及参数设置,请参考MySQL 5.0 Manual手册.

四、安装配置Linux HA软件heartbeat
在每个节点上分别安装heartbeat
1、安装支持包(linux-ha.org站点提供下载)
Linux的版本不同,RPM文件名可能会不同,请选择相应版本的RPM
rpm -iUvh libnet-*
rpm -iUvh perl-Parse-RecDescent-*
rpm -iUvh perl-Mail-IMAPClient-*
rpm -iUvh perl-Net-SSLeay-*
rpm -iUvh perl-Digest-SHA1-*
rpm -iUvh perl-Digest-HMAC-*
rpm -iUvh perl-Authen-SASL-*
rpm -iUvh perl-Convert-ASN1-*
rpm -iUvh perl-IO-Socket-SSL-*
rpm -iUvh perl-XML-NamespaceSupport-*
rpm -iUvh perl-XML-SAX-*
rpm -iUvh perl-ldap-*
2、按装heartbeat
以RPM方式按装(推荐),Linux的版本不同,RPM文件名可能会不同,请选择相应版本的RPM
rpm -iUvh heartbeat-pils-2.1.3-1.rh.el.3.0.i386.rpm
rpm -iUvh heartbeat-stonith-2.1.3-1.rh.el.3.0.i386.rpm
rpm -iUvh heartbeat-ldirectord-2.1.3-1.rh.el.3.0.i386.rpm
rpm -iUvh heartbeat-2.1.3-1.rh.el.3.0.i386.rpm
3、Copy配置文件到/etc/ha.d目录 (只在一个节点上做即可,所有配置完成后copy到其它节点)
cp /usr/share/doc/heartbeat-2.1.3 /ha.cf /etc/ha.d/
cp /usr/share/doc/heartbeat-2.1.3/haresources /etc/ha.d/
cp /usr/share/doc/heartbeat-2.1.3/authkeys /etc/ha.d/
3.Copy配置文件到/etc/ha.d目录 (只在一个节点上做即可,所有配置完成后copy到其它节点)
cp /usr/share/doc/heartbeat-2.1.3/ha.cf /etc/ha.d/
cp /usr/share/doc/heartbeat-2.1.3/haresources /etc/ha.d/
cp /usr/share/doc/heartbeat-2.1.3/authkeys /etc/ha.d/
安装好HA之后就开始配置
4、配置/etc/ha.d/ha.cf (只在一个节点上配即可,配好后copy到其它节点)
vi /etc/ha.d/ha.cf
按如下内容进行修改(文件中#开头的行为注释行,更多的选项及选项的详细说明请参考文件中的注释及相关文档)
5
5、配置/etc/ha.d/haresources (只在一个节点上配即可,配好后copy到其它节点)
按如下内容进行修改(文件中#开头的行为注释行,更多的选项及选项的详细说明请参考文件中的注释及相关文档)
vi /etc/ha.d/haresources在配置文件中添加如下一行
primary 192.168.0.8 mysqld #设置heartbeat管理的资源或服务
#格式为:主节点主机名或域名 浮动IP 服务名
#主节点主机名或域名为ha.cf中node行中指定的任一节点
#浮动IP 为对外提供访问的IP,主节点失败后会自动漂移到其它节点,继续对外提供服务.
#服务名 为 heartbeat管理的服务
#注意,此文件内容所有节点必须保持一致。
6、配置/etc/ha.d/authkeys (只在一个节点上配即可,配好后copy到其它节点)
vi /etc/ha.d/authkeys
按如下内容进行修改(文件中#开头的行为注释行,更多的选项及选项的详细说明请参考文件中的注释及相关文档)
6
#sha1和md5都需要提供认证KEY,即用来加密的KEY
#注意,此文件权限必须设置为600。如果不权限不是600HA将不能正常启动。
7、copy配置文件到backup服务器上
#/scp /etc/ha.d/ha.cf /etc/ha.d/haresources /etc/ha.d/authkeys root@10.1.1.2:/etc/ha.d/
8、分别设置各节点/etc/ha.d/authkeys文件权限
#/chmod 600 /etc/ha.d/authkeys (文件权限必须设置为600,否则heartbeat不能正常启动)
9、设置主服务器和备份服务器时间同步
虽然Heartbeat不要求在两个服务器上使系统钟同步主要和备份服务器,但是系统时钟应该在的几十秒之内,否则在高可用性服务的环境下会产生故障。 在在两个系统启动Heartbeat之前,你应该人工检查并且放置系统时间(使用date命令)。关于一种更好的长期的解决的方法你应该在两个系统上使用NTP软件同步钟。     
10、在每个节点上启动heartbeat
#/service heartbeat start 或者 #/etc/init.d/heartbeat start

五、测试
1、 主服务器的mysql服务应该被heartbeat启动,同时heartbeat为主节点设置IP地址192.168.0.8。使用ifconfig eth0:0可以看到如下信息
Eth0:0 Link encap:Ethernet HWaddr 00:0C:29:22:7E:15
inet addr:192.168.0.8 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe22:7e15/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:324 errors:0 dropped:0 overruns:0 frame:0
TX packets:34 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:43369 (42.3 KiB) TX bytes:7878 (7.6 KiB)
2、 查看主服务器日志信息
可以使用命令查看日志文件:
#tail -f /var/log/messages
此时会发现出现如下信息:   
primary heartbeat[2886]: info: Heartbeat restart on node backup
primary heartbeat[2886]: info: Link backup:eth1 up.
primary heartbeat[2886]: info: Node backup: status up
primary heartbeat: info: Running /etc/ha.d/rc.d/status status
primary heartbeat: info: Running /etc/ha.d/rc.d/ifstat ifstat
primary heartbeat[2886]: info: Node backup: status active
primary heartbeat: info: Running /etc/ha.d/rc.d/status status
可以使用tcpdump命令查看心跳广播是否到达两个服务器节点。
#tcpdump -i all -n -p udp port 694
3、 停止主服务器的Heartbeat
停止主服务器的Heartbeat,使用命令:
#/etc/init.d/heartbeat stop 或者 #service heartbeat stop
现在使用ifconfig eth0:0可以看到如下信息:
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:E1:14:84
inet addr:192.168.0.8 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fee1:1484/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:73 errors:0 dropped:0 overruns:0 frame:0
TX packets:39 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:8218 (8.0 KiB) TX bytes:8147 (7.9 KiB)
这说明浮动IP已经切换到backup服务器上了。
此时可以使用命令查看backup服务器日志文件:
#tail -f /var/log/messages
此时会发现出现如下信息:
backup heartbeat[4950]: WARN: node primary: is dead
backup heartbeat[4950]: info: Link primary:eth1dead.
backup heartbeat: info: Running /etc/ha.d/rc.d/status status
backup heartbeat: info: Running /etc/ha.d/rc.d/ifstat ifstat
backup heartbeat: info: Taking over resource group test
*** /etc/ha.d/resource.d/test called with status
backup heartbeat: info: Acquiring resource group:
primary.
com test
backup heartbeat: info: Running /etc/ha.d/resource.d/test start
*** /etc/ha.d/resource.d/test called with start
backup heartbeat: info: mach_down takeover complete.
在这个过程中,使用ping命令进行不间断监测,可以发现集群IP地址一直处于可通状态,并没有产生任何阻塞或延迟,所以,在关闭处于激活状态的heartbeat的情况下,双机系统可以实现无缝切换。

本文出自 “badboy” 博客,请务必保留此出处http://colderboy.blog.违规广告.com/485582/104872
本文出自 违规广告.COM技术博客

使用道具 举报

回复
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
19#
 楼主| 发表于 2010-5-6 20:57 | 只看该作者
http://colderboy.blog.违规广告.com/485582/104872
心跳线

字体大小:大 | 中 | 小 2007-04-25 16:38 - 阅读:554 - 评论:0
心跳线是用于连接A、B两台服务器间的网线。在这两台服务器A、B中,A为工作机,B为备份机,它们之间通过一根心跳线来连接。一般在服务器上都配有两块网卡,其中一块专门用于两台服务器(节点)间的通讯。安装在服务器上的软件通过心跳线来实时监测对方的运行状态。一旦正在工作的主机A因为各种硬件故障,如电源失效、主要部件失效或者启动盘失效等导致系统发生故障,心跳线会反映给互为备份的另外一台主机,主机B可以立即投入工作。这样可以在最大限度上保证网络的正常运行。这也称为“心跳检测”。心跳线主要利用一条RS-233检测链路来完成,采用Ping方式检测验证系统Down机检测的准确性。

使用道具 举报

回复
论坛徽章:
15
2009新春纪念徽章
日期:2009-01-04 14:52:28ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28茶鸡蛋
日期:2011-06-09 12:05:152011新春纪念徽章
日期:2011-02-18 11:43:332010广州亚运会纪念徽章:网球
日期:2010-12-01 20:55:192010广州亚运会纪念徽章:藤球
日期:2010-11-22 15:43:49ITPUB9周年纪念徽章
日期:2010-10-08 09:32:252010年世界杯参赛球队:朝鲜
日期:2010-06-29 15:28:312010新春纪念徽章
日期:2010-03-01 11:06:12生肖徽章2007版:猪
日期:2009-11-13 17:36:11
20#
发表于 2010-5-7 17:31 | 只看该作者
学习

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表