cas服务器,客户端的集群配置,分布式部署redis

前言:由于项目需要配置负载均衡集群等,而cas的登录session及票据ticket等是保存在内存的,集群后分别在两个tomcat服务器上,所以会出现登录一个客户端之后,访问另一个客户端,此时可能请求的是另一个cas服务器的tomcat,这一个尚未登录,因此获取不到登录的信息,仍然会跳转登录页,单点登录失效。

通过查阅资料,发现处理这种情况,需要两个步骤,分别是:

(1)session共享 :session的存取都从中央缓存redis中存取

(2)票证共享 :采用统一的ticket存取策略,所有ticket的操作都从中央缓存redis中存取。

因此,改造cas服务器项目为使用redis保存session和session,集群的所有cas服务器都配置同一个redis,也就是使用相同的session及ticket,这个处理方式,可以避免登录后有时还要登录的情况。

1、导入保存、读取redis所需的maven包,分别是session的和ticket的:

        <dependency>
            <groupId>org.apereo.cas</groupId>
            <artifactId>cas-server-webapp-session-redis</artifactId>
            <version>${cas.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apereo.cas</groupId>
            <artifactId>cas-server-support-redis-ticket-registry</artifactId>
            <version>${cas.version}</version>
        </dependency>

2.配置redis存储session,application.properties中添加:

#配置redis存储session
cas.webflow.autoconfigure=true
cas.webflow.alwaysPauseRedirect=false
cas.webflow.refresh=true
cas.webflow.redirectSameState=false

cas.webflow.session.lockTimeout=30
cas.webflow.session.compress=false
cas.webflow.session.maxConversations=5
cas.webflow.session.storage=true
spring.session.store-type=redis
spring.redis.host=192.168.4.155
spring.redis.password=
spring.redis.port=6379

3.配置redis存储ticket,application.properties中添加:

#配置redis存储ticket
cas.ticket.registry.redis.host=192.168.4.155
cas.ticket.registry.redis.database=0
cas.ticket.registry.redis.port=6379
cas.ticket.registry.redis.password=
cas.ticket.registry.redis.timeout=2000
cas.ticket.registry.redis.useSsl=false
cas.ticket.registry.redis.usePool=true
cas.ticket.registry.redis.pool.max-active=20
cas.ticket.registry.redis.pool.maxIdle=8
cas.ticket.registry.redis.pool.minIdle=0
cas.ticket.registry.redis.pool.maxActive=8
cas.ticket.registry.redis.pool.maxWait=-1
cas.ticket.registry.redis.pool.numTestsPerEvictionRun=0
cas.ticket.registry.redis.pool.softMinEvictableIdleTimeMillis=0
cas.ticket.registry.redis.pool.minEvictableIdleTimeMillis=0
cas.ticket.registry.redis.pool.lifo=true
cas.ticket.registry.redis.pool.fairness=false
cas.ticket.registry.redis.pool.testOnCreate=false
cas.ticket.registry.redis.pool.testOnBorrow=false
cas.ticket.registry.redis.pool.testOnReturn=false
cas.ticket.registry.redis.pool.testWhileIdle=false

4.保存redis的key值的设置:

# cas.tgc.path=
# cas.tgc.maxAge=-1
# cas.tgc.domain=
# cas.tgc.name=TGC
# cas.tgc.secure=true
# cas.tgc.httpOnly=true
# cas.tgc.rememberMeMaxAge=1209600
# cas.tgc.crypto.encryption.key=
# cas.tgc.crypto.signing.key=
cas.tgc.crypto.enabled=false

cas每次启动的时候回随机生成两个key的值,这样集群部署的时候就会出现这两个值不一样,这时候修改cas.tgc.crypto.enabled=false即可。

5.分别把cas服务器打包部署到两个不同的tomcat,通过nginx进行负载均衡配置,配置如下:

upstream upstream_name{
        ip_hash;
        server 192.168.4.120:8081;
        server 192.168.4.120:8080;
    }

    server {
        listen       80;
        server_name  localhost;

        location / {
            proxy_pass http://upstream_name;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

    }

6.启动nginx

#cd /usr/local/nginx/sbin/

#./nginx

7.访问192.168.4.120/cas,通过其中一个客户端登录后可以看到请求进入其中一个cas部署的tomcat,且在redis保存了session和ticket。当停掉当前进入的这个tomcat时,访问另一个客户端,仍然不需要登录。至此,cas服务器集群成功。

8.springboot客户端集群:

这个比较简单,只需要修改项目配置的cas服务器地址为反向代理的地址及客户端地址为反向代理出去的地址即可。

例如,nginx的配置如下:(ip_hash是不能缺少的,这个设置是使一个用户的访问进入的是同一台服务器,避免重复重定向的问题)

upstream upstream_name{
        ip_hash;
        server 192.168.4.120:8081;
        server 192.168.4.120:8080;
    }

upstream upstream_name1{
        ip_hash;
        server 192.168.4.120:8082;
        server 192.168.4.120:8083;
    }

    server {
        listen       80;
        server_name  localhost;

        location / {
            proxy_pass http://upstream_name;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        location /dognet {
            proxy_pass http://upstream_name1;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

    }

    

我们需要把yml配置文件里面的casServer地址及projectUrl修改为下面这样即可:

#cas配置
cas:
  client-name: ywjk
  #测试工作机地址
  server:
    url: http://192.168.4.120/cas
  #本机ip地址
  project:
    url: http://192.168.4.120/dognet/

9.测试访问客户端时,跳转正常、单点登录正常、单点退出正常。至此,cas服务器及客户端搭建完毕

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
配置 Redis 分布式集群需要额外的步骤和注意事项。以下是一些可能导致无法连接到分布式 Redis 集群的常见问题和解决方法: 1. 配置文件是否正确:检查您的 Redis 配置文件,确保在分布式集群配置中指定了正确的主节点 IP 地址和口号。确保所有节点的配置文件都正确。 2. 防火墙或网络问题:防火墙或网络设置可能会阻止您的应用程序与 Redis 集群节点建立连接。请确保防火墙允许通过 Redis 使用的口进行通信,并且网络配置正确。 3. 主节点是否正常运行:确保所有主节点都在运行状态。您可以通过使用 Redis 命令行或客户工具连接到每个主节点,然后使用 `CLUSTER INFO` 命令来检查集群的状态信息。 4. Redis 集群握手失败:当启动 Redis 集群时,节点之间会进行握手。如果握手失败,可能导致无法连接到集群。检查集群节点之间的网络连接,并确保握手过程中没有任何错误或超时。 5. 集群节点配置错误:检查每个节点的配置文件,确保它们正确设置了集群模式和节点角色(主节点或从节点)。确保每个节点的配置文件都指定了正确的集群节点 IP 地址和口号。 6. 集群节点之间的通信问题:确保所有集群节点之间可以相互通信。您可以尝试使用 `ping` 命令或其他网络工具来测试节点之间的连通性。 如果以上解决方法都无效,建议您查看 Redis 集群节点的日志文件以获取更多详细信息来解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值