Redis-Cluster
redis使用中遇到的瓶頸
我們日常在對於redis的使用中,經常會遇到一些問題
1、高可用問題,如何保證redis的持續高可用性。
2、容量問題,單實例redis內存無法無限擴充,達到32G后就進入了64位世界,性能下降。
3、並發性能問題,redis號稱單實例10萬並發,但也是有盡頭的。
redis-cluster的優勢
1、官方推薦,毋庸置疑。
2、去中心化,集群最大可增加1000個節點,性能隨節點增加而線性擴展。
3、管理方便,后續可自行增加或摘除節點,移動分槽等等。
4、簡單,易上手。
redis-cluster名詞介紹
1、master 主節點、
2、slave 從節點
3、slot 槽,一共有16384數據分槽,分布在集群的所有主節點中。
redis-cluster簡介
圖中描述的是六個redis實例構成的集群
6379端口為客戶端通訊端口
16379端口為集群總線端口
集群內部划分為16384個數據分槽,分布在三個主redis中。
從redis中沒有分槽,不會參與集群投票,也不會幫忙加快讀取數據,僅僅作為主機的備份。
三個主節點中平均分布着16384數據分槽的三分之一,每個節點中不會存有有重復數據,僅僅有自己的從機幫忙冗余。
集群部署
測試部署方式,一台測試機多實例啟動部署。
安裝redis
$ wget http://download.redis.io/releases/redis-3.2.8.tar.gz $ tar xzf redis-3.2.8.tar.gz $ cd redis-3.2.8 $ make
修改配置文件 redis.conf
#redis.conf默認配置 daemonize yes pidfile /var/run/redis/redis.pid #多實例情況下需修改,例如redis_6380.pid port 6379 #多實例情況下需要修改,例如6380 tcp-backlog 511 bind 0.0.0.0 timeout 0 tcp-keepalive 0 loglevel notice logfile /var/log/redis/redis.log #多實例情況下需要修改,例如6380.log databases 16 save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb #多實例情況下需要修改,例如dump.6380.rdb 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 appendonly yes appendfilename "appendonly.aof" #多實例情況下需要修改,例如 appendonly_6380.aof appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes 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-entries 512 list-max-ziplist-value 64 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 #################自定義配置 #系統配置 #vim /etc/sysctl.conf #vm.overcommit_memory = 1 aof-rewrite-incremental-fsync yes maxmemory 4096mb maxmemory-policy allkeys-lru dir /opt/redis/data #多實例情況下需要修改,例如/data/6380 #集群配置 cluster-enabled yes cluster-config-file /opt/redis/6380/nodes.conf #多實例情況下需要修改,例如/6380/ cluster-node-timeout 5000 #從ping主間隔默認10秒 #復制超時時間 #repl-timeout 60 #遠距離主從 #config set client-output-buffer-limit "slave 536870912 536870912 0" #config set repl-backlog-size 209715200
啟動六個實例:
/編譯安裝目錄/src/redis-server redis.conf
注意,redis.conf應為6個不同的修改過的多實例配置文件。
注意,配置文件復制六分后,有許多需要你修改的地方。
注:
安裝部署部分不是無腦復制即可,請結合你的主機情況進行操作,若有問題可以聯系我 QQ:2169866431
謝土豪