Redis 集群部署
一、下载所需软件包
redis
二、部署redis(略,见另外一篇博文)
三、安装ruby
解压、编译、安装
tar -xvf ruby-2.5.1.tar.gz
./configure --prefix=/opt/ruby
make && make install
添加环境变量
echo 'export PATH=$PATH:/opt/ruby-2.5.5/bin' >> /etc/profile
四、安装配置相关组件
mkdir -pv /opt/redis-4.0.6/redis-cluster
cp /opt/redis-4.0.6/src/redis-trib.rb /opt/redis-4.0.6/redis-cluster
cp /opt/redis-4.0.0.gem /opt/redis-4.0.6/redis-cluster
gem install redis-4.0.0.gem
【如果有报错:需要安装zlib yum -y install zlib zlib-devel】
①zlib配置
ruby extconf.rb //成功会出现creating Makefile
【如果没有出现creating Makefile,执行命令 ruby extconf.rb --with-zlib-dir=zlib的目录】
将 zlib.o: $(top_srcdir)/include/ruby.h 修改为 zlib.o: ../../include/ruby.h
make
make install
ruby extconf.rb //成功会出现creating Makefile
【如果有报错 需要安装ssl:yum install -y openssl openssl-devel】
将所有的$(top_srcdir)修改为 ../..($(top_srcdir)不止一个)
make
make install
五、创建集群
cd /opt/redis-4.0.6/redis-cluster/
mkdir 700{1,2,3,4,5,6}
将原先redis安装目录下的配置文件redis.conf拷贝到新创建的六个文件夹下面
cd /opt/redis-4.0.6
cp redis.conf /opt/redis-4.0.6/redis-cluster/7001/
cp redis.conf /opt/redis-4.0.6/redis-cluster/7002/
cp redis.conf /opt/redis-4.0.6/redis-cluster/7003/
cp redis.conf /opt/redis-4.0.6/redis-cluster/7004/
cp redis.conf /opt/redis-4.0.6/redis-cluster/7005/
cp redis.conf /opt/redis-4.0.6/redis-cluster/7006/
cd /usr/local/bin/
cp redis-server redis-cli /opt/redis-4.0.6/redis-cluster/7001/
cp redis-server redis-cli /opt/redis-4.0.6/redis-cluster/7002/
cp redis-server redis-cli /opt/redis-4.0.6/redis-cluster/7003/
cp redis-server redis-cli /opt/redis-4.0.6/redis-cluster/7004/
cp redis-server redis-cli /opt/redis-4.0.6/redis-cluster/7005/
cp redis-server redis-cli /opt/redis-4.0.6/redis-cluster/7006/
修改/opt/redis-4.0.6/redis-cluster/{7001-7006}中的redis.conf
port 700X x为文件夹名称,你在700几就填几
④pid文件配置
cluster-enabled yes
vim /opt/redis-4.0.6/redis-cluster/start-all.sh
for port in 7001 7002 7003 7004 7005 7006
启动集群实例,
bash /opt/redis-4.0.6/redis-cluster/start-all.sh
ps -ef|grep redis
root 22911 1 0 17:20 ? 00:00:00 ./redis-server 192.168.4.212:7001 [cluster]
root 22913 1 0 17:20 ? 00:00:00 ./redis-server 192.168.4.212:7002 [cluster]
root 22915 1 0 17:20 ? 00:00:00 ./redis-server 192.168.4.212:7003 [cluster]
root 22917 1 0 17:20 ? 00:00:00 ./redis-server 192.168.4.212:7004 [cluster]
root 22919 1 0 17:20 ? 00:00:00 ./redis-server 192.168.4.212:7005 [cluster]
root 22927 1 0 17:20 ? 00:00:00 ./redis-server 192.168.4.212:7006 [cluster]
root 22943 24007 0 17:20 pts/9 00:00:00 grep redis
cd /opt/redis-4.0.6/redis-cluster
./redis-trib.rb create --replicas 1 192.168.4.212:7001 192.168.4.212:7002 192.168.4.212:7003 192.168.4.212:7004 192.168.4.212:7005 192.168.4.212:7006
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.4.212:7001 --主节点
192.168.4.212:7002 --主节点
192.168.4.212:7003 --主节点
Adding replica 192.168.4.212:7005 to 192.168.4.212:7001 --主节点对应的从节点
Adding replica 192.168.4.212:7006 to 192.168.4.212:7002 --主节点对应的从节点
Adding replica 192.168.4.212:7004 to 192.168.4.212:7003 --主节点对应的从节点
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 878f46c817107cd7a59269b0335f9a8be7529080 192.168.4.212:7001
slots:0-5460 (5461 slots) master --主节点分配的hash槽
M: cfda6a1cf00977311fa46f2920a4e1198e8b9f36 192.168.4.212:7002
slots:5461-10922 (5462 slots) master --主节点分配的hash槽
M: efcf4009a56f0a488b72b6c50d0deefd7b416df3 192.168.4.212:7003
slots:10923-16383 (5461 slots) master --主节点分配的hash槽
S: 1a0bbbb75c8fa0f377767fe0ba194c8d63814b23 192.168.4.212:7004
replicates cfda6a1cf00977311fa46f2920a4e1198e8b9f36 --从节点没有hash槽
S: c8d88f8e36b5741c7e013a6b84f24a64976f2901 192.168.4.212:7005
replicates efcf4009a56f0a488b72b6c50d0deefd7b416df3 --从节点没有hash槽
S: 10f48bfea3db737b55d8fee14ad795252d396e2f 192.168.4.212:7006
replicates 878f46c817107cd7a59269b0335f9a8be7529080 --从节点没有hash槽
Can I set the above configuration? (type 'yes' to accept): yes --选择yes, 意思是服从这种主从分配方式,我们也可以通过配置文件自己指定slave
>>> 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 192.168.4.212:7001) --以下是详细的主从节点分布
M: 878f46c817107cd7a59269b0335f9a8be7529080 192.168.4.212:7001
slots:0-5460 (5461 slots) master
1 additional replica(s)
M: efcf4009a56f0a488b72b6c50d0deefd7b416df3 192.168.4.212:7003
slots:10923-16383 (5461 slots) master
1 additional replica(s)
M: cfda6a1cf00977311fa46f2920a4e1198e8b9f36 192.168.4.212:7002
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: 1a0bbbb75c8fa0f377767fe0ba194c8d63814b23 192.168.4.212:7004
slots: (0 slots) slave
replicates cfda6a1cf00977311fa46f2920a4e1198e8b9f36
S: 10f48bfea3db737b55d8fee14ad795252d396e2f 192.168.4.212:7006
slots: (0 slots) slave
replicates 878f46c817107cd7a59269b0335f9a8be7529080
S: c8d88f8e36b5741c7e013a6b84f24a64976f2901 192.168.4.212:7005
slots: (0 slots) slave
replicates efcf4009a56f0a488b72b6c50d0deefd7b416df3
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
六、集群测试
./redis-cli -c -h 192.168.4.212 -p 7001
./redis-cli -c -h 192.168.4.212 -p 7001 shutdown //关闭7001节点,如果没有-h参数,默认连接127.0.0.1,如果没有-p参数,默认连接6379端口(所有如果用默认的,就没有-h -p)
说明:-h+host -p+端口号 -c是要连接集群,注意坑,不加会报错的
./redis-cli -c -h 192.168.4.212 -p 7001
192.168.4.212:7001> set name xiaowang
-> Redirected to slot [5798] located at 192.168.4.212:7002
OK
192.168.4.212:7002> get name
"xiaowang"
192.168.4.212:7002> quit
七、相关指令
常用
打印集群的信息CLUSTER INFO
列出集群当前已知的所有节点(node),以及这些节点的相关信息。CLUSTER NODES
检查集群状态src/redis-trib.rb check 127.0.0.1:7000
查看本节点信息
info replication
将节点的配置文件保存到硬盘里面。CLUSTER SAVECONFIG
返回一个master节点的slaves 列表CLUSTER SLAVES node-id
计算键 key 应该被放置在哪个槽上。CLUSTER KEYSLOT <key>
返回槽 slot 目前包含的键值对数量。CLUSTER COUNTKEYSINSLOT <slot>
返回 count 个 slot 槽中的键。CLUSTER GETKEYSINSLOT <slot> <count>
操作
将一个或多个槽(slot)指派给当前节点。cluster addslots {0...5461}
将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。CLUSTER MEET <ip> <port>
从集群中移除 node_id 指定的节点。CLUSTER FORGET <node_id>
将当前节点设置为 node_id 指定的节点的从节点。CLUSTER REPLICATE <node_id>
将一个或多个槽(slot)指派(assign)给当前节点。CLUSTER ADDSLOTS <slot> [slot ...]
移除一个或多个槽对当前节点的指派。CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。CLUSTER DELSLOTS <slot> [slot ...]
将槽 slot 指派给 node_id 指定的节点。CLUSTER SETSLOT <slot> NODE <node_id>
将本节点的槽 slot 迁移到 node_id 指定的节点中。CLUSTER SETSLOT <slot> MIGRATING <node_id>
从 node_id 指定的节点中导入槽 slot 到本节点。CLUSTER SETSLOT <slot> IMPORTING <node_id>
取消对槽 slot 的导入(import)或者迁移(migrate)。CLUSTER SETSLOT <slot>
redis-trib.rb
这个是ruby编写的redis集群管理工具
1代表每个主只有一个从,写在前面的是主,后面的是从redis-trib.rb create --replicas 1 ip:port ip:port
检测集群是否有问题redis-trib.rb check ip:port
添加一个节点到集群redis-trib.rb add-node <新节点ip:端口> <老节点ip:端口>
Redis 集群部署的更多相关文章
- Redis集群部署及命令
一.简介 redis集群是一个无中心的分布式Redis存储架构,可以在多个节点之间进行数据共享,解决了Redis高可用.可扩展等问题. redis集群提供了以下两个好处: 将数据自动切分(split) ...
- Redis集群部署-windows
Redis集群部署-windows 前言 为了能体验一下部署Redis集群是一种怎么样的体验,所一边做一边写了这篇记录. 1.准备 从这里下载windows服务端 https://github.com ...
- Redis集群部署文档(Ubuntu15.10系统)
Redis集群部署文档(Ubuntu15.10系统)(要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如 ...
- Redis集群部署3.0
我用的Mac的终端 ------------------------- 1.Redis简介 centos(5.4) Redis是一个key-value存储系统.和Memcached类似,但是解决了断 ...
- Redis集群部署与维护
Redis集群部署与维护 目录: 一. 集群架构 二. 集群部署 1. 创建redis-cluster目录 2. 编译redis 3. 编辑redis配置文件 4. 配置redis集群 5. redi ...
- 二进制redis集群部署
二进制redis集群部署 〇.前言 无聊想学罢了 准备环境: 三台centos7 1C1GB即可 三个路相连的地址 主机 IP 节点-角色-实例(端口) redis1 172.16.106.128 M ...
- redis集群部署之codis 维护脚本
搞了几天redis cluster codis 的部署安装,测试,架构优化,配合研发应用整合,这里记一些心得! 背景需求: 之前多个业务都在应用到redis库,各业务独立占用主从两台服务器,硬件资源利 ...
- redis集群部署那点事
[CentOS]make cc Command not found,make: *** [adlist.o] Error 127” 参考:https://blog.csdn.net/wzygis/ar ...
- redis集群部署步骤
1.yum 安装依赖 yum install gcc unzip wget 2.编译安装redis,编译安装的目的是源码包内包含了接下来创建redis集群所需要的 redis-trib.rb脚本 ma ...
随机推荐
- (转)VMware虚拟机三种网络模式的区别及配置方法;
我的一点实际经验理解桥接和NAT 桥接是虚拟机完全作为一个独立的地址接在局域网中,NAT是虚拟机依赖宿主主机地址转换的一种方式 例子我的虚拟机如果用桥接模式,连接外部网站如百度时会提示此pc没有装公司 ...
- 使用Xcode Instruments定位APP稳定性问题
Xcode Instruments提供了各种各样的工具用来定位APP的各种稳定性问题.这里简单总结几个问题: 1. 内存泄漏 Xcode->Open Developer Tools->In ...
- 关于微信小程序的本地存储
微信小程序中会使用wx.setStorage(wx.setStorageSync)来存储数据,问题是:即使小程序被销毁了,本地缓存的数据仍然存在.会造成: 所以要及时清理掉本地缓存的数据.解决思路: ...
- Java实现从服务器下载文件到本地的工具类
话不多说,直接上代码...... import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServlet ...
- mysql 主从复制不一致,不停库不锁表恢复主从同步
注意: 进行此操作时,确认在之前已经开启了MySQL的bin-log日志,如果没有则无法实现 为了安全考虑,我们授权一个用户进行数据备份: [root@7con ] mysql -uroot -p m ...
- JDBC (Java DataBase Connectivity)数据库连接池原理解析与实现
一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...
- virtualBox中有线和无线两种情况下centos虚拟机和本地机互ping的方案
之前写微信点餐系统的时候,刚开始是无线连接,然后每次进去虚拟机ip和本地ip都会改变,所以每次都需要配置一下nginx,还有本地的路径.之后换有线连接,就研究了一下桥接模式有线情况下虚拟机静态ip设置 ...
- 【线性代数】2-6:三角矩阵( $A=LU$ and $A=LDU$ )
title: [线性代数]2-6:三角矩阵( A=LUA=LUA=LU and A=LDUA=LDUA=LDU ) toc: true categories: Mathematic Linear Al ...
- Codeforces 1238E. Keyboard Purchase
传送门 注意到 $m$ 只有 $20$ ,考虑一下状压 $dp$ 设 $f[S]$ 表示当前确定的字符集合为 $S$ ,那么转移就考虑从最右边加入的下一个字符 $c$ 那么问题来了,代价如何计算 考虑 ...
- codeforces#1157D. Ehab and the Expected XOR Problem(构造)
题目链接: http://codeforces.com/contest/1174/problem/D 题意: 构造一个序列,满足以下条件 他的所有子段的异或值不等于$x$ $1 \le a_i< ...