​ 在之前的操作中,我们已经实现了mysql机器的高可用,可以动态切换master,那么如果mycat崩溃了呢?我们应该如何处理呢?所以此时就需要搭建mycat的高可用集群了。

​ 在mycat的权威指南中,介绍了多种高可用的方案,在这里我们讲解一种使用最多的方案,使用HAProxy+Keepalived配合使用来实现myact的高可用。

​ HAproxy实现了mycat多借点的集群高可用和负载均衡,而HAProxy自身的高可用则可以通过Keepalived来实现。

​ 好了,如果这个图大家看明白的话,下面我们开始规划集群并进行实操。

编号 角色 IP地址 机器名
1 mycat1 192.168.85.111 node01
2 mycat2 192.168.85.112 node02
3 HAProxy(master) 192.168.85.113 node03
4 Keepalived(master) 192.168.85.113 node03
5 HAProxy(backup) 192.168.85.114 node04
6 keepalived(backup) 192.168.85.114 node04

1、安装配置HAProxy

1、准备好HAProxy的安装包
2、解压到/usr/local目录
3、进入到解压后的目录,查看内核版本,进行编译
cd cd /usr/local/haproxy-1.8.25/
uname -r
make TARGET=linux26
4、编译完成之后,开始进行安装
make install PREFIX=/usr/local/haproxy
5、安装完成之后,创建目录,创建HAProxy配置文件
mkdir -p /usr/data/haproxy
mkdir /usr/local/haproxy/conf
vi /usr/local/haproxy/haproxy.conf
6、向配置文件中添加配置信息
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.85.111:8066 check inter 10s
server mycat_2 192.168.85.112: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:123123
stats hide-version
stats admin if TRUE
7、启动haproxy服务
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.conf
8、查看haproxy的进程,如果存在则说明没有问题
ps -ef | grep haproxy
9、打开浏览器访问,用户名为admin,密码为123123
http://192.168.85.113:7777/admin

2、在node04上按照上述一样的步骤创建HAProxy

3、安装配置Keepalived

1、准备好Keepalived安装包
2、解压到/usr/local目录
3、安装需要依赖的环境组件
yum install gcc openssl-devel popt-devel -y
4、进入到解压目录,进行编译
./configure --prefix=/usr/local/keepalived
5、编译完成之后,进行安装
make && make install
6、将keepalived的服务注册为系统服务
cp /usr/local/keepalived-1.4.5/keepalived/etc/init.d/keepalived /etc/init.d/
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived-1.4.5/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
7、修改配置文件
cd etc/keepalived/
vi keepalived.conf ! Configuration File for keepalived global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
} vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.85.200/24 dev eth0 label eth0:3:
}
} 8、启动keepalived
service keepalived start
9、登录验证
mysql -uroot -p123456 -h 192.168.85.100 -P 48066

4、在node04上执行相同的操作安装keepalived

​ 注意,需要修改状态为BACKUP

5、验证高可用

​ 先进行登录访问,随便找一台机器执行

​ mysql -uroot -p123456 -P48066 -h192.168.85.100

​ 然后观察访问的是哪一台mycat,关闭掉mycat,在进行查询即可。

2、mycat的安全管理

1、权限配置

​ 1、user标签权限控制

​ 目前mycat对于中间件的连接控制并没有做太复杂的控制,目前只做了中间件逻辑库级别的读写控制权限,可以通过user标签进行配置。

​ 标签说明:

标签属性 说明
name 应用链接中间件逻辑库的用户名
password 该用户对应的密码
schemas 应用当前连接的逻辑库中所对应的逻辑表,schemas中可以配置一个或者多个
readonly 应用连接中间件逻辑库所具有的权限。true为只读,false为读写都有,默认是false

​ 添加配置:

	<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
</user>
<user name="mycat">
<property name="password">mycat</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>

​ 尝试通过不同的用户名称进行登录,会发现root用户具有所有的权限,但是mycat用户只是具备了查询的权限,无法完成更新和插入的操作。

​ 2、privileges标签权限控制

​ 在user标签下的privileges标签可以对逻辑库,表进行更加细致的DML权限控制。

​ privileges标签下的check属性,如果值为true则表示开启权限检查,false则表示不开启权限检查

​ 由于mycat一个用户的schemas属性可以配置多个逻辑库,所以privileges的下级节点schema节点同样可配置多个,对多库多表进行细粒度的DML权限控制

​ 配置权限:

DML权限 增加 更新 查询 删除
0001 禁止 禁止 禁止 允许
0010 禁止 禁止 允许 禁止
0100 禁止 允许 禁止 禁止
1000 允许 禁止 禁止 禁止

​ 修改server.xml文件

<user name="mycat">
<property name="password">mycat</property>
<property name="schemas">TESTDB</property>
<privileges check="true">
<schema name="TESTDB" dml="1111">
<table name="orders" dml="0000"></table>
</schema>
</privileges>
</user>

​ 大家可以进行相关的测试,当使用mycat用户进行登录的时候会发现其他的表都可以做增删改查操作,但是orders表什么操作都做不了,这就是对权限作了控制。

2、SQL拦截

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

​ 1、白名单

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

	<firewall>
<whitehost>
<host host="192.168.85.111" user="mycat"></host>
</whitehost>
</firewall>

​ 此时发现,用户可以在node01上使用mycat用户进行登录访问,其他用户都不可以,其他主机也不可以。

​ 2、黑名单

​ 用户还可以通过设置黑名单,实现mycat对具体sql操作的拦截,如增删改查等操作的拦截

<blacklist check="true">
<property name="deleteAllow">false</property>
</blacklist>

​ 此时用户登录之后发现无法删除表中的数据,这就是黑名单的作用。

​ 黑名单SQL拦截功能列表:

配置项 默认值 功能
selectAllow true 是否允许执行select语句
selectColumnAllow true 是否允许执行select *操作
selectIntoAllow true 是否允许select语句中包含into子句
deleteAllow true 是否允许执行delete语句
updateAllow true 是否允许执行update语句
insertAllow true 是否允许执行insert语句
replaceAllow true 是否允许执行replace语句
createTableAllow true 是否允许创建表
setAllow true 是否允许使用set语法
truncateAllow true 是否允许执行truncate语句
alterTableAllow true 是否允许执行alter table语句
dropTableAllow true 是否允许修改表
commitAllow true 是否允许执行commit操作
rollbackAllow true 是否允许执行rollback操作
useAllow true 是否允许执行use语句
describeAllow true 是否允许执行describe操作
showAllow true 是否允许执行show语句

3、mycat监控工具

​ mycat-web是mycat可视化运维管理和监控平台,弥补了mycat在监控上的空白。帮mycat分担统计任务和配置管理任务。mycat-web引入了zookeeper作为配置中心,可以管理多个节点。mycat-web主要管理和监控mycat的流量、连接、活动现成和内存等,具备IP白名单、邮件告警等模块,还可以统计SQL并分析慢SQL和高频SQL等,为SQL的优化提供了依据。

1、安装zookeeper

1、下载zookeeper安装包
2、安装拷贝到/usr/local目录,并解压
3、进入到zookeeper解压后的目录conf,复制配置文件并改名
cp zoo_sample.cfg zoo.cfg
4、进入到zookeeper的bin目录,运行启动命令
./zkServer.sh start
5、执行如下命令,看zookeeper是否正常启动
netstat -nlpt | grep 2181

2、安装mycat-web

1、下载mycat-web安装包
2、解压安装包到/usr/local目录
3、进入mycat-web的目录运行启动命令
./start.sh &
4、mycat-web的服务端口是8082,查看服务是否启动
netstat -nlpt | grep 8082
5、通过地址访问服务
192.168.85.111:8082/mycat/

3、mycat-web配置

1、配置zookeeper
进入到mycat-web的/usr/local/mycat-web/mycat-web/WEB-INF/classes,修改mycat.properties文件,可以修改zookeeper的地址
2、添加mycat实例
在页面的mycat配置--》mycat服务管理中添加mycat实例,需要填写相关的参数

4、mycat配置使用

​ 在mycat的web监控系统中,很多参数及监控可以自己来完善,大家尽情去试就好了。

4、mycat原理

​ 学到这里我们其实应该有感受了,mycat的操作使用并不是很难,我们只需要配置和修改server.xml.rule.xml.schema.xml三个文件即可,但是如果想在生产环境中使用的话,还是需要下一番功夫的。下面我们来简单说一下mycat的原理。

​ mycat在逻辑上由几个模块组成:通信协议、路由解析、结果集处理、数据库连接、监控等模块

​ 1、通信协议模块

​ 通信协议模块承担底层的收发数据、现成回调处理工作,主要采用Reactor、Proactor模式来提高效率。目前。mycat通信模块默认采用Reactor模式,在协议层采用mysql协议。

​ 2、路由解析模块

​ 路由解析模块负责对传入的SQL语句进行语法解析,解析从MYSQL协议中解析出来并进入该模块的SQL语句的条件、语句类型、携带的关键字等,对符合要求的SQL语句进行相关优化,最后根据这些路由计算单元进行路由计算。

​ 3、结果集处理模块

​ 结果集处理模块负责对跨分片的结果进行汇聚、排序、截取等。由于数据存储在不同的数据库中,所以对跨分片的数据需要进行汇聚。

​ 4、数据库连接模块

​ 数据库连接模块复制创建、管理、维护后端的连接池。为了减少每次建立数据库连接的开销,数据库使用连接池机制对连接生命周期进行管理。

​ 5、监控管理模块

​ 监控管理模块负责对Mycat中的连接、内存等资源进行等监控和管理。监控主要是通过管理命令实时地展现一些监控数据,例如连接数、缓存命中数等;管理则主要通过轮训事件来检测和释放不适用的资源。

​ 6、SQL执行模块

​ SQL执行模块负责从连接池中获取相应的目标连接,对目标连接进行信息同步后,再根据路由解析的结果,把SQL语句分发到相应的节点执行。

​ 总体执行流程如下:

​ 由通信协议模块的读写事件通知发起。读写事件通知具体的回调代码进行这次读写事件的处理。管理模块的执行流程由定时器事件进行资源检查和资源释放时发起。

​ 由客户端发送过来的数据通过协议解析、路由解析等流程进入执行组件,通过执行组件把数据发送到通信协议模块,最终数据被写入目标数据库。

​ 后端数据库返回数据,通过协议解析后发送至回调模块。如果是涉及多节点的数据,则执行流程将会先进入结果集汇聚、排序等模块中,然后将处理后的数据通过通信协议模块返回到客户端。

​ 通过上述图片大家发现了,在mycat的执行流程中,AIO、NIO、多线程、内存管理等各个方面都用到了,大家如果想看mycat的源码的话,最好能具备以上的基础,mycat的源码在面试过程中也几乎不会用到,如果大家有兴趣的话,可以自行学习。

mycat高可用-安全管理-监控 看这一篇就够了的更多相关文章

  1. Mycat+MySql 主从复制-读写分离 看这一篇就够了

    ​ 通过mycat和mysql的主从复制配合搭建数据库的读写分离,可以实现mysql的高可用性,下面我们来搭建mysql的读写分离. 1.一主一从 1.在node01上修改/etc/my.cnf的文件 ...

  2. mycat的安装及使用 看这一篇就够了

    1.环境准备 ​ 本次使用的虚拟机环境是centos6.5 ​ 首先准备四台虚拟机,安装好mysql,方便后续做读写分离和主从复制. 192.168.85.111 node01 192.168.85. ...

  3. Dubbo入门到精通学习笔记(二十):MyCat在MySQL主从复制的基础上实现读写分离、MyCat 集群部署(HAProxy + MyCat)、MyCat 高可用负载均衡集群Keepalived

    文章目录 MyCat在MySQL主从复制的基础上实现读写分离 一.环境 二.依赖课程 三.MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ ) 四.MyCat 的安装 ...

  4. LVS+Keepalived搭建MyCAT高可用负载均衡集群

    LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国 ...

  5. Mycat - 高可用与负载均衡实现,满满的干货!

    前言 开心一刻 和朋友去吃小龙虾,隔壁桌一个小女孩问妈妈:"妈妈,小龙虾回不了家,它妈妈会不会着急?" 她妈妈愣住了,我扒虾的手停下了,这么善良的问题,怎么下得了口.这是老板急忙过 ...

  6. keepalived实现mycat高可用问题排查;道路坎坷,布满荆棘,定让你大吃一惊!

    前言 开心一刻 医院里,一母亲带着小女孩打针.小女孩:“妈妈我不想打针,疼!”妈妈:“宝贝儿听话,这里这么多护士阿姨,咱们找个打针不疼的.”小女孩:“那哪个阿姨打针不疼呢?”妈妈:“妈妈也不知道,咱们 ...

  7. Mycat高可用解决方案三(读写分离)

    Mycat高可用解决方案三(读写分离) 一.系统部署规划 名称 IP 主机名称 配置 192.168.199.112 mycat01 2核/2G Mysql主节点 192.168.199.110 my ...

  8. Mycat高可用解决方案二(主从复制)

    Mycat高可用解决方案二(主从复制) 系统部署规划 名称 IP 主机名称 用户名/密码 配置 mysql主节点 192.168.199.110 mysql-01 root/hadoop 2核/2G ...

  9. Mycat高可用解决方案一(mysql安装)

    Mycat高可用解决方案一(mysql安装) Mycat关键特性 关键特性 支持SQL92标准 支持MySQL.Oracle.DB2.SQL Server.PostgreSQL等DB的常见SQL语法 ...

随机推荐

  1. CRM助力企业迎接数字化浪潮

    去年,国家发展改革委官网发布'数字化转型伙伴行动'倡议.倡议政府和社会各界联合起来,共同构建多元化的联合推荐机制,带动全行业数字化转型,构建数字化产业链,培育数字化生态,形成"数字引领.抗击 ...

  2. 要求用户输入若干员工信息,格式为: name,age,gender,salary,hiredate

    package day06; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util. ...

  3. [刷题] 1 Two Sum

    要求 给出一个整型数组nums 返回这个数组中两个数字的索引值i和j 使得nums[i]+nums[j]等于一个给定的target值 两个索引不能相等 实例 nums=[2,7,11,15], tar ...

  4. [刷题] 3 Longest Substring Without Repeating Character

    要求 在一个字符串中寻找没有重复字母的最长子串 举例 输入:abcabcbb 输出:abc 细节 字符集?字母?数字+字母?ASCII? 大小写是否敏感? 思路 滑动窗口 如果当前窗口没有重复字母,j ...

  5. Docker——Tomcat JVM 内存配置

    前言 安装再docker中的tomcat,在下载大文件或者某些情况下,会出现tomcat的内存溢出等情况,所以需要配置tomcat的内存大小,docker中的tomcat内存大小配置有四种方式. 一. ...

  6. 文件不同 diff --brief XX YY

    文件不同 diff --brief XX YY 文件不同 --哪些位置 diff -c XX YY 9.diff命令 diff命令用于比较多个文本文件的差异,格式为"diff [参数] 文件 ...

  7. 攻防世界(七)ics-06

    攻防世界系列:ics-06 1.打开题目 很LiuPi的样子,根据题目提示点开报表中心(其他的点开没什么变化) 注意到URL中有?id=1,测试其他数值无果 3.抓包对id爆破 设置1-10000,爆 ...

  8. Docker存储(4)

    一.docker存储资源类型 用户在使用 Docker 的过程中,势必需要查看容器内应用产生的数据,或者需要将容器内数据进行备份,甚至多个容器之间进行数据共享,这必然会涉及到容器的数据管理 (1)Da ...

  9. GO学习-(1) why go?

    为什么你应该学习Go语言? 终于等到你!Go语言--让你用写Python代码的开发效率编写C语言代码. 为什么互联网世界需要Go语言 世界上已经有太多太多的编程语言了,为什么又出来一个Go语言? 硬件 ...

  10. Springboot单元测试@RunWith注解

    1.RunWith 注解 RunWith 就是一个运行器 可以在单元测试的时候,自动创建spring的应用上下文 2.正确使用 pom.xml <dependency> <group ...