Redis:

MySQL:


Centos

1
2
# 重启樱花映射
docker restart natfrp-service
1
2
# 强制同步时间
sudo systemctl restart chronyd

parallels@10.211.55.15 zhang...1997

1
2
# Redis 日志位置
redis.log /home/parallels/app/redis/log/redis.log

mysql:

账号:centos
密码:centos

redis:

防火墙:

关闭防火墙:sudo systemctl stop firewalld

永久关闭防火墙:

sudo systemctl disable firewalld

防火墙状态:sudo firewall-cmd --state

Jdk 1.8

1
2
3
4
5
6
291  wget https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz                                      
292 mkdir -p /usr/java/
293 tar -zxvf jdk-8u202-linux-x64.tar.gz -C /usr/java/
294 vim /etc/profile
295 source /etc/profile
296 java -version

linux01

ssh linux01@10.211.55.16 linux01

mysql、redis

redis.log: /home/linux01/log

关闭防火墙:sudo ufw disable

永久关闭防火墙:

1
2
sudo systemctl stop ufw
sudo systemctl disable ufw

mysql

账号:linux01
密码:linux01

15虚拟机

Redis安装

在CentOS上手动安装Redis的步骤如下:

  1. 安装依赖
    Redis是由C语言开发的,因此首先需要确保服务器已经安装了GCC编译器。可以通过以下命令查看机器是否安装了GCC:
    gcc -v
    如果没有安装,可以通过以下命令进行安装:
    sudo yum install -y gcc
  2. 下载并解压Redis安装包
    下载Redis安装包,可以选择直接通过浏览器下载,或者使用wget命令在终端中下载。以下是一个使用wget命令下载Redis安装包的示例:
    wget https://download.redis.io/releases/redis-6.2.6.tar.gz
    解压下载的文件:
    tar -zxvf redis-6.2.6.tar.gz
  3. 编译安装
    进入解压后的Redis目录:
    cd redis-6.2.6
    使用make命令进行编译:
    make
    编译完成后,使用make install命令进行安装,可以指定安装目录:
    make install PREFIX=/usr/local/redis
  4. 配置Redis
    将Redis的配置文件(redis.conf)复制到安装目录:
    cp /root/redis-6.2.6/redis.conf /usr/local/redis/bin/
    修改redis.conf配置文件以支持后台运行:
    vi /usr/local/redis/bin/redis.conf
    将daemonize的值从no修改为yes:
    daemonize yes
  5. 启动Redis服务
    前台启动
    进入Redis安装目录并启动服务:
    cd /usr/local/redis
    ./redis-server
    后台启动
    创建Redis的工作目录:
    mkdir /usr/local/redis/log
    编辑配置文件,添加日志文件路径:
    vim /usr/local/redis/bin/redis.conf
    添加以下内容:
    logfile "/usr/local/redis/log/redis.log"
    启动Redis服务:
    ./redis-server ./redis.conf
  6. 设置开机自启动
    创建systemd服务文件:
    vim /lib/systemd/system/redis.service
    添加以下内容:
1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=Redis Server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf
ExecStop=/usr/local/redis/bin/redis-cli shutdown
Restart=always
[Install]
WantedBy=multi-user.target

启动Redis服务并设置开机自启:

1
2
systemctl start redis
systemctl enable redis
  1. 验证安装
    通过Redis客户端连接并测试:
    ./redis-cli
    使用ping命令测试连接:
    ping
    通过以上步骤,你可以在CentOS上成功手动安装并配置Redis。

MySQL安装

1. 更新系统

确保系统是最新的:

1
sudo dnf update -y

2. 添加 MySQL 官方 DNF 仓库

CentOS Stream 9 使用 dnf 作为包管理器,我们需要添加 MySQL 官方仓库:

  1. 下载适用于 EL9 的 MySQL Yum 仓库 RPM:

    1
    2
    sudo dnf install -y wget
    wget https://dev.mysql.com/get/mysql80-community-release-el9-5.noarch.rpm

    注意:这是截至 2025 年 2 月的最新版本。如果链接失效,请访问 MySQL 官方下载页面 获取最新 RPM。

  2. 安装 RPM:

    1
    sudo rpm -Uvh mysql80-community-release-el9-5.noarch.rpm
  3. 更新 DNF 缓存:

    1
    sudo dnf makecache

3. 安装 MySQL 8.0.41

CentOS Stream 9 的默认仓库可能不直接提供 8.0.41,但 MySQL 官方仓库会有多个版本。检查可用版本:

1
dnf --showduplicates list mysql-community-server

输出类似:

1
2
mysql-community-server.x86_64  8.0.41-1.el9  mysql80-community
mysql-community-server.x86_64 8.0.40-1.el9 mysql80-community

如果 8.0.41 可用,安装指定版本:

1
sudo dnf install -y mysql-community-server-8.0.41-1.el9

如果没有列出 8.0.41,默认安装最新版本:

1
sudo dnf install -y mysql-community-server

4. 启动 MySQL 服务

安装完成后,启动服务并设置开机自启:

1
2
sudo systemctl start mysqld
sudo systemctl enable mysqld

检查状态:

1
sudo systemctl status mysqld

5. 获取临时密码

MySQL 首次安装会生成一个临时 root 密码,查看日志:

1
sudo grep 'temporary password' /var/log/mysqld.log

记下密码(例如 abcd1234!xyz)。

– Lk(wE0fZxypJ0

修改密码级别

6. 配置 MySQL

使用临时密码登录:

1
mysql -u root -p

修改 root 密码:

1
2
3
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
FLUSH PRIVILEGES;
EXIT;

7. 验证安装

检查版本:

1
mysql -u root -p -e "SELECT VERSION();"

输出应包含 8.0.41(或你安装的版本)。


如果 8.0.41 不可用:手动安装

如果 MySQL 官方 EL9 仓库没有 8.0.41,可以手动下载 RPM 包:

  1. 访问 MySQL 官方档案
  2. 选择 8.0.41,下载适用于 EL9 的包(例如 mysql-community-server-8.0.41-1.el9.x86_64.rpm)。
  3. 安装:
    1
    sudo dnf install -y ./mysql-community-server-8.0.41-1.el9.x86_64.rpm
    如果缺少依赖,运行:
    1
    sudo dnf install -y -f

解决依赖问题

CentOS Stream 9 不提供 OpenSSL 1.0.2(libcrypto.so.10libssl.so.10),而 MySQL 8.0.41 的 EL7 包依赖这些库。如果你坚持使用 el7 包(不推荐),需要手动安装兼容性库,但这在 Stream 9 上非常复杂且不稳定。建议:

  • 使用 EL9 版本的 MySQL 8.0.41(如上所述)。
  • 或选择更新的 MySQL 版本(8.0.x 的最新版已适配 EL9 的 OpenSSL)。

开启远程连接(可选)

如果需要远程访问:

  1. 编辑配置文件:

    1
    sudo vim /etc/my.cnf.d/mysql-server.cnf

    [mysqld] 下添加:

    1
    bind-address = 0.0.0.0
  2. 配置用户权限:

    1
    2
    3
    CREATE USER 'centos'@'%' IDENTIFIED BY 'centos';
    GRANT ALL PRIVILEGES ON *.* TO 'centos'@'%';
    FLUSH PRIVILEGES;
  3. 重启服务:

    1
    sudo systemctl restart mysqld
  4. 开放防火墙:

    1
    2
    sudo firewall-cmd --add-port=3306/tcp --permanent
    sudo firewall-cmd --reload

注意事项

  • CentOS Stream 9 是滚动更新的发行版,库版本较新,与 EL7 包不完全兼容。
  • 如果仍想用 8.0.41 的 EL7 包,建议切换到 CentOS 7 系统。
  • 遇到任何错误(例如依赖或启动失败),请提供具体输出,我会帮你解决。

现在你可以尝试安装了!需要进一步帮助吗?

mysql workbench

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 更新系统
sudo dnf update -y

# 安装 EPEL
sudo dnf install -y epel-release

# 安装 unixODBC
sudo dnf install -y unixODBC

# 安装 proj(如果 EPEL 提供合适的版本)
sudo dnf install -y proj-libs proj-devel

# 如果需要手动安装 proj-8.2.1
wget https://dl.fedoraproject.org/pub/epel/9/Everything/x86_64/Packages/p/proj-8.2.1-1.el9.x86_64.rpm
sudo dnf install -y ./proj-8.2.1-1.el9.x86_64.rpm

# 安装 MySQL Workbench
sudo dnf install -y mysql-workbench-community-8.0.41-1.el9.x86_64.rpm

16、17虚拟机

依赖:

1
2
3
4
5
sudo apt-get install libhiredis-dev
sudo apt-get install liblua5.1-dev
sudo apt-get install libjemalloc-dev
sudo apt-get install gcc pkg-config

MySQL安装

在 Ubuntu 24.04 上安装 MySQL 数据库非常简单,我将为你提供逐步指导。以下是安装和基本配置的步骤:

1. 更新软件包列表

首先,确保你的系统软件包列表是最新的。打开终端,运行以下命令:

1
sudo apt update && sudo apt upgrade -y

2. 安装 MySQL Server

在 Ubuntu 24.04 上,MySQL 的默认版本通常可以通过包管理器安装。运行以下命令来安装 MySQL Server:

1
sudo apt install mysql-server -y

安装完成后,MySQL 服务会自动启动。你可以通过以下命令检查它是否运行:

1
sudo systemctl status mysql

如果显示 “active (running)”,说明服务已成功启动。

3. 运行安全配置脚本

安装完成后,建议运行 MySQL 提供的安全配置脚本,以增强数据库的安全性:

1
sudo mysql_secure_installation
  • 系统会提示你设置 root 用户的密码(如果还未设置)。
  • 接下来会询问是否移除匿名用户、禁止远程 root 登录、删除测试数据库等,建议根据需求选择(通常选 “Y” 以提高安全性)。

4. 登录 MySQL

安装完成后,可以使用以下命令登录 MySQL:

1
sudo mysql -u root -p

输入你在上一步设置的 root 密码。如果未设置密码,可以直接以 root 用户身份进入(视安装时的默认配置)。

5. (可选)设置 root 用户密码

如果默认情况下 root 用户没有密码或你想更改密码,可以在 MySQL 命令行中运行:

1
2
3
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY '你的密码';
FLUSH PRIVILEGES;
EXIT;

将“你的密码”替换为你想要设置的密码。

6. 验证安装

再次登录 MySQL 并运行以下命令,确认版本:

1
mysql -u root -p

进入后:

1
SHOW VARIABLES LIKE 'version';

这会显示当前安装的 MySQL 版本。

7. 基本管理命令

  • 启动 MySQL 服务:
    1
    sudo systemctl start mysql
  • 停止 MySQL 服务:
    1
    sudo systemctl stop mysql
  • 重启 MySQL 服务:
    1
    sudo systemctl restart mysql

默认安装位置:/var/lib/mysql

which mysql

MySQL

1
2
3
4
5
6
7
8
9
10
11
-- 查看当前密码策略
SHOW VARIABLES LIKE 'validate_password%';

-- 更改密码策略为低级别
SET GLOBAL validate_password.policy = LOW;
-- 或者,如果您想要完全禁用密码验证(不推荐),可以使用:
-- SET GLOBAL validate_password.policy = OFF;

-- 如果需要,还可以调整其他密码策略参数,例如:
-- SET GLOBAL validate_password.length = 6; -- 设置最小密码长度

Redis

注意事项

  • PIDFile 必须与 redis.conf 中的 pidfile 一致。

  • Type=forking 匹配 daemonize yes 设置。

Redis

主从+哨兵

在您的三台虚拟机(10.211.55.15 CentOS Stream 9,10.211.55.16 和 10.211.55.17 Ubuntu 24 LTS)上已经部署了 Redis,现在要配置 Redis 哨兵模式(Sentinel),这是一个非常好的高可用性方案。Redis 哨兵模式可以监控主从节点,并在主节点故障时自动切换到从节点。以下是详细的配置步骤:

前提假设

  1. 三台服务器都已经安装了 Redis(假设版本一致,比如 Redis 6.x 或 7.x)。
  2. Redis 主节点(Master)部署在 10.211.55.15,从节点(Slave)部署在 10.211.55.16 和 10.211.55.17。
  3. Sentinel 将在这三台服务器上都部署,以实现高可用监控。

如果您的部署计划不同(如主从分配不同),请告诉我,我会调整方案。


配置步骤

1. 配置 Redis 主从复制

首先需要设置一个主节点和两个从节点。

在主节点 (10.211.55.15) 上配置 Redis

编辑 Redis 配置文件(通常在 /etc/redis.conf/etc/redis/redis.conf,具体路径取决于安装方式):

1
2
3
4
5
6
7
8
# 确保绑定本地 IP(或 0.0.0.0 允许外部访问)
bind 10.211.55.15
# 设置端口(默认 6379,可自定义)
port 6379
# 可选:设置密码(增强安全性)
requirepass "yourpassword"
# 后台运行
daemonize yes

启动 Redis:

1
redis-server /etc/redis.conf
在从节点 (10.211.55.16 和 10.211.55.17) 上配置 Redis

编辑从节点的 Redis 配置文件:

1
2
3
4
5
6
7
8
9
10
# 绑定本地 IP
bind 10.211.55.16 # 或 10.211.55.17
# 设置端口
port 6379
# 设置为主节点的从节点
replicaof 10.211.55.15 6379
# 如果主节点设置了密码
masterauth "yourpassword"
# 后台运行
daemonize yes

分别在两台从节点上启动 Redis:

1
redis-server /etc/redis.conf

验证主从同步:
在主节点上运行 redis-cli,输入:

1
INFO REPLICATION

可以看到从节点信息。确保从节点已连接。


2. 配置 Redis Sentinel

Redis Sentinel 需要单独的配置文件,通常命名为 sentinel.conf,并在每台服务器上运行一个 Sentinel 实例。

创建 Sentinel 配置文件

在每台服务器上创建一个 sentinel.conf 文件(例如放在 /etc/redis/sentinel.conf),内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Sentinel 监听端口(默认 26379)
port 26379
# 后台运行
daemonize yes
# 监控的主节点信息
sentinel monitor mymaster 10.211.55.15 6379 2
# 如果主节点有密码
sentinel auth-pass mymaster yourpassword
# 主节点宕机判断时间(单位:毫秒,默认 30000,即 30 秒)
sentinel down-after-milliseconds mymaster 30000
# 故障转移后并行同步从节点的数量
sentinel parallel-syncs mymaster 1
# 故障转移超时时间(单位:毫秒,默认 180000,即 3 分钟)
sentinel failover-timeout mymaster 180000

说明:

  • sentinel monitor mymaster <主节点IP> <端口> <法定人数>mymaster 是主节点的别名,2 表示至少 2 个 Sentinel 同意才能触发故障转移。
  • 每台服务器的 sentinel.conf 配置相同。
启动 Sentinel

在每台服务器上启动 Sentinel:

1
redis-sentinel /etc/redis/sentinel.conf

启动后,Sentinel 会自动发现主节点和从节点,并开始监控。


3. 验证 Sentinel 工作状态

在任意一台服务器上,使用 redis-cli 连接 Sentinel(默认端口 26379):

1
redis-cli -h 10.211.55.15 -p 26379

输入以下命令:

1
SENTINEL masters

查看主节点状态。

1
SENTINEL slaves mymaster

查看从节点状态。


4. 测试故障转移

  1. 在主节点 (10.211.55.15) 上停止 Redis:
    1
    redis-cli -h 10.211.55.15 shutdown
  2. 等待几秒后,检查 Sentinel 日志(通常在 sentinel.conf 指定的日志文件中)或重新运行 SENTINEL masters,确认主节点已切换到 10.211.55.16 或 10.211.55.17。
  3. 原主节点恢复后会自动变为从节点。
  4. 手动故障主节点
1
SENTINEL failover mymaster # mymaster 是主节点的名称

注意事项

  1. 防火墙配置

    • 确保主从节点的 6379 端口和 Sentinel 的 26379 端口在三台服务器之间互通。
    • CentOS Stream 9:
      1
      2
      3
      firewall-cmd --add-port=6379/tcp --permanent
      firewall-cmd --add-port=26379/tcp --permanent
      firewall-cmd --reload
    • Ubuntu 24 LTS:
      1
      2
      ufw allow 6379/tcp
      ufw allow 26379/tcp
  2. 网络延迟

    • 由于是本地虚拟机,网络延迟应该很低,但如果在生产环境,需确保网络稳定。
  3. 版本一致性

    • 确保三台服务器的 Redis 和 Sentinel 版本一致,避免兼容性问题。

下一步

如果您已经按照上述步骤配置完成,可以告诉我测试结果,或者如果有任何报错,我可以帮您排查。如果您想调整配置(比如更改主节点、端口等),也请随时告诉我!

MySQL

主从同步 ShardingSphere

好的,您决定使用 ShardingSphere 并基于 Java 的 Spring Boot 应用来实现读写分离,这是个很不错的选择。您的三台服务器(10.211.55.15 CentOS Stream 9,10.211.55.16 和 10.211.55.17 Ubuntu 24 LTS)已经部署了 MySQL 8.0.41,但尚未配置主从同步。我们需要先完成 MySQL 的主从同步配置,然后在 Spring Boot 中引入 ShardingSphere-JDBC 来实现读写分离。以下是详细步骤:

第一步:配置 MySQL 主从同步

我们将 10.211.55.15 设置为主节点 (Master),10.211.55.16 和 10.211.55.17 设置为从节点 (Slave)。

1. 配置主节点 (10.211.55.15)

编辑 MySQL 配置文件:

  • CentOS Stream 9 通常是 /etc/my.cnf
1
2
3
4
5
[mysqld]
server-id = 1
bind-address = 0.0.0.0 # 或 10.211.55.15,允许外部访问
log_bin = mysql-bin # 启用二进制日志
binlog_format = ROW # MySQL 8.0 默认推荐 ROW 格式

重启 MySQL:

1
2
systemctl restart mysqld
systemctl status mysqld

创建复制用户:

1
2
3
4
5
mysql -u root -p
CREATE USER 'repl'@'10.211.55.%' IDENTIFIED WITH 'mysql_native_password' BY 'Repl@1234';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.211.55.%';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;

记录 File(如 mysql-bin.000001)和 Position(如 156)。

2. 配置从节点 (10.211.55.16)

编辑 MySQL 配置文件(Ubuntu 通常是 /etc/mysql/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf):

16是:/etc/mysql/mysql.conf.d/mysqld.cnf

1
2
3
4
5
[mysqld]
server-id = 2
bind-address = 0.0.0.0 # 或 10.211.55.16
relay_log = mysql-relay-bin
read_only = 1 # 从节点只读

重启 MySQL:

1
2
systemctl restart mysql
systemctl status mysql

连接主节点:

1
2
3
4
5
6
7
8
9
mysql -u root -p
CHANGE REPLICATION SOURCE TO
SOURCE_HOST = '10.211.55.15',
SOURCE_USER = 'repl',
SOURCE_PASSWORD = 'Repl@1234',
SOURCE_LOG_FILE = 'mysql-bin.000001',
SOURCE_LOG_POS = 156;
`START REPLICA;
SHOW REPLICA STATUS\G`

确认 Replica_IO_RunningReplica_SQL_Running 均为 Yes

3. 配置从节点 (10.211.55.17)

与 10.211.55.16 类似,配置文件中设置:

1
2
3
4
5
[mysqld]
server-id = 3
bind-address = 0.0.0.0
relay_log = mysql-relay-bin
read_only = 1

重启并连接主节点(参数与 10.211.55.16 相同,只是 server-id 不同),然后检查同步状态。

4. 防火墙设置

  • CentOS:
    1
    2
    firewall-cmd --add-port=3306/tcp --permanent
    firewall-cmd --reload
  • Ubuntu:
    1
    2
    ufw allow 3306/tcp
    ufw status

5. 测试主从同步

在主节点创建测试数据:

1
2
3
4
CREATE DATABASE test_db;
USE test_db;
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50));
INSERT INTO users (name) VALUES ('Alice'), ('Bob');

在从节点检查:

1
2
USE test_db;
SELECT * FROM users;

若能看到数据,同步成功。


第二步:在 Spring Boot 中引入 ShardingSphere-JDBC

1. 创建 Spring Boot 项目

使用 Spring Initializr 创建项目,添加以下依赖:

  • Spring Web
  • Spring Data JPA
  • MySQL Driver

2. 添加 ShardingSphere-JDBC 依赖

编辑 pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<dependencies>
<!-- Spring Boot 基础依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.33</version> <!-- 与 MySQL 8.0.41 兼容 -->
</dependency>
<!-- ShardingSphere-JDBC -->
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
<version>5.4.1</version> <!-- 截至 2025 年 3 月最新版本可能更高,检查官网 -->
</dependency>
</dependencies>

3. 配置 application.yml

src/main/resources/application.yml 中添加:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
spring:
shardingsphere:
datasource:
names: master, slave1, slave2
master:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://10.211.55.15:3306/test_db?useSSL=false&serverTimezone=UTC
username: root
password: your_root_password
slave1:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://10.211.55.16:3306/test_db?useSSL=false&serverTimezone=UTC
username: root
password: your_root_password
slave2:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://10.211.55.17:3306/test_db?useSSL=false&serverTimezone=UTC
username: root
password: your_root_password
rules:
master-slave:
master-data-source-name: master
slave-data-source-names: slave1, slave2
load-balance-algorithm-type: ROUND_ROBIN # 读请求轮询分发
props:
sql-show: true # 显示 SQL 日志,便于调试
jpa:
hibernate:
ddl-auto: update # 自动建表
show-sql: true

4. 创建实体类

src/main/java/com/example/demo/entity 下创建 User.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.example.demo.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;

// Getters 和 Setters
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}

5. 创建 Repository

src/main/java/com/example/demo/repository 下创建 UserRepository.java

1
2
3
4
5
6
7
package com.example.demo.repository;

import com.example.demo.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
}

6. 创建 Controller

src/main/java/com/example/demo/controller 下创建 UserController.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package com.example.demo.controller;

import com.example.demo.entity.User;
import com.example.demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserRepository userRepository;

@PostMapping
public User addUser(@RequestBody User user) {
return userRepository.save(user); // 写操作,走主库
}

@GetMapping
public List<User> getUsers() {
return userRepository.findAll(); // 读操作,走从库
}
}

7. 运行应用

启动 Spring Boot:

1
mvn spring-boot:run

8. 测试读写分离

  • 添加用户(写操作,走主库):
    1
    curl -X POST http://localhost:8080/users -H "Content-Type:application/json" -d '{"name":"Charlie"}'
  • 获取用户列表(读操作,走从库):
    1
    curl http://localhost:8080/users
    观察日志,确认写操作发往 10.211.55.15,读操作分发到 10.211.55.16 或 10.211.55.17。

注意事项

  1. 密码替换:将 your_root_password 替换为实际的 MySQL root 密码。
  2. 数据库权限:确保 test_db 在从节点已同步,或者在主节点创建后等待同步完成。
  3. 依赖版本:ShardingSphere 版本可能更新,建议访问 官网 获取最新版。
  4. 日志调试:若读写分离未生效,检查日志输出,确保数据源正确加载。

下一步

请按照上述步骤配置并测试。如果主从同步或 Spring Boot 集成过程中遇到问题(比如同步失败、连接错误),告诉我具体报错,我会帮您排查!完成后,您可以进一步优化负载均衡策略或添加更多功能。有什么具体需求吗?