redis3和4需要ruby環(huán)境,redis5已經(jīng)不需要ruby環(huán)境了
redis安裝在兩臺虛擬機上烦却,一臺虛擬機有三個實例家厌,master上是三個主,node上是三個從致扯。
在master上
cd /usr/local
#創(chuàng)建三個實例目錄
mkdir redis700{0,1,2}
#復制配置文件
for i in 0 1 2;do cp /usr/local/redis-5.0.4/redis.conf /usr/local/redis700$i;done
#復制啟動命令
for i in 0 1 2;do cp /usr/local/redis-5.0.4/src/redis-server /usr/local/redis700$i;done
#創(chuàng)建日志目錄文件
for i in 0 1 2;do mkdir -p /usr/local/redis700$i/log;done
for i in 0 1 2;do touch /usr/local/redis700$i/log/redis.log;done
#備份配置文件
for i in 0 1 2;do cp /usr/local/redis700$i/redis.conf /usr/local/redis700$i/redis.conf.bak;done
#去掉空行以及注釋
for i in 0 1 2;do sed -ri "/#|^$/d" /usr/local/redis700$i/redis.conf ;done
#修改綁定ip
for i in 0 1 2;do sed -ri "s#127.0.0.1#192.168.100.150#g" /usr/local/redis700$i/redis.conf ;done
#修改配置文件關于6379默認端口的配置
for i in 0 1 2;do sed -i "s#6379#700$i#g" /usr/local/redis700$i/redis.conf ;done
#手動添加日志文件位置logfile "/usr/local/redis7000/log/redis.log"
#設置后臺啟動redis
for i in 0 1 2;do sed -i "s#daemonize no#daemonize yes#g" /usr/local/redis700$i/redis.conf ;done
#設置redis訪問密碼
for i in 0 1 2;do echo "requirepass root" >> /usr/local/redis700$i/redis.conf ;done
#設置主從訪問密碼
for i in 0 1 2;do echo "masterauth root" >> /usr/local/redis700$i/redis.conf ;done
重點來了:master配置集群參數(shù)配置
#開啟集群
for i in 0 1 2;do echo "cluster-enabled yes" >> /usr/local/redis700$i/redis.conf ;done
#集群的配置
for i in 0 1 2;do echo "cluster-config-file nodes.conf" >> /usr/local/redis700$i/redis.conf ;done
#設置請求超時時間默認15s
for i in 0 1 2;do echo "cluster-node-timeout 15000 " >> /usr/local/redis700$i/redis.conf ;done
在node上
#復制配置文件
for i in 3 4 5;do cp /usr/local/redis-5.0.4/redis.conf /usr/local/redis700$i;done
#復制啟動命令
for i in 3 4 5;do cp /usr/local/redis-5.0.4/src/redis-server /usr/local/redis700$i;done
#創(chuàng)建日志目錄文件
for i in 3 4 5;do mkdir -p /usr/local/redis700$i/log;done
for i in 3 4 5;do touch /usr/local/redis700$i/log/redis.log;done
#備份配置文件
for i in 3 4 5;do cp /usr/local/redis700$i/redis.conf /usr/local/redis700$i/redis.conf.bak;done
#去掉空行以及注釋
for i in 3 4 5;do sed -ri "/#|^$/d" /usr/local/redis700$i/redis.conf ;done
#修改綁定ip
for i in 3 4 5;do sed -ri "s#127.0.0.1#192.168.100.151#g" /usr/local/redis700$i/redis.conf ;done
#修改配置文件關于6379默認端口的配置
for i in 3 4 5;do sed -i "s#6379#700$i#g" /usr/local/redis700$i/redis.conf ;done
#手動添加日志文件位置logfile "/usr/local/redis7000/log/redis.log"
#設置后臺啟動redis
for i in 3 4 5;do sed -i "s#daemonize no#daemonize yes#g" /usr/local/redis700$i/redis.conf ;done
#設置redis訪問密碼
for i in 3 4 5 ;do echo "requirepass root" >> /usr/local/redis700$i/redis.conf ;done
#設置主從訪問密碼
for i in 3 4 5;do echo "masterauth root" >> /usr/local/redis700$i/redis.conf ;done
node服務器上:從節(jié)點配置集群參數(shù)
#開啟集群
for i in 3 4 5;do echo "cluster-enabled yes" >> /usr/local/redis700$i/redis.conf ;done
#集群的配置
for i in 3 4 5;do echo "cluster-config-file nodes.conf" >> /usr/local/redis700$i/redis.conf ;done
#設置請求超時時間默認15s
for i in 3 4 5;do echo "cluster-node-timeout 15000 " >> /usr/local/redis700$i/redis.conf ;done
其實所有的配置都是相同的肤寝,只是修改對應的ip和端口即可
啟動應用
此處注意,不能用全路徑啟動抖僵,否則只能啟動最先啟動的內容:/usr/local/redis7000/redis-server /usr/local/redis7001/redis.conf,這樣啟動只能啟動一個實例
如何正常啟動呢缘揪?
使用./redis-server ./redis.conf方式可以正常啟動
#master上執(zhí)行
for i in 0 1 2;do cd /usr/local/redis700$i&&./redis-server ./redis.conf ;done
#node上執(zhí)行
for i in 3 4 5;do cd /usr/local/redis700$i&&./redis-server ./redis.conf ;done
創(chuàng)建集群
redis5使用redis-cli創(chuàng)建集群
cp /usr/local/redis-5.0.4/src/redis-cli /usr/bin
redis-cli -a root --cluster create 192.168.100.150:7000 192.168.100.150:7001 192.168.100.150:7002 192.168.100.151:7003 192.168.100.151:7004 192.168.100.151:7005 --cluster-replicas 1
需要-a指定密碼
redis-cli命令
#查看命令文檔
redis-cli --cluster help
#登錄機器
redis-cli -h 機器地址 -p 端口 -a 集群密碼
#檢查集群狀態(tài)slots詳細分配
redis-cli --cluster check ip:port -a root
#修復集群
redis-cli --cluster fix ip:port -a root
#redis添加master
redis-cli --cluster add-node 新的ip:port 已存在的ip:port -a root
#新加入的master沒有劃分槽位耍群,需要重新劃分
redis-cli --cluster reshard 新masterip:port -a root
1.然后根據(jù)提示,輸入新集群需要的槽位數(shù)量
2.輸入新集群id
3.輸入all找筝,重新分配
節(jié)點id是登錄到集群中使用CLUSTER NODES查看到的第一列內容
#redis刪除master節(jié)點
redis刪除master節(jié)點蹈垢,需要給當前master的槽位劃分到別的master上
redis-cli --cluster reshard 除了需要刪除的master的任意ip:port -a root
1.輸入當前master的id
2.輸入需要刪除的master的id作為槽位重新分配的源槽位
3.done執(zhí)行
4.重新刪除空的master即可redis-cli --cluster del-node master的ip:port -a root
#redis添加slave
redis-cli --cluster add-node 新的slave的ip:port 已存在ip:port --cluster-slave --cluster-master-id需要加入的master的id -a root
#redis刪除從節(jié)點
redis-cli --cluster del-node 節(jié)點ip:port 節(jié)點id -a root
集群的客戶端命令
cluster info :打印集群的信息
cluster nodes :列出集群當前已知的所有節(jié)點( node),以及這些節(jié)點的相關信息袖裕。
節(jié)點
cluster meet <ip> <port> :將 ip 和 port 所指定的節(jié)點添加到集群當中曹抬,讓它成為集群的一份子。
cluster forget <node_id> :從集群中移除 node_id 指定的節(jié)點急鳄。
cluster replicate <node_id> :將當前節(jié)點設置為 node_id 指定的節(jié)點的從節(jié)點谤民。
cluster saveconfig :將節(jié)點的配置文件保存到硬盤里面堰酿。
槽(slot)
cluster addslots <slot> [slot ...] :將一個或多個槽( slot)指派( assign)給當前節(jié)點。
cluster delslots <slot> [slot ...] :移除一個或多個槽對當前節(jié)點的指派张足。
cluster flushslots :移除指派給當前節(jié)點的所有槽触创,讓當前節(jié)點變成一個沒有指派任何槽的節(jié)點。
cluster setslot <slot> node <node_id> :將槽 slot 指派給 node_id 指定的節(jié)點为牍,如果槽已經(jīng)指派給
另一個節(jié)點哼绑,那么先讓另一個節(jié)點刪除該槽>,然后再進行指派碉咆。
cluster setslot <slot> migrating <node_id> :將本節(jié)點的槽 slot 遷移到 node_id 指定的節(jié)點中抖韩。
cluster setslot <slot> importing <node_id> :從 node_id 指定的節(jié)點中導入槽 slot 到本節(jié)點。
cluster setslot <slot> stable :取消對槽 slot 的導入( import)或者遷移( migrate)疫铜。
鍵
cluster keyslot <key> :計算鍵 key 應該被放置在哪個槽上茂浮。
cluster countkeysinslot <slot> :返回槽 slot 目前包含的鍵值對數(shù)量。
cluster getkeysinslot <slot> <count> :返回 count 個 slot 槽中的鍵