在实际项目中, Mycat 服务也须要考虑高可用性,若是 Mycat 所在服务器出现宕机,或 Mycat 服务故障,须要有备机提供服务,须要考虑 Mycat 集群。mysql
可使用 HAProxy+Keepalived配合两台MyCat搭起MyCat集群,实现高可用性。 HAProxy实现了MyCat多节点的集群高可用和负载均衡,而 HAProxy自身的高可用则能够经过Keepalived来实现.linux
主机 | 操做系统 | 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服务web
[root@mycat mycat]# ./bin/mycat start [root@mycat mycat2]# ./bin/mycat start
测试链接mycat(能够链接本身,而且能够链接到另外一台mycat)redis
[root@mycat ~]# mysql -umycat -p123456 -P8066 -h 192.168.1.3 [root@mycat2 ~]# mysql -umycat -p123456 -P8066 -h 192.168.1.11 [root@mycat ~]# mysql -umycat -p123456 -P8066 -h 192.168.1.11 [root@mycat2 ~]# mysql -umycat -p123456 -P8066 -h 192.168.1.3
[root@haproxy01 ~]# tar zxf haproxy-1.8.23.tar.gz -C /usr/local/src/
[root@haproxy01 ~]# cd /usr/local/src/haproxy-1.8.23/ [root@haproxy01 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安装路径。算法
[root@haproxy01 haproxy-1.8.23]# make install PREFIX=/usr/local/haproxy
编辑配置文件(文件内容本身定义):sql
[root@haproxy01 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
[root@haproxy01 haproxy-1.8.23]# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.conf
查看HAProxy进程vim
[root@haproxy01 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浏览器
[root@mysql03 ~]# scp /usr/local/mysql/bin/mysql 192.168.1.4:/usr/local/sbin/ [root@mysql03 ~]# scp /usr/local/mysql/bin/mysql 192.168.1.5:/usr/local/sbin/ [root@haproxy01 haproxy-1.8.23]# mysql -umycat -p123456 -h 192.168.1.4 -P 48066 [root@haproxy01 haproxy-1.8.23]# mysql -umycat -p123456 -h 192.168.1.5 -P 48066
[root@haproxy01 ~]# tar zxf keepalived-2.0.20.tar.gz -C /usr/local/src/
安装依赖插件安全
[root@haproxy01 ~]# yum -y install gcc openssl-devel popt-devel
进入解压后的目录, 进行配置, 进行编译
[root@haproxy01 ~]# cd /usr/local/src/keepalived-2.0.20/ [root@haproxy01 keepalived-2.0.20]# ./configure --prefix=/usr/local/keepalived
完成后进行安装
[root@haproxy01 keepalived-2.0.20]# make && make install
运行前配置
[root@haproxy01 keepalived-2.0.20]# cp /usr/local/src/keepalived-2.0.20/keepalived/etc/init.d/keepalived /etc/init.d/ [root@haproxy01 keepalived-2.0.20]# mkdir /etc/keepalived [root@haproxy01 keepalived-2.0.20]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/[root@haproxy01 keepalived-2.0.20]# cp /usr/local/src/keepalived-2.0.20/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ [root@haproxy01 keepalived-2.0.20]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
修改配置文件
[root@haproxy01 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
[root@haproxy01 keepalived-2.0.20]# scp /etc/keepalived/keepalived.conf 192.168.1.5:/etc/keepalived/keepalived.conf
作一些简单修改
[root@haproxy02 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 } } }
[root@haproxy01 keepalived-2.0.20]# service keepalived start Starting keepalived (via systemctl): [ OK ] [root@haproxy01 keepalived-2.0.20]# ip a
开启第二台的服务
[root@localhost keepalived-2.0.20]# service keepalived start Starting keepalived (via systemctl): [ OK ]
登陆验证(访问VIP地址)
[root@haproxy01 keepalived-2.0.20]# mysql -umycat -p123456 -h192.168.1.100 -P 48066
模拟第一台mycat宕机:
[root@mycat ~]# ./mycat/bin/mycat stop
继续经过haproxy(VIP)访问:
[root@haproxy01 keepalived-2.0.20]# mysql -umycat -p123456 -h 192.168.1.100 -P 48066
依然能够访问到
模拟第一台haproxy宕机
断开网卡链接
能够看到VIP跳到了第二台服务器
[root@localhost keepalived-2.0.20]# ip a
继续经过haproxy(VIP)访问:
[root@localhost keepalived-2.0.20]# mysql -umycat -p123456 -h 192.168.1.5 -P 48066
依然可以访问到服务
[root@mycat ~]# ./mycat/bin/mycat start //将第一台mycat启动
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 | 能够 | 能够 | 能够 | 能够 |
firewall 标签用来定义防火墙:
firewall下whitehost标签用来定义IP白名单, blacklist用来定义SQL 黑名单。
设置白名单 #server.xml配置文件firewall标签 #配置只有192.168.1.4主机能够经过mycat用户访问 <firewall> <whitehost> <host host="192.168.1.4" user="mycat"/> </whitehost> </firewall>
设置黑名单 #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>
配置项 | 缺省值 | 描述 |
---|---|---|
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操做 |