2016-10-25 1 views
0

Nous avons besoin d'un stockage clé/valeur en mémoire qui peut être répliqué vers d'autres centres de données.
Voici nos exigences:
1. Tous les centres de données doivent avoir la même base de données (une petite resynchronisation est acceptable comme 30-60 secondes). Je sais que nous ne pouvons avoir qu'un seul serveur maître et c'est OK. Une seule base de données dans un centre de données sera un maître. Mais si le serveur maître meurt, nous devons choisir un nouveau maître.
2. Nous devons pouvoir envoyer des demandes d'écriture à n'importe lequel des nœuds esclaves et l'envoyer directement au nœud maître. Je sais qu'il existe un cluster Redis qui peut accepter toutes les demandes d'écriture mais il ne nous convient pas car les données sont réparties entre les nœuds (ainsi, tous les serveurs de tous les centres de données gèrent des données différentes mais nous devons avoir les mêmes données dans tous les centres de données car nous n'avons que 5% d'écritures et 95% de lectures).Est-il possible de laisser une requête d'écriture passer directement par un esclave au maître dans Redis?

Est-il possible de réaliser avec le Redis?

+0

Même si vous définissez 'non esclave en lecture seule ', les écritures sur l'esclave ne seront pas synchronisées avec le maître. Au lieu de cela, ces écritures seront supprimées lorsque l'esclave se synchronisera avec le maître. –

Répondre

0

Je n'avais pas raison. J'ai découvert que cela peut être fait avec Redis Cluster. Nous devons créer un nœud maître et lui assigner tous les emplacements de hachage. Après cela, nous devons créer des nœuds esclaves et répliquer le maître. Dans cette situation, nous aurons un basculement automatique et tous les nœuds conserveront les mêmes données.

Pour définir un nœud esclave. C'est à dire. reproduire un maître, nous devons utiliser les éléments suivants:

./redis-trib.rb add-node --slave --master-id {master_id} {master_ip}:{master_port} {slave_ip}:{slave_port} 

Ou nous pouvons ajouter un nouveau maître vide:

./redis-trib.rb add-node {any_node_ip_in_cluster}:{port} {new_node_ip}:{port} 

Et puis tourner à l'esclave:

redis {master_ip}:{master_port}> cluster replicate {master_id} 

post-scriptum Redis a besoin d'avoir un minimum de 3 masters mais ce n'est pas une limite stricte du cluster. Nous ne pouvons toujours avoir qu'un seul noeud maître et ce sera totalement parfait.