如何实现CDH元数据库MySQL的高可用

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢

1.文档编写目的


在前面Fayson讲过《如何实现CDH元数据库MySQL的主主互备》,那如何做到MySQL的高可用呢?本篇文章主要介绍如何使用Keepalived实现MySQL的高可用。本文架构图如下:

  • 内容概括

1.Keepalived安装

2.Keepalived配置

3.MySQL高可用验证

  • 测试环境

1.两台Linux服务器(192.168.0.230/192.168.0.231),操作系统为CentOS7.2

2.MariaDB 5.5.44

3.采用root用户操作

  • 前置条件

1.两个MariaDB版本必须一致

2.两个MariaDB已安装

2.测试环境说明


IP地址

状态

别名

192.168.0.230

实现主从同步

MySQLA

192.168.0.231

实现主从同步

MySQLB

3.安装Keepalived


分别在MySQLA和MySQLB服务上执行如下命令安装Keepalived服务。

1.安装Keepalived服务

yum -y install keepalived

2.将Keepalived服务加入开机自启动列表

systemctl enable keepalived

4.MySQL服务状态监测脚本


MySQL服务状态监测脚本,主要监控MariaDB服务状态是否正常,如果不正常则将该MySQL所在服务的Keepalived服务杀死,监控MySQL服务是否正常的方法有多种可以通过端口号、进程ID以及执行MySQL命令,这里我们使用mysladmin执行命令来监测MariaDB服务是否正常,脚本内容如下(check_mysql.sh):提示:代码块部分可以左右滑动查看噢

#!/bin/bash

MYSQL_PING=`mysqladmin -uroot -p123456 ping`
MYSQL_OK="mysqld is alive"
if [[ "$MYSQL_PING" != "$MYSQL_OK" ]]
   then
      echo "mysql is not running"
      killall keepalived
    else
      echo "mysql is running"
fi

这里Fayson使用的是root用户来检测MariaDB服务是否正常,大家可以使用一个权限较低的用户来检测。

设置check_mysql.sh脚本执行权限

[root@vm1 ~]# chmod +x /etc/keepalived/check_mysql.sh
[root@vm1 ~]# ll /etc/keepalived/check_mysql.sh 
-rwxr-xr-x 1 root root 233 Dec 29 07:34 /etc/keepalived/check_mysql.sh
[root@vm1 ~]# 

注意:该脚本存在于Keepalived所在服务器。

5.MySQLA服务器Keepalived配置


1.编辑/etc/keepalived/keepalived.conf配置文件,内容如下:提示:代码块部分可以左右滑动查看噢

[root@vm1 ~]# vim /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
global_defs {
}
vrrp_script check_mysql {
  script "/etc/keepalived/check_mysql.sh"
  interval 2
}
vrrp_instance VI_1 {
  state BACKUP
  interface ens192
  virtual_router_id 51
  priority 100
  advert_int 1
  nopreempt
  authentication {
    auth_type PASS
    auth_pass 1111
  }
  virtual_ipaddress {
    192.168.0.188
  }
  track_script {
    check_mysql
  }
}

2.启动Keepalived服务

[root@vm1 ~]# systemctl start keepalived

3.检查Keepalived是否已将192.168.0.188绑定在ens192网卡

4.在MySQLB服务器上ping 192.168.0.188

5.停止Keepalived服务查看192.168.0.188是否解绑

可以看到停止Keepalived服务后192.168.10.188已和ens192网卡解绑。

6.MySQLB服务器Keepalived配置


1.编辑/etc/keepalived/keepalived.conf配置,内容如下,提示:代码块部分可以左右滑动查看噢

[root@vm2 ~]# vim /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
global_defs {
}
vrrp_script check_mysql {
  script "/etc/keepalived/check_mysql.sh"
  interval 2
}
vrrp_instance VI_1 {
  state BACKUP
  interface eth0
  virtual_router_id 51
  priority 90
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 1111
  }
  virtual_ipaddress {
    192.168.0.188
  }
  track_script {
    check_mysql
  }
}

2.启动Keepalived服务

[root@vm2 ~]# systemctl start keepalived
[root@vm2 ~]# 

3.检查Keepalived是否已将192.168.10.188绑定在ens192网卡

注意:我们这里可以看到192.168.0.188绑定在MySQLB服务器的ens192网卡,由于MySQLA服务的Keepalived服务停了,所以这里才会绑定成功。

4.在MySQLA服务上ping 192.168.0.188

7.验证Keepalived服务IP漂移


1.启动MySQLA和MySQLB服务上的Keepalived服务

2.查看此时192.168.0.188 绑定在哪台服务器

可以看到192.168.0.188 IP地址绑定在MySQLA服务器的ens192网卡上。

3.将MySQLA服务器的Keepalived服务停掉

由上图可以看到此时MySQLA服务器已解绑192.168.0.188的IP地址

由上图可以看到IP地址192.168.0.188已自动漂移到MySQLB服务器的ens192网卡上。

4.在MySQLA服务上ping 192.168.0.188

通过以上步骤测试说明Keepalived服务IP地址漂移正常。

8.验证MySQL高可用


测试时192.168.0.188绑定在MySQLB服务器的ens192网卡

1.使用如下命令登录MariaDB

[root@vm1 ~]# mysql -uroot -p -h192.168.0.188

MySQL登录成功,连接的是MySQLB服务。

2.将MySQLB服务器的MariaDB服务停掉

查看192.168.0.188是否还在该服务绑定

IP地址已解绑。

3.查看MySQLA服务器的IP地址绑定情况

4.再次登录MariaDB

这时我们看到MariaDB数据库依然能够正常访问,说明已连接到MySQLA服务的MariaDB数据库。

9.总结


  • 利用Keepalived的vrrp_script区域来做MariaDB服务的健康检查,如果检测到MariaDB服务异常则将该服务的Keepalived服务杀掉,已确保虚拟IP能漂移到正常节点的Keepalived服务器从而实现MariaDB服务的高可用。

原文发布于微信公众号 - Hadoop实操(gh_c4c535955d0f)

原文发表时间:2018-01-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏强仔仔

Navicat注册机万能破解

Navicat虽然很好用,但是需要破解。今天就给大家介绍一种简单有效的破解方法,也就是利用注册机软件进行暴力破解。 具体破解步骤如下: 1、下载Navicat1...

583100
来自专栏zhisheng

SpringBoot RabbitMQ 整合使用

前提 上次写了篇文章,《SpringBoot Kafka 整合使用》,阅读量还挺高的,于是想想还是把其他几种 MQ 也和 SpringBoot 整合使用下。 下...

35290
来自专栏zhisheng

SpringBoot RabbitMQ 整合使用

前提 上次写了篇文章,《SpringBoot Kafka 整合使用》,阅读量还挺高的,于是想想还是把其他几种 MQ 也和 SpringBoot 整合使用下。 下...

33090
来自专栏白驹过隙

Socket编程回顾,一个最简单服务器程序

23530
来自专栏惨绿少年

keepalived实现服务高可用

第1章 keepalived服务说明 1.1 keepalived是什么? Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集...

59600
来自专栏linux系统运维

原 添加自定义监控项目,配置邮件告警,测

21530
来自专栏张善友的专栏

LVS DR模式 RealServer 为 Windows 2008 R2配置

有3篇文档详细介绍 http://kb.linuxvirtualserver.org/wiki/Windows_Servers_in_LVS/DR_and_LV...

26970
来自专栏Linux运维学习之路

Nginx+keepalived实现高可用

环境: [root@db02 ~]# uname -a Linux db02 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 1...

26660
来自专栏Felix的技术分享

Stetho的通信原理

35330
来自专栏施炯的IoT开发专栏

Windows Mobile Device Emulator In-Depth--(1)

    模拟器在Windows Mobile应用开发中的作用是越来越大了,UI的设计、程序的调试都可以用到它。本文讲述了Windows Mobile Devic...

19070

扫码关注云+社区

领取腾讯云代金券