日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

高性能网站架构设计之缓存篇(6)- Redis 集群(中)

發(fā)布時(shí)間:2023/12/20 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高性能网站架构设计之缓存篇(6)- Redis 集群(中) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

昨天晚上釣魚(yú)回來(lái),大發(fā)神經(jīng),寫(xiě)了篇概括程序員生活現(xiàn)狀的文章,沒(méi)想到招來(lái)眾多人的口誅筆伐,大有上升到政治層面的趨勢(shì)。

我也許不會(huì)再發(fā)表任何沖擊心靈的文章,我希望給大家?guī)?lái)更多的正能量,所以那篇文章已被我刪除。

我的本意只是想讓各位看過(guò)文章之后能冷靜地思考自己的程序人生,不管是對(duì)是錯(cuò),人都有選擇的權(quán)力,走好自己的路。

我沒(méi)有你們想象中那么悲觀,我也在不懈的努力,哪怕一時(shí)的跌倒,我也要重新站起。

生活無(wú)時(shí)無(wú)刻不是壓力,讓我們背起行囊,邁出踏實(shí)的一步,走起!

我們繼續(xù)我們的 redis 緩存之旅。

前一篇我們實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的 redis 集群,redis 也為了讓我們方便的維護(hù)集群提供了非常好的工具。

首先請(qǐng)大家參照我的上一篇文章,把集群環(huán)境搭建起來(lái)。

OK,我用了分分鐘的時(shí)間已經(jīng)搭建好了。

[OK] All 16384 slots covered.

zhaoguihuadediannao:src zhaogh$ ./redis-cli -c -p 9001

127.0.0.1:9001> get testkey001

-> Redirected to slot [12786] located at 127.0.0.1:9003

(nil)

127.0.0.1:9003>?

如何增加節(jié)點(diǎn):

首先我們創(chuàng)建一個(gè)叫做 9004 的目錄:

zhaoguihuadediannao:redis-cluster zhaogh$ mkdir 9004

zhaoguihuadediannao:redis-cluster zhaogh$?

接著我們將 9001 目錄下的 redis-server 、 redis.conf 兩個(gè)文件拷貝到 9004 目錄:

zhaoguihuadediannao:redis-cluster zhaogh$ cp 9001/redis-server 9004

zhaoguihuadediannao:redis-cluster zhaogh$ cp 9001/redis.conf 9004

然后我們打開(kāi) redis.conf 文件修改里面的端口配置項(xiàng),將其改為 9004 。

啟動(dòng) 9004 實(shí)例:

zhaoguihuadediannao:redis-cluster zhaogh$ cd 9004

zhaoguihuadediannao:9004 zhaogh$ ./redis-server ./redis.conf

zhaoguihuadediannao:9004 zhaogh$?

想要把這個(gè)實(shí)例加入到集群,我們只需要執(zhí)行 redis-trib.rb 命令:

zhaoguihuadediannao:src zhaogh$ ./redis-trib.rb add-node 127.0.0.1:9004 127.0.0.1:9001

第一個(gè)參數(shù)是我們剛才啟動(dòng)的新實(shí)例,第二個(gè)參數(shù)是集群中已有的節(jié)點(diǎn)。

檢查一下新節(jié)點(diǎn)是否已經(jīng)加入:

zhaoguihuadediannao:src zhaogh$ ./redis-cli -c -p 9001

127.0.0.1:9001> cluster nodes

0e8f980bfe7a682e3d71b15523a41293535b8ccd :0 myself,master - 0 0 1 connected 0-5460

cbb01bdfdc265b190496956354d84aaae6e7d54d 127.0.0.1:9004 master - 0 1401952316346 0 connected

708e6e14474e3a99677b05ff89bd857375884437 127.0.0.1:9002 master - 0 1401952314325 2 connected 5461-10922

a7f9d3c64540cc3fc8cd3072e573bb8ab0bf1e6f 127.0.0.1:9003 master - 0 1401952315334 3 connected 10923-16383

127.0.0.1:9001>?

我們可以發(fā)現(xiàn) 9004 并不包含任何哈希槽,因?yàn)樗€沒(méi)有數(shù)據(jù)。

我們還可以為集群中的主節(jié)點(diǎn)增加從節(jié)點(diǎn)用于只讀查詢。

如何增加從節(jié)點(diǎn):

我們還是要?jiǎng)?chuàng)建目錄,拷貝那兩個(gè)文件,修改配置,然后啟動(dòng)實(shí)例:

zhaoguihuadediannao:redis-cluster zhaogh$ mkdir 9005

zhaoguihuadediannao:redis-cluster zhaogh$ cp 9001/redis-server 9005

zhaoguihuadediannao:redis-cluster zhaogh$ cp 9001/redis.conf 9005

修改 port 為 9005

zhaoguihuadediannao:redis-cluster zhaogh$ cd 9005

zhaoguihuadediannao:9005 zhaogh$ ./redis-server ./redis.conf

zhaoguihuadediannao:9005 zhaogh$?

執(zhí)行下面的命令,增加從節(jié)點(diǎn):

zhaoguihuadediannao:src zhaogh$ ./redis-trib.rb add-node --slave 127.0.0.1:9005 127.0.0.1:9001

第一個(gè)參數(shù)為從節(jié)點(diǎn),第二個(gè)參數(shù)為主節(jié)點(diǎn)。

如何刪除一個(gè)節(jié)點(diǎn):

zhaoguihuadediannao:src zhaogh$ ./redis-trib.rb del-node 127.0.0.1:9001 'cbb01bdfdc265b190496956354d84aaae6e7d54d'

這里要注意一下,第一個(gè)參數(shù)是集群中的任何一個(gè)主節(jié)點(diǎn)地址,而第二個(gè)參數(shù)是要?jiǎng)h除節(jié)點(diǎn)的 ID,這個(gè)ID如果你不知道的話,可以通過(guò) cluster nodes 命令查看。

還有一點(diǎn)就是要?jiǎng)h除的節(jié)點(diǎn)必須是空的,也就是不能緩存任何數(shù)據(jù),否則會(huì)刪除不成功。對(duì)于非空節(jié)點(diǎn),在刪除之前需要重新分片,將緩存的數(shù)據(jù)轉(zhuǎn)移到別的節(jié)點(diǎn)。

如何重新分片:

我們先給某個(gè)節(jié)點(diǎn)做點(diǎn)數(shù)據(jù):

zhaoguihuadediannao:src zhaogh$ ./redis-cli -c -p 9001

127.0.0.1:9001> set testkey001 testvalue001

-> Redirected to slot [12786] located at 127.0.0.1:9003

OK

127.0.0.1:9003>?

現(xiàn)在 9003 上已經(jīng)有數(shù)據(jù)了,我們嘗試刪除一下:

zhaoguihuadediannao:src zhaogh$ ./redis-trib.rb del-node 127.0.0.1:9001 '78ec1fd6647b79627d7c29bb2b22d04a4a6c43b3'

>>> Removing node 78ec1fd6647b79627d7c29bb2b22d04a4a6c43b3 from cluster 127.0.0.1:9001

Connecting to node 127.0.0.1:9001: OK

Connecting to node 127.0.0.1:9002: OK

Connecting to node 127.0.0.1:9003: OK

[ERR] Node 127.0.0.1:9003 is not empty! Reshard data away and try again.

zhaoguihuadediannao:src zhaogh$?

沒(méi)有刪除成功,我們來(lái)重新分片,把 9003 上的數(shù)據(jù)轉(zhuǎn)移:

zhaoguihuadediannao:src zhaogh$ ./redis-trib.rb reshard 127.0.0.1:9003

然后輸出了很多信息,很多數(shù)值和ID都可以從這段信息中找到。

How many slots do you want to move (from 1 to 16384)? 5461

會(huì)問(wèn)你要移動(dòng)多少個(gè)哈希槽,我們把 9003 上的所有哈希槽都移走,5461 這個(gè)數(shù)字可以從終端上看到,或許你的實(shí)際情況不是這個(gè)數(shù)字。

What is the receiving node ID? 4d2e0a8360795ce7ce8381c68746034aeba3c9b9

然后問(wèn)你你要把這些哈希槽移到哪兒去,我指定了 9001 的 節(jié)點(diǎn) ID。

Please enter all the source node IDs.

? Type 'all' to use all the nodes as source nodes for the hash slots.

? Type 'done' once you entered all the source nodes IDs.

Source node #1:78ec1fd6647b79627d7c29bb2b22d04a4a6c43b3

Source node #2:done

之后,redis 列出了重新分片計(jì)劃,最后問(wèn)你

Do you want to proceed with the proposed reshard plan (yes/no)? yes

?

執(zhí)行完成后,我們看看 9003 上還有沒(méi)有 key:

zhaoguihuadediannao:src zhaogh$ ./redis-cli -p 9003

127.0.0.1:9003> keys *

(empty list or set)

127.0.0.1:9003>?

再看看 9001 上是不是有這個(gè) key 了

zhaoguihuadediannao:src zhaogh$ ./redis-cli -p 9001

127.0.0.1:9001> keys *

1) "testkey001"

127.0.0.1:9001>?

沒(méi)錯(cuò),果然轉(zhuǎn)移過(guò)來(lái)了。

最后我們?cè)囋嚹懿荒馨?9003 刪除:

zhaoguihuadediannao:src zhaogh$ ./redis-trib.rb del-node 127.0.0.1:9001 '78ec1fd6647b79627d7c29bb2b22d04a4a6c43b3'

>>> Removing node 78ec1fd6647b79627d7c29bb2b22d04a4a6c43b3 from cluster 127.0.0.1:9001

Connecting to node 127.0.0.1:9001: OK

Connecting to node 127.0.0.1:9002: OK

Connecting to node 127.0.0.1:9003: OK

>>> Sending CLUSTER FORGET messages to the cluster...

>>> SHUTDOWN the node.

zhaoguihuadediannao:src zhaogh$ ./redis-cli -p 9003

Could not connect to Redis at 127.0.0.1:9003: Connection refused

not connected>?

非常好,it’s very good.

上篇文章說(shuō)過(guò),目前c#客戶端還不能很好的支持 redis 集群,下一篇我將介紹如何使用代理來(lái)實(shí)現(xiàn) redis 集群。

轉(zhuǎn)載于:https://www.cnblogs.com/zhousongsky/p/6639393.html

總結(jié)

以上是生活随笔為你收集整理的高性能网站架构设计之缓存篇(6)- Redis 集群(中)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。