集群环境下,nova 云主机的控制口打不开,报错token无效

在OpenStack集群安装后,遇到VM控制口无法打开的问题,错误代码1006。通过查看nova-novncproxy.log日志,发现在token验证的第14和15步出现错误。进一步分析发现,多个控制节点的nova服务之间的cache配置不一致。停止非主节点的nova服务后,问题得到解决。最终解决方案是在所有控制节点的nova.conf中统一添加memcache_servers配置,并启用缓存,然后重启服务。问题成功解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装完,集群后,vm的控制口打不开,页面报1006错误,定位过程解决过程如下。打开nova-novncproxy.log看到下面的报错。

找到了vnc的原理图如下,日志问题报错,看了nova对应的代码后,在14和15校验token出问题了,nova-novncproxy向nova-consoleauth check token。

 在浏览器中多次打开vm的控制口,发现下面log不在一个节点的log中

Received Token: 834f67e6-e5ba-4d4b-bbcb-a7e0d1aef210, {'instance_uuid': u'07fbdd20-8f9c-46f8-be5c-fd24bb0770c6', 'access_url': u'http://10.27.24.50:6080/vnc_auto.html?token=834f67e6-e5ba-4d4b-bbcb-a7e0d1aef210', 'token': u'834f67e6-e5ba-4d4b-bbcb-a7e0d1aef210', 'last_activity_at': 1629194797.839682, 'internal_access_path': None, 'console_type': u'novnc', 'host': u'10.27.24.54', 'port': u'5900'}


2021-08-17 18:07:25.430 21577 INFO nova.consoleauth.manager [req-4f9847fc-987d-459a-abb6-fede2688781d - - - - -] Checking Token: 909de399-c9a6-4ecf-a1ce-f5eefa9c6dea, False

 怀疑是和cache 有关系,保留了一个节点上的nova服务,stop其余两个节点的nova相关服务,再次尝试打开nova的控制口,发现成功了。问题清楚了,就是cache 配置导致的问题。三个控制节点的nova.conf中加入下面的配置:

[cache]
memcache_servers=10.1.1.51:11211,10.1.1.52:11211,10.1.1.53:11211
backend=oslo_cache.memcache_pool
enabled=True
debug_cache_backend=True

重启三个控制节点上的nova 相关服务,完美解决问题。

 参考网址:https://www.cnblogs.com/potato-chip/p/11738129.html

<think>好的,我现在需要帮助用户解决Sa-TokenToken无效导致的报错问题。首先,我应该回顾一下用户提供的引用内容,看看有没有相关的信息。用户提到了引用[1]中的Token失效401处理,引用[2]中的Sa-Token整合Redis空指针异常,引用[4]中的Feign调用问题。 首先,用户的问题是关于Sa-TokenToken无效报错。根据引用[1],当Token失效后,请求接会返回401,需要进行处理。这可能涉及到Token的自动续期或者拦截器的配置。Sa-Token本身应该有处理机制,但可能需要检查配置是否正确,比如是否启用了自动续期功能。 然后,引用[2]提到了整合Redis时出现空指针异常,可能是因为RedisUtil没有被正确注入。如果用户在使用Sa-Token时集成了Redis作为Token的存储,那么需要检查Redis的配置是否正确,相关依赖是否添加,比如sa-token-dao-redis。如果Redis连接有问题,可能导致Token无法正确存储或读取,从而引发无效的问题。 引用[4]中的Feign调用问题可能与Token的传递有关。如果服务间调用时没有正确传递Token,会导致认证失败,返回401。这时候需要配置Feign的拦截器来携带Token。 接下来,我需要将这些可能的点整理成解决方案。可能的步骤包括检查Token有效期配置,确保自动续期开启,检查Redis配置和依赖,确保Token正确存储,配置拦截器处理401,以及服务间调用的Token传递。 另外,用户可能遇到的常见问题包括:Token有效期设置过短,Redis未正确连接导致Token存储失败,拦截器未正确处理401状态码,或者服务间调用未传递Token。需要逐一排查这些可能性。 需要确保用户已经按照Sa-Token的文档正确配置了Redis,比如添加了相应的依赖,配置了Redis连接信息。同时,检查是否有异常导致RedisUtil未被注入,如引用[2]中的空指针问题,可能需要在代码中确认RedisUtil的实例化是否正确。 最后,还需要考虑Nacos中的服务注册问题,如引用[3]提到的端占用,但这个问题可能与Token无效无直接关联,不过如果服务未正确注册,也可能导致请求到错误的服务实例,间接引发认证问题。 总结下来,解决方案应包括配置检查、依赖检查、自动续期设置、拦截器配置、服务间Token传递以及日志分析等步骤。</think>### Sa-Token Token无效报错解决方案 #### 1. 检查Token有效期配置 - 默认有效期为30分钟,可通过配置文件调整: ```yaml sa-token: timeout: 1800 # 单位秒 activity-timeout: -1 # 自动续期模式(-1表示禁用) ``` - 推荐开启临时会话模式(浏览器关闭即失效): ```java StpUtil.setLoginId(10001, "PC"); // 指定设备类型 ``` #### 2. 集成Redis存储Token(必须项) - 添加依赖(SpringBoot3): ```xml <dependency> <groupId>cn.dev33</groupId> <artifactId>sa-token-dao-redis</artifactId> <version>1.37.0</version> </dependency> ``` - 检查Redis连接配置: ```yaml spring: redis: host: 127.0.0.1 port: 6379 # password: database: 0 ``` #### 3. 配置401拦截器 ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new SaInterceptor(handle -> { // 不做处理 })).addPathPatterns("/**").excludePathPatterns("/user/doLogin"); // 注册全局异常拦截器 registry.addInterceptor(new SaServletFilter(handler -> { SaHolder.getResponse().setHeader("Access-Control-Allow-Origin", "*"); SaRouter.match("/**").check(r -> { // 会话校验 StpUtil.checkLogin(); }); })); } } ``` #### 4. 服务间调用传递Token 在Feign调用前注入上下文: ```java @Bean public RequestInterceptor requestInterceptor() { return template -> { template.header(StpUtil.getTokenName(), StpUtil.getTokenValue()); }; } ``` #### 5. 常见问题排查 1. **Redis空指针异常**:检查`RedisUtil`是否被Spring管理,确认`@Component`注解存在[^2] 2. **Nacos服务注册异常**:重启Nacos释放残留服务注册信息[^3] 3. **Feign调用异常**:确认已添加`spring-cloud-starter-openfeign`依赖[^4] #### 6. 日志分析建议 ```java // 在登录方法中添加日志记录 public void doLogin(String username, String password) { // ...验证逻辑 StpUtil.login(user.getId()); System.out.println("当前Token值:" + StpUtil.getTokenValue()); System.out.println("Token有效期:" + StpUtil.getTokenTimeout()); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值