# IT明星不是梦 #MySQL高可用集群之基于MyCat部署HaProxy实现高可用

基于MyCat部署HaProxy实现高可用

在实际项目中, Mycat 服务也需要考虑高可用性,如果 Mycat 所在服务器出现宕机,或 Mycat 服务故障,需要有备机提供服务,需要考虑 Mycat 集群。

一、高可用方案

可以使用 HAProxy+Keepalived配合两台MyCat搭起MyCat集群,实现高可用性。 HAProxy实现了MyCat多节点的集群高可用和负载均衡,而 HAProxy自身的高可用则可以通过Keepalived来实现.

架构图:

于上一个博客的环境部署(MySQL中间件之MyCat )

新添:

mycat02、haproxy01、haproxy02

主机 操作系统 IP地址
mysql01 Centos 7.3 192.168.1.1
mysql02(slave) Centos 7.3 192.168.1.8
mysql03 Centos 7.3 192.168.1.9
mycat Centos 7.3 192.168.1.3
mycat02 Centos 7.3 192.168.1.11
haproxy01(keepalived) Centos 7.3 192.168.1.4(VIP:192.168.1.100)
haproxy02(keepalived) Centos 7.3 192.168.1.5(VIP:192.168.1.100)

案例中关闭防火墙

启动两台mycat服务

[[email protected] mycat]# ./bin/mycat start
[[email protected] mycat2]# ./bin/mycat start

测试连接mycat(可以连接自己,并且可以连接到另一台mycat)

[[email protected] ~]# mysql -umycat -p123456 -P8066 -h 192.168.1.3
[[email protected] ~]# mysql -umycat -p123456 -P8066 -h 192.168.1.11
[[email protected] ~]# mysql -umycat -p123456 -P8066 -h 192.168.1.11
[[email protected] ~]# mysql -umycat -p123456 -P8066 -h 192.168.1.3

1、安装配置 HAProxy(haproxy01、haproxy02)

1)安装 HAProxy 准备好HAProxy安装包,传到/opt目录下 解压到/usr/local/src

[[email protected] ~]# tar zxf haproxy-1.8.23.tar.gz -C /usr/local/src/

2)进入解压后的目录,查看内核版本, 进行编译

[[email protected] ~]# cd /usr/local/src/haproxy-1.8.23/
[[email protected] haproxy-1.8.23]# make TARGET=linux310 PREFIX=/usr/local/haproxy ARCH=x86_64

ARGET=linux310,内核版本,使用uname -r查看内核,如: 3.10.0-514.el7,此时该参数就为linux310;
ARCH=x86_64,系统位数;
PREFIX=/usr/local/haprpxy #/usr/local/haprpxy,为haprpxy安装路径。

3)编译完成后,进行安装

[[email protected] haproxy-1.8.23]# make install PREFIX=/usr/local/haproxy


编辑配置文件(文件内容自己定义):

[[email protected] haproxy-1.8.23]# vim /usr/local/haproxy/haproxy.conf
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/local/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.1.3:8066 check inter 10s  //mycat服务器IP地址
                server mycat_2 192.168.1.11:8066 check inter 10s  //mycat服务器IP地址
frontend admin_stats
        bind :7777
                mode http
                stats enable
                option httplog
                maxconn 10
                stats refresh 30s
                stats uri /admin   //访问web用户名
                stats auth admin:123123      //定义密码
                stats hide-version
                stats admin if TRUE

4)验证启动HAProxy

[[email protected] haproxy-1.8.23]#  /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.conf

查看HAProxy进程

[[email protected] haproxy-1.8.23]# ps -ef|grep haproxy


打开浏览器访问 http://192.168.1.4:7777/admin、http://192.168.1.5:7777/admin
在弹出框输入用户名: admin密码: 123123
访问第一台:



访问第二台:

验证负载均衡,通过HAProxy访问Mycat

[[email protected] ~]# scp /usr/local/mysql/bin/mysql 192.168.1.4:/usr/local/sbin/
[[email protected] ~]# scp /usr/local/mysql/bin/mysql 192.168.1.5:/usr/local/sbin/

[[email protected] haproxy-1.8.23]# mysql -umycat -p123456 -h 192.168.1.4 -P 48066
[[email protected] haproxy-1.8.23]# mysql -umycat -p123456 -h 192.168.1.5 -P 48066

2、安装配置keepalived(两台haproxy)

1)安装 Keepalived 准备好Keepalived安装包,传到/opt目录下 解压到/usr/local/src

[[email protected] ~]# tar zxf keepalived-2.0.20.tar.gz -C /usr/local/src/

安装依赖插件

[[email protected] ~]# yum -y install gcc openssl-devel popt-devel

进入解压后的目录, 进行配置, 进行编译

[[email protected] ~]# cd /usr/local/src/keepalived-2.0.20/
[[email protected] keepalived-2.0.20]# ./configure --prefix=/usr/local/keepalived

完成后进行安装

[[email protected] keepalived-2.0.20]# make && make install

运行前配置

[[email protected] keepalived-2.0.20]#  cp /usr/local/src/keepalived-2.0.20/keepalived/etc/init.d/keepalived /etc/init.d/
[[email protected] keepalived-2.0.20]# mkdir /etc/keepalived
[[email protected] keepalived-2.0.20]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/[[email protected] keepalived-2.0.20]# cp /usr/local/src/keepalived-2.0.20/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[[email protected] keepalived-2.0.20]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

修改配置文件

[[email protected] keepalived-2.0.20]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived   //注释

global_defs {
   router_id LVS_DEVEL      //keepalived服务器的一个标识
}

vrrp_instance VI_1 {
    state MASTER     //指定keepalived的角色, 两台配置此处均是BACKUP,设为BACKUP将根据优先级决定主或从
    interface ens33     //指定HA监测网络的接口
    virtual_router_id 51   //虚拟路由标识,这个标识是一个数字(取值在0-255之间,用来区分多个instance的VRRP组播),同一个vrrp实例使用唯一的标识,确保和master2相同,同网内不同集群此项必须不同,否则发生冲突。
    priority 100   //用来选举master的,要成为master,该项取值范围是1-255(在此范围之外会被识别成默认值100),此处master2上设置为50
    advert_int 1    //发VRRP包的时间间隔,即多久进行一次master选举(可以认为是健康查检时间间隔)
    authentication {     //认证区域,认证类型有PASS和HA(IPSEC),推荐使用PASS(密码只识别前8位)
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {      //VIP区域,指定vip地址
        192.168.1.100
    }
}   

virtual_server 192.168.1.100 48066 {    //设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开
    delay_loop 6     //设置运行情况检查时间,单位是秒
    lb_algo rr          //设置后端调度算法,这里设置为rr,即轮询算法
    lb_kind NAT      //设置LVS实现负载均衡的机制,有NAT、TUN、DR三个模式可选
    persistence_timeout 50    //会话保持时间,单位是秒。这个选项对动态网页是非常有用的,为集群系统中的session共享提供了一个很好的解决方案。有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话的保持时间。
    protocol TCP    //指定转发协议类型,有TCP和UDP两种

    real_server 192.168.1.4 48066 {    //配置服务节点1,需要指定real server的真实IP地址和端口,IP与端口之间用空格隔开
        weight 1     //配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值大小为了区分不同性能的服务器
        TCP_CHECK {
            connect_timeout 3    //连接超时时间
            retry 3    //重连次数
            delay_before_retry 3   //重连间隔时间
        }
    }
    real_server 192.168.1.5 48066 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

拷贝到第二台haproxy

[[email protected] keepalived-2.0.20]# scp /etc/keepalived/keepalived.conf 192.168.1.5:/etc/keepalived/keepalived.conf

做一些简单修改

[[email protected] keepalived-2.0.20]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL
}

vrrp_instance VI_2 {   //改
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 50     //降低
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.100
    }
}

virtual_server 192.168.1.100 48066 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.1.4 48066 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.1.5 48066 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

2)启动验证

[[email protected] keepalived-2.0.20]# service keepalived start
Starting keepalived (via systemctl):                       [  OK  ]
[[email protected] keepalived-2.0.20]# ip a


开启第二台的服务

[[email protected] keepalived-2.0.20]# service keepalived start
Starting keepalived (via systemctl):                       [  OK  ]

登录验证(访问VIP地址)

[[email protected] keepalived-2.0.20]# mysql -umycat -p123456 -h192.168.1.100 -P 48066

模拟第一台mycat宕机:

[[email protected] ~]# ./mycat/bin/mycat stop

继续通过haproxy(VIP)访问:

[[email protected] keepalived-2.0.20]# mysql -umycat -p123456 -h 192.168.1.100 -P 48066


依然可以访问到

模拟第一台haproxy宕机
断开网卡连接

可以看到VIP跳到了第二台服务器

[[email protected] keepalived-2.0.20]# ip a

继续通过haproxy(VIP)访问:

[[email protected] keepalived-2.0.20]# mysql -umycat -p123456 -h 192.168.1.5 -P 48066


依然能够访问到服务

[[email protected] ~]# ./mycat/bin/mycat start     //将第一台mycat启动

高可用已经部署完成

二、MyCat 安全设置

1、权限配置

1)user 标签权限控制目前 Mycat 对于中间件的连接控制并没有做太复杂的控制,目前只做了中间件逻辑级别的读写权限控制。是通过server.xml的user标签进行配置。

#server.xml配置文件user部分

2)privileges 标签权限控制 在 user 标签下的 privileges 标签可以对逻辑库(schema)、表(table)进行精细化的DML权限控制。privileges 标签下的check属性,如为 true 开启权限检查,为false不开启,默认为 false。由于Mycat一个用户的 schemas 属性可配置多个逻辑库(schema),所以 privileges 的下级节点schema节点同样可配置多个,对多库多表进行细粒度的 DML 权限控制.

#server.xml配置文件privileges部分
#配置orders表没有增删改查权限

配置说明:

DML权限 增加(insert) 更新(update) 查询(select) 删除(select)
0000 禁止 禁止 禁止 禁止
0010 禁止 禁止 可以 禁止
1110 可以 可以 可以 禁止
1111 可以 可以 可以 可以

2、SQL 拦截

firewall 标签用来定义防火墙:
firewall下whitehost标签用来定义IP白名单, blacklist用来定义SQL 黑名单。

1)白名单 可以通过设置白名单, 实现某主机某用户可以访问 Mycat,而其他主机用户禁止访问。

设置白名单
#server.xml配置文件firewall标签
#配置只有192.168.1.4主机可以通过mycat用户访问
        <firewall>
           <whitehost>
              <host host="192.168.1.4" user="mycat"/>
           </whitehost>
        </firewall>

2)黑名单可以通过设置黑名单,实现Mycat对具体SQL操作的拦截,如增删改查等操作的拦截。

设置黑名单
#server.xml配置文件firewall标签
#配置禁止mycat用户进行删除操作
        <firewall>
           <whitehost>
              <host host="192.168.1.4" user="mycat"/>
           </whitehost>
       <blacklist check="true">
       <property name="deleteAllow">false</property>
       </blacklist>
        </firewall>

可以设置的黑名单 SQL 拦截功能列表

配置项 缺省值 描述
selectAllow true 是否允许执行SELECT语句
deleteAllow true 是否允许执行DELETE语句
updateAllow true 是否允许执行UPDATE语句
insertAllow true 是否允许执行INSERT语句
createTableAllow true 是否允许创建表
setAllow true 是否允许使用SET语法
alterTableAllow true 是否允许执行Alter table语句
dropTableAllow true 是否允许修改表
commitAllow true 是否允许执行commit操作
rollbackAllow true 是否允许执行roll back操作

原文地址:https://blog.51cto.com/14638500/2472124

时间: 2024-08-20 17:42:36

# IT明星不是梦 #MySQL高可用集群之基于MyCat部署HaProxy实现高可用的相关文章

CentOS6.4 高可用集群之基于heartbeat(crm)和nfs的mysql高可用

CentOS6.4 高可用集群之基于heartbeat和nfs的高可用mysql CentOS版本: CentOS release 6.4(Final) 2.6.32-358.el6.i686 效果演示: 使用ssh连接(nod-1.magedu.com)192.168.3.7 并执行以下命令: [[email protected] ha.d]# hb_gui & 说明:hb_gui是heartbeat为了方便管理集群资源而提供的一个图形用户接口 安装heartbeat默认会在系统中创建一个名为

转:讲讲Mysql的三高集群架构,所谓三高,就是“高可用”、“高负载”、“高性能”的架构方案。

from:https://www.toutiao.com/i6717521873397088780/?timestamp=1569389190&app=news_article&group_id=6717521873397088780&req_id=2019092513263001002607901724F149F2 目录 前言 主从架构 MHA架构 PXC方案 MHA与PXC 最终推荐方案 总结 前言 小伙伴们在项目开发中,无法避免的要跟数据库打交道,一般在互联网公司所采用的数据

分布式架构高可用架构篇_02_activemq高可用集群(zookeeper+leveldb)安装、配置、高可用测试

从 ActiveMQ 5.9 开始,ActiveMQ 的集群实现方式取消了传统的Master-Slave 方式,增加了基于ZooKeeper + LevelDB的 Master-Slave实现方式,其他两种方式目录共享和数据库共享依然存在. 三种集群方式的对比: (1)基于共享文件系统(KahaDB,默认): <persistenceAdapter> <kahaDB directory="${activemq.data}/kahadb"/> </persi

高可用集群和负载均衡集群理解

高可用集群 HA(hight avaliable)即高可用,又被叫双机热备 防止服务器中断,影响对外提供服务 协议:Heartbeat使用心跳进行通信和选举 含义:一般是指当集群中的任意一个节点失效的情况下,节点上的所有任务自动转移到其他正常的节点上,并且此过程不影响整个集群的运行,不影响业务的提供. 负载均衡集群 LB(load balance)负载均衡集群 防止服务器发生瓶颈 协议:Keepalived使用VRRP协议进行通信和选举 用于用户请求量过大,服务器发生瓶颈,通过负载均衡,让用户可

简单的高可用集群实验

前言: 上文介绍了高可用集群的基本概念,下面让我们来试试用两台提供web服务的虚拟机来实现一个小小的高可用集群吧- 首先,配置一个高可用集群的前提有: 1.至少两个节点: 2.共享存储(为了提供的页面一致,需要在后端用某些机制来实现.这里我们就做个简单的实验,后端存储先不考虑.先让这两个节点各自提供一个不同的页面,方便我们知道哪台在提供服务): 3.STONIN(共享存储时为了避免争用资源,指挥特定的设备,如电源交换机等避免共享存储的崩溃,所以一般的集群都得需要这个否则它会不工作的哦~~这里我们

linux高可用集群heartbeat实现http的高可用

linux高可用集群的种类很多,比如常见的heartbeat,corosync,rhcs,keepalived,这些集群软件的出现为我们的业务生产环境提供了高可用的保证,本文将简单介绍一下用heartbeat的v2版本来处理一个简单的http高可用集群的搭建. 在实现http高可用集群之前,首先至少需要2台主机,并且需要做3点基本的准备工作: 1.设置节点名称,并且集群中的所有节点都能通过节点名称去解析集群中的所有主机.为了集群服务的高可用性,这里选择使用/etc/hosts,而且要保证unam

18.1-18.5 集群介绍,用keepalived配置高可用集群

18.1 集群介绍 根据功能划分为两大类:高可用和负载均衡 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务大概意思是:高可用一般使用两台机器,功能,角色是一样的.当一台服务器宕机不能服务了,利用另外的服务器顶替. 实现高可用的开源软件有:heartbeat(不建议使用,切换通信速度慢,2010年停止更新,).keepalived(建议使用,有高可用和负载均衡的功能) 负载均衡集群,需要有一台服务器作为分发器,它负责把用户的请求分发给后端的服务

# IT明星不是梦 # MySQL高可用集群之MMM

MySQL高可用集群之MMM 一.MMM简介 MMM即Multi-Master Replication Manager for MySQL(mysql多主复制管理器),基于perl实现,关于mysql主主复制配置的监控.故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),MMM也能对从服务器进行读负载均衡,所以可以用它来在一组用于复制的服务器启动虚拟IP,除此之外,它还有实现数据备份.节点之间重新同步功能的脚本.MySQL本身没有提供replication failover

CoroSync + Drbd + MySQL 实现MySQL的高可用集群

Corosync + DRBD + MySQL 构建高可用MySQL集群 节点规划: node1.huhu.com172.16.100.103 node2.huhu.com172.16.100.104 资源名称规划 资源名称:可以是除了空白字符外的任意ACSII码字符 DRBD设备:在双节点上,此DRBD设备文件,一般为/dev/drbdN,主设备号147 磁盘:在双方节点上,各自提供存储设备 网络配置:双方数据同步所使用的网络属性 DRBD从Linux内核2.6.33起已经整合进内核 1.配置