191145692 发表于 2015-11-19 14:20:03

mysql集群2-双主故障转移keepalived

Mysql双主故障转移
架构图

说明:
Mysql1(.3)已存在使用中数据库实例已经开始binlog
Mysql2(.4)后添加.3冷备还原

目的:
实现异常宕机或mysql服务异常中断时正常提供对外服务
缺点:正常情况下只有一台服务器提供服务,当出现故障时候才会转移
不可用情况:服务器hang
环境:
2台64位centos6.3虚拟机部署mysql5.6.19serverrpm安装包

实施步骤:

[*]配置双主备份

[*]首先配置主从见文档mysql读写分离
[*]授权mysql1访问mysql2的权限
Mysql2:
grantall privileges on *.* to 'backup'@'192.168.137.3' identified by 'backup'; flush privileges;
show master status;--记下file和position
mysql1:
change master to master_host='192.168.137.4',master_user='backup',master_password='backup',master_log_file='mysql-bin.000002',master_log_pos=120;
start slave;
show slave status \G


[*]安装编译keeepalived配置故障转移


[*]下载http://www.keepalived.org/download.html

[*]解压tar -zxvf keepalived-1.2.13.tar.gz
[*]安装依赖软件包
yum -y install gcc gcc-c++ gcc-g77 ncurses-devel bisonlibaio-devel cmake libnl* libpopt* openssl-devel

[*]cd keepalived-1.2.13
./configure--prefix=/usr/local/keepalived
Make
Make install
---同上分别在两台服务器上面安装

[*]配置keepalived,两台服务器
Mysql2:
vi/usr/local/keepalived/etc/keepalived/keepalived.conf
!Configuration File for keepalived

global_defs {
router_id mysql-ha
}

vrrp_instance VI_1 {
   state BACKUP
   interface eth1
   virtual_router_id 201
   priority 90 #slave
   advert_int 1

   authentication {
       auth_type PASS
       auth_pass mysql
   }
   virtual_ipaddress {
       192.168.137.2
   }
}

virtual_server 192.168.137.2 3306 {
   delay_loop 2
   lb_algo rr
   lb_kind DR
   persistence_timeout 60
   protocol TCP
   real_server 192.168.137.4 3306 {
       weight 1
       notify_down /usr/local/keepalived/etc/keepalived/mysql.sh
       TCP_CHECK {
         connect_port 3306
         connect_timeout 3
         nb_get_retry 2
         delay_before_retry 1
       }
   }
}
Mysql1:
修改interface eth1interface eth0
    prority100
       real_server192.168.137.1
Mysql1修改完后如下
! Configuration File for keepalived

global_defs {
router_id mysql-ha
}

vrrp_instance VI_1 {
   state BACKUP
   interface eth0
   virtual_router_id 201
   priority 100 #master
   advert_int 1
   nopreempt #
   authentication {
       auth_type PASS
       auth_pass mysql
   }
   virtual_ipaddress {
       192.168.137.2
   }
}

virtual_server 192.168.137.2 3306 {
   delay_loop 2
   lb_algo rr
   lb_kind DR
   persistence_timeout 60
   protocol TCP
   real_server 192.168.137.3 3306 {
       weight 1
       notify_down /usr/local/keepalived/etc/keepalived/mysql.sh
       TCP_CHECK {
         connect_port 3306
         connect_timeout 3
         nb_get_retry 2
         delay_before_retry 1
       }
   }
}

[*]配置停止脚本(两台都需要)
Mysql.sh


#!/bin/bash
pkill keepalived


[*]两台主机上面启动keepalived
/usr/local/keepalived/sbin/keepalived -f/usr/local/keepalived/etc/keepalived/keepalived.conf -D
   
到这里keepalived已经配置完成

[*]测试故障转移
Start.sh


[*]Mysql1服务停止


可以看到mysql1服务停止后可以正常使用


[*]启动mysql1停止mysql2服务
启动myslq1


停止mysql2


可以看到刚才mysql服务是在mysql2上面查询时报错然后再次查询就正常了没有一次已经实现故障转移


[*]Myslq1服务器异常中断


可以看到同上

[*]网络故障


服务在mysql2上面跑停止mysql1时没有影响,当停止mysql2的时候会发出错误然后再次执行正常已经转移到服务已经转移到mysql1上面,现在启动mysql2,我们已经确定服务是在mysql1上面了

[*]停止mysql2网卡模拟网络故障

可以看到mysql2网卡故障没有任何影响
[*]启动mysql2网卡,停掉mysql1

已经自动转移到了mysql2

停止正在服务的mysql1后再mysql2上面插入数据再启动mysql1

可以看到数据正常同步

当正在使用的服务器断网时候会出现无法使用,需要重启另外一台服务器的mysql服务即可正常



在写入数据时候突然断网的时候不是很稳定有时候断一下连接正常,有时候需要重启服务
         版权声明:本文为博主原创文章,未经博主允许不得转载。
页: [1]
查看完整版本: mysql集群2-双主故障转移keepalived