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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

redis集群环境安装(参照redis中文官网,中间遇到了一些问题,so,记录一下)

發布時間:2025/4/16 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis集群环境安装(参照redis中文官网,中间遇到了一些问题,so,记录一下) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

創建步驟

01. 準備環境

# yum install gcc # yum install ruby # yum install ruby-devel.x86_64 # yum install rubygems # gem sources -r https://rubygems.org # gem sources -a http://rubygems.org # gem install redis

02. 下載安裝 redis

# cd~ # wget http://download.redis.io/releases/redis-4.0.1.tar.gz # tar zxfv redis-4.0.1.tar.gz # cd redis-4.0.1 # make MALLOC=libc # cp src/redis-server /usr/local/bin # cp src/redis-cli /usr/local/bin # cp src/redis-trib.rb /usr/local/bin

03. 獨立啟動/停止 redis

# redis-server & # redis-cli shutdown
  • 1
  • 2
  • 1
  • 2

04. 測試獨立 redis

# redis-cli -p 7001 127.0.0.1:7001> set mykey myval01 127.0.0.1:7001> get mykey "myval01"

05. 建立集群環境

# cd~ # mkdir redis-cluster # cd redis-cluster # mkdir 7001 7002 7003 7011 7012 7013
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

創建配置文件 ~/redis-cluster/redis.conf,內容如下:

port 7001 daemonize yes cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes

文件中的 cluster-enabled 選項用于開實例的集群模式, 而 cluster-conf-file 選項則設定了保存節點配置文件的路徑, 默認值為 nodes.conf。該節點配置文件無須人為修改,它由Redis集群在啟動時自動創建, 并在有需要時自動進行更新。?
若要讓集群正常運作至少需要三個主節點,我們的環境中,每個主節點附帶一個從節點,所以一共六個節點。

為每個節點創建配置文件

# cd ~/redis-cluster # cp redis.conf ./7001/ # … # cp redis.conf ./7013/
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

修改各個目錄下的 redis.conf 文件中的 port 為各自對應的端口

06. 啟動各個節點

# cd ~/redis-cluster # cd 7001 # redis-server redis.conf # cd ../7002 # redis-server redis.conf # … # cd ../7013 # redis-server redis.conf
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

查看redis的啟動情況

# ps -ef | grep redis

07. 創建集群

現在我們已經有了六個正在運行中的 Redis 實例, 接下來我們需要使用這些實例來創建集群。?
通過使用 Redis 集群命令行工具 redis-trib , 編寫節點配置文件的工作可以非常容易地完成: redis-trib 位于 Redis 源碼的 src 文件夾中, 它是一個 Ruby 程序, 這個程序通過向實例發送特殊命令來完成創建新集群, 檢查集群, 或者對集群進行重新分片(reshared)等工作。這里通過create命令來創建集群。

# cd ~/redis-3.0.0/src # ./redis-trib.rb create --replicas 1 192.168.1.21:7001 192.168.1.21:7002 192.168.1.21:7003 192.168.1.21:7011 192.168.1.21:7012 192.168.1.21:7013
  • 1
  • 2
  • 1
  • 2

說明:?
這里的IP地址必須是真實的IP,不能使用回環 127.0.0.1 地址。

–replicas 1 即每一個master有1個slave;順序為 m m m s s s?
redis-trib 會打印出一份預想中的配置給你看, 如果你覺得沒問題的話, 就可以輸入 yes , redis-trib 就會將這份配置應用到集群當中,讓各個節點開始互相通訊。

輸入yes,然后配置完成。

以上信息的其中一部分可以通過向集群中的任意節點(主節點或者從節點都可以)發送 CLUSTER NODES 命令來獲得。該命令還可以獲得節點 ID , IP 地址和端口號, 標志(flag), 最后發送 PING 的時間, 最后接收 PONG 的時間, 連接狀態, 節點負責處理的槽。

# redis-cli -p 7001 cluster nodes

08. 集群檢查

./redis-trib.rb check 127.0.0.1:7001
  • 1
  • 1

09. 連接Redis集群

通過上面的輸出,我們可以看出Redis三個主節點的slot范圍。一個 Redis 客戶端可以向集群中的任意節點(包括從節點)發送命令請求。我們首先連接第一個節點:

# redis-cli -p 7001127.0.0.1:7001> set a 1 (error) MOVED 15495 127.0.0.1:7003 127.0.0.1:7001> get a (error) MOVED 15495 127.0.0.1:7003 127.0.0.1:7001> set b 1 OK

雖然我們用Node ID來標識集群中的節點, 但是為了讓客戶端的轉向操作盡可能地簡單, 節點在 MOVED 錯誤中直接返回目標節點的 IP 和端口號, 而不是目標節點的 ID 。客戶端應該記錄槽15495由節點127.0.0.1:7003負責處理“這一信息, 這樣當再次有命令需要對槽15495執行時, 客戶端就可以加快尋找正確節點的速度。這樣,當集群處于穩定狀態時,所有客戶端最終都會保存有一個哈希槽至節點的映射記錄,使得集群非常高效: 客戶端可以直接向正確的節點發送命令請求, 無須轉向、代理或者其他任何可能發生單點故障(single point failure)的實體(entiy)。

10. 添加新master節點

a. 啟動節點

# cd ~/redis-cluster # mkdir 8001 # cp ./redis.conf ./8001 # cd 8001 # redis-server redis.conf
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

b. 將節點加入到集群

# redis-trib.rb add-node 127.0.0.1:8001 127.0.0.1:7001
  • 1
  • 1

說明:?
第一個 ip:port 為新節點?
第二個 ip:port 是任意一個已經存在的節點?
新節點沒有包含任何數據,也沒有包含任何slot。?
當集群需要將某個從節點升級為新的主節點時, 這個新節點不會被選中,同時新的主節點因為沒有包含任何slot,不參加選舉和failover。

c. 為新節點分配 slot

# redis-trib.rb reshard 127.0.0.1:8001 #根據提示選擇要遷移的slot數量(ps:這里選擇500) How many slots do you want to move (from 1 to 16384)? 500 #選擇要接受這些slot的node-id What is the receiving node ID? f51e26b5d5ff74f85341f06f28f125b7254e61bf #選擇slot來源: #all表示從所有的master重新分配, #或者數據要提取slot的master節點id,最后用done結束 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:all #打印被移動的slot后,輸入yes開始移動slot以及對應的數據. #Do you want to proceed with the proposed reshard plan (yes/no)? yes #結束
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

11. 添加新的 Slave 節點


a. 啟動節點

# cd ~/redis-cluster # mkdir 8011 # cp ./redis.conf ./8011 # cd 8011 # redis-server redis.conf
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

b. 將節點加入到集群?
方法一:

# redis-trib.rb add-node -slave 127.0.0.1:8011 127.0.0.1:7001
  • 1
  • 1

說明:?
第一個 ip:port 為新節點?
第二個 ip:port 是任意一個已經存在的節點?
新的節點會作為集群中其中一個主節點的從節點,一般來說是從節點最少的主節點。

方法二:

# redis-trib.rb add-node -slave -master-id \ 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 127.0.0.1:8011 127.0.0.1:7001
  • 1
  • 1

說明:?
-master-id xxxx 主節點的 ID?
第一個 ip:port 為新節點?
第二個 ip:port 是任意一個已經存在的節點

注意:在線添加slave 時,需要bgsave整個master數據,并傳遞到slave,再由 slave加載rdb文件到內存,rdb生成和傳輸的過程中消耗Master大量內存和網絡IO,以此不建議單實例內存過大,線上小心操作。

12. 在線 reshard 數據

對于負載/數據不均勻的情況,可以在線reshard slot來解決,方法與添加新master的reshard一樣,只是需要reshard的master節點是已存在的老節點。

# redis-trib.rb reshard 127.0.0.1:7003
  • 1
  • 1

13. 刪除一個 slave 節點

# redis-trib.rb del-node ip:port '<node-id>' # redis-trib.rb del-node 127.0.0.1:7001 'c7ee2fca17cb79fe3c9822ced1d4f6c5e169e378'
  • 1
  • 2
  • 1
  • 2

說明:?
ip:port 集群中已有的任意一節點(不是被刪除的節點)?
被刪除節點的 ID

14. 刪除一個 master 節點(7003)

刪除master節點之前首先要使用reshard移除master的全部slot,然后再刪除當前節點。 (目前redis-trib.rb只能把被刪除master的slot對應的數據遷移到一個節點上)。

a. 遷移 slot

#把127.0.0.1:7003當前master遷移到127.0.0.1:7002上 redis-trib.rb reshard 172.0.0.1:7002 #根據提示選擇要遷移的slot數量(ps:這里選擇500) How many slots do you want to move (from 1 to 16384)? 500(被刪除master的所有slot數量) #選擇要接受這些slot的node-id(172.0.0.1:7002) What is the receiving node ID? c4a31c852f81686f6ed8bcd6d1b13accdc947fd2 (ps:172.0.0.1:7002的node-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:f51e26b5d5ff74f85341f06f28f125b7254e61bf(被刪除master的node-id) Source node #2:done #打印被移動的slot后,輸入yes開始移動slot以及對應的數據. #Do you want to proceed with the proposed reshard plan (yes/no)? yes
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

b. 刪除空的 master 節點

# redis-trib.rb del-node 172.0.0.1:7001 'f51e26b5d5ff74f85341f06f28f125b7254e61bf'
  • 1
  • 1

說明:?
ip:port 集群中已有的任意一節點(不是被刪除的節點)?
被刪除節點的 ID

15. 改變從節點的隸屬關系(從節點 7013)

# redis-cli -p 7013 127.0.0.1:7013> cluster replicate 2b9ebcbd627ff0fd7a7bbcc5332fb09e72788835 說明:2b9ebcbd627ff0fd7a7bbcc5332fb09e72788835 為新的主節點的 ID
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

16. 集群的關閉和重啟

redis cluster官方文檔,沒發現有關集群重啟和關閉的方法。主要是因為在正式的環境中集群一般都由3臺物理機構成,3臺物理機同時掛掉的可能性極小。只要不同時掛掉,掛掉的機器修復后在加入集群,集群都能良好的運作,萬一同時掛掉,數據又沒有備份的話,就有大麻煩了。

redis cluster集群中的節點基本上都對等的,沒有管理節點。如果要讓所有節點都關閉,只能關閉所有 redis-server 進程。

# pkill -9 redis
  • 1
  • 1

然后重新啟動,如果直接重啟會報告錯誤。

# redis-trib.rb create --replicas 1 xxx xxx xxx xxx
  • 1
  • 1

會報以下錯誤,

[ERR] Node 127.0.0.1:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
  • 1
  • 1

第一次啟動集群時,~/redis-cluster/7001/ 下只有 redis.conf,而現在重啟時,此目錄下有了別的文件,所有報錯。簡單的方法是將除了 redis.conf 外的其他文件全部刪除,在啟動肯定是可以的,但是集群是有數據的,所以需要保留了配置文件 redis.conf 和數據文件 *.rdb。?
這樣是可以啟動的,但是原來的數據還是丟失了,不知道是自己的想法不對。

需要注意的問題

  • 執行06步驟時,節點目錄下(7001/7002/…/7013/ 應當只有 redis.conf 文件)

  • 一定要嚴格執行 01 步驟準備好環境。?
    此步驟中 gem sources 默認地址好像無法訪問,建議用下面方法替換

  • # gem sources -r https://rubygems.org # gem sources -a http://rubygems.org


    在安裝redis集群中可能會出現的問題以及解決方案如下:

    執行命令:./redis-trib.rb create --replicas 1 127.0.0.1:6800 127.0.0.1:6801 127.0.0.1:6802 127.0.0.1:6803 127.0.0.1:6804 127.0.0.1:6805時,出現問題:


    問題1:

    RubyGems 2.6.12 installedERROR: ?While executing gem ... (Gem::DocumentError) RDoc is not installed: no such file to load -- rdoc/rdoc ???

    解決:

    ????1.安裝ruby軟件包
    ? ? ? ?[root@redis ~]#yum -y install ruby
    ? ? 2.安裝rubygems軟件包
    ? ? ? ?[root@redis ~]#tar -zxvf rubygems-2.6.12.tgz?

    [root@redis?~]#?cd?rubygems-2.6.12

    [root@redis?rubygems-2.2.2]#?ls
    bin??????????????????History.txt???MIT.txt??????test
    CVE-2013-4287.txt????lib???????????Rakefile?????UPGRADING.rdoc
    CVE-2013-4363.txt????LICENSE.txt???README.rdoc??util
    hide_lib_for_update??Manifest.txt??setup.rb
    [root@redis?rubygems-2.2.2]#?ruby?setup.rb

    此處,出現了第二個問題:

    問題2:

    While executing gem ... (Gem::DocumentError) ? ? RDoc is not installed: no such file to load -- rdoc

    解決:?[root@redis ~]#yum install ruby-rdoc

    接著執行命令:./redis-trib.rb create --replicas 1 127.0.0.1:6800 127.0.0.1:6801 127.0.0.1:6802 127.0.0.1:6803 127.0.0.1:6804 127.0.0.1:6805

    報錯:/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:55: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

    解決:yum install -y rubygems

    接著執行:./redis-trib.rb create --replicas 1 127.0.0.1:6800 127.0.0.1:6801 127.0.0.1:6802 127.0.0.1:6803 127.0.0.1:6804 127.0.0.1:6805

    報錯:

    /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 install?redis

    接著執行:./redis-trib.rb create --replicas 1 127.0.0.1:6800 127.0.0.1:6801 127.0.0.1:6802 127.0.0.1:6803 127.0.0.1:6804 127.0.0.1:6805

    出現:

    >>> Creating cluster
    >>> Performing hash slots allocation on 6 nodes...
    Using 3 masters:
    127.0.0.1:6800
    127.0.0.1:6801
    127.0.0.1:6802
    Adding replica 127.0.0.1:6803 to 127.0.0.1:6800
    Adding replica 127.0.0.1:6804 to 127.0.0.1:6801
    Adding replica 127.0.0.1:6805 to 127.0.0.1:6802
    M: f6980c8f40d777175090007abc7edbaca8c360a7 127.0.0.1:6800
    ? ?slots:0-5460 (5461 slots) master
    M: 40d10b0c47431f2e02a3c1cef36a8e14f6861cc8 127.0.0.1:6801
    ? ?slots:5461-10922 (5462 slots) master
    M: e97c8defa07e679b9bd95d0015247a9833342f49 127.0.0.1:6802
    ? ?slots:10923-16383 (5461 slots) master
    S: b3232105d439e545e43235bc1b8f0ff263a29534 127.0.0.1:6803
    ? ?replicates f6980c8f40d777175090007abc7edbaca8c360a7
    S: bac5f3e53982e521d5e143ed2dfbce7fbbe92623 127.0.0.1:6804
    ? ?replicates 40d10b0c47431f2e02a3c1cef36a8e14f6861cc8
    S: 80b48929a861db1de6baa4330baceadefc617651 127.0.0.1:6805
    ? ?replicates e97c8defa07e679b9bd95d0015247a9833342f49
    Can I set the above configuration? (type 'yes' to accept):?

    然后輸入:y

    至此,結束


    最后,添加一篇博客,可能會對解決這個問題有幫助:http://blog.csdn.net/asas1314/article/details/50203923

    總結

    以上是生活随笔為你收集整理的redis集群环境安装(参照redis中文官网,中间遇到了一些问题,so,记录一下)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 色视频线观看在线播放 | 亚洲精品视频一区 | 97精品人妻一区二区 | 影音先锋国产在线 | 一级黄色性生活片 | 亚洲性图av | 一区二区三区爱爱 | 国产精品视频99 | 中文字幕 人妻熟女 | 高潮白浆女日韩av免费看 | 亚洲精品日韩综合观看成人91 | 少妇被中出 | 久久在线一区二区 | 91国自产精品中文字幕亚洲 | 波多野结衣乳巨码无在线观看 | 99久久精品一区二区三区 | 亚洲高清在线视频 | 国产制服丝袜在线 | 国产精品久久久久毛片大屁完整版 | 日本三级吹潮 | 久久五月天综合 | 伊人一级 | 京香julia在线观看 | 国产高清精品软件丝瓜软件 | 日韩精品一区二区三区丰满 | 日本www黄 | 人人操在线播放 | 亚洲少妇精品 | 国产综合精品久久久久成人影 | 四虎精品在永久在线观看 | 国产另类精品 | 夜色在线影院 | 中文字幕免费在线 | 国产美女视频一区二区 | 在线免费观看h片 | 国产美女视频 | 91桃色视频在线观看 | 毛片毛片毛片毛片毛片毛片毛片毛片 | 欧美一区二区三区在线播放 | 久久久久极品 | av青草| 精品一区二区在线播放 | 婷婷五月精品中文字幕 | www.一级片| 激情六月丁香 | 美女露出让男生揉的视频 | aaa一区二区| 亚洲欧美一区二区三区四区五区 | 性工作者十日谈 | 成人黄色小说视频 | 国产精品区二区三区日本 | 亚洲成熟丰满熟妇高潮xxxxx | 久久国产热 | 国产77777 | 日韩在线三区 | 成人免费激情视频 | 欧美一区二区三区婷婷 | 欧美精品一区二区成人 | 日本三级全黄 | 日韩欧美在线免费 | 亚洲国产成人在线视频 | 天天综合天天添夜夜添狠狠添 | 亚洲av成人精品日韩在线播放 | 天天爱天天爽 | 起碰在线| 久久久精品久久久 | 极品尤物一区二区 | 欧美自偷自拍 | 福利在线免费观看 | 久99久视频| 97超碰免费 | 精品国模一区二区三区 | 亚洲国产精品视频一区 | 亚洲精品国产一区 | 国产v在线 | 日韩美女做爰高潮免费 | 日韩精品一区二区亚洲av观看 | 国产情侣一区二区 | 国产98在线 | 综合久草 | 免费啪视频 | 欧洲最强rapper网站直播 | 亚洲一区二区三区四区在线播放 | 国产91区 | 人妻大战黑人白浆狂泄 | 18无套直看片红桃 | 少妇一级淫片日本 | 第色 | 美女裸体跪姿扒开屁股无内裤 | 美女网站视频在线观看 | 国产影视一区二区 | 久久久免费毛片 | 国产主播在线观看 | www.白虎| 日本熟妇人妻xxxxx | 日日噜噜夜夜狠狠久久波多野 | √天堂中文官网8在线 | 亚洲激情欧美 | 日韩黄色短视频 |