---
order: 11
---
# 集群会话故障转移

SuccBI支持集群部署，并支持会话共享和故障转移。当集群中某个节点出现故障后，系统支持会话转移能力，实现无感切换到其他健康的集群节点，保证系统的高可用和用户体验。

集群会话故障转移功能基于Redis实现，用户登录系统时，会将session信息存储到Redis中，一旦某个web节点发生故障，集群中的其他节点可以从Redis中获取session信息，保证故障切换时session信息不会丢失，使集群节点切换时用户没有感知。

## 配置会话共享{#implementation}

### 部署Redis{#install-redis}

在使用会话共享功能时，需要使用redis来存储session信息，SuccBI支持使用redis单节点、哨兵模式和集群模式进行session信息的存储，Redis部署可参考[Redis安装配置](../install/database/redis.md)。
:::tip 提示
建议在生产环境中使用[集群模式](../install/database/redis.md#redis-cluster)或者[哨兵模式](../install/database/redis.md#redis-sentinel)来存储session信息，保证服务的高可用。
:::

### Nginx配置{#nginx-configuration}

集群会话故障转移服务还需要配置负载均衡服务器，如Nginx，配置可参考[反向代理和负载均衡](./reverse-proxy.md#nginx)，注意事项如下：

- SuccBI会话共享功能在Nginx代理服务器配置[会话粘滞](./reverse-proxy.md#tengine)和不配置会话粘滞的情况下都可以使用，推荐使用会话共享功能时不配置会话粘滞。
- 集群进行Nginx配置时需要配置故障转移，故障转移配置可参考[官方文档](https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/)。

### 系统配置{#system-configuration}

Redis环境配置完毕后，可以在系统中配置会话共享，具体配置如下：

1. 在**系统设置**>**安全设置**>**会话管理**中，将**会话存储**配置为Redis，并配置**会话最长保持时间**。
   配置界面如下所示：
   ![会话管理配置](./images/2021-12-17-10-21.png)

2. 进入**项目列表**>**系统数据**>**资源**，在左侧**settings**目录找到`settings.json`文件，并参考以下内容添加配置：

```sh
#单节点模式
	"sys.redis": [{
		"serviceName": "test",
		"mode": "singleton",
		"urls": ["192.168.10.60:7006"],
		"masterName": "test"
	}],
#集群模式
	"sys.redis": [{
		"serviceName": "test",
		"mode": "cluster",
		"urls": [
			     "192.168.10.60:7000",
                 "192.168.10.60:7001", 
                 "192.168.10.60:7002",
                 "192.168.10.60:7003",
                 "192.168.10.60:7004", 
                 "192.168.10.60:7005"
                ],
		"masterName": "test"
	}],
#哨兵模式
    "sys.redis": [{
		"serviceName": "mymaster",
		"mode": "sentinel",
		"urls": [
			    "192.168.10.60:7117",
			    "192.168.10.60:7118",
			    "192.168.10.60:7119"
		        ], 
		"masterName": "mymaster"
	}],
```

参数介绍如下：

- **serviceName**：服务名称，建议和`masterName`配置相同。
- **mode**：singleton|sentinel|cluster，分别对应[Redis单节点](../install/database/redis.md#redis-configure)、[哨兵模式](../install/database/redis.md#redis-sentinel)和[集群模式](../install/database/redis.md#redis-cluster)。
- **urls**：若模式为单节点或者集群模式，配置对应节点的url集合，如果模式是哨兵模式，需要填写哨兵节点的url集合。
- **masterName**：主节点名称，若设置为哨兵模式，需要配置为Redis主节点名称，默认为mymaster。

:::warning 注意

1. Redis参数和`会话存储`配置完毕后，需要重启才能生效。
2. 在`settings.json`文件中配置Redis参数后，需要同时配置`会话存储`，否则会话共享功能不会生效。
3. 若配置了`会话存储`，但未在`settings.json`文件中配置Redis参数或Redis参数配置有误，系统将会提示异常，无法正常使用。
   :::

## 注意事项{#attention}

1. Redis出现故障时，系统会提示异常，无法正常登录使用，此时应尽快恢复reis服务。

异常提示如下所示：
![异常提示](./images/2021-12-17-11.png)

2. 若Redis故障短时间内无法恢复，导致系统无法正常使用，可以在web服务器中设置jvm参数`-Dsucc.sessionStore=default`禁用会话共享功能，然后重启web服务器，待Redis恢复后重新启动集群会话故障转移服务。
   :::warning 注意
   集群中的每一台web服务器都需要设置jvm参数，启动前还需设置配置Nginx为会话粘滞，否则无法登录系统！
   :::
