暂无图片
ptk安装磐维(cmdb)+zookeeper+shardingsphere
最近更新:2023-10-30 09:45:19

一、概览

1.1、 ShardingSphere-Proxy

  ShardingSphere-Proxy是透明化的数据库代理端,支持配置文件和DistSQL两种配置方式,作为代理部署在数据库上层,对应用层透明,兼容基于MySQL/PostgreSQL协议的数据库及客户端

1.分库 在水平分库中,就是将数据库中的表,存到不同的数据库,但是不同库的表数量和结构是一样的,只是每个库的数据都不一样,没有交集,库的并集是全量数据

在垂直分库中,以表为依据,按照业务归属不同,将不同的表拆分到不同的库中,不同的库存储的可能是不同的表,库的并集是全量数据

2.分表 水平分表就是将一张表分为多张表,表的结构都一样,每个表的数据都不一样,没有交集,所有表的并集是全量数据;

垂直分表将一张表字段拆分为不同的表,合并起来就是整个全量数据,但是这种可以归属于设计之初的设计缺陷

虽然使用分库分表可以一定程度解决上面所说的问题,但是分了之后也有可能再变大,总不能一直无脑拆分下去把,此时应该使用读写分离,也就是说读写分离应该是在分库分表的基础之上来实施的。

image.png

1.2、 ShardingSphere特性

ShardingSphere支持丰富的分布式场景所需功能,表1列出了这些特性和定义,后面章节会展开介绍。

表1.产品功能 |特性|定义|说明| |-|-|-| |数据分片 |ShardingSphere基于底层数据库提供分布式数据库解决方案,可以水平扩展计算和存储。 | | |读写分离 |基于对SQL语义理解及对底层数据库拓扑感知能力,提供灵活的读写流量拆分和读流量负载均衡。 | | |分布式事务 |支持XA和BASE的混合事务引擎,ShardingSphere 提供在独立数据库上的分布式事务功能,保证跨数据源的数据安全。 | | |高可用 |ShardingSphere提供基于原生或 Kubernetes 环境下数据库集群的分布式高可用能力。 | | |数据加密 |ShardingSphere提供完整、透明、安全、低成本的数据加密解决方案。 | | |影子库 |在全链路压测场景下,ShardingSphere支持不同工作负载下的数据隔离,避免测试数据污染生产环境。 | | |数据库网关 |屏蔽应用与底层多元化数据库之间连接,同时为不同的业务场景提供统一的访问协议和语法体系。 |实验特性 | |数据迁移 |ShardingSphere提供跨数据源的数据迁移能力,并可支持重分片扩展。 |仅支持单机到分布式迁移 | |流量治理 |在故障中为组件提供细粒度的控制能力,并通过熔断,限流等机制提供自愈的可能 | | |可观察性 |通过 Agent模块为应用提供可观察性的能力,支持Tracing(链路跟踪)、 Metrics(指标监控)和 Logging(日志) |Proxy组件支持 | |联邦查询 |ShardingSphere提供跨数据源的复杂查询分析能力,实现跨源的数据关联与聚合。 | |

ShardingSphere功能丰富全面,但个别实现还不完善,在使用方面也有一些限制:

  1. 权限管理粒度仅支持库级别,不支持表、列粒度的权限控制;

  2. 仅支持单库到分布式的数据迁移分片,且不能在同一个库内做迁移;

  3. 不支持弹性伸缩,不支持数据重分布;

  4. 审计功能目前仅支持一种拦截算法(查询时是否指定了分片列作为过滤条件),暂未支持统计等功能;

  5. 读写分离无法感知延迟来智能调整路由,目前开源版本仅支持固定规则的负载均衡路由策略;

  6. 数据加密仅支持基础的基于列的加密算法,不支持多密钥管理,复杂密态等;

  7. 语法兼容性还需完善:目前支持MySQL,PostgreSQL,SQLServer, Oracle, openGauss以及符合 SQL92 规范的SQL方言,但由于 SQL 语法的复杂性,目前仍然存在少量不支持的 SQL;

二、环境准备

2.1、ip 规划

|节点类| 主机名 | IP | sharding| |-|-|-|-| |主库a| panweia1| 10.10.3.13| √ | |备库 | panweia2| 10.10.3.14| | |主库b| panweib1| 10.10.3.15| √ | |备库 | panweib2| 10.10.3.16| | |主库c| panweic1| 10.10.3.17| √ | |备库 | panweic2| 10.10.3.18| |

2.2、修改主机名

hostnamectl set-hostname panweia1
hostnamectl set-hostname panweia2
hostnamectl set-hostname panweib1
hostnamectl set-hostname panweib2
hostnamectl set-hostname panweic1
hostnamectl set-hostname panweic2

2.3、关闭防火墙和透明大页(所有节点)

1) 关闭 SELINUX
修改 /etc/selinux/config文件中的“SELINUX”值为“disabled”
2) 关闭防火墙并禁止开机重启
systemctl disable firewalld.service
systemctl stop firewalld.service
3) 关闭透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled

2.4 配置yum,安装系统包

mkdir /media/cdrom
mount /dev/cdrom /media/cdrom
cd /etc/yum.repos.d/
mkdir bak
mv *.repo bak/

vi /etc/yum.repos.d/oracle.repo
[Server]
name=Red Hat Enterprise Linux $releasever Beta - $basearch - Source
baseurl=file:///media/cdrom
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release


yum install -y bzip2 libaio-devel flex bison ncurses-devel glibc-devel libxml2-devel patch redhat-lsb-core unzip gcc gcc-c++ perl openssl-devel libffi-devel libtool zlib-devel
yum install -y libaio-devel gcc gcc-c++ zlib-devel expect 


 yum install -y numactl
 

2.5 修改系统参数

cat >> /etc/sysctl.conf << eof
kernel.sem = 250 6400000 1000 25600
net.core.rmem_default = 262144
......