Docker部署Spring Boot与Redis集群实战
Docker 环境下实现 Spring Boot + Redis 集群
环境准备
确保 Docker 和 Docker Compose 已安装并运行。建议使用最新版本的 Docker 以支持 Swarm 模式或其他集群功能。同时,安装 JDK 和 Maven 用于 Spring Boot 项目的构建。
创建 Redis 集群
Redis 集群通常由多个节点组成,至少需要 3 个主节点和 3 个从节点以实现高可用性。以下是一个 docker-compose.yml 文件的示例,用于启动 Redis 集群:
version: '3'
services:
redis-node1:
image: redis:latest
ports:
- "7001:6379"
command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
networks:
- redis-cluster
redis-node2:
image: redis:latest
ports:
- "7002:6379"
command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
networks:
- redis-cluster
redis-node3:
image: redis:latest
ports:
- "7003:6379"
command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
networks:
- redis-cluster
redis-node4:
image: redis:latest
ports:
- "7004:6379"
command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
networks:
- redis-cluster
redis-node5:
image: redis:latest
ports:
- "7005:6379"
command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
networks:
- redis-cluster
redis-node6:
image: redis:latest
ports:
- "7006:6379"
command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
networks:
- redis-cluster
networks:
redis-cluster:
driver: bridge
运行以下命令启动 Redis 容器:
docker-compose up -d
配置 Redis 集群
进入任意一个 Redis 容器,执行以下命令创建集群:
docker exec -it redis-node1 bash
redis-cli --cluster create 172.20.0.2:6379 172.20.0.3:6379 172.20.0.4:6379 172.20.0.5:6379 172.20.0.6:6379 172.20.0.7:6379 --cluster-replicas 1
创建 Spring Boot 项目
使用 Spring Initializr 创建一个新的 Spring Boot 项目,添加以下依赖:
- Spring Web
- Spring Data Redis
在 pom.xml 中添加 Lettuce 依赖以支持 Redis 集群:
<dependency>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
<version>6.1.5.RELEASE</version>
</dependency>
配置 Spring Boot 连接 Redis 集群
在 application.properties 或 application.yml 中配置 Redis 集群信息:
spring:
redis:
cluster:
nodes: 172.20.0.2:6379,172.20.0.3:6379,172.20.0.4:6379,172.20.0.5:6379,172.20.0.6:6379,172.20.0.7:6379
max-redirects: 3
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
编写 Redis 操作代码
创建一个简单的服务类,用于测试 Redis 集群的连接和操作:
@Service
public class RedisService {
@Autowired
private RedisTemplate<String, String> redisTemplate;
public void setKey(String key, String value) {
redisTemplate.opsForValue().set(key, value);
}
public String getKey(String key) {
return redisTemplate.opsForValue().get(key);
}
}
测试 Redis 集群
创建一个简单的 REST 控制器,测试 Redis 集群的功能:
@RestController
@RequestMapping("/redis")
public class RedisController {
@Autowired
private RedisService redisService;
@PostMapping("/set")
public String setKey(@RequestParam String key, @RequestParam String value) {
redisService.setKey(key, value);
return "Key set successfully";
}
@GetMapping("/get")
public String getKey(@RequestParam String key) {
return redisService.getKey(key);
}
}
构建和运行 Spring Boot 应用
使用 Maven 构建项目并运行:
mvn clean package
java -jar target/your-application.jar
验证功能
通过 Postman 或 curl 测试 API:
curl -X POST "http://localhost:8080/redis/set?key=test&value=hello"
curl -X GET "http://localhost:8080/redis/get?key=test"
容器化 Spring Boot 应用
创建 Dockerfile 用于构建 Spring Boot 应用的镜像:
FROM openjdk:11-jre-slim
COPY target/your-application.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
构建并运行 Spring Boot 容器:
docker build -t spring-boot-redis .
docker run -p 8080:8080 --network redis-cluster --name spring-boot-app spring-boot-redis
高可用性和扩展性
通过 Docker Swarm 或 Kubernetes 可以进一步扩展 Redis 集群和 Spring Boot 应用,实现负载均衡和自动故障转移。例如,使用 Kubernetes 部署 Redis 集群时,可以利用 StatefulSet 和 Headless Service 管理 Redis 节点。
监控和日志
使用 Prometheus 和 Grafana 监控 Redis 集群的性能指标。通过 ELK 栈收集和分析日志,确保系统的稳定性和可维护性。
总结
通过 Docker 和 Docker Compose,可以快速部署 Redis 集群并与 Spring Boot 应用集成。这种方法不仅简化了开发环境的搭建,还为生产环境的高可用性和扩展性提供了基础。
BbS.okane173.info/PoSt/1121_464102.HtM
BbS.okane174.info/PoSt/1121_092917.HtM
BbS.okane175.info/PoSt/1121_012517.HtM
BbS.okane176.info/PoSt/1121_770949.HtM
BbS.okane177.info/PoSt/1121_210532.HtM
BbS.okane178.info/PoSt/1121_116447.HtM
BbS.okane179.info/PoSt/1121_442183.HtM
BbS.okane180.info/PoSt/1121_703336.HtM
BbS.okane181.info/PoSt/1121_032163.HtM
BbS.okane182.info/PoSt/1121_497726.HtM
BbS.okane173.info/PoSt/1121_424279.HtM
BbS.okane174.info/PoSt/1121_947516.HtM
BbS.okane175.info/PoSt/1121_547555.HtM
BbS.okane176.info/PoSt/1121_561914.HtM
BbS.okane177.info/PoSt/1121_712686.HtM
BbS.okane178.info/PoSt/1121_390072.HtM
BbS.okane179.info/PoSt/1121_520939.HtM
BbS.okane180.info/PoSt/1121_849513.HtM
BbS.okane181.info/PoSt/1121_021627.HtM
BbS.okane182.info/PoSt/1121_346489.HtM
BbS.okane173.info/PoSt/1121_758992.HtM
BbS.okane174.info/PoSt/1121_454037.HtM
BbS.okane175.info/PoSt/1121_392632.HtM
BbS.okane176.info/PoSt/1121_162652.HtM
BbS.okane177.info/PoSt/1121_366195.HtM
BbS.okane178.info/PoSt/1121_729742.HtM
BbS.okane179.info/PoSt/1121_373858.HtM
BbS.okane180.info/PoSt/1121_889990.HtM
BbS.okane181.info/PoSt/1121_509934.HtM
BbS.okane182.info/PoSt/1121_173099.HtM
BbS.okane173.info/PoSt/1121_091623.HtM
BbS.okane174.info/PoSt/1121_577755.HtM
BbS.okane175.info/PoSt/1121_419018.HtM
BbS.okane176.info/PoSt/1121_639374.HtM
BbS.okane177.info/PoSt/1121_928740.HtM
BbS.okane178.info/PoSt/1121_365531.HtM
BbS.okane179.info/PoSt/1121_626632.HtM
BbS.okane180.info/PoSt/1121_391807.HtM
BbS.okane181.info/PoSt/1121_705022.HtM
BbS.okane182.info/PoSt/1121_020512.HtM
BbS.okane173.info/PoSt/1121_740294.HtM
BbS.okane174.info/PoSt/1121_216927.HtM
BbS.okane175.info/PoSt/1121_923733.HtM
BbS.okane176.info/PoSt/1121_110279.HtM
BbS.okane177.info/PoSt/1121_033183.HtM
BbS.okane178.info/PoSt/1121_984311.HtM
BbS.okane179.info/PoSt/1121_266669.HtM
BbS.okane180.info/PoSt/1121_566061.HtM
BbS.okane181.info/PoSt/1121_051715.HtM
BbS.okane182.info/PoSt/1121_909578.HtM
BbS.okane173.info/PoSt/1121_133950.HtM
BbS.okane174.info/PoSt/1121_224604.HtM
BbS.okane175.info/PoSt/1121_295146.HtM
BbS.okane176.info/PoSt/1121_199559.HtM
BbS.okane177.info/PoSt/1121_271657.HtM
BbS.okane178.info/PoSt/1121_281017.HtM
BbS.okane179.info/PoSt/1121_552185.HtM
BbS.okane180.info/PoSt/1121_313150.HtM
BbS.okane181.info/PoSt/1121_374260.HtM
BbS.okane182.info/PoSt/1121_073144.HtM
BbS.okane173.info/PoSt/1121_902383.HtM
BbS.okane174.info/PoSt/1121_582384.HtM
BbS.okane175.info/PoSt/1121_381810.HtM
BbS.okane176.info/PoSt/1121_694724.HtM
BbS.okane177.info/PoSt/1121_394787.HtM
BbS.okane178.info/PoSt/1121_162584.HtM
BbS.okane179.info/PoSt/1121_832518.HtM
BbS.okane180.info/PoSt/1121_497087.HtM
BbS.okane181.info/PoSt/1121_375699.HtM
BbS.okane182.info/PoSt/1121_825575.HtM
BbS.okane173.info/PoSt/1121_800980.HtM
BbS.okane174.info/PoSt/1121_733834.HtM
BbS.okane175.info/PoSt/1121_657488.HtM
BbS.okane176.info/PoSt/1121_495320.HtM
BbS.okane177.info/PoSt/1121_780601.HtM
BbS.okane178.info/PoSt/1121_019219.HtM
BbS.okane179.info/PoSt/1121_343345.HtM
BbS.okane180.info/PoSt/1121_489681.HtM
BbS.okane181.info/PoSt/1121_039117.HtM
BbS.okane182.info/PoSt/1121_734385.HtM
基恩士成长空间 440人发布