本文主要记录了Redis单机、集群模式安装步骤,及操作过程所踩的坑。记录一下,也供大家参考。
另外,学习Redis,推荐阅读大神黄健宏的《Redis 设计与实现》,这本书让我受益良多。
环境
Linux版本是CentOS 7.7,redis版本为4.0.14
版本可以使用./redis-server -v
命令查看
单机部署
安装gcc
redis是c开发的,因此安装Redis需要c语言的编译环境,即需要安装gcc
检查是否已安装
1 | gcc -v |
没有则执行
1 | yum install gcc-c++ |
显示如下,表示安装成功
下载
wget下载redis安装包。-P
表示指定下载目录,这里是/opt
或者去官网http://redis.io 手动下载
1 | wget http://download.redis.io/releases/redis-4.0.14.tar.gz -P /opt |
解压到当前目录
1 | tar zxvf redis-4.0.14.tgz |
编译
进入到redis-4.0.14
目录,执行make
编译redis源码
1 | cd redis-4.0.14/ |
安装
安装编译后的redis代码到指定目录,这里是/usr/local/redis
1 | make install PREFIX=/usr/local/redis |
执行完后可以看到多了一个/usr/local/redis/bin
目录,其中包含常用的redis工具
启动
执行
1 | ./redis-server |
此时的redis服务在当前终端运行,CTRL + C
命令便会导致redis进程退出。
后台启动
复制安装包内的redis.conf
文件到安装目录下
1 | cp /opt/redis-4.0.14/redis.conf /usr/local/redis/ |
修改 redis.conf
中daemonize yes,表示开启后台运行
指定redis.conf
启动
1 | ./redis-server ../redis.conf |
停止
登录redis客户端
1
./redis-cli
执行
1
shutdown
或者通过客户端工具,有密码则通过
-a
指定1
./redis-cli -a xxxxxxxx shutdown
集群部署
注意,redis从3.0开始支持集群模式。
在已完成单机部署的基础上,通过在单台服务器上开启6个端口(7001-7006),来模拟三主三从的redis集群
复制
复制
/usr/local/redis/bin
下的文件到/usr/local/redis-cluster/7001
目录下1
2mkdir /usr/local/redis-cluster
cp /usr/local/redis/bin /usr/local/redis-cluster/7001
删除快照文件dump.rdb,避免残留数据影响
修改redis.conf,移动到
7001
目录下,内容为1
2
3
4redis节点服务端口
port 7001
开启集群模式
cluster-enabled yes
- 将
7001
复制5份,从7002
到7006
,分别修改端口为7002-7006
安装ruby
在v5.0之前,搭建redis集群,需要使用自带的 redis-4.0.14/src/redis-trib.rb
脚本。这是个ruby脚本,需要依赖ruby环境。
安装步骤参考Linux环境Ruby部署
安装redis库
Ruby已默认安装好Gem
1 | gem install redis |
搭建redis集群
安装好ruby后,便可以使用脚本搭建集群
从redis安装包中将 redis-trib.rb
文件拷贝到/usr/local/redis-cluster/
目录下
1 | cp /opt/redis-4.0.14/src/redis-trib.rb /usr/local/redis-cluster/ |
执行脚本搭建集群。--replicas 1
表示主从复制比为1比1,即一个主节点对应一个从节点。
1 | ./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 |
启动
一个个执行./redis-server
太麻烦,创建批量启停脚本,放在/usr/local/redis-cluster
目录下,加上可执行权限
批量启动脚本,vim start_batch.sh
,加上
1 | cd 7001 |
批量停止脚本,vim stop_batch.sh
,加上
1 | cd 7001 |
执行./start_batch.sh
启动 redis 集群
登录客户端
redis集群采用P2P模式,是完全去中心化的,没有中心节点或代理节点。节点间采用ping-pong机制通信。每个节点都是一个redis实例。
集群没有统一入口,连接任意节点即可,-c
表示允许在节点间自动跳转
1 | ./redis-cli -p 7001 -c |
此时如果访问的key不在当前节点上,会自动连接到对应的节点
查看集群信息
执行cluster nodes
可查看集群的分片信息
1 | cluster nodes |
可以看到6个节点组成了三主三从的集群。共有2^14=16384个槽位(solts),平均分配给了三个master
分配情况如下:
master | slave | solts |
---|---|---|
7001 | 7006 | 0-5460 |
7002 | 7004 | 5461-10922 |
7003 | 7005 | 10923-16383 |
为什么slots总数是16384?1
redis集群在get或set时,会对key进行CRC16运算,结果用16bit表示,共有2^16=65536种结果,所以理论上是对65536取余。由于redis节点之间每秒都会进行ping-pong通信,交换信息。携带的请求头中大小占比最多的就是槽位信息。槽位信息用bitmap表示,每个bit表示一个槽位,当bit值为1即表示槽位属于该节点,16384个槽位需要2kb内存,65536槽位需要8kb内存。当集群数量较多时,后者会对带宽产生较多消耗。由于redis节点数量一般不超过1000,所以16384个槽位最为合适。