Sharding-JDBC 基础(一)

发布于 6 天前  27 次阅读


概述

Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使用的产品组成。 它们均提供标准化的数据水平扩展、分布式事务和分布式治理等功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。

Apache ShardingSphere 5.x 版本开始致力于可插拔架构,项目的功能组件能够灵活的以可插拔的方式进行扩展。 目前,数据分片、读写分离、数据加密、影子库压测等功能,以及 MySQL、PostgreSQL、SQLServer、Oracle 等 SQL 与协议的支持,均通过插件的方式织入项目。 开发者能够像使用积木一样定制属于自己的独特系统。

ShardingShpere 的功能清单

  • 功能列表
  • 数据分片
  • 分库 & 分表
  • 读写分离
  • 分片策略定制化
  • 无中心化分布式主键
  • 分布式事务
  • 标准化事务接口
  • XA 强一致事务
  • 柔性事务
  • 数据库治理
  • 分布式治理
  • 弹性伸缩
  • 可视化链路追踪
  • 数据加密

Docker 搭建 MySQL 主从复制

配置主库

#创建两个容器
docker run -p 3301:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
docker run -p 3302:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

#进入到 master 容器修改配置文件
docker exec -it mysql-master /bin/bash
apt-get update
apt-get install vim
vim /etc/mysql/my.cnf
#添加如下配置到文件中
[mysqld]
server-id=1
log-bin=master-bin
binlog-format=ROW

#退出并重启容器
exit
docker restart mysql-master

到 Windows 上使用工具连接到远程 MySQL 主库,使用下面的命令创建数据同步用户并且授权用于在主从库之间同步数据。

grant replication slave, replication client on *.* to 'slave'@'%' identified by 'root'
flush privileges

至此主库配置完毕,使用下面的命令查询主库的 binlog 文件名和位置。

show master status
Sharding-JDBC 基础(一)插图

配置从库

#进入到 slave 容器修改配置文件
docker exec -it mysql-slave /bin/bash
apt-get update
apt-get install vim
vim /etc/mysql/my.cnf
#添加如下配置到文件中
[mysqld]
server-id=2
log-bin=mysql-slave-bin   
relay_log=mysql-relay-bin  
read_only=1

#退出并重启容器
exit
docker restart mysql-slave

#查询主库容器的 ip 地址,需要记住,下面会用到。
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master

到 Windows 上使用工具连接到远程 MySQL 从库,使用下面的命令绑定主库。

change master to master_host='上面查询到的主库容器的 ip 地址', master_user='slave', master_password='root', master_port=3306, master_log_file='上面查询到的主库的 binlog 文件名', master_log_pos=上面查询到的主库的 binlog 位置, master_connect_retry=30;

#开启主从复制
start slave
#查看主从同步状态
show slave status
Sharding-JDBC 基础(一)插图1

要想试下是否真的成功了,只要在主库上新建一个数据库看下从库是否同步过去就知道了。