HAproxy + keepalived 实现 Mycat 高可用

实验背景

前面的实验中只有一台Mycat服务器来给MySQL做读写分离,但是一台 Mycat 服务器容易出现单点故障;所以生产环境一般都部署两台 Mycat 服务器实现高可用,为 MySQL 读写分离持续提供服务


HAproxy简介

haproxy是一个开源的,高性能的,负载均衡软件,借助haproxy可以快速,可靠的构建一个负载均衡群集。

优点如下:

可靠性和稳定性非常好,可以和硬件级的负载均衡设备F5相媲美。

最高可同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个。

支持8种负载均衡算法,支持会话保持。

支持虚拟主机功能。

支持连接拒绝,全透明代理并且有一个功能强大的服务器状态监控界面。

拥有功能强大的ACL支持。


1、Mycat高可用方案

使用 HAproxy+keepalived 配合两台 Mycat 搭建 Mycat 集群,实现 Mycat 高可用性。

其中 HAproxy 用来实现 Mycat 多节点的集群高可用和负载均衡;而 HAproxy 自身的高可用性可以通过 keepalived 来实现。


2、架构图

注:以上架构图有点问题,mycat服务器到DB服务器各少了一条链路,知道有这么回事即可


3、实验环境

MySQL集群环境已经存在,不需要部署

一台Mycat服务器已经存在,再增加一台备机即可

master-1:192.168.18.103 (已存在)

slave-1 : 192.168.18.107 (已存在)

master-2 :  192.168.18.104 (已存在)

slave-2 :  192.168.18.108 (已存在)

mycat-1 : 192.168.18.110 (已存在)

mycat-2 :  192.168.18.111

HAproxy主 + keepalived主 :192.168.18.112(10.0.11.55)

HAproxy备 + keepalived备 :192.168.18.113(10.0.11.56)

VIP:192.168.18.115(10.0.11.58)


4、Mycat-2 安装

Mycat-2 服务器的安装 请参考本人的另一篇博文《使用Mycat实现MySQL双主双从架构的读写分离》,该博文链接为  https://www.jianshu.com/p/aaaa192a9696

Mycat-1 和 Mycat-2 的安装步骤和配置文件都一模一样,直接复制粘贴命令即可


5、配置Mycat状态检查服务(在Mycat节点主机上配置)

Mycat服务主机(192.168.18.110、192.168.18.111)上需要增加Mycat服务的状态检测脚本,并开放相应的检测端口,以提供给HAProxy对Mycat的服务状态进行检测判断。可以使用xinetd来实现,通过xinetd,HAProxy可以用httpchk来检测Mycat的存活状态。(xinetd即extended internet daemon,xinetd是新一代的网络守护进程服务程序,又叫超级Internet服务器。经常用来管理多种轻量级Internet服务。xinetd提供类似于inetd+tcp_wrapper的功能,但是更加强大和安全。xinetd 是linux系统的基础服务之一)


以下操作两台mycat服务器都执行相同的命令


1)安装xinetd

如果 xinetd 还没有安装,可以使用如下命令安装:

[root@CentOS-5 ~]# 

[root@CentOS-5 ~]# rpm  -qa  xinetd

[root@CentOS-5 ~]#

[root@CentOS-5 ~]# yum  install  xinetd

[root@CentOS-5 ~]# rpm  -qa  xinetd

xinetd-2.3.15-14.el7.x86_64

[root@CentOS-5 ~]#

2)添加 includedir /etc/xinetd.d

检查/etc/xinetd.conf 的文件末尾是否有 includedir /etc/xinetd.d ,如果没有就加上

[root@CentOS-5 ~]#

[root@CentOS-5 ~]# tail  -1  /etc/xinetd.conf                     #可以看出我的环境不需要手动添加

includedir /etc/xinetd.d

[root@CentOS-5 ~]#

[root@CentOS-5 ~]# vi  /etc/xinetd.d/mycat_status             #增加Mycat存活状态检测服务配置

service mycat_status

{

flags = REUSE

socket_type = stream

port = 48700

wait = no

user = root

server =/usr/local/bin/mycat_status

log_on_failure += USERID

disable = no

}

[root@CentOS-5 ~]#

[root@CentOS-5 ~]# vi  /usr/local/bin/mycat_status        #添加 /usr/local/bin/mycat_status 服务脚本

#!/bin/bash

#/usr/local/bin/mycat_status.sh

# This script checks if a mycat server is healthy running on localhost. It will

# return:

#

# "HTTP/1.x 200 OK\r" (if mycat is running smoothly)

#

# "HTTP/1.x 503 Internal Server Error\r" (else)

mycat=` /usr/local/mycat/bin/mycat status |grep 'not running'| wc -l`

if [ "$mycat" = "0" ];

then

/bin/echo -e "HTTP/1.1 200 OK\r\n"

else

/bin/echo -e "HTTP/1.1 503 Service Unavailable\r\n"

fi

[root@CentOS-5 ~]#

[root@CentOS-5 ~]# chmod 777 /usr/local/bin/mycat_status       #赋予脚本可执行权限

[root@CentOS-5 ~]# chmod 777 /etc/xinetd.d/mycat_status       #赋予脚本可执行权限

[root@CentOS-5 ~]# vi  /etc/services              #在 /etc/services 中加入 mycat_status 服务

# 在文件最末尾加入下面这行内容即可

mycat_status      48700/tcp      # mycat_status

[root@CentOS-5 ~]# tail  -1  /etc/services 

[root@CentOS-5 ~]#

[root@CentOS-5 ~]# systemctl  restart  xinetd              #启动xinted

[root@CentOS-5 ~]# systemctl  enable  xinetd          #设置xinetd开机启动

[root@CentOS-5 ~]#

[root@CentOS-5 ~]# netstat  -antup|grep  48700          

注意:/etc/xinetd.d/mycat_status里的service mycat_status(服务名)和port = 48700(端口)要与 /etc/services里的相同


5、HAproxy 安装

注:对于安装配置haproxy的操作,haproxy主服务器端和haproxy备服务器端操作命令完全一致;

因此本实验仅写一个haproxy服务器的安装配置流程,省点力气……


HAproxy 主服务器端操作:

将提前准备好的 haproxy 安装包上传到linux

[root@zabbix ~]#

[root@zabbix ~]# rz                     #上传haproxy安装包到linux

[root@zabbix ~]# ls  ha*

haproxy-2.0.13.tar.gz

[root@zabbix ~]#

1)查看内核版本,编译要用到

[root@zabbix ~]#

[root@zabbix ~]# uname  -r               #查看系统内核版本

3.10.0-862.el7.x86_64

[root@zabbix ~]#

这里内核是 3.10 的可以选择 TARGET=linux310  来安装 haproxy

2)解压安装haproxy安装包

[root@zabbix ~]#

[root@zabbix ~]# tar  -zxf haproxy-2.0.13.tar.gz

[root@zabbix ~]# ls

3)安装 haproxy

[root@zabbix ~]# cd  haproxy-2.0.13

[root@zabbix haproxy-2.0.13]# make  TARGET=linux310   ARCH=x86_64 PREFIX=/usr/local/haproxy

[root@zabbix haproxy-2.0.13]# make  install  PREFIX=/usr/local/haproxy

[root@zabbix haproxy-2.0.13]#

[root@zabbix haproxy-2.0.13]# cd  /usr/local/haproxy/

[root@zabbix haproxy]# ls

doc      sbin      share

[root@zabbix haproxy]# sbin/haproxy  -v               #查看haproxy的版本

HA-Proxy version 2.0.13 2020/02/13 - https://haproxy.org/

[root@zabbix haproxy]#


6、配置 haproxy

HAproxy 主服务器端配置:

[root@zabbix ~]#

[root@zabbix ~]# mkdir  -p  /usr/data/haproxy               #创建用于存放 haproxy 进程ID文件的目录

[root@zabbix ~]#

[root@zabbix ~]# vim  /usr/local/haproxy/haproxy.conf        #创建并编辑 haproxy 的配置文件

# 写入以下内容即可

global

        log 127.0.0.1  local0

        #log 127.0.0.1  local1 notice

        #log loghost    local0 info

        maxconn 4096

        chroot  /usr/local/haproxy

        pidfile /usr/data/haproxy/haproxy.pid

        uid 99

        gid 99

        daemon

        #debug

        #quiet


defaults

        log    global

        mode    tcp

        option  abortonclose

        option redispatch

        retries 3

        maxconn 2000

        timeout connect 5000

        timeout client  50000

        timeout server  50000


listen proxy_status

    bind :48066

        mode tcp

        balance roundrobin

        server mycat_1 192.168.18.110:8066 check inter 10s

        server mycat_2 192.168.18.111:8066 check inter 10s


frontend admin_stats

    bind :7777

        mode http

        stats enable

        option httplog

        maxconn 10

        stats refresh 30s

        stats uri /admin

        stats auth admin:ctsi.2020

        stats hide-version

        stats admin if TRUE

[root@zabbix ~]#

[root@zabbix ~]#


7、启动验证

HAproxy 主服务器端验证

[root@zabbix ~]#

[root@zabbix ~]# /usr/local/haproxy/sbin/haproxy  -f  /usr/local/haproxy/haproxy.conf        #启动haproxy

[root@zabbix ~]#

[root@zabbix ~]# ps  -ef|grep  haproxy              #查看haproxy程序是否启动成功

1)测试访问

在浏览器中输入haproxy地址  

http://10.0.11.55:7777/admin

账号:admin

密码:ctsi.2020

2)验证负载均衡,通过haproxy访问mycat

[root@zabbix ~]#

[root@zabbix ~]# mysql  -umycat  -p'ctsi.2020'  -h 10.0.11.55  -P 48066


8、keepalived 安装配置

由于keepalived服务器两边安装过程虽然一样,但是配置过程却不一样;

所以接下来将会分别介绍两台keepalived服务器的安装配置


keepalived 主服务器端操作:

1)安装 keepalived

[root@zabbix ~]#

[root@zabbix ~]# yum  install  keepalived           #yum安装keepalived

[root@zabbix ~]# rpm  -q  keepalived

keepalived-1.3.5-16.el7.x86_64

[root@zabbix ~]#

2)配置keepalived

[root@zabbix ~]#

[root@zabbix ~]# >  /etc/keepalived/keepalived.conf          #清空原有的配置

[root@zabbix ~]#

[root@zabbix ~]# vim  /etc/keepalived/keepalived.conf           #写入自定义配置

你可能感兴趣的:(HAproxy + keepalived 实现 Mycat 高可用)