Redis的主从复制与集群配置实践
2015-05-26 15:06
736 查看
关于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.csdn.net/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 |
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 |
然后还需要指定把这些哈希槽转移到哪个节点上,
输入我们刚才新增的节点的ID
f32dc088c881a6b930474fc5b52832ba2ff71899
然后需要我们指定转移哪几个几点的哈希槽
输入all 表示从所有的主节点中随机转移,凑够1000个哈希槽
然后再输入yes,redis集群就开始分配哈希槽了。
至此,一个新的主节点就添加完成了,执行命令查看现在的集群中节点的状态
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 |
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 |
然后系统提示我们输入要接收这些哈希槽的节点的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 |
cd /usr/local/redis3.0/src/ ./redis-trib.rb del-node 127.0.0.1:7006 127.0.0.1:7006 |
相关文章推荐
- Redis主从复制和集群配置
- Redis主从复制和集群配置
- Redis主从复制和集群配置
- Redis集群方案之Twemproxy+HAProxy+Keepalived+Sentinel+主从复制(待实践)
- Redis主从复制和集群配置
- Redis主从复制和集群配置
- Redis主从复制和集群配置
- Redis主从复制和集群配置
- Redis主从复制和集群配置
- Redis主从复制和集群配置
- Redis进阶实践之十 Redis主从复制的集群模式
- Redis主从复制和集群配置
- Redis主从复制和集群配置
- Redis进阶实践之十 Redis主从复制的集群模式
- Redis集群主从复制(一主两从)搭建配置教程【Windows环境】
- Redis主从复制和集群配置
- Redis主从复制和集群配置
- Redis主从复制和集群配置
- Redis主从复制和集群配置系列之五
- 【NoSql】Redis实践篇-安全性与主从复制配置(二)