redis est un système de stockage clé-valeur. Semblable à Memcached, il prend en charge relativement plus de types de valeurs stockées, notamment string (string), list (liste chaînée), set (set), zset (ensemble trié - ensemble ordonné) et hash (type de hachage). Ces types de données prennent tous en charge les opérations push/pop, ajout/suppression, intersection, union, différence et plus riches, et ces opérations sont toutes atomiques. Sur cette base, Redis prend en charge différentes méthodes de tri. Comme Memcached, les données sont mises en cache en mémoire pour garantir l'efficacité. La différence est que Redis écrira périodiquement les données mises à jour sur le disque ou écrira les opérations de modification dans des fichiers d'enregistrement supplémentaires, et sur cette base, la synchronisation maître-esclave (maître-esclave) est obtenue.
Aperçu
Dans les entreprises existantes, 80 % des entreprises utilisent principalement le service redis autonome. Dans les scénarios réels, un seul nœud redis est. sujettes aux risques.
Faire face à des problèmes
1. Panne de machine. Nous déployons sur un serveur Redis Lorsqu'une panne de machine se produit, nous devons migrer vers un autre serveur et nous assurer que les données sont synchronisées. Les données sont la chose la plus importante si vous ne vous en souciez pas, vous n'utiliserez pratiquement pas Redis. 2. Goulot d’étranglement de capacité. Lorsqu'il faudra étendre la mémoire Redis, de 16G de mémoire à 64G, une seule machine ne pourra certainement pas la satisfaire. Bien sûr, vous pouvez acheter une nouvelle machine 128G.
Solution
Pour obtenir une plus grande capacité de stockage de la base de données distribuée et résister à un accès simultané élevé, nous convertirons les données centralisées d'origine
Les données de la bibliothèque sont stockées sur plusieurs autres nœuds du réseau. Afin de résoudre ce problème de nœud unique, Redis déploiera également plusieurs copies de données surd'autres nœuds pour la réplication afin d'obtenir une haute disponibilité de Redis et une sauvegarde redondante des données,
Ce assure la haute disponibilité des données et des services.
Réplication maître-esclaveQu'est-ce que la réplication maître-esclave
Maître -la réplication esclave fait référence à la copie de données d'un serveur Redis vers d'autres serveurs Redis. Le premier est appelé nœud maître (maître) et le second est appelé nœud esclave (esclave). La réplication des données est unidirectionnelle et ne peut s'effectuer que du nœud maître vers le nœud esclave.
Par défaut, chaque serveur Redis est un nœud maître ; et un nœud maître peut avoir plusieurs nœuds esclaves (ou aucun nœuds esclaves), mais un nœud esclave ne peut avoir qu'un seul nœud maître.
Le rôle de la réplication maître-esclave
Redondance des données : la réplication maître-esclave réalise une sauvegarde à chaud de data , est une méthode de redondance des données autre que la persistance. 2. Récupération des pannes : lorsque le nœud maître a un problème, le nœud esclave peut fournir des services pour réaliser une récupération rapide des pannes
;3. Équilibrage de charge : basé sur la réplication maître-esclave, combinée à une séparation lecture-écriture, le nœud maître peut fournir des services d'écriture, et les nœuds esclaves peuvent fournir des services de lecture (c'est-à-dire , lors de l'écriture de données Redis L'application se connecte au nœud maître lors de la lecture des données Redis, utilisez
pour vous connecter au nœud esclave) pour partager la charge du serveur en particulier dans le scénario de moins d'écriture et plus de lecture, multiple ; les nœuds esclavessont utilisés pour partager la charge de lecture, ce qui peut augmenter considérablement la concurrence du serveur Redis. 4. Séparation de lecture et d'écriture : elle peut être utilisée pour réaliser la séparation de lecture et d'écriture, l'écriture de la bibliothèque principale et la lecture de la bibliothèque esclave. La séparation de la lecture et de l'écriture peut non seulement améliorer la capacité de charge du serveur, mais peut également être utilisé selon les besoins. Changer, modifier le nombre de bibliothèques esclaves
5. La pierre angulaire de la haute disponibilité : En plus des fonctions ci-dessus, la réplication maître-esclave ; est également la base de la mise en œuvre de sentinelles et de clustersPar conséquent, la réplication maître-esclave est la base de la haute disponibilité de Redis.
Activer la réplication maître-esclave
Activer la réplication maître-esclave à partir du nœud esclave Il existe 3 manières : 1. Fichier de configuration : Ajouter au fichier de configuration du serveur esclave :
slaveof <masterip> <masterport>
2. Commande de démarrage : Ajouter après redis-server. commande de démarrage
--slaveof <masterip> <masterport>
3. 客户端命令: Redis 服务器启动后,直接通过客户端执行命令:
slaveof <masterip> <masterport>
则该 Redis 实例成为从节点。
通过 info replication 命令可以看到复制的一些信息主从复制原理主从复制过程大体可以分为 3 个阶段:连接建立阶段(即准备阶段)、数据同步阶段、命令传播阶段。在从节点执行 slaveof 命令后,复制过程便开始运作,下面图示大概可以看到,从图中可以看出复制过程大致分为 6 个过程
主从配置之后的日志记录也可以看出这个流程
1)保存主节点(master)信息。
执行 slaveof 后 Redis 会打印如下日志:
2)从节点(slave)内部通过每秒运行的定时任务维护复制相关逻辑,当定时任务发现存在新的主节点后,会尝试与该节点建立网络连接
从节点与主节点建立网络连接
从节点会建立一个 socket 套接字,从节点建立了一个端口为 51234 的套接字,专门用于接受主节点发送的复制命令。从节点连接成功后打印如下日志:
如果从节点无法建立连接,定时任务会无限重试直到连接成功或者执行 slaveof noone 取消复制关于连接失败,可以在从节点执行 info replication 查看<span style="font-size: 14px; line-height: 1.76em;">master_link_down_since_seconds</span>
指标,它会记录与主节点连接失败的系统时间。从
节点连接主节点失败时也会每秒打印如下日志,方便发现问题:
# Error condition on socket for SYNC: {socket_error_reason}
3)发送 ping 命令。
连接建立成功后从节点发送 ping 请求进行首次通信,ping 请求主要目的如下:
·检测主从之间网络套接字是否可用。
·检测主节点当前是否可接受处理命令。
如果发送 ping 命令后,从节点没有收到主节点的 pong 回复或者超时,比如网络超时或者主节点正在阻塞无法响应命令,从节点会断开复制连接,下次定时任务会发起重连
从节点发送的 ping 命令成功返回,Redis 打印如下日志,并继续后续复制流程:
4)权限验证。如果主节点设置了 requirepass 参数,则需要密码验证,从节点必须配
置 masterauth 参数保证与主节点相同的密码才能通过验证;如果验证失败复制将终
止,从节点重新发起复制流程。
5)同步数据集。主从复制连接正常通信后,对于首次建立复制的场景,主节点会把持
有的数据全部发送给从节点,这部分操作是耗时最长的步骤。
6)命令持续复制。当主节点把当前的数据同步给从节点后,便完成了复制的建立流程。
接下来主节点会持续地把写命令发送给从节点,保证主从数据一致性。
更多redis知识请关注redis数据库教程栏目。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!