Redis集群是一個提供在多個Redis節點間共享數據的程序集。
Redis集群中不支持處理多個keys的命令。
Redis集群通過分區來提供一定程度的可用性。在某個節點宕機或者不可用的時候可以繼續處理命令。
Redis集群數據分片
在Redis集群中,使用數據分片(sharding)而不是一致性hash(consistency hashing)來實現,一個Redis集群包含16384個哈希槽(hash slot),數據庫中的每個鍵都存在這些哈希槽中的某一個,通過CRC16校驗后對16384取模來決定。
加入說現在集群中有三個節點,那么
?、俟濣cA包含0到5500號哈希槽。
?、诠濣cB包含5501到11000號哈希槽。
③節點C包含11001到16384號哈希槽。
然后如果我們要增加一個節點的時候,會從ABC三個節點分別得到一部分槽到D上。如果我們移除一個節點的時候,就會把移除的節點的分隔槽移到剩下的槽上面。
Redis主從復制模型
為了實現Redis的集群的高可用性。Redis提供了一個主從復制模型。每個節點都會有N-1個復制品。
如果在創建集群的時候,我們為每個節點添加了一個從節點,這時候,如果其中的某個主節點掛掉了,便會把它的從節點做為新的主節點,繼續提供服務。但是如果主節點和從節點都掛掉了,那就不可以繼續使用了。
Redis集群搭建
Redis集群由多個云新在集群模式下的Redis實例組成。實例的集群模式需要通過配置來開啟。
下面是一個包含了最少選項的集群配置文件實例:
port 7000cluster-enabled yescluster-config-file nodes.confcluster-node-timeout 5000appendonly yespidfile /var/run/redis_xxxx.piddir /usr/local/redis-cluster/xxxx
port指定了節點的端口號
cluster-enabled yes選項用于開啟實例的集群模式
cluster-config-file nodes.conf設置了保存節點的配置文件路徑,這個文件無須認為修改,是在集群啟動的時候創建。
cluster-node-timeout 5000:設置了方式失敗的等待時間。即5秒還訪問不了就認為這個節點不可用。
appendonly yes:用于開啟aof持久化
pidfile /var/run/redis_xxxx.pid設置pid文件的位置,其中xxxx為端口號
dir /usr/local/redis-cluster/xxxx設置工作目錄,其中xxxx為端口號。
此時目錄中的文件是這樣的
[root@localhost 10:49 /usr/local/redis-cluster]# ll 7000 7001 7002 7003 7004 70057000:總用量 7080-rw-r--r--. 1 root root 57787 9月 10 10:44 redis.conf-rwxr-xr-x. 1 root root 7185872 9月 10 09:50 redis-server7001:總用量 7080-rw-r--r--. 1 root root 57787 9月 10 10:46 redis.conf-rwxr-xr-x. 1 root root 7185872 9月 10 10:04 redis-server7002:總用量 7080-rw-r--r--. 1 root root 57787 9月 10 10:46 redis.conf-rwxr-xr-x. 1 root root 7185872 9月 10 10:04 redis-server7003:總用量 7080-rw-r--r--. 1 root root 57787 9月 10 10:47 redis.conf-rwxr-xr-x. 1 root root 7185872 9月 10 10:04 redis-server7004:總用量 7080-rw-r--r--. 1 root root 57787 9月 10 10:48 redis.conf-rwxr-xr-x. 1 root root 7185872 9月 10 10:04 redis-server7005:總用量 7080-rw-r--r--. 1 root root 57787 9月 10 10:48 redis.conf-rwxr-xr-x. 1 root root 7185872 9月 10 10:04 redis-server[root@localhost 10:49 /usr/local/redis-cluster]#
新聞熱點
疑難解答