现有零碎架构
Springmvc+cas+nginx+nginx_upstream_jvm_route 插件实现负载并且实现 session 共享:
原理:
1:一开始申请过去,没有带 session 信息,jvm_route 就依据 round robin 的办法,发到一台 tomcat 下面(依据 cas 信息初始化用 户信息存入 session)
2:tomcat 增加上 session 信息,并返回给客户。3. 用户再次申请,jvm_route 看到 session 中有后端服务器的名称,它就把申请转到对应的服务器上
毛病:
1:并没有真正的实现负载,每次都负载到雷同机器上;当用户拜访时通过雷同的代理地址过去时会造成单节点压力
2:nginx_upstream_jvm_route 插件最高只反对到 nginx1.14 版本左右,nginx1.14 版本有破绽,架构无奈降级。
新架构组成
SpringMvc+SpringSession+mycat+mysql 主主模式实现 session 共享和数据库高可用
- SpringSession:把 servlet 容器实现的 httpSession 替换为 spring-session;将 session 信息存入 redis;
- Mysql:mysql 主主模式,进行数据的实时双向同步
- Mycat:mysql 中间件,治理 mysql, 能够做到 mysql 的读写拆散以及数据库故障时主动切换;利用直连 mycat;
- Redis:应用哨兵模式,实现主从主动切换 备注:如果复用老的我的项目代码,而且旧我的项目应用 httpSession 进行存储 session 信息的话,根本零革新。
Spring-Session 配置
Spring-session 及 redis 的依赖包
Spring-session 配置
Redis 单节点模式
此配置是关键点,引了 redis 单 机依赖包;设置了 session 在 redis 中的生效 工夫;定义了 cookie 中 session 的名称
Redis 哨兵模式
此配置是关键点,引了 redis 哨兵依赖包;设置了 session 在 redis 中的生效工夫;定义了 cookie 中 session 的名称
Mysql 主从配置
第一个 mysql 配置;此处参数重要的是 MySQL 主键自增的差值
第二个 MySQL 配置,次要是起始值不一样
Mycat 根本信息
mycat 免装置,下载后间接解压即可
Schema 配置的是数据库中的表,有很多种属性且用处不一,此处比较简单
Mycat 注意事项:
switchtype= 2 时,heartBeat 节点值为 show slave status,查看主从状态,writeHost 中的 user 必须具备 replicationclient 和 super 权限中的一种,不然会报错 调配权限:grant replicationclient , super on . to mas;