Configure Cluster Cluster Redis
Como se usa en el presente documento, REDIS-5.0.5, REDIS instalado en / blando / REDIS directorio, para ser el directorio / redis / datos nuevo / suave.
instalar rubí
wget https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.3.tar.gz
alquitrán -zxvf rubí 2.6.3.tar.gz
cd rubí-2.6.3 /
./configure -prefix = / usr / local / rubí
maquillaje
make install
cd / usr / local / ruby /
cp bin / ruby / usr / local / bin /
bin cp / joya / usr / local / bin locales /
rubí --version
Creación de configuración Redis
cd / suaves / Redis
Vine config / bolígrafos-7000.conf
port 7000
protected-mode no
daemonize yes
dir "/soft/redis/data"
dbfilename "dump-7000.rdb"
logfile "log-7000.log"
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-require-full-coverage no
configuración detallada
sí habilitado para clúster comienzan cúmulo cúmulo
cúmulo-require-de cobertura total sin un nodo no está disponible, el grupo aún en marcha
La creación de otra configuración de 5 piezas
sed 's / 7000/7001 / g' config / redis-7000.conf> config / redis-7001.conf
sed 's / 7000/7002 / g' config / redis-7000.conf> config / redis-7002.conf
sed 's / 7000/7003 / g' config / redis-7000.conf> config / redis-7003.conf
sed 's / 7000/7004 / g' config / redis-7000.conf> config / redis-7004.conf
sed 's / 7000/7005 / g' config / redis-7000.conf> config / redis-7005.conf
Comenzó seis instancias Redis
redis-server config / redis-7000.conf
redis-server config / redis-7001.conf
redis-server config / redis-7002.conf
redis-server config / redis-7003.conf
redis-server config / redis-7004.conf
Redis-config server / Redis-7005.conf
Creación de un clúster, Redis-v5 versión sin más largos usos Redis-trib.rb para crear un clúster, en lugar de utilizar Redis-CLI --cluster (192.168.4.176 es servidor linux ip)
Redis-CLI --cluster crean réplicas --cluster-1 \
192.168.4.176:7000 192.168.4.176:7001 192.168.4.176:7002 192.168.4.176:7003 192.168.4.176:7004 192.168.4.176:7005
proceso de creación requiere que se introduzca una confirmación sí
sí
Abrir un cliente
redis-CLI -p 7000
Ver cúmulo estado de
información de clúster
Vista desde el nodo de clúster primaria, la asignación de ranura de
nodos de clúster
De hecho, el nuevo grupo de clúster no es el foco de este artículo, hay muchos tutoriales en línea, este racimo racimos y arranque de primavera 2 La integración es el foco de este artículo.
la primavera de arranque integrado 2 cúmulo Redis
configuración pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
其他配置省略不写了
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- cluster集群模式必须使用jedis 2.X,不然无法做到故障迁移 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.10.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
de arranque por defecto de primavera 2 como la lechuga núcleos ReDiS el cliente. Empecé a usar conector lechuga-core Redis, cuando mato de un nodo maestro (nodo 7000), Redis desde el servidor para completar la conmutación por error interruptor principal. resorte de arranque 2, pero aún de conexión 7000 nodos, lo que resulta en el otoño de 7000 solicitudes de franjas horarias clave de nodo han sido un error. Se estima que el cliente lechuga núcleos no vuelva a establecer la caché de agrupación de conexiones, por lo que el cliente no puede hacer la conmutación por error. Luego cambiar a la versión 2.x jedis, proyecto de arranque muelle 2 fue hecho de conmutación por error, no se conectan los nodos 7000. Nota jedis 3.X versiones causa resorte de arranque 2 no se puede iniciar.
Configuración application.properties
spring.redis.timeout=2000
spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-idle=8
spring.redis.jedis.pool.min-idle=0
spring.redis.jedis.pool.max-wait=1000
spring.redis.cluster.nodes=192.168.4.176:7000, 192.168.4.176:7001, 192.168.4.176:7002, 192.168.4.176:7003, 192.168.4.176:7004, 192.168.4.176:7005
# 重定向次数
spring.redis.cluster.max-redirects=5
Donde hay un padre cielo muy, escrito después de application.properties de configuración, sólo es capaz de conectarse al clúster, el cliente no puede hacer la conmutación por error, también tienen que escribir manualmente una clase de configuración JedisConnectionFactory, a continuación, JedisConnectionFactory conjunto de RedisTemplate configuración de fábrica el siguiente es el código.
@Configuration
public class RedisConfigJedis {
@Value("${spring.redis.timeout}")
private Integer redisTimeout;
@Value("${spring.redis.jedis.pool.max-active}")
private Integer poolMaxActive;
@Value("${spring.redis.jedis.pool.max-idle}")
private Integer poolMaxIdle;
@Value("${spring.redis.jedis.pool.min-idle}")
private Integer poolMinIdle;
@Value("${spring.redis.jedis.pool.max-wait}")
private Integer poolMaxWait;
@Value("${spring.redis.cluster.nodes}")
private List<String> clusterNodes;
@Value("${spring.redis.cluster.max-redirects}")
private Integer clusterMaxRedirects;
@Bean
public RedisConnectionFactory redisConnectionFactory() {
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(poolMaxActive);
poolConfig.setMaxIdle(poolMaxIdle);
poolConfig.setMinIdle(poolMinIdle);
poolConfig.setMaxWaitMillis(poolMaxWait);
JedisClientConfiguration clientConfig = JedisClientConfiguration.builder()
.usePooling().poolConfig(poolConfig).and().readTimeout(Duration.ofMillis(redisTimeout)).build();
// cluster模式
RedisClusterConfiguration redisConfig = new RedisClusterConfiguration();
redisConfig.setMaxRedirects(clusterMaxRedirects);
for (String ipPort :clusterNodes){
String[] ipPortArr = ipPort.split(":");
redisConfig.clusterNode(ipPortArr[0], Integer.parseInt(ipPortArr[1]));
}
return new JedisConnectionFactory(redisConfig, clientConfig);
}
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate template = new RedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
//key使用StringRedisSerializer
StringRedisSerializer strSerializer = new StringRedisSerializer();
template.setKeySerializer(strSerializer);
template.setHashKeySerializer(strSerializer);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
//value使用Jackson2JsonRedisSerializer
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
return template;
}
}
Bajo resumen, cuando Redis matan a un nodo principal del clúster (nodo 7000), el nodo principal de un nodo ascendido a 7003, la línea nodo 7000. Redis clúster de conmutación ningún problema, pero proyecto de arranque de primavera en este momento para limpiar conexión antigua Redis grupo de caché, caché de restablecer la agrupación de conexiones, con el fin de poner 7.000 nodos de agrupación de conexiones que ya no es válida eliminado, ya no está conectado al nodo 7000. de inicio de primavera 2 versiones hacen de conmutación por error, prestar atención a los siguientes puntos.
1, pom.xml jedis versión 2.X dependencias introducidas. jedis versión 3.x no funciona.
2, la configuración Application.properties JedisConnectionFactory de nuevo a la configuración, RedisTemplate JedisConnectionFactory utiliza como la fábrica de conexiones.
Por supuesto, puede estar donde he cometido un error, damos la bienvenida al mensaje de discusión.
A continuación, escribir una prueba de clase Redis llamada ciclo
@RunWith(SpringRunner.class)
@SpringBootTest
public class Test01 {
@Autowired
RedisTemplate redisTemplate;
@Test
public void test001(){
while (true){
try {
String key = "test:" + new Date().getTime();
redisTemplate.opsForValue().set(key, new Date().getTime());
TimeUnit.MILLISECONDS.sleep(100L);
System.out.println(redisTemplate.opsForValue().get(key));
}catch (Exception e){
e.printStackTrace();
}
}
}
}
Ejecutar la clase de prueba
Abrir una Redis-cli
redis-CLI -p 7002
Ver configuración nodo de clúster
nodos de clúster
7001 es el nodo maestro, el nodo 7005 es de 7,001
Proceso matan el nodo maestro 7001
ps -ef | grep servidor Redis
kill -9 maestro proceso ID
En serán reportados anormal de este proyecto de arranque de primavera, después de un corto período de tiempo, el proyecto está funcionando normalmente.
Ver ReDiS nuevo nodo de clúster
7005 fue ascendido a maestro, 7001 la línea de montaje.
7001 nodo comienza de nuevo, 7001 se convertirá en 7005 desde el nodo.
Cuando 7001,7005 par de nodos maestro y esclavo están fuera de línea debido a la responsabilidad de los nodos finales 5491-10933 ranura están abajo, consiga, la solicitud se ajustará a este lado de la ranura de error.