mycat高可用-安全管理-监控 看这一篇就够了
在之前的操作中,我们已经实现了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高可用-安全管理-监控 看这一篇就够了的更多相关文章
- Mycat+MySql 主从复制-读写分离 看这一篇就够了
通过mycat和mysql的主从复制配合搭建数据库的读写分离,可以实现mysql的高可用性,下面我们来搭建mysql的读写分离. 1.一主一从 1.在node01上修改/etc/my.cnf的文件 ...
- mycat的安装及使用 看这一篇就够了
1.环境准备 本次使用的虚拟机环境是centos6.5 首先准备四台虚拟机,安装好mysql,方便后续做读写分离和主从复制. 192.168.85.111 node01 192.168.85. ...
- Dubbo入门到精通学习笔记(二十):MyCat在MySQL主从复制的基础上实现读写分离、MyCat 集群部署(HAProxy + MyCat)、MyCat 高可用负载均衡集群Keepalived
文章目录 MyCat在MySQL主从复制的基础上实现读写分离 一.环境 二.依赖课程 三.MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ ) 四.MyCat 的安装 ...
- LVS+Keepalived搭建MyCAT高可用负载均衡集群
LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国 ...
- Mycat - 高可用与负载均衡实现,满满的干货!
前言 开心一刻 和朋友去吃小龙虾,隔壁桌一个小女孩问妈妈:"妈妈,小龙虾回不了家,它妈妈会不会着急?" 她妈妈愣住了,我扒虾的手停下了,这么善良的问题,怎么下得了口.这是老板急忙过 ...
- keepalived实现mycat高可用问题排查;道路坎坷,布满荆棘,定让你大吃一惊!
前言 开心一刻 医院里,一母亲带着小女孩打针.小女孩:“妈妈我不想打针,疼!”妈妈:“宝贝儿听话,这里这么多护士阿姨,咱们找个打针不疼的.”小女孩:“那哪个阿姨打针不疼呢?”妈妈:“妈妈也不知道,咱们 ...
- Mycat高可用解决方案三(读写分离)
Mycat高可用解决方案三(读写分离) 一.系统部署规划 名称 IP 主机名称 配置 192.168.199.112 mycat01 2核/2G Mysql主节点 192.168.199.110 my ...
- Mycat高可用解决方案二(主从复制)
Mycat高可用解决方案二(主从复制) 系统部署规划 名称 IP 主机名称 用户名/密码 配置 mysql主节点 192.168.199.110 mysql-01 root/hadoop 2核/2G ...
- Mycat高可用解决方案一(mysql安装)
Mycat高可用解决方案一(mysql安装) Mycat关键特性 关键特性 支持SQL92标准 支持MySQL.Oracle.DB2.SQL Server.PostgreSQL等DB的常见SQL语法 ...
随机推荐
- CRM助力企业迎接数字化浪潮
去年,国家发展改革委官网发布'数字化转型伙伴行动'倡议.倡议政府和社会各界联合起来,共同构建多元化的联合推荐机制,带动全行业数字化转型,构建数字化产业链,培育数字化生态,形成"数字引领.抗击 ...
- 要求用户输入若干员工信息,格式为: name,age,gender,salary,hiredate
package day06; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util. ...
- [刷题] 1 Two Sum
要求 给出一个整型数组nums 返回这个数组中两个数字的索引值i和j 使得nums[i]+nums[j]等于一个给定的target值 两个索引不能相等 实例 nums=[2,7,11,15], tar ...
- [刷题] 3 Longest Substring Without Repeating Character
要求 在一个字符串中寻找没有重复字母的最长子串 举例 输入:abcabcbb 输出:abc 细节 字符集?字母?数字+字母?ASCII? 大小写是否敏感? 思路 滑动窗口 如果当前窗口没有重复字母,j ...
- Docker——Tomcat JVM 内存配置
前言 安装再docker中的tomcat,在下载大文件或者某些情况下,会出现tomcat的内存溢出等情况,所以需要配置tomcat的内存大小,docker中的tomcat内存大小配置有四种方式. 一. ...
- 文件不同 diff --brief XX YY
文件不同 diff --brief XX YY 文件不同 --哪些位置 diff -c XX YY 9.diff命令 diff命令用于比较多个文本文件的差异,格式为"diff [参数] 文件 ...
- 攻防世界(七)ics-06
攻防世界系列:ics-06 1.打开题目 很LiuPi的样子,根据题目提示点开报表中心(其他的点开没什么变化) 注意到URL中有?id=1,测试其他数值无果 3.抓包对id爆破 设置1-10000,爆 ...
- Docker存储(4)
一.docker存储资源类型 用户在使用 Docker 的过程中,势必需要查看容器内应用产生的数据,或者需要将容器内数据进行备份,甚至多个容器之间进行数据共享,这必然会涉及到容器的数据管理 (1)Da ...
- GO学习-(1) why go?
为什么你应该学习Go语言? 终于等到你!Go语言--让你用写Python代码的开发效率编写C语言代码. 为什么互联网世界需要Go语言 世界上已经有太多太多的编程语言了,为什么又出来一个Go语言? 硬件 ...
- Springboot单元测试@RunWith注解
1.RunWith 注解 RunWith 就是一个运行器 可以在单元测试的时候,自动创建spring的应用上下文 2.正确使用 pom.xml <dependency> <group ...