真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

redis分片集群如何搭建與使用

本文小編為大家詳細介紹“redis分片集群如何搭建與使用”,內(nèi)容詳細,步驟清晰,細節(jié)處理妥當(dāng),希望這篇“redis分片集群如何搭建與使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供札達網(wǎng)站建設(shè)、札達做網(wǎng)站、札達網(wǎng)站設(shè)計、札達網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、札達企業(yè)網(wǎng)站模板建站服務(wù),十余年札達做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

前言

redis可以說在實際項目開發(fā)中使用的非常頻繁,在redis常用集群中,我們聊到了redis常用的幾種集群方案,不同的集群對應(yīng)著不同的場景,并且詳細說明了各種集群的優(yōu)劣,本篇將以redis 分片集群為切入點,從redis 分片集群的搭建開始,詳細說說redis 分片集群相關(guān)的技術(shù)點;

  • 單點故障;

  • 單機寫(高并發(fā)寫)瓶頸;

  • 單機存儲數(shù)據(jù)容量限制;

  • 集群自動伸縮;

  • 集群自動故障下線與轉(zhuǎn)移;

搭建集群架構(gòu)圖

redis分片集群如何搭建與使用

前置準備

1、準備一臺(或6臺服務(wù)器,條件允許的情況下)虛擬機或服務(wù)器;

本例為演示效果準備了一臺內(nèi)存8G的服務(wù)器,將通過端口進行master和slave的劃分

redis分片集群如何搭建與使用

2、提前下載好redis安裝包;

redis分片集群如何搭建與使用

搭建步驟

1、創(chuàng)建6個目錄文件,分別用于保存各個redis示例的數(shù)據(jù)

mkdir 7001 7002 7003 8001 8002 8003

2、在當(dāng)前目錄下創(chuàng)建一個redis.conf文件,內(nèi)容如下

port 6379
# 開啟集群功能
cluster-enabled yes
# 集群的配置文件名稱,不需要我們創(chuàng)建,由redis自己維護
cluster-config-file /usr/local/soft/redis/6379/nodes.conf
# 節(jié)點心跳失敗的超時時間
cluster-node-timeout 5000
# 持久化文件存放目錄
dir /usr/local/soft/redis/6379
# 綁定地址
bind 0.0.0.0
# 讓redis后臺運行
daemonize yes
# 注冊的實例ip
replica-announce-ip 本機公網(wǎng)IP
# 保護模式
protected-mode no
# 數(shù)據(jù)庫數(shù)量
databases 1
# 日志
logfile /usr/local/soft/redis/6379/run.log

3、批量將該配置文件拷貝到各個目錄下

echo 7001 7002 7003 8001 8002 8003 | xargs -t -n 1 cp redis.conf

redis分片集群如何搭建與使用

redis分片集群如何搭建與使用

4、修改每個目錄下redis.conf,將其中的6379修改為與所在目錄一致

printf '%s\n' 7001 7002 7003 8001 8002 8003 | xargs -I{} -t sed -i 's/6379/{}/g' {}/redis.conf

redis分片集群如何搭建與使用

隨機打開某個redis.conf看看是否修改成功

redis分片集群如何搭建與使用

4、使用下面的命令進行啟動

/usr/local/soft/redis/redis60/src/redis-server /usr/local/soft/redis/7001/redis.conf
/usr/local/soft/redis/redis60/src/redis-server /usr/local/soft/redis/7002/redis.conf
/usr/local/soft/redis/redis60/src/redis-server /usr/local/soft/redis/7003/redis.conf

/usr/local/soft/redis/redis60/src/redis-server /usr/local/soft/redis/8001/redis.conf
/usr/local/soft/redis/redis60/src/redis-server /usr/local/soft/redis/8002/redis.conf
/usr/local/soft/redis/redis60/src/redis-server /usr/local/soft/redis/8003/redis.conf

執(zhí)行完成后,可以看到6個redis實例已經(jīng)開啟

redis分片集群如何搭建與使用

創(chuàng)建集群

通過以上的步驟,就開啟了6個redis的實例,但是這些實例之間并沒有形成一個集群,接下來就需要執(zhí)行相關(guān)的命令將它們構(gòu)成一個集群

1、使用如下命令構(gòu)建集群(5.0之后的版本的命令)

redis-cli --cluster create --cluster-replicas 1 IP地址:7001 IP地址:7002 IP地址:7003 IP地址:8001 IP地址:8002 IP地址:8003

關(guān)于上面命令的說明

  • redis-cli --cluster 或者 ./redis-trib.rb:代表集群操作命令;

  • create:代表是創(chuàng)建集群;

  • –replicas 1或者–cluster-replicas 1 :指定集群中每個master的副本個數(shù)為1,此時節(jié)點總數(shù) ÷ (replicas + 1)得到的就是master的數(shù)量。因此節(jié)點列表中的前n個就是master,其它節(jié)點都是slave節(jié)點,隨機分配到不同master ;

也可以通過 redis-cli --cluster help 命令進行集群命令的查看;

執(zhí)行命令后,控制臺提示將會使用哪個示例作為master,哪個作為slave;

redis分片集群如何搭建與使用

繼續(xù)輸入yes之后,將會按照上面的策略創(chuàng)建一個集群出來

redis分片集群如何搭建與使用

通過這個輸出的日志大概可以得出如下信息:

  • 端口號依次為7001,7002和7003的為master節(jié)點;

  • 端口號依次為8001,8002和8003的為slave節(jié)點;

  • 端口號依次為7001,7002和7003的master節(jié)點,各自分配了一定區(qū)間的槽位數(shù),分別是:[0-5460],[5461-10922],[10923-16383],即總共分配16384個槽位;

2、查看集群狀態(tài)

redis-cli -p 7001 cluster nodes

redis分片集群如何搭建與使用

通過這個命令,可以清楚的看到集群中各個實例節(jié)點的主從狀態(tài),實例ID(唯一身份標識),槽位區(qū)間等信息

Redis散列插槽說明

其實對redis分片集群稍有了解的同學(xué)應(yīng)該知道,redis分片集群在邏輯上將集群中的所有節(jié)點構(gòu)成了一塊完整的內(nèi)存空間,數(shù)據(jù)寫入進來后,具體存放到哪個節(jié)點呢?所以集群引入了一個邏輯尚的插槽概念,即將集群劃分為16384個槽位,集群中的每個節(jié)點占據(jù)一部分槽位數(shù)(這個日志中可以看出來);

那么當(dāng)某個具體的key寫入的時候,集群將會通過一定的算法,將要寫入的數(shù)據(jù)路由到指定的插槽上去;

這里有個點需要注意,數(shù)據(jù)key不是與節(jié)點綁定,而是與插槽綁定。

redis集群會根據(jù)key的有效部分計算插槽值,分兩種情況:

  • key中包含"{}",且“{}”中至少包含1個字符,“{}”中的部分是有效部分;

  • key中不包含“{}”,整個key都是有效部分;

舉例來說:key是num,那么就根據(jù)num計算,如果是{應(yīng)用名稱}num,則根據(jù)“應(yīng)用名稱”計算。計算方式是利用CRC16算法得到一個hash值,然后對16384取余,得到的結(jié)果就是slot值

下面不妨看下效果

redis分片集群如何搭建與使用

通過上面的演示可以發(fā)現(xiàn),經(jīng)過集群計算的key將會分配到不同的插槽上,也就是說,key是與插槽綁定,而不是與某個節(jié)點綁定,想想為什么會這樣呢?

思考下面這個需求

如何將同一類數(shù)據(jù)固定的保存在同一個Redis實例?

簡單來說,如果key的分配完全沒有規(guī)則的話,當(dāng)涉及到某個業(yè)務(wù)類的數(shù)據(jù)對應(yīng)的key隨機分配到不同的節(jié)點上面時,取值的時候就會出現(xiàn)像上面的重定向跨節(jié)點的問題,一定程度上提升性能;

解決辦法

這一類數(shù)據(jù)使用相同的有效部分,例如key都以{業(yè)務(wù)ID}為前綴

redis分片集群如何搭建與使用

集群伸縮(添加節(jié)點)

reids的cluster模式下,有一個比較強的功能就是集群的伸縮能力,即在現(xiàn)有的集群基礎(chǔ)上,可以根據(jù)實際的業(yè)務(wù)需求,進行集群的伸縮,下面來演示下給上面的集群添加一個新節(jié)點的步驟;

1、在當(dāng)前目錄下拷貝一個目錄

redis分片集群如何搭建與使用

2、修改配置文件的端口

sed -i s/6379/7004/g 7004/redis.conf

redis分片集群如何搭建與使用

3、啟動這個實例

/usr/local/soft/redis/redis60/src/redis-server /usr/local/soft/redis/7004/redis.conf

redis分片集群如何搭建與使用

4、使用下面的命令將7004實例假如集群

redis-cli --cluster add-node IP:7004 IP:7001

redis分片集群如何搭建與使用

5、再次查看集群狀態(tài)

redis-cli -p 7001 cluster nodes

redis分片集群如何搭建與使用

通過上面的狀態(tài)信息發(fā)現(xiàn),7004這個節(jié)點雖然加入了集群,并成了master,但是集群并沒有給它分配任何的插槽

6、分配插槽

分配插槽的基本思路是,從現(xiàn)有的某個節(jié)點上遷移部分插槽到新的節(jié)點即可,執(zhí)行下面的命令進行插槽分配

redis-cli --cluster reshard 101.34.23.80:7001

執(zhí)行命令后將出現(xiàn)下面的提示,這里輸入你要轉(zhuǎn)移的插槽數(shù)量

redis分片集群如何搭建與使用

將7004對應(yīng)的實例ID輸入即可

redis分片集群如何搭建與使用

redis分片集群如何搭建與使用

輸入yes后開始移動插槽

redis分片集群如何搭建與使用

redis分片集群如何搭建與使用

移動完成后,再次查看集群狀態(tài),這時候7004對應(yīng)的節(jié)點就分配到了從0 ~ 500的數(shù)量的插槽

redis分片集群如何搭建與使用

故障轉(zhuǎn)移

redis的cluster模式的集群,還具備一定的故障轉(zhuǎn)移能力,比如在上面的架構(gòu)模式下,當(dāng)集群中的某個master節(jié)點宕機之后,會出現(xiàn)什么情況呢?下面我們來模擬下這個過程,看看效果如何

1、使用watch命令監(jiān)控下集群的狀態(tài)

通過這個命令可以實時查看集群的動態(tài)日志變化

watch redis-cli -p 7001 cluster nodes

redis分片集群如何搭建與使用

2、手動將7002實例的master宕機

redis-cli -p 7002 shutdown

redis分片集群如何搭建與使用

從上面的監(jiān)控日志不難發(fā)現(xiàn),當(dāng)7002掛掉后,過了一會兒與集群以及它的從節(jié)點8003失去了聯(lián)系,然后8003這個節(jié)點升級為master節(jié)點;

3、手動將7002實例啟動起來

/usr/local/soft/redis/redis60/src/redis-server /usr/local/soft/redis/7002/redis.conf

redis分片集群如何搭建與使用

再次分析日志,可以看到這時候7002只能以slave的身份加入了集群,事實上在某些情況下,我們?nèi)匀幌M@個宕機的節(jié)點恢復(fù)后依然是主節(jié)點,這該怎么辦呢?這就涉及到了手動故障轉(zhuǎn)移,主要操作步驟如下:

  • 使用redis-cli連接7002節(jié)點;

  • 執(zhí)行cluster failover命令;

在上面執(zhí)行之后的情況下,7002是一個slave節(jié)點

redis分片集群如何搭建與使用

執(zhí)行 CLUSTER FAILOVER 命令,觀察日志動態(tài)變化,通過日志變化,可以看到,命令執(zhí)行完畢后,7002很快就變成了master,而8003成了slave;

redis分片集群如何搭建與使用

通過以上步驟就完成了redis的cluster模式下的故障轉(zhuǎn)移的過程

使用redistemplate訪問分片集群

1、引入依賴


    org.springframework.boot
    spring-boot-starter-data-redis

2、將配置文件中的集群地址修改成下面這樣即可

spring:
  redis:
    cluster:
      nodes:
       - 集群IP:7001
       - 集群IP:7002
       - 集群IP:7003
       - 集群IP:7004
       - 集群IP:8001
       - 集群IP:8002
       - 集群IP:8003

至于具體的代碼部分,可以參考下面的這個測試案例

	@Autowired
    private RedisTemplate redisTemplate;

    //localhost:8083/set?key=b&value=123
    @GetMapping("/set")
    public void set(@RequestParam String key,@RequestParam String value){
        redisTemplate.opsForValue().set(key,value);
    }

    //localhost:8083/get?key=b
    @GetMapping("/get")
    public String get(@RequestParam String key){
        return redisTemplate.opsForValue().get(key);
    }

讀到這里,這篇“redis分片集群如何搭建與使用”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


分享名稱:redis分片集群如何搭建與使用
URL鏈接:http://weahome.cn/article/jhiche.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部