Heim  >  Artikel  >  Backend-Entwicklung  >  Implementierung eines Redis-Clusters und Aufruf mit PHP

Implementierung eines Redis-Clusters und Aufruf mit PHP

不言
不言Original
2018-04-26 14:43:223593Durchsuche

Dieser Artikel stellt die Implementierung von Redis-Clustern und die Verwendung von PHP zum Aufrufen vor. Freunde in Not können sich darauf beziehen.

1. Konzepterklärung

Redis-Versionen nach 3.0 unterstützen Redis-Cluster. Jeder Knoten speichert Daten und den gesamten Clusterstatus, und jeder Knoten ist mit allen anderen Knoten verbunden. Das Redis-Cluster-Architekturdiagramm sieht wie folgt aus:


Seine Strukturmerkmale: Implementierung eines Redis-Clusters und Aufruf mit PHP

 1、所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
 2、节点的fail是通过集群中超过半数的节点检测失效时才生效。
 3、客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
 4、redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster 负责维护nodeslotvalue。

 5、Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。
kann nicht verstanden werden,,,,
  现在我们是三个主节点分别是:A, B, C 三个节点,它们可以是一台机器上的三个端口,也可以是三台不同的服务器。那么,采用哈希槽 (hash slot)的方式来分配16384个slot 的话,它们三个节点分别承担的slot 区间是:


      节点A覆盖0-5460;
      节点B覆盖5461-10922;
      节点C覆盖10923-16383.

2 🎜 >3. Aufbau eines Redis-Clusters
     获取数据:

      如果存入一个值,按照redis cluster哈希槽的算法: CRC16('key')384 = 6782。 那么就会把这个key 的存储分配到 B 上了。同样,当我连接(A,B,C)任何一个节点想获取'key'这个key时,也会这样的算法,然后内部跳转到B节点上获取数据

Nun, es sind mindestens 6 Redis-Dienste erforderlich.
redis cluster 为了保证数据的高可用性,加入了主从模式,一个主节点对应一个或多个从节点,主节点提供数据存取,从节点则是从主节点拉取数据备份,当这个主节点挂掉后,就会有这个从节点选取一个来充当主节点,从而保证集群不会挂掉。并且如果之前的旧主节点恢复正常时。
Starten Sie dann diese 6 Redis-Dienste auf diesem Computer, aber denken Sie daran, die Konfiguration vor dem Start zu ändern.
  上面那个例子里, 集群有ABC三个主节点, 如果这3个节点都没有加入从节点,如果B挂掉了,我们就无法访问整个集群了。A和C的slot也无法访问。

     所以我们在集群建立的时候,一定要为每个主节点都添加了从节点, 比如像这样, 集群包含主节点A、B、C, 以及从节点A1、B1、C1, 那么即使B挂掉系统也可以继续正确工作。

     B1节点替代了B节点,所以Redis集群将会选择B1节点作为新的主节点,集群将会继续正确地提供服务。 当B重新开启后,它就会变成B1的从节点。

    不过需要注意,如果节点B和B1同时挂了,Redis集群就无法继续正确地提供服务了。

Kopieren Sie dann redis-trib.rb im src-Verzeichnis im Redis-Quellcode in den aktuellen Pfad.
集群中至少应该有奇数个节点,所以至少有三个节点,每个节点至少有一个备份节点,所以下面使用6节点(主节点、备份节点由redis-cluster集群确定)。
Ruby-Umgebung installieren


Überprüfen Sie den Startstatus von 6 Redis auf diesem Computer
port  7000                                        //端口7000,7002,7003        bind 10.93.84.53                                     //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群daemonize    yes                               //redis后台运行pidfile  ./redis_7000.pid          //pidfile文件对应7000,7001,7002cluster-enabled  yes                           //开启集群  把注释#去掉cluster-config-file  nodes.conf   //集群的配置  配置文件首次启动自动生成 7000,7001,7002cluster-node-timeout  15000                //请求超时  默认15秒,可自行设置appendonly  yes                           //aof日志开启  有需要就开启,它会每次写操作都记录一条日志 


Schließlich verwenden wir redis-trib.rb, um einen Redis-Cluster zu erstellen. Verwenden Sie den Parameter „create command –replicas 1“, um für jeden Masterknoten einen Slave-Knoten zu erstellen, ein Zweierpaar, der erste ist der Master und der zweite der Slave.

yum install ruby  
yum install rubygems  
gem install redis-3.2.2.gem

Verwenden Sie redis-cli zum Testen. Sie müssen den Parameter -c hinzufügen, um eine Verbindung in einem Cluster herzustellen.

ps -ef | grep redis

Sie müssen den Parameter -c hinzufügen, was bedeutet, dass sich die Verbindung im Cluster-Modus befindet.

Zu diesem Zeitpunkt ist der Redis-Cluster erfolgreich eingerichtet.
./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
Aber hier benötige ich nur 6 Ports für lokale Tests. Um realistisch zu sein, sind mindestens zwei Maschinen erforderlich. Wie machen wir Sicherheit?

1. Ändern Sie redis.conf und ändern Sie die Bindungsoption auf die aktuelle LAN-IP.

2. Konfigurieren Sie die Firewall so, dass nur der Zugriff auf einen anderen Redis-Server zulässig ist Zugang. . . Andernfalls kann das Programm keine Verbindung zum Redis-Dienst herstellen, was Zeitverschwendung ist. . . .
redis-cli -c


2. Stellen Sie eine Verbindung zum Redis-Cluster in PHP her.
Verwenden Sie zunächst php –ri redis, um die erweiterte Redis-Version anzuzeigen. Muss über Version 3.0 sein.
Referenz
Der zweite Parameter benötigt nur einen Knoten im Cluster, Sie müssen nicht alles ausfüllen

//先关掉6379(redis服务使用的端口)iptables -I INPUT -p tcp --dport 6379  -j DROP 
//允许192.168.1.0这个机器进行访问本机的6379端口iptables -I INPUT -s 192.168.1.0 -p tcp --dport 6379 -j ACCEPT

Erledigen Sie es

Verwandte Empfehlungen:

$obj_cluster = new RedisCluster(NULL, ['127.0.0.1:6380']);echo $obj_cluster->get('name1');

PHP-Methode zum Abfragen von MySQL und Zwischenspeichern in Redis


Freigabe von PHP-Befehlen zum Betrieb von Redis

Das obige ist der detaillierte Inhalt vonImplementierung eines Redis-Clusters und Aufruf mit PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:PHP-regulärer AusdruckNächster Artikel:PHP-regulärer Ausdruck