Redis Cluster 3.0.5 集羣實戰

一、說明


redis 3.0 集羣功能出來已經有一段時間了,目前最新穩定版是3.0.5,我瞭解到已經有很多互聯網公司在生產環境使用,比如唯品會、美團等等,剛好公司有個新項目,預估的量單機redis無法滿足,開發又不想在代碼層面做拆分,所以就推薦他們嘗試一下redis集羣,下面做了一些相關筆記,以備後用。


二、環境


1、redis節點


10.10.2.70:6300 10.10.2.70:6301 主從

10.10.2.71:6300 10.10.2.71:6301 主從

10.10.2.85:6300 10.10.2.85:6301 主從


2、redis版本


Redis version 3.0.5


三、安裝配置


1、安裝redis


wget http://download.redis.io/releases/redis-3.0.5.tar.gz

tar -zxvf redis-3.0.5.tar.gz

cd redis-3.0.5

make

cp redis-3.0.5/src/redis-trib.rb /bin/

cp redis-3.0.5/src/redis-server /bin/

cp redis-3.0.5/src/redis-cli /bin/


2、安裝ruby及ruby的redis模塊


yum -y install ruby rubygems

gem install redis --version 3.0.5


3、內核調優


echo never > /sys/kernel/mm/transparent_hugepage/enabled

echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf

sysctl -p


4、建立目錄


mkdir /data/redis/6300 -p

mkdir /data/redis/6301


5、撰寫redis配置文件(cp配置文件注意修改端口)


vim  /etc/redis_6300.conf

daemonize yes

port 6300

tcp-backlog 511

timeout 0

tcp-keepalive 0

loglevel notice

maxmemory 10gb

databases 16

dir /data/redis/6300

slave-serve-stale-data yes

loglevel notice

logfile "/data/redis/6300/redis_6300.log"

#slave只讀

slave-read-only yes

#not use default

repl-disable-tcp-nodelay yes

slave-priority 100

#打開aof持久化

appendonly yes

#每秒一次aof寫

appendfsync everysec

#關閉在aof rewrite的時候對新的寫操作進行fsync

no-appendfsync-on-rewrite yes

auto-aof-rewrite-min-size 64mb

lua-time-limit 5000

#打開redis集羣

cluster-enabled yes

cluster-config-file /data/redis/6300/nodes-6300.conf

#節點互連超時的閥值(單位毫秒)

cluster-node-timeout 15000

#一個主節點在擁有多少個好的從節點的時候就要割讓一個從節點出來給其他沒有從節點或者從節點掛掉的主節點

cluster-migration-barrier 1

#如果某一些key space沒有被集羣中任何節點覆蓋,最常見的就是一個node掛掉,集羣將停止接受寫入

cluster-require-full-coverage no

#部署在同一機器的redis實例,把auto-aof-rewrite搓開,防止瞬間fork所有redis進程做rewrite,佔用大量內存

auto-aof-rewrite-percentage 80-100

slowlog-log-slower-than 10000

slowlog-max-len 128

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

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


6、啓動服務


redis-server /etc/redis_6300.conf

redis-server /etc/redis_6301.conf

echo "redis-server /etc/redis_6300.conf" >> /etc/rc.local

echo "redis-server /etc/redis_6301.conf" >> /etc/rc.local


7、初始化集羣


#節點角色由順序決定,先master之後是slave,本文中6300是master,6301是slave


redis-trib.rb create --replicas 1 10.10.2.70:6300 10.10.2.71:6300  10.10.2.85:6300  10.10.2.70:6301 10.10.2.71:6301  10.10.2.85:6301


8、查看集羣狀態


redis-trib.rb check 10.10.2.70:6300


PS:redis-trib.rb是一個ruby工具,封裝了redis集羣的一些命令,用這個工具操作集羣非常方便,比如上面初始化集羣,查看集羣狀態,還有添加、刪除節點,遷移slot等等功能。


四、redis集羣維護


A、場景1


線上的集羣已經有瓶頸,集羣需要擴容,比如我們已經準備了一主一從(10.10.2.85:6302、10.10.2.85:6303),如下:


1、添加一個主節點


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

10.10.2.85:6302是要加的新節點,10.10.2.70:6300是集羣中已存在的任意節點。


2、給主節點添加從節點


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


--slave 指定要加的是從節點,--master-id 指定這個從節點的主節點ID,10.10.2.85:6303是需要新加的從節點,10.10.2.70:6300是集羣已存在的任意節點。


3、遷移一些slot給新節點


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


B、場景二


上面的例子是集羣擴容,相對的,由於各種原因集羣可能也需要縮容,下面的例子把上文擴容的節點下線,步驟如下:


1、遷移這個節點的slot到其他節點(有slot的節點是不可以直接下線的)


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


2、然後查看10.10.2.85:6302這個maser上已經沒有slot了


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


3、下線slave節點


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


4、下線master節點


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


C、場景三


集羣中一個節點的master掛掉,從節點提升爲主節點,還沒有來的急給這個新的主節點加從節點,這個新的主節點就又掛掉了,那麼集羣中這個節點就徹底不可以用了,爲了解決這個問題,我們至少保證每個節點的maser下面有兩個以上的從節點,這樣一來,需要的內存資源或者服務器資源就翻倍了,有沒有一個折中的方法呢,答案是肯定的,還節點上文配置文件中的cluster-migration-barrier參數不,我們只需要給集羣中其中一個節點的master掛多個從庫,當其他節點的master下沒有可用的從庫時,有多個從庫的master會割讓一個slave給他,保證整個集羣的可用性。


1、給10.10.2.70:6300 10.10.2.70:6301 這組節點下面加一個從庫10.10.2.85:6302


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


2、把10.10.2.71:6300 10.10.2.71:6301這組的從節點停掉


redis-cli -h 10.10.2.71 -p 6301 shutdown


3、查看10.10.2.85:6302這個節點是否成爲10.10.2.71:6300的從庫


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


五、cluster相關命令


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


參考文章:

http://www.redis.cn/topics/cluster-tutorial.html

http://www.redis.cn/topics/cluster-spec.html

http://redisdoc.com/topic/cluster-tutorial.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章