mysql 主从数据加keepalive

接着上一篇《配置mysql数据库的主从同步实验》,本文主要从应用的角度,在两台mysql服务器上部署keepalived服务,可以做到在任意一台mysql服务器故障的情况下,不影响mysql数据库的使用。

应用服务器配置的mysql数据库的地址是一个VIP(业务虚拟地址),这个VIP作为keepalived中的virtual_server地址,keepalived的real_server地址分别是两台mysql数据库服务器的地址。

1、安装keepalived 。在两台服务器依次做以下操作

yum install keepalived -y

2、对keepalived配置文件进行配置。在MySQL-01上进行操作

先将/etc/keepalived/keepalived.conf文件清空,然后将下面内容复制进去:

! Configuration File for keepalived  
global_defs {  
    notification_email {  
    [email protected]  
    }  
    notification_email_from [email protected]
    smtp_server 127.0.0.1  
    smtp_connect_timeout 30  
    router_id MySQL-ha  
}
 
vrrp_instance VI_1 {
    state master      
    interface eth0
    virtual_router_id 51
    priority 100       
    advert_int 1
    nopreempt         
         
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.8.243
    }
}
 
virtual_server 192.168.8.243 3306 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    persistence_timeout 50        
    protocol TCP
    real_server 192.168.8.241 3306 {
        weight 3
        notify_down /var/lib/mysql/killkeepalived.sh  
        TCP_CHECK {
            connect_timeout 10        
            nb_get_retry 3           
            delay_before_retry 3      
            connect_port 3306        
        }
    }
}
在MySQL-02上进行操作:

先将/etc/keepalived/keepalived.conf文件清空,将上面的内容中的:

“    real_server 192.168.8.241 3306 ”  改为:

“   real_server 192.168.8.242 3306 ”

在两台服务器做以下操作 :

vim /var/lib/mysql/killkeepalived.sh

     

#!/bin/sh  

pkill keepalived

     

chmod +x /var/lib/mysql/killkeepalived.sh


3、测试是否可用

创建一个测试用户 :

mysql> grant all privileges on *.* to ‘test‘@‘%‘ identified by ‘123456‘;

mysql> flush privileges;

在MySQL-01上多开一个终端,tailf /var/log/messages,然后再另一个终端启动keepalived服务service keepalived start。

在MySQL-02同样打开一个新的终端查看日志信息,然后启动keepalived

可以通过 ip addr 命令查看keepalived其的VIP是  192.168.8.243

[[email protected] ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 08:00:27:a3:63:54 brd ff:ff:ff:ff:ff:ff
    inet 192.168.8.241/24 brd 192.168.8.255 scope global eth0
    inet 192.168.8.243/32 scope global eth0
    inet6 fe80::a00:27ff:fea3:6354/64 scope link
       valid_lft forever preferred_lft forever

在MySQL-01上手动停掉MySQL服务。同时得到日志信息:

Feb 24 09:22:45 localhost Keepalived_healthcheckers[31710]: TCP connection to [192.168.8.241]:3306 failed !!!
Feb 24 09:22:45 localhost Keepalived_healthcheckers[31710]: Removing service [192.168.8.241]:3306 from VS [192.168.8.243]:3306
Feb 24 09:22:45 localhost Keepalived_healthcheckers[31710]: Executing [/var/lib/mysql/killkeepalived.sh] for service [192.168.8.241]:3306 in VS [192.168.8.243]:3306
Feb 24 09:22:45 localhost Keepalived_healthcheckers[31710]: Lost quorum 1-0=1 > 0 for VS [192.168.8.243]:3306
Feb 24 09:22:45 localhost Keepalived_healthcheckers[31710]: Remote SMTP server [127.0.0.1]:25 connected.
Feb 24 09:22:45 localhost kernel: IPVS: __ip_vs_del_service: enter
Feb 24 09:22:45 localhost Keepalived[31708]: Stopping Keepalived v1.2.13 (03/19,2015)
Feb 24 09:22:45 localhost Keepalived_vrrp[31711]: VRRP_Instance(VI_1) sending 0 priority
Feb 24 09:22:45 localhost Keepalived_vrrp[31711]: VRRP_Instance(VI_1) removing protocol VIPs.
Feb 24 09:22:45 localhost Keepalived_healthcheckers[31710]: Netlink reflector reports IP 192.168.8.243 removed

在MySQL-02上的日志信息如下:

Feb 24 09:22:46 localhost Keepalived_vrrp[31896]: VRRP_Instance(VI_1) Transition to MASTER STATE
Feb 24 09:22:47 localhost Keepalived_vrrp[31896]: VRRP_Instance(VI_1) Entering MASTER STATE
Feb 24 09:22:47 localhost Keepalived_vrrp[31896]: VRRP_Instance(VI_1) setting protocol VIPs.
Feb 24 09:22:47 localhost Keepalived_vrrp[31896]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.8.243
Feb 24 09:22:47 localhost Keepalived_healthcheckers[31894]: Netlink reflector reports IP 192.168.8.243 added
Feb 24 09:22:52 localhost Keepalived_vrrp[31896]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.8.243

在两台服务器上执行ip addr命令查看,发现VIP地址192.168.8.243已经切换到了MySQL-02上。因此也就实现了应用连接数据库的自动切换。

此时可以使用连接MySQL的工具测试一下,虚拟ip地址还是可用的。如下所示:

[[email protected] ~]# mysql -u test -p123456 -h 192.168.8.243
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 243
Server version: 5.1.73-log Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.

mysql>

时间: 02-24

mysql 主从数据加keepalive的相关文章

mysql主从数据对比工具简介

1 Checksum 1.1 checksum原理 checksum table的原理是对表中的数据进行一行一行的较验和计算,在执行checksum命令时,表会被加一个读锁(read lock),因此对于大表,这是一个很耗时的过程. 读锁:又叫S锁/共享锁:当MySQL的一个进程为某一表开启读锁之后,其他的进程包含自身都没有权利去修改这表表的内容.但是所有的进程还是可以读出表里面的内容的.但是不能实现更新. 1.2 语法 在数据库中输入checksum  table   库.表: 说明:chec

使用maatkit工具检查并同步mysql主从数据

Maatkit是一组开源工具包,为mysql的日常管理提供了帮助.其中mk-table-checksum可以用来检测master和slave的表结构和数据是否一致.同时,通过mk-table-sync工具,在发现主从数据不一致时,可以修复不同步的数据. 实验环境: Master:192.168.189.143:3306 Slave:192.168.189.144:3306 1:安装Maatikit工具. 安装perl环境:   #wget http://packages.sw.be/perl-T

MySQL 主从数据同步配置

1:需要两台MySQL服务器,如:master:192.168.1.120slave:192.168.1.121确定MySQL的版本是相同的,可以登录到MySQL CLI界面,输入:select version();此实验MySQL版本是5.6的 2:主服务器要授权从服务器,登录到master的MySQL CLI,输入:grant all on *.* to "test"@"%" identified by '123456'; 3:配置主从服务器的bin-log日志

MySQL主从数据同步延时分析

一.MySQL数据库主从同步延迟                                                              要了解MySQL数据库主从同步延迟原理,我们先从MySQL的数据库主从复制原理说起: MySQL的主从复制都是单线程的操作,主库对所有DDL和DML产生的日志写进binlog,由于binlog是顺序写,所以效率很高. Slave的IO Thread线程从主库中bin log中读取取日志. Slave的SQL Thread线程将主库的DDL和D

mysql 主从数据不一致 Slave_SQL_Running: No 解决方法

在slave服务器上通过如下命令 mysql> show slave status\G; 显示如下情况: Slave_IO_Running: Yes Slave_SQL_Running: No 表示slave不同步 解决方法一(忽略错误,继续同步): 1.先停掉slave mysql> stop slave; 2.跳过错误步数,后面步数可变 mysql> set global sql_slave_skip_counter=1; 3.再启动slave mysql> start sla

mysql 之 主从加 keepalive 在生产系统应用(zabbix)

我们的生产平台上使用了zabbix,zabbix使用的数据库是mysql,并且数据量还比较大,每个月产生的数据文件有10G以上,经过上篇<mysql 之 主从数据加keepalive>的操练之后,具备了向生产系统运用的条件,选用生产系统的zabbix(开源监控平台) 练手非常合适. 原系统是单机系统, zabbix采用的是linux+apache+mysql+PHP环境,典型的LAMP,现在我们需要做的就是将mysql变成 主从双 机,并且在主从双机上安装配置keepalived,最后  将p

mysql主从同步(3)-percona-toolkit工具(数据一致性监测、延迟监控)使用梳理

转自:http://www.cnblogs.com/kevingrace/p/6261091.html 在mysql工作中接触最多的就是mysql replication mysql在复制方面还是会有一些常规问题: 比如主库宕机或者从库宕机有可能会导致复制中断,通常需要进行人为修复, 或者很多时候需要把一个从库提升为主库,但对从库和主库的数据一致性不能保证一样. 这种情况下就需要使用percona-toolkit工具的pt-table-checksum组件来检查主从数据的一致性:如果发现不一致的

MySQL主从说明详解、MySQL主从不同步处理方案

MySQL主从说明 同步问题 mysqldump:此工具适用于10G以下数据库或几个表percona-Xtrabackup备份工具:适用于100G-500GLVM快照:更大的数据量,或分库分表 主从复制目的 读写分离,减轻主库负载或数据分析: 数据安全,做备份恢复: 主从切换,做高可用: 常见主从结构: 一主一从:一个Master,一个Slave一主多从:一个Master,多个slave Master节点:负责所有的[写]请求Slave节点:负责大部分的[读]请求 主从复制步骤 A数据更新 A写

mysql主从出现问题 如何诊断故障点 &nbsp; 如何恢复数据

1 主从问题原因 一般导致主从问题的因素一般有以下几种:一个主库的从库太多,从库硬件比主库差,慢SQL语句过多主从复制单线程,主库写并发太大来不及传送到从库.主从库之间的网络延迟.因为机器配置的问题,包括磁盘IO,CPU,内存等各方面因素造成复制的延迟 2 主从问题 主从问题很多,错误代码也不一样,可以在从库上执行show slave status\G查看是否主从同步了,如果sql和lo线程状态不是yes,说明主从同步出现问题了. 实例1-1      从库写入数据冲突 例如:show slav