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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

redis3.0.2 分布式集群安装详细步骤

發(fā)布時(shí)間:2025/7/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis3.0.2 分布式集群安装详细步骤 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
  • redis3.0.2 分布式集群安裝詳細(xì)步驟

  • ????????????????????????????? --(centos5.8 X64系統(tǒng))

    版本歷史

    時(shí)間

    版本

    說明

    編寫者

    2015-06-5

    1.0

    redis3.0.2 分布式集群安裝詳細(xì)步驟

    csc













    ?

    ?

    ?

    : redis cluster介紹篇

    1:redis cluster的現(xiàn)狀

    目前redis支持的cluster特性(已親測):

    1):節(jié)點(diǎn)自動發(fā)現(xiàn)

    2):slave->master 選舉,集群容錯(cuò)

    3):Hot resharding:在線分片

    4):進(jìn)群管理:cluster xxx

    5):基于配置(nodes-port.conf)的集群管理

    6):ASK 轉(zhuǎn)向/MOVED 轉(zhuǎn)向機(jī)制.

    2:redis cluster 架構(gòu)

    1)redis-cluster架構(gòu)圖

    ?

    架構(gòu)細(xì)節(jié):

    (1)所有的redis節(jié)點(diǎn)彼此互聯(lián)(PING-PONG機(jī)制),內(nèi)部使用二進(jìn)制協(xié)議優(yōu)化傳輸速度和帶寬.

    (2)節(jié)點(diǎn)的fail是通過集群中超過半數(shù)的節(jié)點(diǎn)檢測失效時(shí)才生效.

    (3)客戶端與redis節(jié)點(diǎn)直連,不需要中間proxy.客戶端不需要連接集群所有節(jié)點(diǎn),連接集群中任何一個(gè)可用節(jié)點(diǎn)即可

    (4)redis-cluster把所有的物理節(jié)點(diǎn)映射到[0-16383]slot,cluster 負(fù)責(zé)維護(hù)node<->slot<->value

    2) redis-cluster選舉:容錯(cuò)

    ?

    (1)領(lǐng)著選舉過程是集群中所有master參與,如果半數(shù)以上master節(jié)點(diǎn)與master節(jié)點(diǎn)通信超過(cluster-node-timeout),認(rèn)為當(dāng)前master節(jié)點(diǎn)掛掉.

    (2):什么時(shí)候整個(gè)集群不可用(cluster_state:fail),當(dāng)集群不可用時(shí),所有對集群的操作做都不可用,收到((error)CLUSTERDOWN The cluster is down)錯(cuò)誤

    ? ? a:如果集群任意master掛掉,且當(dāng)前master沒有slave.集群進(jìn)入fail狀態(tài),也可以理解成進(jìn)群的slot映射[0-16383]不完成時(shí)進(jìn)入fail狀態(tài).

    ? ? b:如果進(jìn)群超過半數(shù)以上master掛掉,無論是否有slave集群進(jìn)入fail狀態(tài).

    ?

    ?

    二.Redis集群安裝篇(centos5.8X64系統(tǒng))

    ?

    (要讓集群正常工作至少需要3個(gè)主節(jié)點(diǎn),在這里我們要?jiǎng)?chuàng)建6個(gè)redis節(jié)點(diǎn),其中三個(gè)為主節(jié)點(diǎn),三個(gè)為從節(jié)點(diǎn),對應(yīng)的redis節(jié)點(diǎn)的ip和端口對應(yīng)關(guān)系如下)

    ?

    127.0.0.1:7000

    127.0.0.1:7001

    127.0.0.1:7002

    127.0.0.1:7003

    127.0.0.1:7004

    127.0.0.1:7005

    ?

    1:下載redis。

    官網(wǎng)下載3.0.0版本,之前2.幾的版本不支持集群模式

    下載地址:http://download.redis.io/releases/redis-3.0.2.tar.gz

    ?

    2:上傳服務(wù)器,解壓,編譯

    tar -zxvf redis-3.0.2.tar.gz.tar.gz

    mv redis-3.0.2.tar.gz.tar.gz redis3.0

    cd /usr/local/redis3.0

    make

    make install

    ?

    3:創(chuàng)建集群需要的目錄

    mkdir -p /usr/local/cluster

    cd /usr/local/cluster

    mkdir 7000

    mkdir 7001

    mkdir 7002

    mkdir 7003

    mkdir 7004

    mkdir 7005

    ?

    4:修改配置文件redis.conf

    cp /usr/local/redis3.0/redis.conf? /usr.local/cluster

    vi redis.conf

    ##修改配置文件中的下面選項(xiàng)

    port 7000

    daemonize yes

    cluster-enabled yes

    cluster-config-file nodes.conf

    cluster-node-timeout 5000

    appendonly yes

    ##修改完redis.conf配置文件中的這些配置項(xiàng)之后把這個(gè)配置文件分別拷貝到7000/7001/7002/7003/7004/7005目錄下面

    cp /usr/local/cluster/redis.conf/usr/local/cluster/7000

    cp /usr/local/cluster/redis.conf/usr/local/cluster/7001

    cp /usr/local/cluster/redis.conf /usr/local/cluster/7002

    cp /usr/local/cluster/redis.conf/usr/local/cluster/7003

    cp /usr/local/cluster/redis.conf/usr/local/cluster/7004

    cp /usr/local/cluster/redis.conf/usr/local/cluster/7005

    ?

    ##注意:拷貝完成之后要修改7001/7002/7003/7004/7005目錄下面redis.conf文件中的port參數(shù),分別改為對應(yīng)的文件夾的名稱

    ?

    5:分別啟動這6個(gè)redis實(shí)例

    cd /usr/local/cluster/7000

    redis-server redis.conf

    ?

    cd /usr/local/cluster/7001

    redis-server redis.conf

    ?

    cd /usr/local/cluster/7002

    redis-server redis.conf

    ?

    cd /usr/local/cluster/7003

    redis-server redis.conf

    ?

    cd /usr/local/cluster/7004

    redis-server redis.conf

    ?

    cd /usr/local/cluster/7005

    redis-server redis.conf

    ?

    ?

    ##啟動之后使用命令查看redis的啟動情況ps -ef|grep redis

    如下顯示則說明啟動成功

    ?# ps -ef|grepredis

    root????13703???? 1? 0 10:03 ???????? 00:00:00 redis-server *:7000 [cluster]

    root????14015???? 1? 0 10:04 ???????? 00:00:00 redis-server *:7002 [cluster]

    root????14133???? 1? 0 10:04 ???????? 00:00:00 redis-server *:7003 [cluster]

    root????14172???? 1? 0 10:04 ???????? 00:00:00 redis-server *:7004 [cluster]

    root????14187???? 1? 0 10:04 ???????? 00:00:00 redis-server *:7005 [cluster]

    root????14323???? 1? 0 10:04 ???????? 00:00:00 redis-server *:7001 [cluster]

    6.升級ruby 安裝gem

    ?

    安裝gem 需要ruby的版本在 1.8.7 以上,默認(rèn)的centos5 上都是1.8.5 版本,所以首先你的升級你的ruby

    rpm -ivh http://yum.puppetlabs.com/el/5/products/x86_64/puppetlabs-release-5-6.noarch.rpm

    ?

    yum install ruby ruby-devel rubygems rpm-build

    ?

    檢查 ruby 版本:

    #ruby? -v

    ruby 1.8.7 (2013-06-27 patchlevel 374) [x86_64-linux]

    ?

    是否安裝rubygems

    # rpm -qa|grep ruby

    ruby-rdoc-1.8.7.374-2.el5

    ruby-1.8.7.374-2.el5

    ruby-devel-1.8.7.374-2.el5

    ruby-devel-1.8.7.374-2.el5

    ruby-mode-1.8.5-24.el5

    ruby-irb-1.8.7.374-2.el5

    ruby-libs-1.8.7.374-2.el5

    ruby-libs-1.8.7.374-2.el5

    rubygems-1.3.7-1.el5

    ?

    7.gem 安裝redis ruby 接口

    gem install redis

    8:執(zhí)行redis的創(chuàng)建集群命令創(chuàng)建集群

    #redis-trib.rbcreate子命令構(gòu)建?

    #--replicas 則指定了為Redis Cluster中的每個(gè)Master節(jié)點(diǎn)配備幾個(gè)Slave節(jié)點(diǎn)?

    #節(jié)點(diǎn)角色由順序決定,master之后是slave

    創(chuàng)建方式:

    cd /usr/local/redis3.0/src

    ./redis-trib.rb?create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

    錯(cuò)誤筆記備注:

    ?

    8.1執(zhí)行上面的命令的時(shí)候會報(bào)錯(cuò),因?yàn)槭菆?zhí)行的ruby的腳本,需要ruby的環(huán)境

    錯(cuò)誤內(nèi)容:/usr/bin/env: ruby: No suchfile or directory

    所以需要安裝ruby的環(huán)境,這里推薦使用yum install ruby安裝

    yum install ruby

    ?

    8.2然后再執(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

    8.3再次執(zhí)行第8步的命令,還會報(bào)錯(cuò),提示不能加載redis,是因?yàn)槿鄙?/span>redisruby的接口,使用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 install redis

    ?

    ?

    8.4 再次執(zhí)行第8步的命令,正常執(zhí)行

    輸入yes,然后配置完成。

    注意觀察主從的配置:

    默認(rèn)是前三個(gè)節(jié)點(diǎn) 7000? 7001?7002 是主,

    3個(gè)節(jié)點(diǎn) 7003? 7004?? 7005 是從

    如果是部署在不同的服務(wù)器,請根據(jù)主從分部規(guī)則,分開在不同的服務(wù)器

    ?

    ?

    至此redis集群即搭建成功!

    9:使用redis-cli命令進(jìn)入集群環(huán)境

    redis-cli?-c?-p?7000

    ?

    三.測試篇

    1).檢查集群狀態(tài),

    # /usr/local/redis-3.0.2/src/redis-trib.rb check 127.0.0.1:7000

    Connecting to node 127.0.0.1:7000: OK

    Connecting to node 127.0.0.1:7005: OK

    Connecting to node 127.0.0.1:7002: OK

    Connecting to node 127.0.0.1:7003: OK

    Connecting to node 127.0.0.1:7004: OK

    Connecting to node 127.0.0.1:7001: OK

    >>> Performing Cluster Check (using node 127.0.0.1:7000)

    M: 6bce685c31ed91d5da07048a8e130bd2cf810690 127.0.0.1:7000

    ? ?slots:0-5460 (5461 slots) master

    ? ?1 additional replica(s)

    S: a2ed19aaae15d625ff4279d0d8adfb812db9da29 127.0.0.1:7005

    ? ?slots: (0 slots) slave

    ? ?replicates af47fc62aacfe80257f820626389693e5f19598e

    M: af47fc62aacfe80257f820626389693e5f19598e 127.0.0.1:7002

    ? ?slots:10923-16383 (5461 slots) master

    ? ?1 additional replica(s)

    S: 5addc020d00fcccf8858e908b5a44d90d3c1ef8e 127.0.0.1:7003

    ? ?slots: (0 slots) slave

    ? ?replicates 6bce685c31ed91d5da07048a8e130bd2cf810690

    S: d5278a2bf6cd50fbc171bc5e9898402cf815c0a9 127.0.0.1:7004

    ? ?slots: (0 slots) slave

    ? ?replicates 0a16fe3fab8a468d402071dcea9f13aac28325c2

    M: 0a16fe3fab8a468d402071dcea9f13aac28325c2 127.0.0.1:7001

    ? ?slots:5461-10922 (5462 slots) master

    ? ?1 additional replica(s)

    [OK] All nodes agree about slots configuration.

    >>> Check for open slots...

    >>> Check slots coverage...

    [OK] All 16384 slots covered.



    #redis-trib.rbcheck子命令構(gòu)建?

    #ip:port可以是集群的任意節(jié)點(diǎn)?

    ./redis-trib.rb check ?127.0.0.1:7000

    ?最后輸出如下信息,沒有任何警告或錯(cuò)誤,表示集群啟動成功并處于ok狀態(tài)

    ?

    ?

    2):添加新master節(jié)點(diǎn)

    (1)添加一個(gè)master節(jié)點(diǎn):創(chuàng)建一個(gè)空節(jié)點(diǎn)(empty node),然后將某些slot移動到這個(gè)空節(jié)點(diǎn)上,這個(gè)過程目前需要人工干預(yù)

    a):根據(jù)端口生成配置文件(ps:establish_config.sh是我自己寫的輸出配置腳本)

    ?

    ?

    sh establish_config.sh 6386 >conf/redis-6386.conf?

    ?

    b):啟動節(jié)點(diǎn)

    ?

    ?

    nohup redis-server /opt/redis/conf/redis-6386.conf> /opt/redis/logs/redis-6386.log 2>&1 &?

    ?

    c):加入空節(jié)點(diǎn)到集群

    add-node? 將一個(gè)節(jié)點(diǎn)添加到集群里面,第一個(gè)是新節(jié)點(diǎn)ip:port, 第二個(gè)是任意一個(gè)已存在節(jié)點(diǎn)ip:port

    ?

    ?

    redis-trib.rb add-node 10.10.34.14:638610.10.34.14:6381?

    ?

    node:新節(jié)點(diǎn)沒有包含任何數(shù)據(jù),因?yàn)樗鼪]有包含任何slot。新加入的加點(diǎn)是一個(gè)主節(jié)點(diǎn),當(dāng)集群需要將某個(gè)從節(jié)點(diǎn)升級為新的主節(jié)點(diǎn)時(shí),這個(gè)新節(jié)點(diǎn)不會被選中

    d):為新節(jié)點(diǎn)分配slot

    ?

    ?

    redis-trib.rb reshard 10.10.34.14:6386?

    #根據(jù)提示選擇要遷移的slot數(shù)量(ps:這里選擇500)?

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

    #選擇要接受這些slotnode-id?

    What is the receiving node ID?f51e26b5d5ff74f85341f06f28f125b7254e61bf?

    #選擇slot來源:?

    #all表示從所有的master重新分配,?

    #或者數(shù)據(jù)要提取slotmaster節(jié)點(diǎn)id,最后用done結(jié)束?

    Please enter all the source node IDs.?

    ? Type 'all' touse 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以及對應(yīng)的數(shù)據(jù).?

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

    #結(jié)束?

    3):添加新的slave節(jié)點(diǎn)

    a):前三步操作同添加master一樣

    b)第四步:redis-cli連接上新節(jié)點(diǎn)shell,輸入命令:cluster replicate 對應(yīng)masternode-id

    ?

    ?

    cluster replicate 2b9ebcbd627ff0fd7a7bbcc5332fb09e72788835?

    ?

    note:在線添加slave 時(shí),需要dump整個(gè)master進(jìn)程,并傳遞到slave,再由 slave加載rdb文件到內(nèi)存,rdb傳輸過程中Master可能無法提供服務(wù),整個(gè)過程消耗大量io,小心操作.

    例如本次添加slave操作產(chǎn)生的rdb文件

    ?

    ?

    -rw-r--r-- 1 root root?34946 Apr 17 18:23 dump-6386.rdb?

    -rw-r--r-- 1 root root?34946 Apr 17 18:23 dump-7386.rdb?

    ?

    4):在線reshard 數(shù)據(jù):

    對于負(fù)載/數(shù)據(jù)均勻的情況,可以在線reshard slot來解決,方法與添加新masterreshard一樣,只是需要reshardmaster節(jié)點(diǎn)是老節(jié)點(diǎn).

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

    ?

    #redis-trib del-node ip:port '<node-id>'?

    redis-trib.rb del-node 10.10.34.14:7386'c7ee2fca17cb79fe3c9822ced1d4f6c5e169e378'?

    ?6):刪除一個(gè)master節(jié)點(diǎn)

    ?

    a):刪除master節(jié)點(diǎn)之前首先要使用reshard移除master的全部slot,然后再刪除當(dāng)前節(jié)點(diǎn)(目前只能把被刪除

    masterslot遷移到一個(gè)節(jié)點(diǎn)上)

    ?

    ?

    #10.10.34.14:6386當(dāng)前master遷移到10.10.34.14:6380?

    redis-trib.rb reshard 10.10.34.14:6380?

    #根據(jù)提示選擇要遷移的slot數(shù)量(ps:這里選擇500)?

    How many slots do you want to move (from 1 to 16384)?500(被刪除master的所有slot數(shù)量)?

    #選擇要接受這些slotnode-id(10.10.34.14:6380)?

    What is the receiving node ID?c4a31c852f81686f6ed8bcd6d1b13accdc947fd2 (ps:10.10.34.14:6380node-id)?

    Please enter all the source node IDs.?

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

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

    Source node#1:f51e26b5d5ff74f85341f06f28f125b7254e61bf(被刪除masternode-id)?

    Source node #2:done?

    #打印被移動的slot后,輸入yes開始移動slot以及對應(yīng)的數(shù)據(jù).?

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

    ?

    b):刪除空master節(jié)點(diǎn)

    ?

    ?

    redis-trib.rb del-node 10.10.34.14:6386'f51e26b5d5ff74f85341f06f28f125b7254e61bf'?

    四:redis cluster 客戶端(Jedis)

    1:客戶端基本操作使用

    ?

    ?

    <span style="color: #333333; font-family:Arial, sans-serif;"><span style="color: #333333; font-family:Arial, sans-serif;"> private static BinaryJedisCluster jc;?

    ? static {?

    ?????? //只給集群里一個(gè)實(shí)例就可以?

    ???????Set<HostAndPort> jedisClusterNodes = newHashSet<HostAndPort>();?

    ???????jedisClusterNodes.add(new HostAndPort("10.10.34.14",6380));?

    ???????jedisClusterNodes.add(new HostAndPort("10.10.34.14",6381));?

    ???????jedisClusterNodes.add(new HostAndPort("10.10.34.14",6382));?

    ??????? jedisClusterNodes.add(newHostAndPort("10.10.34.14", 6383));?

    ???????jedisClusterNodes.add(new HostAndPort("10.10.34.14",6384));?

    ???????jedisClusterNodes.add(new HostAndPort("10.10.34.14",7380));?

    ???????jedisClusterNodes.add(new HostAndPort("10.10.34.14",7381));?

    ???????jedisClusterNodes.add(new HostAndPort("10.10.34.14",7382));?

    ???????jedisClusterNodes.add(new HostAndPort("10.10.34.14",7383));?

    ???????jedisClusterNodes.add(new HostAndPort("10.10.34.14",7384));?

    ??????? jc = newBinaryJedisCluster(jedisClusterNodes);?

    ??? }?

    @Test?

    ??? public voidtestBenchRedisSet() throws Exception {?

    ??????? finalStopwatch stopwatch = new Stopwatch();?

    ??????? Listlist = buildBlogVideos();?

    ??????? for (inti = 0; i < 1000; i++) {?

    ???????????String key = "key:" + i;?

    ???????????stopwatch.start();?

    ???????????byte[] bytes1 = protostuffSerializer.serialize(list);?

    ???????????jc.setex(key, 60 * 60, bytes1);?

    ???????????stopwatch.stop();?

    ??????? }?

    ??????? System.out.println("time="+ stopwatch.toString());?

    ???}</span></span>?

    2:jedis客戶端的坑.

    1)cluster環(huán)境下redisslave不接受任何讀寫操作,

    2)client端不支持keys批量操作,不支持select dbNum操作,只有一個(gè)db:select 0

    3)JedisCluster info()等單機(jī)函數(shù)無法調(diào)用,返回(No way to dispatch thiscommand to Redis Cluster)錯(cuò)誤,.

    4)JedisCluster 沒有針對byte[]API,需要自己擴(kuò)展(附件是我加的基于byte[]BinaryJedisCluster? api)

    ?

    ?


    轉(zhuǎn)載于:https://blog.51cto.com/2574526/1658806

    《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的redis3.0.2 分布式集群安装详细步骤的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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