diff --git a/docker-compose-node-01.yml b/docker-compose-node-01.yml index e1969ad..54e9bac 100644 --- a/docker-compose-node-01.yml +++ b/docker-compose-node-01.yml @@ -229,9 +229,8 @@ services: - MYSQL_PORT=3306 - MYSQL_USERNAME=root - MYSQL_PASSWORD=${MYSQL_ROOT_PASSWORD:-root123456} - - REDIS_HOST=redis - - REDIS_PORT=6379 - REDIS_PASSWORD=${REDIS_PASSWORD:-redis_HA_Cluster_2024} + - REDIS_SENTINEL_NODES=${REDIS_SENTINEL_NODES:-192.168.1.101:26379,192.168.1.102:26379,192.168.1.103:26379} - SENTINEL_DASHBOARD_HOST=${HOST_IP:-192.168.1.101} - SENTINEL_DASHBOARD_PORT=8880 - SPRING_CLOUD_SENTINEL_TRANSPORT_CLIENT_IP=${HOST_IP:-192.168.1.101} @@ -273,13 +272,15 @@ services: - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos - SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.101} + - NACOS_SERVERS=${NACOS_SERVERS:-192.168.1.101:8848,192.168.1.102:8848,192.168.1.103:8848} - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USERNAME=root - MYSQL_PASSWORD=${MYSQL_ROOT_PASSWORD:-root123456} - - REDIS_HOST=redis - - REDIS_PORT=6379 - REDIS_PASSWORD=${REDIS_PASSWORD:-redis_HA_Cluster_2024} + - REDIS_SENTINEL_NODES=${REDIS_SENTINEL_NODES:-192.168.1.101:26379,192.168.1.102:26379,192.168.1.103:26379} + - MINIO_HOST=minio + - MINIO_PORT=9000 - SENTINEL_DASHBOARD_HOST=${HOST_IP:-192.168.1.101} - SENTINEL_DASHBOARD_PORT=8880 - SPRING_CLOUD_SENTINEL_TRANSPORT_CLIENT_IP=${HOST_IP:-192.168.1.101} @@ -316,13 +317,13 @@ services: - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos - SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.101} + - NACOS_SERVERS=${NACOS_SERVERS:-192.168.1.101:8848,192.168.1.102:8848,192.168.1.103:8848} - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USERNAME=root - MYSQL_PASSWORD=${MYSQL_ROOT_PASSWORD:-root123456} - - REDIS_HOST=redis - - REDIS_PORT=6379 - REDIS_PASSWORD=${REDIS_PASSWORD:-redis_HA_Cluster_2024} + - REDIS_SENTINEL_NODES=${REDIS_SENTINEL_NODES:-192.168.1.101:26379,192.168.1.102:26379,192.168.1.103:26379} - ROCKETMQ_HOST=rmqnamesrv - ROCKETMQ_PORT=9876 - MINIO_HOST=minio @@ -370,13 +371,13 @@ services: - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos - SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.101} + - NACOS_SERVERS=${NACOS_SERVERS:-192.168.1.101:8848,192.168.1.102:8848,192.168.1.103:8848} - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USERNAME=root - MYSQL_PASSWORD=${MYSQL_ROOT_PASSWORD:-root123456} - - REDIS_HOST=redis - - REDIS_PORT=6379 - REDIS_PASSWORD=${REDIS_PASSWORD:-redis_HA_Cluster_2024} + - REDIS_SENTINEL_NODES=${REDIS_SENTINEL_NODES:-192.168.1.101:26379,192.168.1.102:26379,192.168.1.103:26379} - SENTINEL_DASHBOARD_HOST=${HOST_IP:-192.168.1.101} - SENTINEL_DASHBOARD_PORT=8880 - SPRING_CLOUD_SENTINEL_TRANSPORT_CLIENT_IP=${HOST_IP:-192.168.1.101} @@ -413,13 +414,13 @@ services: - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos - SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.101} + - NACOS_SERVERS=${NACOS_SERVERS:-192.168.1.101:8848,192.168.1.102:8848,192.168.1.103:8848} - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USERNAME=root - MYSQL_PASSWORD=${MYSQL_ROOT_PASSWORD:-root123456} - - REDIS_HOST=redis - - REDIS_PORT=6379 - REDIS_PASSWORD=${REDIS_PASSWORD:-redis_HA_Cluster_2024} + - REDIS_SENTINEL_NODES=${REDIS_SENTINEL_NODES:-192.168.1.101:26379,192.168.1.102:26379,192.168.1.103:26379} - SENTINEL_DASHBOARD_HOST=${HOST_IP:-192.168.1.101} - SENTINEL_DASHBOARD_PORT=8880 - SPRING_CLOUD_SENTINEL_TRANSPORT_CLIENT_IP=${HOST_IP:-192.168.1.101} @@ -456,13 +457,13 @@ services: - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos - SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.101} + - NACOS_SERVERS=${NACOS_SERVERS:-192.168.1.101:8848,192.168.1.102:8848,192.168.1.103:8848} - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USERNAME=root - MYSQL_PASSWORD=${MYSQL_ROOT_PASSWORD:-root123456} - - REDIS_HOST=redis - - REDIS_PORT=6379 - REDIS_PASSWORD=${REDIS_PASSWORD:-redis_HA_Cluster_2024} + - REDIS_SENTINEL_NODES=${REDIS_SENTINEL_NODES:-192.168.1.101:26379,192.168.1.102:26379,192.168.1.103:26379} - SENTINEL_DASHBOARD_HOST=${HOST_IP:-192.168.1.101} - SENTINEL_DASHBOARD_PORT=8880 - SPRING_CLOUD_SENTINEL_TRANSPORT_CLIENT_IP=${HOST_IP:-192.168.1.101} diff --git a/docker-compose-node-02.yml b/docker-compose-node-02.yml index 18201e3..7bb3be2 100644 --- a/docker-compose-node-02.yml +++ b/docker-compose-node-02.yml @@ -232,9 +232,8 @@ services: - MYSQL_PORT=3306 - MYSQL_USERNAME=root - MYSQL_PASSWORD=${MYSQL_ROOT_PASSWORD:-root123456} - - REDIS_HOST=redis - - REDIS_PORT=6379 - REDIS_PASSWORD=${REDIS_PASSWORD:-redis_HA_Cluster_2024} + - REDIS_SENTINEL_NODES=${REDIS_SENTINEL_NODES:-192.168.1.101:26379,192.168.1.102:26379,192.168.1.103:26379} - SENTINEL_DASHBOARD_HOST=192.168.1.101 - SENTINEL_DASHBOARD_PORT=8880 - SPRING_CLOUD_SENTINEL_TRANSPORT_CLIENT_IP=${HOST_IP:-192.168.1.102} @@ -275,9 +274,8 @@ services: - MYSQL_PORT=3306 - MYSQL_USERNAME=root - MYSQL_PASSWORD=${MYSQL_ROOT_PASSWORD:-root123456} - - REDIS_HOST=redis - - REDIS_PORT=6379 - REDIS_PASSWORD=${REDIS_PASSWORD:-redis_HA_Cluster_2024} + - REDIS_SENTINEL_NODES=${REDIS_SENTINEL_NODES:-192.168.1.101:26379,192.168.1.102:26379,192.168.1.103:26379} - SENTINEL_DASHBOARD_HOST=192.168.1.101 - SENTINEL_DASHBOARD_PORT=8880 - SPRING_CLOUD_SENTINEL_TRANSPORT_CLIENT_IP=${HOST_IP:-192.168.1.102} @@ -318,9 +316,8 @@ services: - MYSQL_PORT=3306 - MYSQL_USERNAME=root - MYSQL_PASSWORD=${MYSQL_ROOT_PASSWORD:-root123456} - - REDIS_HOST=redis - - REDIS_PORT=6379 - REDIS_PASSWORD=${REDIS_PASSWORD:-redis_HA_Cluster_2024} + - REDIS_SENTINEL_NODES=${REDIS_SENTINEL_NODES:-192.168.1.101:26379,192.168.1.102:26379,192.168.1.103:26379} - ROCKETMQ_HOST=rmqnamesrv - ROCKETMQ_PORT=9876 - MINIO_HOST=minio @@ -372,9 +369,8 @@ services: - MYSQL_PORT=3306 - MYSQL_USERNAME=root - MYSQL_PASSWORD=${MYSQL_ROOT_PASSWORD:-root123456} - - REDIS_HOST=redis - - REDIS_PORT=6379 - REDIS_PASSWORD=${REDIS_PASSWORD:-redis_HA_Cluster_2024} + - REDIS_SENTINEL_NODES=${REDIS_SENTINEL_NODES:-192.168.1.101:26379,192.168.1.102:26379,192.168.1.103:26379} - SENTINEL_DASHBOARD_HOST=192.168.1.101 - SENTINEL_DASHBOARD_PORT=8880 - SPRING_CLOUD_SENTINEL_TRANSPORT_CLIENT_IP=${HOST_IP:-192.168.1.102} @@ -415,9 +411,8 @@ services: - MYSQL_PORT=3306 - MYSQL_USERNAME=root - MYSQL_PASSWORD=${MYSQL_ROOT_PASSWORD:-root123456} - - REDIS_HOST=redis - - REDIS_PORT=6379 - REDIS_PASSWORD=${REDIS_PASSWORD:-redis_HA_Cluster_2024} + - REDIS_SENTINEL_NODES=${REDIS_SENTINEL_NODES:-192.168.1.101:26379,192.168.1.102:26379,192.168.1.103:26379} - SENTINEL_DASHBOARD_HOST=192.168.1.101 - SENTINEL_DASHBOARD_PORT=8880 - SPRING_CLOUD_SENTINEL_TRANSPORT_CLIENT_IP=${HOST_IP:-192.168.1.102} @@ -458,9 +453,8 @@ services: - MYSQL_PORT=3306 - MYSQL_USERNAME=root - MYSQL_PASSWORD=${MYSQL_ROOT_PASSWORD:-root123456} - - REDIS_HOST=redis - - REDIS_PORT=6379 - REDIS_PASSWORD=${REDIS_PASSWORD:-redis_HA_Cluster_2024} + - REDIS_SENTINEL_NODES=${REDIS_SENTINEL_NODES:-192.168.1.101:26379,192.168.1.102:26379,192.168.1.103:26379} - SENTINEL_DASHBOARD_HOST=192.168.1.101 - SENTINEL_DASHBOARD_PORT=8880 - SPRING_CLOUD_SENTINEL_TRANSPORT_CLIENT_IP=${HOST_IP:-192.168.1.102} diff --git a/docs/DEBIAN12-DEPLOYMENT-GUIDE.md b/docs/DEBIAN12-DEPLOYMENT-GUIDE.md index 27c2f79..c5f3efb 100644 --- a/docs/DEBIAN12-DEPLOYMENT-GUIDE.md +++ b/docs/DEBIAN12-DEPLOYMENT-GUIDE.md @@ -255,8 +255,6 @@ docker compose -f docker-compose-node-03.yml up -d docker compose -f docker-compose-node-03.yml logs -f mysql # 看到 "ready for connections" 后 Ctrl+C 退出 -# 验证数据库已自动创建 -docker exec mysql mysql -uroot -proot123456 -e "SHOW DATABASES;" ``` ### 2.7 配置 MySQL 主从复制 @@ -283,7 +281,7 @@ CHANGE MASTER TO MASTER_PASSWORD='repl_password_2024', MASTER_AUTO_POSITION=1; START SLAVE; -SHOW SLAVE STATUS\G +SHOW SLAVE STATUS\G; EOF # 确认 Slave_IO_Running 和 Slave_SQL_Running 都为 Yes @@ -301,7 +299,7 @@ CHANGE MASTER TO MASTER_PASSWORD='repl_password_2024', MASTER_AUTO_POSITION=1; START SLAVE; -SHOW SLAVE STATUS\G +SHOW SLAVE STATUS\G; EOF docker exec mysql mysql -uroot -proot123456 -e "SET GLOBAL read_only = ON; SET GLOBAL super_read_only = ON;" @@ -734,6 +732,55 @@ environment: **验证**:重启微服务后,Sentinel 控制台应显示真实宿主机 IP,且所有实例状态为"健康" +### Q14: 微服务报 Redis READONLY 错误 + +**问题描述**:微服务启动时报错: +``` +io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. +``` + +**原因**:微服务使用单机模式连接 Redis(`REDIS_HOST`/`REDIS_PORT`),直接连接到了 Redis 从节点,而从节点是只读的。 + +**解决方案**: + +1. 确保所有微服务使用 **Redis Sentinel 模式** 连接。在 `docker-compose-node-xx.yml` 中配置环境变量: + +```yaml +environment: + # 删除 REDIS_HOST 和 REDIS_PORT,改用 Sentinel + - REDIS_PASSWORD=${REDIS_PASSWORD:-redis_HA_Cluster_2024} + - REDIS_SENTINEL_NODES=${REDIS_SENTINEL_NODES:-192.168.1.101:26379,192.168.1.102:26379,192.168.1.103:26379} +``` + +2. 确保 `application-ha.yml` 配置正确: + +```yaml +spring: + data: + redis: + password: ${REDIS_PASSWORD:redis_HA_Cluster_2024} + database: 0 + timeout: 10000 + sentinel: + master: mymaster # 与 sentinel.conf 中的 master 名称一致 + nodes: ${REDIS_SENTINEL_NODES:192.168.1.101:26379,192.168.1.102:26379,192.168.1.103:26379} + password: ${REDIS_PASSWORD:redis_HA_Cluster_2024} +``` + +**验证**: + +```bash +# 查看当前 Redis 主节点 +docker exec redis-sentinel redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster + +# 输出应为主节点的 IP 和端口 +# 1) "192.168.1.101" +# 2) "6379" + +# 测试 Sentinel 连接 +docker exec redis-sentinel redis-cli -p 26379 SENTINEL master mymaster +``` + --- ## 七、日常运维 diff --git a/video-admin/src/main/resources/application-ha.yml b/video-admin/src/main/resources/application-ha.yml new file mode 100644 index 0000000..26fb153 --- /dev/null +++ b/video-admin/src/main/resources/application-ha.yml @@ -0,0 +1,112 @@ +server: + port: 9006 + +spring: + application: + name: video-admin + cloud: + nacos: + discovery: + server-addr: ${NACOS_SERVERS:192.168.1.101:8848,192.168.1.102:8848,192.168.1.103:8848} + namespace: ${NACOS_NAMESPACE:public} + group: ${NACOS_GROUP:DEFAULT_GROUP} + username: nacos + password: nacos + ip: ${ADMIN_IP:} + config: + server-addr: ${spring.cloud.nacos.discovery.server-addr} + namespace: ${spring.cloud.nacos.discovery.namespace} + group: ${spring.cloud.nacos.discovery.group} + file-extension: yaml + username: nacos + password: nacos + sentinel: + transport: + dashboard: ${SENTINEL_HOST:sentinel}:${SENTINEL_PORT:8080} + port: 8726 + client-ip: ${ADMIN_IP:} + eager: true + datasource: + url: jdbc:mysql://${MYSQL_HOST:mysql}:${MYSQL_PORT:3306}/video_admin?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&allowMultiQueries=true + username: root + password: ${MYSQL_ROOT_PASSWORD:root123456} + driver-class-name: com.mysql.cj.jdbc.Driver + hikari: + max-lifetime: 58000 + idle-timeout: 300000 + connection-timeout: 20000 + connection-test-query: SELECT 1 + keepalive-time: 60000 + validation-timeout: 3000 + minimum-idle: 5 + maximum-pool-size: 20 + data: + redis: + password: ${REDIS_PASSWORD:redis_HA_Cluster_2024} + database: 5 + timeout: 10000 + sentinel: + master: mymaster + nodes: ${REDIS_SENTINEL_NODES:192.168.1.101:26379,192.168.1.102:26379,192.168.1.103:26379} + password: ${REDIS_PASSWORD:redis_HA_Cluster_2024} + lettuce: + pool: + max-active: 200 + max-wait: -1 + max-idle: 10 + min-idle: 0 + +mybatis-plus: + mapper-locations: classpath:mapper/*.xml + type-aliases-package: com.nuaa.video.admin.entity + configuration: + map-underscore-to-camel-case: true + cache-enabled: false + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + global-config: + db-config: + id-type: auto + logic-delete-field: status + logic-delete-value: 0 + logic-not-delete-value: 1 + +jwt: + secret: video-platform-admin-secret-key-2024-nuaa-ha + expiration: 86400 + token-header: Authorization + token-prefix: "Bearer " + +login: + retry-count: 5 + lock-time: 30 + +operation-log: + enabled: true + exclude-paths: + - /admin/auth/login + - /admin/auth/logout + - /admin/auth/captcha + - /actuator/** + +management: + endpoints: + web: + exposure: + include: '*' + endpoint: + health: + show-details: always + +feign: + client: + config: + default: + connectTimeout: 5000 + readTimeout: 5000 + circuitbreaker: + enabled: true + +logging: + level: + com.nuaa.video: info + org.springframework.security: info diff --git a/video-auth/src/main/resources/application-ha.yml b/video-auth/src/main/resources/application-ha.yml new file mode 100644 index 0000000..34a5f4b --- /dev/null +++ b/video-auth/src/main/resources/application-ha.yml @@ -0,0 +1,103 @@ +server: + port: 9001 + +spring: + application: + name: video-auth + cloud: + nacos: + discovery: + server-addr: ${NACOS_SERVERS:192.168.1.101:8848,192.168.1.102:8848,192.168.1.103:8848} + namespace: ${NACOS_NAMESPACE:public} + group: ${NACOS_GROUP:DEFAULT_GROUP} + username: nacos + password: nacos + ip: ${AUTH_IP:} + config: + server-addr: ${spring.cloud.nacos.discovery.server-addr} + namespace: ${spring.cloud.nacos.discovery.namespace} + group: ${spring.cloud.nacos.discovery.group} + file-extension: yaml + username: nacos + password: nacos + sentinel: + transport: + dashboard: ${SENTINEL_HOST:sentinel}:${SENTINEL_PORT:8080} + port: 8721 + client-ip: ${AUTH_IP:} + eager: true + datasource: + url: jdbc:mysql://${MYSQL_HOST:mysql}:${MYSQL_PORT:3306}/video_auth?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&allowMultiQueries=true + username: root + password: ${MYSQL_ROOT_PASSWORD:root123456} + driver-class-name: com.mysql.cj.jdbc.Driver + hikari: + max-lifetime: 58000 + idle-timeout: 300000 + connection-timeout: 20000 + connection-test-query: SELECT 1 + keepalive-time: 60000 + validation-timeout: 3000 + minimum-idle: 5 + maximum-pool-size: 20 + data: + redis: + # Redis Sentinel 高可用配置 + password: ${REDIS_PASSWORD:redis_HA_Cluster_2024} + database: 0 + timeout: 10000 + sentinel: + # Sentinel master 名称,与 sentinel.conf 中配置的 mymaster 一致 + master: mymaster + # Sentinel 节点列表 + nodes: ${REDIS_SENTINEL_NODES:192.168.1.101:26379,192.168.1.102:26379,192.168.1.103:26379} + password: ${REDIS_PASSWORD:redis_HA_Cluster_2024} + lettuce: + pool: + max-active: 200 + max-wait: -1 + max-idle: 10 + min-idle: 0 + +mybatis-plus: + mapper-locations: classpath:mapper/*.xml + type-aliases-package: com.nuaa.video.auth.entity + configuration: + map-underscore-to-camel-case: true + cache-enabled: false + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + global-config: + db-config: + id-type: auto + logic-delete-field: is_deleted + logic-delete-value: 1 + logic-not-delete-value: 0 + +jwt: + secret: video-platform-secret-key-2024-nuaa-ha + expiration: 86400 + token-header: Authorization + token-prefix: "Bearer " + +management: + endpoints: + web: + exposure: + include: '*' + endpoint: + health: + show-details: always + +logging: + level: + com.nuaa.video: info + org.springframework.security: info + +feign: + circuitbreaker: + enabled: true + client: + config: + default: + connectTimeout: 5000 + readTimeout: 5000 diff --git a/video-comment/src/main/resources/application-ha.yml b/video-comment/src/main/resources/application-ha.yml new file mode 100644 index 0000000..849bdad --- /dev/null +++ b/video-comment/src/main/resources/application-ha.yml @@ -0,0 +1,111 @@ +server: + port: 9004 + +spring: + application: + name: video-comment + cloud: + nacos: + discovery: + server-addr: ${NACOS_SERVERS:192.168.1.101:8848,192.168.1.102:8848,192.168.1.103:8848} + namespace: ${NACOS_NAMESPACE:public} + group: ${NACOS_GROUP:DEFAULT_GROUP} + username: nacos + password: nacos + ip: ${COMMENT_IP:} + config: + server-addr: ${spring.cloud.nacos.discovery.server-addr} + namespace: ${spring.cloud.nacos.discovery.namespace} + group: ${spring.cloud.nacos.discovery.group} + file-extension: yaml + username: nacos + password: nacos + sentinel: + transport: + dashboard: ${SENTINEL_HOST:sentinel}:${SENTINEL_PORT:8080} + port: 8724 + client-ip: ${COMMENT_IP:} + eager: true + datasource: + url: jdbc:mysql://${MYSQL_HOST:mysql}:${MYSQL_PORT:3306}/video_comment?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&allowMultiQueries=true + username: root + password: ${MYSQL_ROOT_PASSWORD:root123456} + driver-class-name: com.mysql.cj.jdbc.Driver + hikari: + max-lifetime: 58000 + idle-timeout: 300000 + connection-timeout: 20000 + connection-test-query: SELECT 1 + keepalive-time: 60000 + validation-timeout: 3000 + minimum-idle: 5 + maximum-pool-size: 20 + data: + redis: + password: ${REDIS_PASSWORD:redis_HA_Cluster_2024} + database: 3 + timeout: 10000 + sentinel: + master: mymaster + nodes: ${REDIS_SENTINEL_NODES:192.168.1.101:26379,192.168.1.102:26379,192.168.1.103:26379} + password: ${REDIS_PASSWORD:redis_HA_Cluster_2024} + lettuce: + pool: + max-active: 200 + max-wait: -1 + max-idle: 10 + min-idle: 0 + +mybatis-plus: + mapper-locations: classpath:mapper/*.xml + type-aliases-package: com.nuaa.video.comment.entity + configuration: + map-underscore-to-camel-case: true + cache-enabled: false + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + global-config: + db-config: + id-type: auto + logic-delete-field: status + logic-delete-value: 0 + logic-not-delete-value: 1 + +comment: + sensitive-filter: + enabled: true + review: + enabled: false + +jwt: + secret: video-platform-secret-key-2024-nuaa-ha + expiration: 86400 + token-header: Authorization + token-prefix: "Bearer " + +auth: + ignore-urls: + - /comment/public/** + - /actuator/** + +management: + endpoints: + web: + exposure: + include: '*' + endpoint: + health: + show-details: always + +feign: + client: + config: + default: + connectTimeout: 5000 + readTimeout: 5000 + circuitbreaker: + enabled: true + +logging: + level: + com.nuaa.video: info + org.springframework.security: info diff --git a/video-content/src/main/resources/application-ha.yml b/video-content/src/main/resources/application-ha.yml new file mode 100644 index 0000000..e0f5330 --- /dev/null +++ b/video-content/src/main/resources/application-ha.yml @@ -0,0 +1,134 @@ +server: + port: 9003 + +spring: + application: + name: video-content + cloud: + nacos: + discovery: + server-addr: ${NACOS_SERVERS:192.168.1.101:8848,192.168.1.102:8848,192.168.1.103:8848} + namespace: ${NACOS_NAMESPACE:public} + group: ${NACOS_GROUP:DEFAULT_GROUP} + username: nacos + password: nacos + ip: ${CONTENT_IP:} + config: + server-addr: ${spring.cloud.nacos.discovery.server-addr} + namespace: ${spring.cloud.nacos.discovery.namespace} + group: ${spring.cloud.nacos.discovery.group} + file-extension: yaml + username: nacos + password: nacos + sentinel: + transport: + dashboard: ${SENTINEL_HOST:sentinel}:${SENTINEL_PORT:8080} + port: 8723 + client-ip: ${CONTENT_IP:} + eager: true + datasource: + url: jdbc:mysql://${MYSQL_HOST:mysql}:${MYSQL_PORT:3306}/video_content?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&allowMultiQueries=true + username: root + password: ${MYSQL_ROOT_PASSWORD:root123456} + driver-class-name: com.mysql.cj.jdbc.Driver + hikari: + max-lifetime: 58000 + idle-timeout: 300000 + connection-timeout: 20000 + connection-test-query: SELECT 1 + keepalive-time: 60000 + validation-timeout: 3000 + minimum-idle: 5 + maximum-pool-size: 20 + data: + redis: + password: ${REDIS_PASSWORD:redis_HA_Cluster_2024} + database: 2 + timeout: 10000 + sentinel: + master: mymaster + nodes: ${REDIS_SENTINEL_NODES:192.168.1.101:26379,192.168.1.102:26379,192.168.1.103:26379} + password: ${REDIS_PASSWORD:redis_HA_Cluster_2024} + lettuce: + pool: + max-active: 200 + max-wait: -1 + max-idle: 10 + min-idle: 0 + servlet: + multipart: + max-file-size: 1024MB + max-request-size: 1024MB + enabled: true + rocketmq: + topic-prefix: video-platform- + name-server: ${NAMESRV_ADDR:192.168.1.101:9876;192.168.1.102:9876;192.168.1.103:9876} + producer: + group: video-content-producer + send-message-timeout: 3000 + retry-times-when-send-failed: 3 + retry-times-when-send-async-failed: 3 + +mybatis-plus: + mapper-locations: classpath:mapper/*.xml + type-aliases-package: com.nuaa.video.content.entity + configuration: + map-underscore-to-camel-case: true + cache-enabled: false + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + global-config: + db-config: + id-type: auto + logic-delete-field: is_deleted + logic-delete-value: 1 + logic-not-delete-value: 0 + +minio: + endpoint: http://${MINIO_HOST:minio}:${MINIO_PORT:9000} + accessKey: ${MINIO_ACCESS_KEY:minioadmin} + secretKey: ${MINIO_SECRET_KEY:minioadmin123} + bucketName: ${MINIO_BUCKET:video-platform} + +ffmpeg: + binary: + path: ${FFMPEG_PATH:/usr/bin/ffmpeg} + probe: + path: ${FFPROBE_PATH:/usr/bin/ffprobe} + temp: + path: ${FFMPEG_TEMP_PATH:/tmp/ffmpeg} + +auth: + ignore-urls: + - /content/video/public/** + - /content/category/list + - /content/tag/list + - /actuator/** + +management: + endpoints: + web: + exposure: + include: '*' + endpoint: + health: + show-details: always + +feign: + client: + config: + default: + connectTimeout: 5000 + readTimeout: 5000 + circuitbreaker: + enabled: true + +jwt: + secret: video-platform-secret-key-2024-nuaa-ha + expiration: 86400 + token-header: Authorization + token-prefix: "Bearer " + +logging: + level: + com.nuaa.video: info + org.springframework.security: info diff --git a/video-gateway/src/main/resources/application-ha.yml b/video-gateway/src/main/resources/application-ha.yml new file mode 100644 index 0000000..c8adfa7 --- /dev/null +++ b/video-gateway/src/main/resources/application-ha.yml @@ -0,0 +1,87 @@ +server: + port: 9000 + +spring: + application: + name: video-gateway + cloud: + nacos: + discovery: + server-addr: ${NACOS_SERVERS:192.168.1.101:8848,192.168.1.102:8848,192.168.1.103:8848} + namespace: ${NACOS_NAMESPACE:public} + group: ${NACOS_GROUP:DEFAULT_GROUP} + username: nacos + password: nacos + ip: ${GATEWAY_IP:} + config: + server-addr: ${spring.cloud.nacos.discovery.server-addr} + namespace: ${spring.cloud.nacos.discovery.namespace} + group: ${spring.cloud.nacos.discovery.group} + file-extension: yaml + username: nacos + password: nacos + gateway: + discovery: + locator: + enabled: true + lower-case-service-id: true + routes: + - id: video-auth + uri: lb://video-auth + predicates: + - Path=/auth/** + - id: video-user + uri: lb://video-user + predicates: + - Path=/user/** + - id: video-content + uri: lb://video-content + predicates: + - Path=/content/** + - id: video-comment + uri: lb://video-comment + predicates: + - Path=/comment/** + - id: video-recommend + uri: lb://video-recommend + predicates: + - Path=/recommend/** + - id: video-admin + uri: lb://video-admin + predicates: + - Path=/admin/** + sentinel: + transport: + dashboard: ${SENTINEL_HOST:sentinel}:${SENTINEL_PORT:8080} + port: 8720 + client-ip: ${GATEWAY_IP:} + eager: true + scg: + fallback: + mode: response + response-body: '{"code":500,"message":"服务不可用,请稍后再试"}' + +management: + endpoints: + web: + exposure: + include: '*' + endpoint: + health: + show-details: always + gateway: + enabled: true + +gateway: + ignore: + urls: + - /**/auth/login + - /**/auth/register + - /**/auth/captcha + - /content/video/public/** + - /content/category/tree + - /content/category/list + - /comment/reply/public/** + - /comment/public/** + - /admin/auth/captcha + - /admin/auth/login diff --git a/video-recommend/src/main/resources/application-ha.yml b/video-recommend/src/main/resources/application-ha.yml new file mode 100644 index 0000000..cb67149 --- /dev/null +++ b/video-recommend/src/main/resources/application-ha.yml @@ -0,0 +1,132 @@ +server: + port: 9005 + +spring: + application: + name: video-recommend + cloud: + nacos: + discovery: + server-addr: ${NACOS_SERVERS:192.168.1.101:8848,192.168.1.102:8848,192.168.1.103:8848} + namespace: ${NACOS_NAMESPACE:public} + group: ${NACOS_GROUP:DEFAULT_GROUP} + username: nacos + password: nacos + ip: ${RECOMMEND_IP:} + config: + server-addr: ${spring.cloud.nacos.discovery.server-addr} + namespace: ${spring.cloud.nacos.discovery.namespace} + group: ${spring.cloud.nacos.discovery.group} + file-extension: yaml + username: nacos + password: nacos + sentinel: + transport: + dashboard: ${SENTINEL_HOST:sentinel}:${SENTINEL_PORT:8080} + port: 8725 + client-ip: ${RECOMMEND_IP:} + eager: true + datasource: + url: jdbc:mysql://${MYSQL_HOST:mysql}:${MYSQL_PORT:3306}/video_recommend?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&allowMultiQueries=true + username: root + password: ${MYSQL_ROOT_PASSWORD:root123456} + driver-class-name: com.mysql.cj.jdbc.Driver + hikari: + max-lifetime: 58000 + idle-timeout: 300000 + connection-timeout: 20000 + connection-test-query: SELECT 1 + keepalive-time: 60000 + validation-timeout: 3000 + minimum-idle: 5 + maximum-pool-size: 20 + data: + redis: + password: ${REDIS_PASSWORD:redis_HA_Cluster_2024} + database: 4 + timeout: 10000 + sentinel: + master: mymaster + nodes: ${REDIS_SENTINEL_NODES:192.168.1.101:26379,192.168.1.102:26379,192.168.1.103:26379} + password: ${REDIS_PASSWORD:redis_HA_Cluster_2024} + lettuce: + pool: + max-active: 200 + max-wait: -1 + max-idle: 10 + min-idle: 0 + +mybatis-plus: + mapper-locations: classpath:mapper/*.xml + type-aliases-package: com.nuaa.video.recommend.entity + configuration: + map-underscore-to-camel-case: true + cache-enabled: false + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + global-config: + db-config: + id-type: auto + logic-delete-field: is_deleted + logic-delete-value: 1 + logic-not-delete-value: 0 + +recommend: + hot: + default-size: 20 + refresh-interval: 60 + weights: + view: 1 + like: 3 + favorite: 5 + coin: 5 + comment: 2 + share: 3 + similarity: + tag-weight: 0.5 + category-weight: 0.3 + behavior-weight: 0.2 + personalized: + default-size: 30 + behavior-weights: + view: 1 + like: 3 + favorite: 5 + coin: 5 + comment: 2 + share: 3 + complete-watch: 4 + +jwt: + secret: video-platform-secret-key-2024-nuaa-ha + expiration: 86400 + token-header: Authorization + token-prefix: "Bearer " + +auth: + ignore-urls: + - /recommend/hot/** + - /recommend/tag/** + - /actuator/** + +management: + endpoints: + web: + exposure: + include: '*' + endpoint: + health: + show-details: always + +feign: + client: + config: + default: + connectTimeout: 5000 + readTimeout: 5000 + circuitbreaker: + enabled: true + +logging: + level: + com.nuaa.video: info + org.springframework.security: info diff --git a/video-user/src/main/resources/application-ha.yml b/video-user/src/main/resources/application-ha.yml new file mode 100644 index 0000000..93b81d9 --- /dev/null +++ b/video-user/src/main/resources/application-ha.yml @@ -0,0 +1,97 @@ +server: + port: 9002 + +spring: + application: + name: video-user + cloud: + nacos: + discovery: + server-addr: ${NACOS_SERVERS:192.168.1.101:8848,192.168.1.102:8848,192.168.1.103:8848} + namespace: ${NACOS_NAMESPACE:public} + group: ${NACOS_GROUP:DEFAULT_GROUP} + username: nacos + password: nacos + ip: ${USER_IP:} + config: + server-addr: ${spring.cloud.nacos.discovery.server-addr} + namespace: ${spring.cloud.nacos.discovery.namespace} + group: ${spring.cloud.nacos.discovery.group} + file-extension: yaml + username: nacos + password: nacos + sentinel: + transport: + dashboard: ${SENTINEL_HOST:sentinel}:${SENTINEL_PORT:8080} + port: 8722 + client-ip: ${USER_IP:} + eager: true + datasource: + url: jdbc:mysql://${MYSQL_HOST:mysql}:${MYSQL_PORT:3306}/video_user?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&allowMultiQueries=true + username: root + password: ${MYSQL_ROOT_PASSWORD:root123456} + driver-class-name: com.mysql.cj.jdbc.Driver + hikari: + max-lifetime: 58000 + idle-timeout: 300000 + connection-timeout: 20000 + connection-test-query: SELECT 1 + keepalive-time: 60000 + validation-timeout: 3000 + minimum-idle: 5 + maximum-pool-size: 20 + data: + redis: + password: ${REDIS_PASSWORD:redis_HA_Cluster_2024} + database: 1 + timeout: 10000 + sentinel: + master: mymaster + nodes: ${REDIS_SENTINEL_NODES:192.168.1.101:26379,192.168.1.102:26379,192.168.1.103:26379} + password: ${REDIS_PASSWORD:redis_HA_Cluster_2024} + lettuce: + pool: + max-active: 200 + max-wait: -1 + max-idle: 10 + min-idle: 0 + +mybatis-plus: + mapper-locations: classpath:mapper/*.xml + type-aliases-package: com.nuaa.video.user.entity + configuration: + map-underscore-to-camel-case: true + cache-enabled: false + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + global-config: + db-config: + id-type: auto + logic-delete-field: is_deleted + logic-delete-value: 1 + logic-not-delete-value: 0 + +auth: + ignore-urls: + - /user/profile/public/** + - /user/profile/init + - /actuator/** + +management: + endpoints: + web: + exposure: + include: '*' + endpoint: + health: + show-details: always + +logging: + level: + com.nuaa.video: info + org.springframework.security: info + +minio: + endpoint: http://${MINIO_HOST:minio}:${MINIO_PORT:9000} + accessKey: minioadmin + secretKey: minioadmin123 + bucketName: video-platform