Redis的主从复制与集群配置实践

本文详细介绍Redis集群的搭建过程及动态管理方法,包括配置、编译安装、集群创建与测试等关键步骤,并提供了添加和删除节点的具体操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于Redis的主从复制  -- 在slave的配置文件中指定master的ip和端口即可 

1.主从复制 (Master-slaves)  --- master可以读写,slaves可以是多个,只读

  配置:
    1.slave的配置文件中加入如下配置:
                             slaveof 192.168.1.1 6379 #制定master的ip和端口
    2.启动slave Redis
                             redis-server /etc/redis/redis.conf           --- 通过指定redis的配置文件,启动Redis服务
                             
    3.特别注意:
            Redis的配置文件redis.conf可以改为其他的名字
            配置文件中可以设置Redis服务的端口,和主从信息                       


Redis的集群        

                               --- Redis 3.0之后,至少需要3(Master)+3(Slave)才能建立集群,Redis建立集群后,会自动的分配主从-Master和Slave,

                                         为了保证安全每个Master节点可以做主从复制,进行纵向集群


1、源码下载,make
2、新建6个instance,3个master,3个slave;
3、新建实例之前要改一下redis.conf的内容,先改端口号,再改下面的cluster配置项     
   
        参考:
         redis3.0.0 集群安装详细步骤:http://blog.youkuaiyun.com/xu470438000/article/details/42971091
        
        建立Redis集群的步骤:-- 需要依赖Ruby环境
        1.Linux下需要的环境,gcc, ruby,yum,rubygems, redis
               1.安装gcc 
                       sudo apt-get install gcc
               2.安装ruby和yum
                       sudo apt-get install ruby 和 yum
               3.安装rubygems  -- 使用 yum安装
                       yum install rubygems
               4.使用gem安装redis
                       gem install redis
                               
        2.下载redis的编译包或直接安装,放到指定目录中    --- 要想搭建集群,必须在编译后生成  二进制文件: redis-trib.rb
               tax xvf tar xvf redis-3.0.1.tar.gz
               make
 
                           注意:        安装报错 error: jemalloc/jemalloc.h: No such file or directory解决方法
                                              
                                               使用 make MALLOC=libc   代替 make  对redis进行编译
                                               
                    eg:
                       $ make MALLOC=libc
        
        3.更改redis配置文件    -- redis.conf
                
                                       注意:默认redis端口是 
                      port 6379
                                       修改内容如下:
                      cluster-enabled yes
                      cluster-config-file nodes-6379.conf
                      cluster-node-timeout 5000
                      appendonly yes
              
        
        4.完成以上操作后,将Redis文件夹复制5份到其他目录,并在没份中更改其redis配置 redis.conf,只需要更改端口即可
            
             复制到其他文件夹下
          
          eg:
             cp -r redis1 redis2
    
             eg:
                redis1    -- port 6379
                redis2    -- port 6381
                redis3    -- port 6382
                redis4    -- port 6385
                redis5    -- port 6386
                redis6    -- port 6387
                
        5.分别启动每个Redis服务:   ./redis-server ../redis.conf        -- 按照指定配置文件,启动Redis服务
        
                             注意:如果是使用apt-get install 方式安装的Redis,则只需要复制多份redis.conf,更改Redis端口后, 分别安装配置文件启动Redis即可
                        eg: 
                           redis-server /home/develop/redis/redis1.conf
                           redis-server /home/develop/redis/redis2.conf
                           ...
                           redis-server /home/develop/redis/redis5.conf
                           redis-server /home/develop/redis/redis6.conf
                           
        6.启动完各个Redis服务后,开始建立集群:
                           找到编译后的src目录下的                redis-trib.rb,执行集群命令:
          
            ./redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6385 127.0.0.1:6386 127.0.0.1:6387
                       
                       可能会询问是否保存设置
                        Can I set the above configuration? (type 'yes' to accept): 
                        回答yes
                        再输出一连串信息后,会显示OK
                        [OK] All 16384 slots covered.
                        这样redis-cluster集群就启动了
                                 
                                 
        7.连接Redis集群     注意: 必须使用参数  -c  表示使用集群
        
                       $> redis-cli -c -p 6379
      
      1. 查看集群状况:
                       $> cluster info
      2.测试存值取值:
                    127.0.0.1:6379> set foo bar
                    -> Redirected to slot [12182] located at 127.0.0.1:6381
                    OK
                    127.0.0.1:6381> set hello world
                    -> Redirected to slot [866] located at 127.0.0.1:6379
                    OK
                    127.0.0.1:6379> get foo
                    -> Redirected to slot [12182] located at 127.0.0.1:6381
                    "bar"
                    127.0.0.1:6381> get hello
                    -> Redirected to slot [866] located at 127.0.0.1:6379
                    "world"    



结果验证

配置正确的Redis集群:
                develop@ubuntu14-dev3:~/redis/redis/redis1/redis-3.0.1/src$ sudo ./redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6385 127.0.0.1:6386 127.0.0.1:6387
                >>> Creating cluster
                Connecting to node 127.0.0.1:6379: OK
                Connecting to node 127.0.0.1:6381: OK
                Connecting to node 127.0.0.1:6382: OK
                Connecting to node 127.0.0.1:6385: OK
                Connecting to node 127.0.0.1:6386: OK
                Connecting to node 127.0.0.1:6387: OK
                >>> Performing hash slots allocation on 6 nodes...
                Using 3 masters:
                127.0.0.1:6379
                127.0.0.1:6381
                127.0.0.1:6382
                Adding replica 127.0.0.1:6385 to 127.0.0.1:6379
                Adding replica 127.0.0.1:6386 to 127.0.0.1:6381
                Adding replica 127.0.0.1:6387 to 127.0.0.1:6382
                M: dcb32d4581552facd6dd68ae7d8a0fa9a058b980 127.0.0.1:6379
                   slots:0-5460 (5461 slots) master
                M: f53789853498701a164984187594745d532a191b 127.0.0.1:6381
                   slots:5461-10922 (5462 slots) master
                M: 5d9495f36c8a3b3b2a717cfd948a237ddec85eec 127.0.0.1:6382
                   slots:10923-16383 (5461 slots) master
                S: 052062e69da1b4d467cd102037e287f3091d15df 127.0.0.1:6385
                   replicates dcb32d4581552facd6dd68ae7d8a0fa9a058b980
                S: d97796e6c0f0f858c4db807d490483cbb1954bf7 127.0.0.1:6386
                   replicates f53789853498701a164984187594745d532a191b
                S: c0335c2de4b471d23da87c6a77a9d554b11e92c0 127.0.0.1:6387
                   replicates 5d9495f36c8a3b3b2a717cfd948a237ddec85eec
                Can I set the above configuration? (type 'yes' to accept): yes
                >>> Nodes configuration updated
                >>> Assign a different config epoch to each node
                >>> Sending CLUSTER MEET messages to join the cluster
                Waiting for the cluster to join...
                >>> Performing Cluster Check (using node 127.0.0.1:6379)
                M: dcb32d4581552facd6dd68ae7d8a0fa9a058b980 127.0.0.1:6379
                   slots:0-5460 (5461 slots) master
                M: f53789853498701a164984187594745d532a191b 127.0.0.1:6381
                   slots:5461-10922 (5462 slots) master
                M: 5d9495f36c8a3b3b2a717cfd948a237ddec85eec 127.0.0.1:6382
                   slots:10923-16383 (5461 slots) master
                M: 052062e69da1b4d467cd102037e287f3091d15df 127.0.0.1:6385
                   slots: (0 slots) master
                   replicates dcb32d4581552facd6dd68ae7d8a0fa9a058b980
                M: d97796e6c0f0f858c4db807d490483cbb1954bf7 127.0.0.1:6386
                   slots: (0 slots) master
                   replicates f53789853498701a164984187594745d532a191b
                M: c0335c2de4b471d23da87c6a77a9d554b11e92c0 127.0.0.1:6387
                   slots: (0 slots) master
                   replicates 5d9495f36c8a3b3b2a717cfd948a237ddec85eec
                [OK] All nodes agree about slots configuration.
                >>> Check for open slots...
                >>> Check slots coverage...
                [OK] All 16384 slots covered.



测试集群:  --- 特别注意参数: -c   只有加上这个参数才能使用集群

        $ redis-cli -c -p 6379
        127.0.0.1:6379> keys *
        (empty list or set)
        127.0.0.1:6379> set a aa                     #a存储在节点6382上
        -> Redirected to slot [15495] located at 127.0.0.1:6382
        OK
        127.0.0.1:6379> set b bb                     #b存储在节点6379上
        -> Redirected to slot [3300] located at 127.0.0.1:6379
        OK
        127.0.0.1:6379> set c cc                     #a存储在节点6381上
        -> Redirected to slot [7365] located at 127.0.0.1:6381
        OK
        127.0.0.1:6379> set d dd                     #d和e存储在节点6382上
        -> Redirected to slot [11298] located at 127.0.0.1:6382
        OK
        127.0.0.1:6379> set e ee
        OK
        127.0.0.1:6379> set f ff                     #f存储在节点6379上
        -> Redirected to slot [3168] located at 127.0.0.1:6379
        OK
        127.0.0.1:6379> keys *
        1) "f"
        2) "b"
        127.0.0.1:6379> get c                       #从节点6381上,取c的值
        -> Redirected to slot [7365] located at 127.0.0.1:6381
        "cc" 



Redis动态添加和删除节点

Redis集群添加节点

1:首先把需要添加的节点启动

cd /usr/local/cluster/

mkdir 7006

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

cd /usr/local/cluster/7006/

vi redis.conf

##修改redis.conf中的port参数的值为7006

redis-server redis.conf

2:执行以下命令,将这个新节点添加到集群中

cd /usr/local/redis3.0/src/

./redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000

 

3:执行命令redis-cli -c -p 7000 cluster nodes,查看刚才新增的节点

 

4:增加了新的节点之后,这个新的节点可以成为主节点或者是从节点

4.1 把这个节点变成主节点,使用redis-trib程序,将集群中的某些哈希槽移动到新节点里面, 这个新节点就成为真正的主节点了。

执行下面的命令对集群中的哈希槽进行移动

cd /usr/local/redis3.0/src

./redis-trib.rb reshard 127.0.0.1:7000

系统会提示我们要移动多少哈希槽,这里移动1000

 

然后还需要指定把这些哈希槽转移到哪个节点上,

 

输入我们刚才新增的节点的ID

f32dc088c881a6b930474fc5b52832ba2ff71899

然后需要我们指定转移哪几个几点的哈希槽

 

输入all 表示从所有的主节点中随机转移,凑够1000个哈希槽

然后再输入yesredis集群就开始分配哈希槽了。

至此,一个新的主节点就添加完成了,执行命令查看现在的集群中节点的状态

redis-cli -c -p 7000 cluster nodes

 

 

4.2:把这个节点变成从节点

前面我们已经把这个新节点添加到集群中了,现在我们要让新节点成为127.0.0.1:7001的从节点,只需要执行下面的命令就可以了,命令后面的节点ID就是127.0.0.1:7001的节点ID

redis-cli -c -p 7006 cluster replicate 0b00721a509444db793d28448d8f02168b94bd38

使用下面命令来确认一下127.0.0.1:7006是否已经成为127.0.0.1:7001的从节点

 redis-cli -p 7000 cluster nodes | grep slave | grep 0b00721a509444db793d28448d8f02168b94bd38

看到下面图片中的情况就表示添加成功

 

 

 

 

Redis集群删除节点

1:如果删除的节点是主节点,这里我们删除127.0.0.1:7006节点,这个节点有1000个哈希槽

首先要把节点中的哈希槽转移到其他节点中,执行下面的命令

cd /usr/local/redis3.0/src

./redis-trib.rb reshard 127.0.0.1:7000

系统会提示我们要移动多少哈希槽,这里移动1000个,因为127.0.0.1:7006节点有1000个哈希槽

然后系统提示我们输入要接收这些哈希槽的节点的ID,这里使用127.0.0.1:7001的节点ID

然后要我们选择从那些节点中转出哈希槽,这里一定要输入127.0.0.1:7006这个节点的ID,最后输入 done  表示输入完毕

最后一步,使用下面的命令把这个节点删除

cd /usr/local/redis3.0/src/

./redis-trib.rb del-node 127.0.0.1:7006 127.0.0.1:7006

2:如果节点是从节点的,直接使用下面的命令删除即可。

cd /usr/local/redis3.0/src/

./redis-trib.rb del-node 127.0.0.1:7006 127.0.0.1:7006



                    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值