Mycat核心教程--基于HA 机制的Mycat 高可用【二】

Mycat核心教程--基于HA 机制的Mycat 高可用

六、基于HA 机制的Mycat 高可用

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

6.1.高可用方案

我们可以使用HAProxy + Keepalived 配合两台 Mycat 搭起 Mycat 集群,实现高可用性。

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

在这里插入图片描述

编号角色IP地址机器名
1Mycat1192.168.147.128host128
2Mycat2192.168.147.129host129
3HAProxy(master)192.168.147.130host130
4Keepalived(master)192.168.147.130host130
5HAProxy(backup)192.168.147.131host131
6Keepalived(backup)192.168.147.131host131

6.2.安装配置HAProxy

6.2.1.准备好HAProxy安装包,传到/opt目录下

官网:https://www.haproxy.org/

cd /opt/

wget https://www.haproxy.org/download/1.5/src/haproxy-1.5.19.tar.gz

在这里插入图片描述

在这里插入图片描述

6.2.2.解压到/usr/local/src

tar -xzvf haproxy-1.5.19.tar.gz -C /usr/local/src/

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

cd /usr/local/src/haproxy-1.5.19

# 查看内核版本
uname -r
# 3.10.0-1160.71.1.el7.x86_64

# 执行Linux的make命令进行编译
make TARGET=linux310 PREFIX=/usr/local/haproxy ARCH=x86_64

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

在这里插入图片描述

6.2.4.编译完成后,进行安装

make install PREFIX=/usr/local/haproxy

在这里插入图片描述

6.2.5.安装完成后,创建目录、创建HAProxy配置文件

# 将解压后目录下的配置模版文件拷贝到程序运行目录的配置文件目录下
cp /usr/local/src/haproxy-1.5.19/examples/haproxy.cfg /usr/local/haproxy/haproxy.cfg

# 创建目录
mkdir -p /usr/data/haproxy/

vim /usr/local/haproxy/haproxy.conf

6.2.6.向配置文件中插入以下配置信息,并保存

# 全局配置,定义haproxy进程的工作特性和全局配置
global
	# 定义全局的 syslog 服务器,最多可以定义两个
	log 127.0.0.1	local0
	#log 127.0.0.1	local1 notice
	#log loghost	local0 info
	maxconn 4096
	# chroot运行的路径,,当前目录为指定目录,设置超级用户权限启动进程,提高安全性
	chroot /usr/local/haproxy 
	# haproxy pid的存放位置
	pidfile /usr/data/haproxy/haproxy.pid 
	uid 99
	gid 99
	# 守护进程的方式在后台工作
	daemon
	#debug
	#quiet

# 默认配置
defaults
	# 日志继承全局配置段的设置
	log 	global
	mode    tcp 
	option  abortonclose
  	option  redispatch
  	# 重试次数为3次,失败3次以后则表示服务不可用
  	retries 3 
	maxconn 2000 
	# 连接超时时间,表示客户端请求转发至服务器所等待的时长
	timeout connect 5000 
	# 客户端超时时间,表示客户端非活跃状态的时间
	timeout client  50000 
	# 服务器超时时间,表示客户端与服务器建立连接后,等待服务器的超时时间
	timeout server  50000
	
listen proxy_status
	# bind后面必须有空格然后加冒号,否则会报错
	bind :48066
		mode tcp 
		balance roundrobin 
		server mycat_1 192.168.147.128:8066 check inter 10s 
		server mycat_2 192.168.147.129: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
# 控制台的用户名admin 密码123123

6.2.7.放行8066端口

systemctl status firewalld

# --add-port=8066/tcp,表示添加指定8066端口,格式为:端口/通讯协议
# --permanent表示设置为持久
# --zone  表示作用域
firewall-cmd --zone=public --add-port=8066/tcp --permanent

# --remove-port表示移除指定端口
firewall-cmd --zone=public --remove-port=8066/tcp --permanent

# 重新加载防火墙
firewall-cmd --reload

# 再次查询开放端口
firewall-cmd --list-ports

# 查看已配置规则
firewall-cmd --list-all

6.2.8.启动验证–启动HAProxy

/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.conf 

6.2.9.查看HAProxy进程

ps -ef | grep haproxy 

在这里插入图片描述

6.2.10.haproxy安装成系统服务

# 创建脚本
vi /usr/lib/systemd/system/haproxy.service

# 重新加载系统服务
systemctl daemon-reload

systemctl start haproxy
systemctl stop haproxy
systemctl status haproxy
[Unit]
Description=HAProxy Load Balancer
Documentation=https://www.haproxy.org/
After=network.target

[Service]
Type=forking
PIDFile=/usr/data/haproxy/haproxy.pid
ExecStart=/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true

[Install]
WantedBy=default.target

在这里插入图片描述

6.2.11.Mycat主备机均启动

mycat console

在这里插入图片描述

在这里插入图片描述

6.2.12.打开浏览器访问

http://192.168.147.130:7777/admin

#在弹出框输入用户名:admin密码:123123 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

mysql -umycat -p -P 48066 -h 192.168.147.130
123456

在这里插入图片描述
在这里插入图片描述

6.3.配置Keepalived

keepalived官网地址:https://keepalived.org/

6.3.1.准备好Keepalived安装包,传到/opt目录下

cd /opt/

wget https://keepalived.org/software/keepalived-2.2.8.tar.gz

在这里插入图片描述

6.3.2.解压到/usr/local/src

tar -zxvf keepalived-2.2.8.tar.gz -C /usr/local/src

6.3.3.安装依赖插件

yum install -y gcc openssl-devel popt-devel libnl libnl-devel

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

cd /usr/local/src/keepalived-2.2.8

./configure --prefix=/usr/local/keepalived

6.3.5.进行编译,完成后进行安装

make && make install

6.3.6.运行前配置

cp /usr/local/src/keepalived-2.2.8/keepalived/etc/init.d/keepalived /etc/init.d/ 

mkdir /etc/keepalived 

cp /usr/local/keepalived/etc/keepalived/keepalived.conf.sample /etc/keepalived/keepalived.conf

cp /usr/local/src/keepalived-2.2.8/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ 

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ 

6.3.7.修改配置文件

vim /etc/keepalived/keepalived.conf
#修改内容如下
! Configuration File for keepalived

global_defs { 
	notification_email { 
		coon@foxmail.com 
   	}
   	notification_email_from keepalived@joy.com    
   	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 {
	#主机配MASTER,备机配BACKUP 
	state MASTER 
	#所在机器网卡 
    interface ens33 
	virtual_router_id 51 
	#数值越大优先级越高 
    priority 100 
    advert_int 1 
    authentication{
	    auth_type PASS 
	    auth_pass 1111 
	} 
	virtual_ipaddress { 
		#虚拟IP 
		192.168.147.200 
    } 
} 
virtual_server 192.168.147.200 48066 { 
	delay_loop 6 
    lb_algo rr 
    lb_kind NAT     
    persistence_timeout 50     
    protocol TCP 
    # HAProxy主机
    real_server 192.168.147.130 48066 {
	    weight 1 
	    TCP_CHECK { 
		    connect_timeout 3 
		    retry 3 
			delay_before_retry 3
		} 
	} 
	# HAProxy从机
	real_server 192.168.147.131 48600 {  
		weight 1 
	    TCP_CHECK { 
		    connect_timeout 3 
		    retry 3 
			delay_before_retry 3
		} 
	} 
	
}

6.3.8.启动验证–启动Keepalived

systemctl start keepalived
systemctl stop keepalived
systemctl status keepalived

在这里插入图片描述
在这里插入图片描述

6.3.9.登录验证

mysql -umycat -p -P 48066 -h 192.168.147.200
123456

在这里插入图片描述
在这里插入图片描述

6.4.测试高可用

6.4.1.关闭mycat

在这里插入图片描述

6.4.2.通过虚拟ip查询数据

mysql -umycat -p123456 -h 192.168.147.200 -P 48066

在这里插入图片描述
在这里插入图片描述

七、Mycat 安全设置

7.1.权限配置

7.1.1.user 标签权限控制

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

7.1.1.1.修改配置文件server.xml
vi /usr/local/mycat/conf/server.xml
#server.xml配置文件user部分 
<user name="mycat"> 
	<property name="password">123456</property> 
	<property name="schemas">TESTDB</property> 
</user> 
<user name="user"> 
	<property name="password">user</property> 
	<property name="schemas">TESTDB</property> 
	<property name="readOnly">true</property> 
</user>

在这里插入图片描述

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

7.1.2.测试案例一

  • 使用user用户,权限为只读(readOnly:true)
  • 验证是否可以查询出数据,验证是否可以写入数据
7.1.2.1.用user用户登录,运行命令如下
mysql -uuser -puser -h 192.168.147.128 -P8066

在这里插入图片描述

7.1.2.2.切换到TESTDB数据库,查询orders表数据
use TESTDB;

select * from orders;
7.1.2.3.查询到数据,如图

在这里插入图片描述

7.1.2.4.执行插入数据sql
insert into orders(id,order_type,customer_id,amount) values(7,101,101,10000);
7.1.2.5.可看到运行结果,插入失败,只有只读权限

在这里插入图片描述

7.1.3.测试案例二

  • 使用mycat用户,权限为可读写(readOnly:false)
  • 验证是否可以查询出数据,验证是否可以写入数据
7.1.3.1.用mycat用户登录,运行命令如下
mysql -umycat -p123456 -h 192.168.147.128 -P8066 

在这里插入图片描述

7.1.3.2.切换到TESTDB数据库,查询orders表数据
use TESTDB;

select * from orders;
7.1.3.3.查询到数据

在这里插入图片描述

7.1.3.4.执行插入数据sql
insert into orders(id,order_type,customer_id,amount) values(7,101,101,10000);
insert into orders(id,order_type,customer_id,amount) values(next value for MYCATSEQ_ORDERS,101,101,10000);
7.1.3.5.看到运行结果,插入成功

在这里插入图片描述

7.1.4.privileges 标签权限控制

在user 标签下的privileges 标签可以对逻辑库(schema)、表(table)进行精细化的DML 权限控制。

privileges 标签下的check 属性,如为true 开启权限检查,为 false 不开启,默认为 false。

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

7.1.4.1.修改server.xml配置文件privileges部分
vi /usr/local/mycat/conf/server.xml
#server.xml配置文件privileges部分
#配置orders表没有增删改查权限
<user name="mycat"> 
	<property name="password">123456</property> 
	<property name="schemas">TESTDB</property> 
	<!-- 表级 DML 权限设置 --> 
	<privileges check="true"> 
		<schema name="TESTDB" dml="1111" >
			<table name="orders" dml="0000"></table> 
			<!--<table name="tb02" dml="1111"></table>--> 
		</schema> 
	</privileges> 
</user> 

在这里插入图片描述

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

7.1.5.测试案例一

  • 使用mycat用户,privileges配置orders表权限为禁止增删改查(dml=“0000”)
  • 验证是否可以查询出数据,验证是否可以写入数据
7.1.5.1.重启mycat,用mycat用户登录,运行命令
mysql -umycat -p123456 -h 192.168.147.128 -P8066
7.1.5.2.切换到TESTDB数据库,查询orders表数据
use TESTDB;

select * from orders;
7.1.5.3.禁止该用户查询数据

在这里插入图片描述

7.1.5.4.执行插入数据sql
insert into orders(id,order_type,customer_id,amount) values(8,101,101,10000);
insert into orders(id,order_type,customer_id,amount) values(next value for MYCATSEQ_ORDERS,105,102,10000);
7.1.5.5.可看到运行结果,禁止该用户插入数据

在这里插入图片描述

7.1.6.测试案例二

  • 使用mycat用户,privileges配置orders表权限为禁止增删改查(dml=“1111”)
  • 验证是否可以查询出数据,验证是否可以写入数据
vi /usr/local/mycat/conf/server.xml

在这里插入图片描述

7.1.6.1.重启mycat,用mycat用户登录,运行命令
mysql -umycat -p123456 -h 192.168.147.128 -P8066
7.1.6.2.切换到TESTDB数据库,查询orders表数据
use TESTDB;

select * from orders;
7.1.6.3.可以查询到数据,如图

在这里插入图片描述

7.1.6.4.执行插入数据sql
insert into orders(id,order_type,customer_id,amount) values(8,101,101,10000);
7.1.6.5.运行结果,插入成功

在这里插入图片描述

7.1.6.6.执行删除数据sql
delete from orders where id in (7,8);
7.1.6.7.运行结果,删除成功

在这里插入图片描述

7.2.SQL 拦截

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

7.2.1.白名单

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

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

在这里插入图片描述

7.2.1.2.重启Mycat后,192.168.147.129主机使用mycat用户访问
mysql -umycat -p123456 -h 192.168.140.128 -P 8066
7.2.1.3.可以正常访问

在这里插入图片描述

7.2.1.4.在此主机换user用户访问,禁止访问
mysql -uuser -puser -h 192.168.147.128 -P8066

在这里插入图片描述

7.2.1.5.在192.168.147.130主机用mycat用户访问,禁止访问
mysql -umycat -p -h 192.168.147.128 -P 8066
123456

在这里插入图片描述

7.2.2.黑名单

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

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

在这里插入图片描述

7.2.2.2.重启Mycat后,192.168.147.129主机使用mycat用户访问
mysql -umycat -p -h 192.168.147.128 -P 8066
123456
7.2.2.3.可以正常访问

在这里插入图片描述

7.2.2.4.切换TESTDB数据库后,执行删除数据语句
use TESTDB;

select * from orders;

delete from orders where id = 6;
7.2.2.5.运行后发现已禁止删除数据

在这里插入图片描述

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

配置项缺省值描述
selelctAllowtrue是否允许执行 SELECT 语句
deleteAllowtrue是否允许执行 DELETE 语句
updateAllowtrue是否允许执行 UPDATE 语句
insertAllowtrue是否允许执行 INSERT 语句
createTableAllowtrue是否允许创建表
setAllowtrue是否允许使用 SET 语法
alterTableAllowtrue是否允许执行 Alter Table 语句
dropTableAllowtrue是否允许修改表
commitAllowtrue是否允许执行 commit 操作
rollbackAllowtrue是否允许执行 roll back 操作

endl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

良辰美景好时光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值