1. 下载/编译/安装redis3.2.0
版本
1.1 下载redis3.2.0
并解压到指定目录
-
使用winscp复制到centos的
/root
中 -
解压到
/usr/local/
目录下:tar -xzvf /root/redis-3.2.0.tar.gz -C /usr/local/
1.2 编译redis3.2.0
源码
阅读/usr/local/redis-3.2.0
下的README.md
最一般的步骤:
-
编译项目:
make
-
安装执行文件到
/usr/local/redis/bin
:make PREFIX=/usr/local/redis install
-
按照生产环境要求,将redis作为服务安装
在/usr/local/redis-3.2.0/utils
下执行./install_server.sh
上图中,红框中是自定义的端口和路径,紫色框中是make install
步骤指定的执行文件的路径,蓝框中是要安装的位置的确认信息。
出现上图所示即安装成功
2. 修改配置文件,启动多个redis实例
要求:
启动六个redis实例,并将实例组成redis集群,三个主节点,三个从节点
集群配置最小选项
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
配置要求
实例名称 | 端口号 | 所在位置 |
---|---|---|
redis01 | 6379 | /usr/local/redis01 |
redis02 | 6479 | /usr/local/redis02 |
redis03 | 6579 | /usr/local/redis03 |
redis04 | 6679 | /usr/local/redis04 |
redis05 | 6779 | /usr/local/redis05 |
redis06 | 6879 | /usr/local/redis06 |
2.1 将当前redis复制六份
cp -rp /usr/local/redis /usr/local/redis0x
2.2 修改每一份的配置文件
以redis01为例(其他相同):
vim /usr/local/redis01/conf/redis.conf
-
使用vim命令
:$s/7000/6379/g
# 将端口即与端口有关的文件名中的7000改为6379 -
使用vim命令
/usr/local/redis
查找所有的usr/local/redis
并修改为usr/local/redis01
-
使用vim命令
:wq
,保存修改后退出。
2.3 启动实例
/usr/local/redis01/bin/redis-server /usr/local/redis01/conf/redis.conf
2.4 检查实例是否存在
ps -ef | grep redis
如果存在端口为6379即代表实例启动成功
在/usr/local/redis01/data/redis/
会生成文件appendonly.aof
和nodes.conf
2.5 其他redis0x仿照2.2
,2.3
,2.4
进行配置
所有redis实例启动示意图(我这截图是7个实例)
3.安装预装环境和redis集群
3.1. 安装ruby
yum install ruby
3.2. 安装rubygems
yum install rubygems
未安装时报如下错误:
./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)
from ./redis-trib.rb:24
3.3. 安装redis
gem install redis
未安装时报如下错误:
/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
3.4. 在多个实例上创建集群
创建新的集群,每个主节点的从节点为一个
/usr/local/redis-3.2.0/src/redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6479 127.0.0.1:6579 127.0.0.1:6679 127.0.0.1:6779 127.0.0.1:6879 127.0.0.1:6979
中间输入一次yes
这表示集群中的 16384 个槽都有至少一个主节点在处理, 集群运作正常。
4.集群操作
4.1 添加新的节点
实例名称 | 端口号 | 所在位置 |
---|---|---|
redis | 6379 | h2s1:/usr/local/redis |
./redis-trib.rb add-node h2s1:6379 127.0.0.1:6379
:将节点h2s1:6379
添加到所在集群127.0.0.1:6379
。
注:
-
redis-trib.rb
默认是在redis-3.2.0/src
下 -
新节点
h2s1:6379
不能有数据 -
新节点
h2s1:6379
实例必须已经启动 -
默认添加为主节点
添加节点为slave节点,所属的master节点自动选择:
redis-trib.rb add-node --slave new-node-host:port cluster-node-ip:port
添加节点为slave节点,指定所属的master节点:
redis-trib.rb add-node --slave --master-id masterid new-node-host:port cluster-node-ip:port
4.2 删除节点
./redis-trib.rb del-node h2s1:6379 16c85b6ec209b703b90d81019606c1c021ab0a1e
:删除节点所在集群任一host:port, nodeId:即被删除节点在集群中id。
节点id可以通过检查节点的命令./redis-trib.rb check host:port
查看
被删除的节点会被下线,而不仅仅是移除集群。如果要重新加入,需要重新启动该节点。而且该节点的appendonly.aof和nodes.conf要删除,启动实例时重新生成。
4.3 检查节点
./redis-trib.rb check h2s1:6379
:检查节点,很长的一段字符串就是节点的id,如示例图中的1dda781d73f38b1abed11beba610b155387e2a8d
4.4 查看节点信息
./redis-trib.rb info h2s1:6379
:查看指定节点信息,包括有多少key,多少槽,有多少的从节点以及每个槽上平均有多少key
4.5 修复集群
./redis-trib.rb fix 127.0.0.1:6379
:修复127.0.0.1:6379
所在集群
4.6 集群简单操作
可以看出,我从任何一个节点都可以访问到集群其他节点的数据
4.7 集群重新分片
` ./redis-trib.rb reshard 127.0.0.1:6379`:host和port指定节点所在集群
Source node #1:
我选择的all
询问是否继续reshard计划:我选的的yes
执行移动操作:
已经成功移动完成
4.8 集群重新平衡
./redis-trib.rb rebalance h2s1:6379
:因集群中三个主节点的槽数量差别较大,因此重新分配槽的数量以达到集群的平衡。
4.9 集群执行命令
./redis-trib.rb call 127.0.0.1:6379 set name "jingzz"
:在集群上执行set和get命令
即在6379端口的节点上的命令被存储在了6579节点上。
注意点:
- redis默认配置如下:
bind 127.0.0.1
protected-mode yes
如果想要连接外部host,需要注释掉bind或指定ip,将protected-mode(保护模式设置为no),重启集群。