redis-cluster集羣

Redis集羣

 Redis集羣是一個能夠在多個Redis節點之間進行數據共享的設施( installation )。node

Redis集羣不支持那些須要同時處理多個鍵的Redis命令,由於執行這些命令須要在多個Redis節點之間移動數據,而且在高負載的狀況下,這些命令將下降Redis集羣的性能,並致使不可預測的行爲。python

Redis集羣經過分區( partition )來提供必定程度的可用性( availability ) : 即便集羣中有一部分節點失效或者沒法進行通信,集羣也能夠繼續處理命令請求。linux

將數據自動切分( split) 到多個節點的能力。c++

當集羣中的一部分節點失效或者沒法進行通信時,仍然能夠繼續處理命令請求的能力。redis

Redis集羣數據共享

Redis集羣使用數據分片( sharding )而非一致性哈希(consistency hashing )來實現:一個Redis集羣包含16384個哈希槽( hash slot ), 數據庫中的每一個鍵都屬於這16384個哈希槽的其中一個, 集羣使用公式CRC16(key) % 16384來計算鍵key屬於哪一個槽,其中CRC16(key)語句用於計算鍵key的CRC16校驗和。
節點A負責處理0號至5500號哈希槽。
節點B負責處理5501號至11000號哈希槽。
節點C負責處理11001號至16384號哈希槽。數據庫

集羣的複製

爲了使得集羣在一部分節點下線或者沒法與集羣的大多數( majority )節點進行通信的狀況下,仍然能夠正常運做 ,Redis 集羣對節點使用了主從複製功能:集羣中的每一個節點都有1個至N個複製品( replica ),其中一個復 製品爲主節點( master ), 而其他的N-1個複製品爲從節點( slave)
在以前列舉的節點A、B、C的例子中,若是節點B下線了,那麼集羣將沒法正常運行, 由於集羣找不到節點來處理5501號至11000號的哈希槽。
假如在建立集羣的時候(或者至少在節點B下線以前),咱們爲主節點B添加了從節點B1, 那麼當主節點B下線的時候,集羣就會將 B1設置爲新的主節點,並讓它代替下線的主節點B,繼續處理5501號至11000號的哈希槽這樣集羣就不會由於主節點B的下線而沒法正常運做了。
不過若是節點B和B1都下線的話,Redis集羣仍是會中止運做。vim

 

運行機制

全部的redis節點彼此互聯(PINGPONG機制),內部使用二進制協議優化傳輸速度和帶寬.
節點的fail(失效)是經過集羣中超過半數的master節點檢測失效時才生效
客戶端與redis節點直連,不須要中間proxy層.客戶端不須要鏈接集羣全部節點,鏈接集羣中任何一個可用節點便可
把全部的物理節點映射到[0-16383]slot.上,cluster負責維護node<>slot<.>key後端

 

Redis集羣特性

redis cluster集羣方式支持主從自動切換 
redis cluster集羣只有一個庫,單例或者主從的話有多個庫 
redis cluster集羣去中心化,只要經過其中一個端口鏈接便可 
redis cluster集羣,只有一個db庫,不支持多庫ruby

單實例的併發QBS每秒11萬次請求 讀寫差距不大 大約1W左右
單實例QBS不要超過5W 超過五萬擴容集羣 通常3W左右 7W是極限併發

redis自帶集羣搭建,通常使用三主三歷來構建(最少六臺機器)。

主機名 IP 端口 用途
redis-master 192.168.50.167 7000 redis-master01
    7001  redis-master02
    7002 redis-master03
redis-slave 192.168.50.168 8000 redis-slave01
    8001 redis-slave02
    8002 redis-slave03

實驗初始環境要求

systemctl stop firewalld    #關防火牆和selinux
systemctl disable firewalld
setenforce 0
sestatus

redis的基礎編譯部署和調優

yum -y install wget gcc gcc-c++ make tar openssl openssl-devel cmake
tar xf redis-4.0.10.tar.gz -C /usr/src/
cd /usr/src/redis-4.0.10/
make
make MALLOC=jemalloc
make PREFIX=/usr/local/redis install
cd /usr/local/redis/
mkdir -p /usr/local/redis/conf
cp /usr/src/redis-4.0.10/redis.conf /usr/local/redis/conf/    #redis配置文件
cp /usr/src/redis-4.0.10/sentinel.conf /usr/local/redis/conf/ #redis哨兵配置文件
cp /usr/src/redis-4.0.10/src/redis-trib.rb /usr/local/redis/bin/   #redis-cluster的集羣建立工具
ln -s /usr/local/redis/bin/* /usr/local/bin/
cp conf/redis.conf{,.bak} egrep -v "^$|^#" conf/redis.conf.bak > conf/redis.conf echo "* - nofile 10240" >> /etc/security/limits.conf echo "net.core.somaxconn = 10240" >> /etc/sysctl.conf echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf sysctl -p echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.local

 redis主從集羣多實例配置

#在redis-master上操做
mkdir -p /data/redis-cluster
cd /data/redis-cluster
mkdir -p 7000 7001 7002
#在redis-slave上操做
mkdir -p /data/redis-cluster
cd /data/redis-cluster
mkdir -p 8000 8001 8002

修改redis-master的redis.conf配置文件,模板以下所示:

#redis-master不開任何持久化配置

vim
/data/redis-cluster/7000/redis.conf
bind
0.0.0.0        #鏈接爲全部 protected-mode yes
port
7000          #端口7000 tcp-backlog 1024 timeout 0 tcp-keepalive 0 daemonize yes        #開啓後端運行 supervised no pidfile /data/redis-cluster/7000/redis.pid      #PID文件存放位置 loglevel notice logfile "/data/redis-cluster/7000/redis.log"     #日誌文件存放位置 databases 16 always-show-logo yes
#save 900 1          #關閉rdb快照
#save 300 10
#save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /data/redis-cluster/7000/               #文件存放地址
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
appendonly no                    #關閉aof持久化
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
cluster-enabled yes              #開啓reids-cluster
cluster-config-file nodes.cong
cluster-node-timeout 5000


#潔淨板: bind 0.0.0.0 protected-mode yes port 7000 tcp-backlog 1024 timeout 0 tcp-keepalive 0 daemonize yes supervised no pidfile /data/redis-cluster/7000/redis.pid loglevel notice logfile "/data/redis-cluster/7000/redis.log" databases 16 always-show-logo yes stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir /data/redis-cluster/7000/ slave-serve-stale-data yes slave-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-disable-tcp-nodelay no slave-priority 100 lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no slave-lazy-flush no appendonly no appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble no lua-time-limit 5000 slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-size -2 list-compress-depth 0 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 aof-rewrite-incremental-fsync yes cluster-enabled yes cluster-config-file nodes.cong cluster-node-timeout 5000

#master2和3配置文件 只修改端口號 :%s#7000#7001#g   %s#7000#7002#g

cp /data/redis-cluster/7000/redis.conf /data/redis-cluster/7001/
cp /data/redis-cluster/7000/redis.conf /data/redis-cluster/7002/

從的配置文件也用這些,若是須要開啓主從複製

scp /data/redis-cluster/7000/redis.conf 192.168.50.168:/data/redis-cluster/8000/
scp /data/redis-cluster/7000/redis.conf 192.168.50.168:/data/redis-cluster/8001/
scp /data/redis-cluster/7000/redis.conf 192.168.50.168:/data/redis-cluster/8002/
#修改端口號  

啓動redis-master多實例

redis-server /data/redis-cluster/7001/redis.conf 
redis-server /data/redis-cluster/7002/redis.conf 
redis-server /data/redis-cluster/7000/redis.conf 

編譯安裝高ruby版本,Ruby版本須要大於等於2.2.2(yum安裝的不符合)

#redis-master和redis-slave都進行以下操做
wget --no-check-certificate 'https://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.7.tar.gz'
tar xf ruby-2.2.7.tar.gz -C /usr/src/
cd /usr/src/ruby-2.2.7/
./configure && make && make install

ruby
--version ruby 2.2.7p470 (2017-03-28 revision 58194) [x86_64-linux] #在線安裝ruby的redis擴展 /usr/local/bin/gem install redis
Fetching: redis
-4.0.1.gem (100%) Successfully installed redis-4.0.1 Parsing documentation for redis-4.0.1 Installing ri documentation for redis-4.0.1 Done installing documentation for redis after 0 seconds 1 gem installed

使用redis自帶redis-trib.rb工具建立集羣

#在redis-master上操做
redis-trib.rb create 192.168.50.167:7000 192.168.50.167:7001 192.168.50.167:7002

>>> Creating cluster >>> Performing hash slots allocation on 3 nodes... Using 3 masters: 192.168.50.167:7000 192.168.50.167:7001 192.168.50.167:7002 M: 3f5ff40741abf362e2dad0b26c1ef817e98b3428 192.168.50.167:7000 slots:0-5460 (5461 slots) master M: 625e0520c9dd87f0eaf28549daa0ee3f8f39ecbb 192.168.50.167:7001 slots:5461-10922 (5462 slots) master M: 7a5ed824f23ca900917bec79c14507377c61506e 192.168.50.167:7002 slots:10923-16383 (5461 slots) master Can I set the above configuration? (type 'yes' to accept): yes >>> Nodes configuration updated >>> Assign a different config epoch to each node >>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join.. >>> Performing Cluster Check (using node 192.168.50.167:7000) M: 3f5ff40741abf362e2dad0b26c1ef817e98b3428 192.168.50.167:7000 slots:0-5460 (5461 slots) master 0 additional replica(s) M: 7a5ed824f23ca900917bec79c14507377c61506e 192.168.50.167:7002 slots:10923-16383 (5461 slots) master 0 additional replica(s) M: 625e0520c9dd87f0eaf28549daa0ee3f8f39ecbb 192.168.50.167:7001 slots:5461-10922 (5462 slots) master 0 additional replica(s) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. #兩個OK表示成功

查看集羣的信息

redis-cli -p 7000 cluster nodes
625e0520c9dd87f0eaf28549daa0ee3f8f39ecbb 192.168.50.167:7001@17001 master - 0 1535108491650 2 connected 5461-10922
3f5ff40741abf362e2dad0b26c1ef817e98b3428 192.168.50.167:7000@17000 myself,master - 0 1535108491000 5 connected 0-5460
7a5ed824f23ca900917bec79c14507377c61506e 192.168.50.167:7002@17002 master - 0 1535108490543 3 connected 10923-16383

ls /data/redis-cluster/7000/          

dump.rdb  nodes.cong  redis.conf  redis.log  redis.pid

cat /data/redis-cluster/7000/
nodes.cong          #信息保存在nodes.cong裏
625e0520c9dd87f0eaf28549daa0ee3f8f39ecbb 192.168.50.167:7001@17001 master - 0 1535108491650 2 connected 5461-10922

3f5ff40741abf362e2dad0b26c1ef817e98b3428 192.168.50.167:7000@17000 myself,master - 0 1535108491000 5 connected 0-5460
7a5ed824f23ca900917bec79c14507377c61506e 192.168.50.167:7002@17002 master - 0 1535108490543 3 connected 10923-16383

使用redis-cli去操做集羣,須要加入-c參數

redis-cli -c -p 7000        #隨便進入一個redis端口就可操做整個redis

 cluster集羣的重建

#刪除cluster集羣配置文件
rm -rf /data/redis-cluster/7000/nodes.cong
rm -rf /data/redis-cluster/7001/nodes.cong
rm -rf /data/redis-cluster/7002/nodes.cong

#刪除cluster集羣配置文件 redis
-cli -p 7000 shutdown redis-cli -p 7001 shutdown redis-cli -p 7002 shutdown
#啓動redis
-server redis-server /data/redis-cluster/7000/redis.conf redis-server /data/redis-cluster/7001/redis.conf redis-server /data/redis-cluster/7002/redis.conf
#從新建立redis
-cluster集羣
redis-trib.rb create 192.168.50.167:7000 192.168.50.167:7001 192.168.50.167:7002

 

ps -ef | grep cluster | grep -v grep
root      31952      1  0 22:32 ?        00:00:00 redis-server 0.0.0.0:7000 [cluster]
root      31957      1  0 22:32 ?        00:00:00 redis-server 0.0.0.0:7001 [cluster]
root      31962      1  0 22:32 ?        00:00:00 redis-server 0.0.0.0:7002 [cluster]

Redis Cluster集羣的故障自動切換

啓動redis-slave上全部的從庫

redis-server /data/redis-cluster/8000/redis.conf 
redis-server /data/redis-cluster/8001/redis.conf 
redis-server /data/redis-cluster/8002/redis.conf 

netstat
-antup | grep redis tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 51680/redis-server tcp 0 0 0.0.0.0:8001 0.0.0.0:* LISTEN 51685/redis-server tcp 0 0 0.0.0.0:8002 0.0.0.0:* LISTEN 51690/redis-server tcp 0 0 0.0.0.0:18000 0.0.0.0:* LISTEN 51680/redis-server tcp 0 0 0.0.0.0:18001 0.0.0.0:* LISTEN 51685/redis-server tcp 0 0 0.0.0.0:18002 0.0.0.0:* LISTEN 51690/redis-server

 redis-cluster集羣從庫的添加

redis-trib.rb add-node --slave 192.168.50.168:8000 192.168.50.167:7000          #添加第一個從8000對應的主爲7000
>>> Adding node 192.168.50.168:8000 to cluster 192.168.50.167:7000
>>> Performing Cluster Check (using node 192.168.50.167:7000)
M: 3f5ff40741abf362e2dad0b26c1ef817e98b3428 192.168.50.167:7000
   slots:0-5460 (5461 slots) master
   0 additional replica(s)
M: 7a5ed824f23ca900917bec79c14507377c61506e 192.168.50.167:7002
   slots:10923-16383 (5461 slots) master
   0 additional replica(s)
M: 625e0520c9dd87f0eaf28549daa0ee3f8f39ecbb 192.168.50.167:7001
   slots:5461-10922 (5462 slots) master
   0 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
Automatically selected master 192.168.50.167:7000
>>> Send CLUSTER MEET to node 192.168.50.168:8000 to make it join the cluster.
Waiting for the cluster to join....
>>> Configure node as replica of 192.168.50.167:7000.
[OK] New node added correctly.

redis-trib.rb add-node --slave 192.168.50.168:8001 192.168.50.167:7001            #添加第二個從8001對應的7001
>>> Adding node 192.168.50.168:8001 to cluster 192.168.50.167:7001
>>> Performing Cluster Check (using node 192.168.50.167:7001)
M: 625e0520c9dd87f0eaf28549daa0ee3f8f39ecbb 192.168.50.167:7001
   slots:5461-10922 (5462 slots) master
   0 additional replica(s)
S: 7a0f3052b2474b9080f0df1a3df562461ac94d30 192.168.50.168:8000
   slots: (0 slots) slave
   replicates 3f5ff40741abf362e2dad0b26c1ef817e98b3428
M: 7a5ed824f23ca900917bec79c14507377c61506e 192.168.50.167:7002
   slots:10923-16383 (5461 slots) master
   0 additional replica(s)
M: 3f5ff40741abf362e2dad0b26c1ef817e98b3428 192.168.50.167:7000
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
Automatically selected master 192.168.50.167:7001
>>> Send CLUSTER MEET to node 192.168.50.168:8001 to make it join the cluster.
Waiting for the cluster to join.
>>> Configure node as replica of 192.168.50.167:7001.
[OK] New node added correctly.

redis-trib.rb add-node --slave 192.168.50.168:8002 192.168.50.167:7002                #第三個添加的從8002對應的主7002
>>> Adding node 192.168.50.168:8002 to cluster 192.168.50.167:7002
>>> Performing Cluster Check (using node 192.168.50.167:7002)
M: 7a5ed824f23ca900917bec79c14507377c61506e 192.168.50.167:7002
   slots:10923-16383 (5461 slots) master
   0 additional replica(s)
S: 45f40c58756d690a6a687dca283a0274e4d1d0f3 192.168.50.168:8001
   slots: (0 slots) slave
   replicates 625e0520c9dd87f0eaf28549daa0ee3f8f39ecbb
M: 3f5ff40741abf362e2dad0b26c1ef817e98b3428 192.168.50.167:7000
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: 625e0520c9dd87f0eaf28549daa0ee3f8f39ecbb 192.168.50.167:7001
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 7a0f3052b2474b9080f0df1a3df562461ac94d30 192.168.50.168:8000
   slots: (0 slots) slave
   replicates 3f5ff40741abf362e2dad0b26c1ef817e98b3428
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
Automatically selected master 192.168.50.167:7002
>>> Send CLUSTER MEET to node 192.168.50.168:8002 to make it join the cluster.
Waiting for the cluster to join.
>>> Configure node as replica of 192.168.50.167:7002.
[OK] New node added correctly.

查看集羣全部節點的信息

redis-cli -p 7000 cluster nodes
45f40c58756d690a6a687dca283a0274e4d1d0f3 192.168.50.168:8001@18001 slave 625e0520c9dd87f0eaf28549daa0ee3f8f39ecbb 0 1535109423735 2 connected
625e0520c9dd87f0eaf28549daa0ee3f8f39ecbb 192.168.50.167:7001@17001 master - 0 1535109423535 2 connected 5461-10922
3f5ff40741abf362e2dad0b26c1ef817e98b3428 192.168.50.167:7000@17000 myself,master - 0 1535109424000 5 connected 0-5460
eaa15a35898137b02087581f2e910d18e0d7cecf 192.168.50.168:8002@18002 slave 7a5ed824f23ca900917bec79c14507377c61506e 0 1535109424747 3 connected
7a5ed824f23ca900917bec79c14507377c61506e 192.168.50.167:7002@17002 master - 0 1535109424239 3 connected 10923-16383
7a0f3052b2474b9080f0df1a3df562461ac94d30 192.168.50.168:8000@18000 slave 3f5ff40741abf362e2dad0b26c1ef817e98b3428 0 1535109422730 5 connected

redis的cluster集羣,不管是主庫仍是從庫均可以進行set和get。所以,在使用中咱們就不必都去主庫了。

查看主從cluster集羣key的分佈狀況

redis-cli -h 192.168.50.168 -c -p 8002 info Keyspace
# Keyspace
db0:keys=6,expires=0,avg_ttl=0

redis集羣的主從自動切換,主庫掛掉後,從自動變爲主

手動切換主從命令cluster failover

redis-cli -p 7000 shutdown      #手動宕掉主1
redis-cli -p 7001 cluster nodes    #查看狀態
eaa15a35898137b02087581f2e910d18e0d7cecf 192.168.50.168:8002@18002 slave 7a5ed824f23ca900917bec79c14507377c61506e 0 1535102657000 3 connected
45f40c58756d690a6a687dca283a0274e4d1d0f3 192.168.50.168:8001@18001 slave 625e0520c9dd87f0eaf28549daa0ee3f8f39ecbb 0 1535102656525 2 connected
3f5ff40741abf362e2dad0b26c1ef817e98b3428 192.168.50.167:7000@17000 master,fail - 1535102650269 1535102648861 1 disconnected    #7000掛掉了
7a5ed824f23ca900917bec79c14507377c61506e 192.168.50.167:7002@17002 master - 0 1535102656000 3 connected 10923-16383
625e0520c9dd87f0eaf28549daa0ee3f8f39ecbb 192.168.50.167:7001@17001 myself,master - 0 1535102656000 2 connected 5461-10922
7a0f3052b2474b9080f0df1a3df562461ac94d30 192.168.50.168:8000@18000 master - 0 1535102657000 4 connected 0-5460      #8000成爲了master #從新啓動7000端口的server,再次查看
redis-server /data/redis-cluster/7000/redis.conf
redis-cli -p 7001 cluster nodes
eaa15a35898137b02087581f2e910d18e0d7cecf 192.168.50.168:8002@18002 slave 7a5ed824f23ca900917bec79c14507377c61506e 0 1535102793234 3 connected
45f40c58756d690a6a687dca283a0274e4d1d0f3 192.168.50.168:8001@18001 slave 625e0520c9dd87f0eaf28549daa0ee3f8f39ecbb 0 1535102792225 2 connected
3f5ff40741abf362e2dad0b26c1ef817e98b3428 192.168.50.167:7000@17000 slave 7a0f3052b2474b9080f0df1a3df562461ac94d30 0 1535102791718 4 connected
7a5ed824f23ca900917bec79c14507377c61506e 192.168.50.167:7002@17002 master - 0 1535102792728 3 connected 10923-16383
625e0520c9dd87f0eaf28549daa0ee3f8f39ecbb 192.168.50.167:7001@17001 myself,master - 0 1535102792000 2 connected 5461-10922
7a0f3052b2474b9080f0df1a3df562461ac94d30 192.168.50.168:8000@18000 master - 0 1535102792000 4 connected 0-5460
#手動將redis-server 7000端口從新切換成主庫
redis-cli -p 7000 cluster failover
redis-cli -p 7001 cluster nodes
eaa15a35898137b02087581f2e910d18e0d7cecf 192.168.50.168:8002@18002 slave 7a5ed824f23ca900917bec79c14507377c61506e 0 1535102934425 3 connected
45f40c58756d690a6a687dca283a0274e4d1d0f3 192.168.50.168:8001@18001 slave 625e0520c9dd87f0eaf28549daa0ee3f8f39ecbb 0 1535102934526 2 connected
3f5ff40741abf362e2dad0b26c1ef817e98b3428 192.168.50.167:7000@17000 master - 0 1535102934000 5 connected 0-5460
7a5ed824f23ca900917bec79c14507377c61506e 192.168.50.167:7002@17002 master - 0 1535102933418 3 connected 10923-16383
625e0520c9dd87f0eaf28549daa0ee3f8f39ecbb 192.168.50.167:7001@17001 myself,master - 0 1535102934000 2 connected 5461-10922
7a0f3052b2474b9080f0df1a3df562461ac94d30 192.168.50.168:8000@18000 slave 3f5ff40741abf362e2dad0b26c1ef817e98b3428 0 1535102933000 5 connected

使用Python操做Redis Cluster集羣

 

yum -y install epel-release
yum -y install python2-pip
pip install redis-py-cluster
操做集羣的代碼
pwd
/server/scripts
cat redis_cluster.py 
# -*- coding:utf-8 -*-
from rediscluster import StrictRedisCluster
redis_nodes = [
        {'host':'192.168.200.231','port':7000},
        {'host':'192.168.200.231','port':7001},
        {'host':'192.168.200.231','port':7002},
        {'host':'192.168.200.232','port':8000},
        {'host':'192.168.200.232','port':8001},
        {'host':'192.168.200.232','port':8002}
        ]
redis_conn = StrictRedisCluster(startup_nodes=redis_nodes)
redis_conn.set('key_test','values_test')
print(redis_conn.get('key_test'))
[root@redis-master scripts]# python redis_cluster.py 
values_test
[root@redis-master scripts]# redis-cli -c -p 7002 get key_test
"values_test"
特別提示: 
若其中一個節點掛了,不影響功能的使用

分析Redis的全部key和key的大小

pip安裝rdbtools分析工具

[root@redis-master ~]# pip install rdbtools
[root@redis-master ~]# which rdb
/usr/bin/rdb

分析key及key的大小

運維需求,根據dump.rdb文件分析key和key的大小
rdb -c memory /data/redis-cluster/7000/dump.rdb > /root/memory.csv
cat /root/memory.csv | head
相關文章
相關標籤/搜索