高可用方案 我们可以使用 HAProxy + Keepalived 配合两台 Mycat 搭起 Mycat 集群,实现高可用性。 HAProxy实现了 MyCat 多节点的集群高可用和负载均衡, 而 HAProxy 自身的高可用则可以通过 Keepalived 来实现.
安装配置 HAProxy
解压编译
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安装路径。
编译完成后进行安装
进入haproxy下sbin中编写配置文件
编写配置文件
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.179.148:8066 check inter 10s
server mycat_2 192.168.179.152: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
创建软连接
启动haproxy服务查看端口
关闭7777和48066防火墙端口
验证7777和48066
7777:
在浏览器上输入http://ip:7777/admin
输入配置的用户与密码登录进去
48066:
安装配置keep
创建防火墙规则
firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --in-interface enp0s3 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface enp0s3 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload
安装依赖包
yum install kernel-devel openssl-devel popt-devel
解压keep包后编译安装
tar zxf keepalived-2.2.4.tar.gz
cd keepalived-2.2.4/
./configure --prefix=/ && make && make install
修改keep主配文件
Vim /etc/keepalived/keepalived.conf
主配翻译:
! Configuration File for keepalived //!表示注释
global_defs {
router_id MYSQL-1 //表示运行keepalived服务器的一个标识
}
vrrp_instance VI_1 {
state BACKUP //指定keepalived的角色, 两台配置此处均是BACKUP,设为BACKUP将根据优 先级决定主或从
interface eth0 //指定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选举(可以认为是健康查检时 间间隔)
nopreempt //不抢占,即允许一个priority比较低的节点作为master,即使有priority更
高的节点启动
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 3306 { //设置虚拟服务器,需要指定虚拟IP地址和服务端 口,IP与端口之间用空格隔开
delay_loop 2 //设置运行情况检查时间,单位是秒
lb_algo rr //设置后端调度算法,这里设置为rr,即轮询算法
lb_kind DR //设置LVS实现负载均衡的机制,有NAT、TUN、DR三个模式可选
persistence_timeout 60 //会话保持时间,单位是秒。这个选项对动态网页是非常有用的, 为集群系统中的session共享提供了一个很好的解决方案。有了这个会话保持功能,用户的请求会被一 直分发到某个服务节点,直到超过这个会话的保持时间。
protocol TCP //指定转发协议类型,有TCP和UDP两种
real_server 192.168.1.101 3306 { //配置服务节点1,需要指定real server的真实IP 地址和端口,IP与端口之间用空格隔开
注:master 2上此处改为192.168.1.102(即master2本机ip)
weight 3 //配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权 值大小为了区分不同性能的服务器
notify_down /etc/keepalived/bin/mysql.sh //检测到realserver的mysql服务down 后执行的脚本
TCP_CHECK {
connect_timeout 3 //连接超时时间
nb_get_retry 3 //重连次数
delay_before_retry 3 //重连间隔时间
connect_port 3306 //健康检查端口
}
}
}
第二台mycat修改优先级
启动keep
查看进程是否开启
ps -ef |grep keep
查看mycat1ip
使用192.168.179.100登录mycat查看是否登录成功
Mycat安全设置
权限配置
user 标签权限控制 目前 Mycat 对于中间件的连接控制并没有做太复杂的控制,目前只做了中间件逻辑库 级别的读写权限控制。是通过 server.xml 的 user 标签进行配置。
privileges 标签权限控制 在 user 标签下的 privileges 标签可以对逻辑库(schema)、表(table)进行精 细化的 DML 权限控制。 privileges 标签下的 check 属性,如为 true 开启权限检查,为 false 不开启,默 认为 false。 由于 Mycat 一个用户的 schemas 属性可配置多个逻辑库(schema) ,所以 privileges 的下 级节点 schema 节点同样可配置多个,对多库多表进行细粒度的 DML 权限控制.
配置说明
Sql拦截
firewall 标签用来定义防火墙; firewall 下 whitehost 标签用来定义 IP 白名单 , blacklist 用来定义SQL 黑名单。
- 白名单 可以通过设置白名单, 实现某主机某用户可以访问 Mycat,而其他主机用户禁止访问。 ####设 置白名单
配置只有192.168.179网段的主机可以通过mycat用户访问
2. 黑名单 可以通过设置黑名单, 实现 Mycat 对具体 SQL 操作的拦截, 如增删改查等操作的拦截。
配置禁止mycat用户进行删除操作
可以设置的黑名单 SQL 拦截功能列表