Redis集群主备模式部署
来源:互联网 发布:清洁pcb的玻璃笔淘宝 编辑:程序博客网 时间:2024/06/05 07:42
网上有很多用Ruby安装Redis-cluster的文章,但是在实际环境下不想安装Ruby,所以本文主要介绍了用Redis命令部署Redis集群,并且为集群中每一个master实例增加一个slave实例。
0 编译安装
$ wget http://download.redis.io/releases/redis-3.0.3.tar.gz$ tar xzvf redis-3.0.3.tar.gz$ cd redis-3.0.3$ make all$ make install # use sudo user.
也可以去github下载最新代码:https://github.com/antirez/redis.git
1 创建目录
$ mkdir 7000 7001 7002 7003
2 修改如下配置redis.conf
port 7000 #7000修改为对应的7001、7002、7003daemonize yescluster-enabled yescluster-config-file nodes-7000.conf #7000修改为对应的7001、7002、7003luster-node-timeout 15000
将修改好的配置文件放到对用的目录下:./7000, ./7001, ./7002, ./7003 。
3 启动redis服务
$ cd 7000$ redis-server ./redis.conf $ cd ../7001$ redis-server ./redis.conf$ cd ../7002$ redis-server ./redis.conf$ cd ../7003$ redis-server ./redis.conf$ # 检查redis启动情况$ ps -ef | grep redis | grep -v grepcjf 5834 1 0 16:33 ? 00:00:00 redis-server 127.0.0.1:7000 [cluster]cjf 5839 1 0 16:34 ? 00:00:00 redis-server 127.0.0.1:7001 [cluster]cjf 5843 1 0 16:34 ? 00:00:00 redis-server 127.0.0.1:7002 [cluster]cjf 5847 1 0 16:34 ? 00:00:00 redis-server 127.0.0.1:7003 [cluster]
4 将redis实例增加到集群中
主要是通过用cluster meet <host> <port>
给集群增加节点,如下:
$ redis-cli -p 7000127.0.0.1:7000> cluster nodes14d4071b97121e703e44bbc834f42d1b31c8ea95 :7000 myself,master - 0 0 0 connected127.0.0.1:7000> cluster meet 127.0.0.1 7001OK127.0.0.1:7000> cluster meet 127.0.0.1 7002OK127.0.0.1:7000> cluster meet 127.0.0.1 7003OK127.0.0.1:7000> cluster nodes75334aae3ced44cf0e8416691aeef8249e7a0621 127.0.0.1:7002 master - 0 1438850262990 0 connected14d4071b97121e703e44bbc834f42d1b31c8ea95 127.0.0.1:7000 myself,master - 0 0 1 connected8b721ff1ac2e383ffcbcf133d502c6957f8df713 127.0.0.1:7003 master - 0 1438850265007 0 connected2875f2155e3214d7950dd5916f5ecf5edd3d9fee 127.0.0.1:7001 master - 0 1438850263998 2 connected127.0.0.1:7000>
如果cluster nodes
出现上面的四行记录就表示meet
成功,标识myself的是客户端正在连接的redis实例。
可以通过cluster forget
清除集群中的某个实例。
5 分配slots
redis-cluster总共有16384个槽位(0-16383),按如下方式修改槽位:
$ cat 7000/nodes-7000.conf #分配slots:0-4095(注意127.0.0.1:7000对应的行尾)75334aae3ced44cf0e8416691aeef8249e7a0621 127.0.0.1:7002 master - 0 1438850266016 3 connected14d4071b97121e703e44bbc834f42d1b31c8ea95 127.0.0.1:7000 myself,master - 0 0 1 connected 0-40958b721ff1ac2e383ffcbcf133d502c6957f8df713 127.0.0.1:7003 master - 0 1438850265007 0 connected2875f2155e3214d7950dd5916f5ecf5edd3d9fee 127.0.0.1:7001 master - 0 1438850263998 2 connectedvars currentEpoch 3 lastVoteEpoch 0$ $ cat 7001/nodes-7001.conf #分配slots:4096-8191(注意127.0.0.1:7001对应的行尾)75334aae3ced44cf0e8416691aeef8249e7a0621 127.0.0.1:7002 master - 0 1438850265714 3 connected2875f2155e3214d7950dd5916f5ecf5edd3d9fee 127.0.0.1:7001 myself,master - 0 0 2 connected 4096-81918b721ff1ac2e383ffcbcf133d502c6957f8df713 127.0.0.1:7003 master - 0 1438850264705 0 connected14d4071b97121e703e44bbc834f42d1b31c8ea95 127.0.0.1:7000 master - 0 1438850263695 1 connectedvars currentEpoch 3 lastVoteEpoch 0$ $ cat 7002/nodes-7002.conf #分配slots:8192-12287(注意127.0.0.1:7002对应的行尾)2875f2155e3214d7950dd5916f5ecf5edd3d9fee 127.0.0.1:7001 master - 0 1438850262787 2 connected14d4071b97121e703e44bbc834f42d1b31c8ea95 127.0.0.1:7000 master - 0 1438850263796 1 connected75334aae3ced44cf0e8416691aeef8249e7a0621 127.0.0.1:7002 myself,master - 0 0 3 connected 8192-122878b721ff1ac2e383ffcbcf133d502c6957f8df713 127.0.0.1:7003 master - 0 1438850264806 0 connectedvars currentEpoch 3 lastVoteEpoch 0$ $ cat 7003/nodes-7003.conf #分配slots:12288-16383(注意127.0.0.1:7003对应的行尾)2875f2155e3214d7950dd5916f5ecf5edd3d9fee 127.0.0.1:7001 master - 0 1438850264808 2 connected75334aae3ced44cf0e8416691aeef8249e7a0621 127.0.0.1:7002 master - 0 1438850265819 3 connected14d4071b97121e703e44bbc834f42d1b31c8ea95 127.0.0.1:7000 master - 0 1438850263798 1 connected8b721ff1ac2e383ffcbcf133d502c6957f8df713 127.0.0.1:7003 myself,master - 0 0 0 connected 12288-16383vars currentEpoch 3 lastVoteEpoch 0$
配置修改成功之后,重新启动redis:
$ # 停止redis$ ps -ef|grep rediscjf 5834 1 0 16:33 ? 00:00:00 redis-server 127.0.0.1:7000 [cluster]cjf 5839 1 0 16:34 ? 00:00:00 redis-server 127.0.0.1:7001 [cluster]cjf 5843 1 0 16:34 ? 00:00:00 redis-server 127.0.0.1:7002 [cluster]cjf 5847 1 0 16:34 ? 00:00:00 redis-server 127.0.0.1:7003 [cluster]cjf 5921 5252 0 16:46 pts/2 00:00:00 grep redis$ kill 5834 5839 5843 5847$$ # 重新启动redis$ cd 7000$ redis-server ./redis.conf $ cd ../7001$ redis-server ./redis.conf $ cd ../7002$ redis-server ./redis.conf $ cd ../7003$ redis-server ./redis.conf $$ # 检查分配的slots是否生效:$ redis-cli -p 7000127.0.0.1:7000> cluster nodes8b721ff1ac2e383ffcbcf133d502c6957f8df713 127.0.0.1:7003 master - 0 1438850861230 0 connected 12288-1638314d4071b97121e703e44bbc834f42d1b31c8ea95 127.0.0.1:7000 myself,master - 0 0 1 connected 0-40952875f2155e3214d7950dd5916f5ecf5edd3d9fee 127.0.0.1:7001 master - 0 1438850860221 2 connected 4096-819175334aae3ced44cf0e8416691aeef8249e7a0621 127.0.0.1:7002 master - 0 1438850859209 3 connected 8192-12287127.0.0.1:7000> 127.0.0.1:7000> cluster infocluster_state:okcluster_slots_assigned:16384cluster_slots_ok:16384cluster_slots_pfail:0cluster_slots_fail:0cluster_known_nodes:4cluster_size:4cluster_current_epoch:3cluster_my_epoch:1cluster_stats_messages_sent:416cluster_stats_messages_received:73127.0.0.1:7000>
当前情况下,redis-cluster部署完毕。
6 给master节点配一个slave节点
在前面,我们配置好了redis的集群并分配了slots,集群已经可用了,集群中现在有4个master节点,所有写入这个集群中的数据都会分片到这4个redis实例中,但是现在存在这样一个问题:如果某个master节点挂掉的话,那么这个集群就不可用了,所以我们现在为集群中的4个master实例各启一个slave实例做主备。
$ mkdir 8000 8001 8002 8003$ cp 7000/redis.conf 8000$ cp 7000/redis.conf 8001$ cp 7000/redis.conf 8002$ cp 7000/redis.conf 8003
将redis.conf中下面两个配置修改为对应的端口:
port 800Xcluster-config-file nodes-800X.conf
然后启动这4个实例:
$ cd 8000/ $ redis-server ./redis.conf $ cd ../8001$ redis-server ./redis.conf $ cd ../8002$ redis-server ./redis.conf $ cd ../8003$ redis-server ./redis.conf $ $ ps -ef|grep rediscjf 5928 1 0 16:47 ? 00:00:02 redis-server 127.0.0.1:7000 [cluster]cjf 5933 1 0 16:47 ? 00:00:02 redis-server 127.0.0.1:7001 [cluster]cjf 5937 1 0 16:47 ? 00:00:02 redis-server 127.0.0.1:7002 [cluster]cjf 5941 1 0 16:47 ? 00:00:02 redis-server 127.0.0.1:7003 [cluster]cjf 6136 1 0 17:20 ? 00:00:00 redis-server 127.0.0.1:8000 [cluster]cjf 6141 1 0 17:20 ? 00:00:00 redis-server 127.0.0.1:8001 [cluster]cjf 6145 1 0 17:21 ? 00:00:00 redis-server 127.0.0.1:8002 [cluster]cjf 6150 1 0 17:21 ? 00:00:00 redis-server 127.0.0.1:8003 [cluster]cjf 6157 5252 0 17:21 pts/2 00:00:00 grep redis[cjf@host1 8003]$
再将这4个redis实例cluster meet
到集群中:
$ redis-cli -p 7000127.0.0.1:7000> cluster nodes8b721ff1ac2e383ffcbcf133d502c6957f8df713 127.0.0.1:7003 master - 0 1438852991236 0 connected 12288-1638314d4071b97121e703e44bbc834f42d1b31c8ea95 127.0.0.1:7000 myself,master - 0 0 1 connected 0-40952875f2155e3214d7950dd5916f5ecf5edd3d9fee 127.0.0.1:7001 master - 0 1438852992245 2 connected 4096-819175334aae3ced44cf0e8416691aeef8249e7a0621 127.0.0.1:7002 master - 0 1438852993255 3 connected 8192-12287127.0.0.1:7000> cluster meet 127.0.0.1 8000OK127.0.0.1:7000> cluster meet 127.0.0.1 8001OK127.0.0.1:7000> cluster meet 127.0.0.1 8002OK127.0.0.1:7000> cluster meet 127.0.0.1 8003OK127.0.0.1:7000> cluster nodes79c41ed9454f686fe7c35e0a6c505732b951b226 127.0.0.1:8000 master - 0 1438853011586 4 connected14d4071b97121e703e44bbc834f42d1b31c8ea95 127.0.0.1:7000 myself,master - 0 0 1 connected 0-40958b721ff1ac2e383ffcbcf133d502c6957f8df713 127.0.0.1:7003 master - 0 1438853014613 7 connected 12288-16383833bb1d37b22b2055d2281a5f2dad3d869195f0d 127.0.0.1:8002 master - 0 1438853012596 6 connected0d03ff5e90fa369c5c39c9415db39f711b943494 127.0.0.1:8001 master - 0 1438853013605 5 connected75334aae3ced44cf0e8416691aeef8249e7a0621 127.0.0.1:7002 master - 0 1438853010578 3 connected 8192-12287a34eb2aa56f309793d78ba2f69141be268a23659 127.0.0.1:8003 master - 0 1438853012092 0 connected2875f2155e3214d7950dd5916f5ecf5edd3d9fee 127.0.0.1:7001 master - 0 1438853009564 2 connected 4096-8191127.0.0.1:7000>
最后用cluster replicate <nodeid>
将8000、8001、8002、8003分别挂到7000、7001、7002、7003上:
$ redis-cli -p 8000127.0.0.1:8000> cluster replicate 14d4071b97121e703e44bbc834f42d1b31c8ea95OK127.0.0.1:8000> $ redis-cli -p 8001127.0.0.1:8001> cluster replicate 2875f2155e3214d7950dd5916f5ecf5edd3d9feeOK127.0.0.1:8001> $ redis-cli -p 8002127.0.0.1:8002> cluster replicate 75334aae3ced44cf0e8416691aeef8249e7a0621OK127.0.0.1:8002> $ redis-cli -p 8003127.0.0.1:8003> cluster replicate 8b721ff1ac2e383ffcbcf133d502c6957f8df713OK127.0.0.1:8003> cluster nodes14d4071b97121e703e44bbc834f42d1b31c8ea95 127.0.0.1:7000 master - 0 1438853245955 1 connected 0-40958b721ff1ac2e383ffcbcf133d502c6957f8df713 127.0.0.1:7003 master - 0 1438853242927 7 connected 12288-163832875f2155e3214d7950dd5916f5ecf5edd3d9fee 127.0.0.1:7001 master - 0 1438853242423 2 connected 4096-8191833bb1d37b22b2055d2281a5f2dad3d869195f0d 127.0.0.1:8002 slave 75334aae3ced44cf0e8416691aeef8249e7a0621 0 1438853245955 6 connecteda34eb2aa56f309793d78ba2f69141be268a23659 127.0.0.1:8003 myself,slave 8b721ff1ac2e383ffcbcf133d502c6957f8df713 0 0 0 connected0d03ff5e90fa369c5c39c9415db39f711b943494 127.0.0.1:8001 slave 2875f2155e3214d7950dd5916f5ecf5edd3d9fee 0 1438853241925 5 connected79c41ed9454f686fe7c35e0a6c505732b951b226 127.0.0.1:8000 slave 14d4071b97121e703e44bbc834f42d1b31c8ea95 0 1438853244945 4 connected75334aae3ced44cf0e8416691aeef8249e7a0621 127.0.0.1:7002 master - 0 1438853243935 3 connected 8192-12287127.0.0.1:8003>
如上,配置成功。
附录:常用的Redis-cluster命令
#### 集群(cluster)CLUSTER INFO 打印集群的信息 CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。 #### 节点(node)CLUSTER MEET <ip> <port> 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。 CLUSTER FORGET <node_id> 从集群中移除 node_id 指定的节点。 CLUSTER REPLICATE <node_id> 将当前节点设置为 node_id 指定的节点的从节点。 CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。 #### 槽(slot) CLUSTER ADDSLOTS <slot> [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。 CLUSTER DELSLOTS <slot> [slot ...] 移除一个或多个槽对当前节点的指派。 CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。 CLUSTER SETSLOT <slot> NODE <node_id> 将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。 CLUSTER SETSLOT <slot> MIGRATING <node_id> 将本节点的槽 slot 迁移到 node_id 指定的节点中。 CLUSTER SETSLOT <slot> IMPORTING <node_id> 从 node_id 指定的节点中导入槽 slot 到本节点。 CLUSTER SETSLOT <slot> STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。 #### 键(key)CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。 CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量。 CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 个 slot 槽中的键。
ref:http://www.cnblogs.com/tankaixiong/articles/4022646.html
- Redis集群主备模式部署
- Redis集群主备模式部署
- Redis集群安装部署
- Redis集群部署详细
- Redis集群部署文档
- Redis集群部署
- redis集群&主从部署
- redis集群&主从部署
- redis集群部署
- redis集群部署
- redis集群部署搭建
- Redis 集群部署
- redis集群部署
- Redis集群部署
- Redis集群部署3.0
- Redis 集群部署
- Redis linux集群部署
- redis集群部署
- Android中Service的本质是什么?
- iOS 旋转动画
- unity AssetBundle的资源管理
- 公用方法Store
- 浏览器 猛犸
- Redis集群主备模式部署
- 工具资源网站
- 短信验证
- 跳跃表 C#
- poj-1094 Sorting It All Out
- bzoj 1030
- VB-控件注册 - 利用资源文件将dll、ocx打包进exe文件
- HDU 5355 Cake
- MUI-ActionSheet动作菜单