wget http://download.redis.io/releases/redis-3.0.0.tar.gz && tar zxvf redis-3.0.0.tar.gz && cd redis-3.0.0 && make PREFIX=/usr/local/redis MALLOC=libc install
成都網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序、集團(tuán)成都定制網(wǎng)頁設(shè)計(jì)等服務(wù)項(xiàng)目。核心團(tuán)隊(duì)均擁有互聯(lián)網(wǎng)行業(yè)多年經(jīng)驗(yàn),服務(wù)眾多知名企業(yè)客戶;涵蓋的客戶類型包括:成都火鍋店設(shè)計(jì)等眾多領(lǐng)域,積累了大量豐富的經(jīng)驗(yàn),同時(shí)也獲得了客戶的一致夸獎(jiǎng)!
mkdir -p /usr/local/redis/run
mkdir -p /usr/local/redis/logs
mkdir -p /usr/local/redis/rdb
mkdir -p /usr/local/redis/etc
mkdir -p /usr/local/redis/nodes
1、###redis集群配置文件,根據(jù)實(shí)例端口區(qū)分
#Redis默認(rèn)不是以守護(hù)進(jìn)程的方式運(yùn)行,可以通過該配置項(xiàng)修改,使用yes啟用守護(hù)進(jìn)程
daemonize yes
#當(dāng) Redis 以守護(hù)進(jìn)程的方式運(yùn)行的時(shí)候,Redis 默認(rèn)會把 pid 文件放在/var/run/redis.pid,當(dāng)運(yùn)行多個(gè) redis 服務(wù)時(shí),需要指定不同的 pid 文件和端口
pidfile /usr/local/redis/run/redis_6381.pid
#配置redis端口
port 6381
tcp-backlog 511
#客戶端連接的超時(shí)時(shí)間,單位為秒,超時(shí)后會關(guān)閉連接
timeout 300
tcp-keepalive 0
#日志記錄等級,4個(gè)可選值debug、verbose、notice、warning
loglevel notice
#配置 log 文件地址,默認(rèn)打印在命令行終端的窗口上,也可設(shè)為/dev/null屏蔽日志
logfile "/usr/local/redis/logs/6381.log"
#設(shè)置數(shù)據(jù)庫的個(gè)數(shù),可以使用 SELECT 命令來切換數(shù)據(jù)庫
databases 16
#設(shè)置 Redis 進(jìn)行數(shù)據(jù)庫鏡像的頻率。保存數(shù)據(jù)到disk的策略 900秒之內(nèi)有1個(gè)keys發(fā)生變化時(shí)
save 900 1
#設(shè)置 Redis 進(jìn)行數(shù)據(jù)庫鏡像的頻率。保存數(shù)據(jù)到disk的策略 30秒之內(nèi)有10個(gè)keys發(fā)生變化時(shí)
save 300 10
#設(shè)置 Redis 進(jìn)行數(shù)據(jù)庫鏡像的頻率。保存數(shù)據(jù)到disk的策略 60秒之內(nèi)有10000個(gè)keys發(fā)生變化時(shí)
save 60 10000
stop-writes-on-bgsave-error yes
#在進(jìn)行鏡像備份時(shí),是否進(jìn)行壓縮
rdbcompression yes
rdbchecksum yes
#鏡像備份文件的文件名
dbfilename dump6381.rdb
#數(shù)據(jù)庫鏡像備份的文件放置的路徑,默認(rèn)值為 ./
dir /usr/local/redis/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
#限制同時(shí)連接的客戶數(shù)量,當(dāng)連接數(shù)超過這個(gè)值時(shí),redis 將不再接收其他連接請求,客戶端嘗試連接時(shí)將收到 error 信息
maxclients 10000
#最大可使用內(nèi)存。如果超過,Redis會試圖刪除EXPIRE集合中的keys
maxmemory 1G
#volatile-lru使用LRU算法來刪除過期的set,allkeys-lru刪除任何遵循LRU算法的key,volatile-ttl刪除最近即將過期的key,volatile-random ->隨機(jī)地刪除過期set中的key
maxmemory-policy volatile-ttl
#對于處理redis內(nèi)存來說,LRU和minor TTL算法不是精確的,而是近似的(估計(jì)的)算法。所以我們會檢查某些樣本#來達(dá)到內(nèi)存檢查的目的。默認(rèn)的樣本數(shù)是3,你可以修改它。
maxmemory-samples 3
#默認(rèn)情況下,Redis會異步的把數(shù)據(jù)保存到硬盤。如果你的應(yīng)用場景允許因?yàn)橄到y(tǒng)崩潰等極端情況而導(dǎo)致最新數(shù)據(jù)丟失#的話,那這種做法已經(jīng)很ok了。否則你應(yīng)該打開‘a(chǎn)ppend only’模式,開啟這種模式后,Redis會在#appendonly.aof文件中添加每一個(gè)寫操作,這個(gè)文件會在Redis啟動時(shí)被讀取來在內(nèi)存中重新構(gòu)建數(shù)據(jù)集。
appendonly no
appendfilename "appendonly6381.aof"
#no:不fsync,只是通知OS可以flush數(shù)據(jù)了具體是否flush取決于OS性能更好; always: 每次寫入append only 日志文件后都會fsync性能差,但很安全;everysec: 沒間隔1秒進(jìn)行一次fsync折中.
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
cluster-enabled yes
cluster-config-file /usr/local/redis/nodes/6381.conf
cluster-node-timeout 5000
slowlog-log-slower-than 10000
slowlog-max-len 1024
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
aof-rewrite-incremental-fsync yes
2、啟動redis實(shí)例
/usr/local/redis/bin/redis-server /usr/local/redis/etc/6380.conf &
3、復(fù)制redis-trib.rb
cp /root/redis-3.0.0/src/redis-trib.rb /usr/local/redis/bin
4、啟動集群
/usr/local/redis/bin/redis-trib.rb create 10.144.8.86:7000 10.144.8.86:7001 10.144.8.86:7002
如果是6個(gè)實(shí)例,create 后加參數(shù)--replicas 1會產(chǎn)生3個(gè)主節(jié)點(diǎn),3個(gè)slave節(jié)點(diǎn)
執(zhí)行上面的命令的時(shí)候會報(bào)錯(cuò),因?yàn)槭菆?zhí)行的ruby的腳本,需要ruby的環(huán)境
錯(cuò)誤內(nèi)容:/usr/bin/env: ruby: No such file or directory
所以需要安裝ruby的環(huán)境,這里推薦使用yum install ruby安裝
yum install ruby
然后再執(zhí)行第6步的創(chuàng)建集群命令,還會報(bào)錯(cuò),提示缺少rubygems組件,使用yum安裝
錯(cuò)誤內(nèi)容:
./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)
from ./redis-trib.rb:24
yum install rubygems
6.3再次執(zhí)行第6步的命令,還會報(bào)錯(cuò),提示不能加載redis,是因?yàn)槿鄙賠edis和ruby的接口,使用gem 安裝
錯(cuò)誤內(nèi)容:
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from ./redis-trib.rb:25
使用gem 安裝 :gem install redis
5、通過redis-trib.rb工具的check子命令來查看集群信息
/usr/local/redis/bin/redis-trib.rb check 127.0.0.1:6379
6、通過redis客戶端實(shí)現(xiàn)對Redis Cluster的讀寫。當(dāng)前,redis客戶端同樣實(shí)現(xiàn)了對集群的支持,但使用方法略有不同,即在啟動的時(shí)候需要添加一個(gè)-c參數(shù)。
/usr/local/redis/bin/redis-cli -c -h 127.0.0.1 -p 6379
http://blog.csdn.net/xu470438000/article/details/42972123
http://blog.csdn.net/myrainblues/article/details/25881535
Redis集群添加節(jié)點(diǎn)
1:首先把需要添加的節(jié)點(diǎn)啟動
2:執(zhí)行以下命令,將這個(gè)新節(jié)點(diǎn)添加到集群中
cd /usr/local/redis3.0/src/
./redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000
3:執(zhí)行命令redis-cli -c -p 7000 cluster nodes,查看剛才新增的節(jié)點(diǎn)
4:增加了新的節(jié)點(diǎn)之后,這個(gè)新的節(jié)點(diǎn)可以成為主節(jié)點(diǎn)或者是從節(jié)點(diǎn)
4.1 把這個(gè)節(jié)點(diǎn)變成主節(jié)點(diǎn),使用redis-trib程序,將集群中的某些哈希槽移動到新節(jié)點(diǎn)里面, 這個(gè)新節(jié)點(diǎn)就成為真正的主節(jié)點(diǎn)了。
執(zhí)行下面的命令對集群中的哈希槽進(jìn)行移動
cd /usr/local/redis3.0/src
./redis-trib.rb reshard 127.0.0.1:7000
系統(tǒng)會提示我們要移動多少哈希槽,這里移動1000個(gè)
然后還需要指定把這些哈希槽轉(zhuǎn)移到哪個(gè)節(jié)點(diǎn)上,
輸入我們剛才新增的節(jié)點(diǎn)的ID
f32dc088c881a6b930474fc5b52832ba2ff71899
然后需要我們指定轉(zhuǎn)移哪幾個(gè)幾點(diǎn)的哈希槽
輸入all 表示從所有的主節(jié)點(diǎn)中隨機(jī)轉(zhuǎn)移,湊夠1000個(gè)哈希槽
然后再輸入yes,redis集群就開始分配哈希槽了。
至此,一個(gè)新的主節(jié)點(diǎn)就添加完成了,執(zhí)行命令查看現(xiàn)在的集群中節(jié)點(diǎn)的狀態(tài)
redis-cli -c -p 7000 cluster nodes
4.2:把這個(gè)節(jié)點(diǎn)變成從節(jié)點(diǎn)
前面我們已經(jīng)把這個(gè)新節(jié)點(diǎn)添加到集群中了,現(xiàn)在我們要讓新節(jié)點(diǎn)成為127.0.0.1:7001的從節(jié)點(diǎn),只需要執(zhí)行下面的命令就可以了,命令后面的節(jié)點(diǎn)ID就是127.0.0.1:7001的節(jié)點(diǎn)ID
redis-cli -c -p 7006 cluster replicate 0b00721a509444db793d28448d8f02168b94bd38
使用下面命令來確認(rèn)一下127.0.0.1:7006是否已經(jīng)成為127.0.0.1:7001的從節(jié)點(diǎn)
redis-cli -p 7000 cluster nodes | grep slave | grep 0b00721a509444db793d28448d8f02168b94bd38
看到下面圖片中的情況就表示添加成功
Redis集群刪除節(jié)點(diǎn)
1:如果刪除的節(jié)點(diǎn)是主節(jié)點(diǎn),這里我們刪除127.0.0.1:7006節(jié)點(diǎn),這個(gè)節(jié)點(diǎn)有1000個(gè)哈希槽
首先要把節(jié)點(diǎn)中的哈希槽轉(zhuǎn)移到其他節(jié)點(diǎn)中,執(zhí)行下面的命令
cd /usr/local/redis3.0/src
./redis-trib.rb reshard 127.0.0.1:7000
系統(tǒng)會提示我們要移動多少哈希槽,這里移動1000個(gè),因?yàn)?27.0.0.1:7006節(jié)點(diǎn)有1000個(gè)哈希槽
然后系統(tǒng)提示我們輸入要接收這些哈希槽的節(jié)點(diǎn)的ID,這里使用127.0.0.1:7001的節(jié)點(diǎn)ID
然后要我們選擇從那些節(jié)點(diǎn)中轉(zhuǎn)出哈希槽,這里一定要輸入127.0.0.1:7006這個(gè)節(jié)點(diǎn)的ID,最后輸入 done 表示輸入完畢
最后一步,使用下面的命令把這個(gè)節(jié)點(diǎn)刪除
cd /usr/local/redis3.0/src/
./redis-trib.rb del-node 127.0.0.1:7006 127.0.0.1:7006
2:如果節(jié)點(diǎn)是從節(jié)點(diǎn)的,直接使用下面的命令刪除即可。
cd /usr/local/redis3.0/src/
./redis-trib.rb del-node 127.0.0.1:7006 127.0.0.1:7006