Linux环境Redis部署

本文主要记录了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++

显示如下,表示安装成功

image-20220815181309966

下载

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
2
cd redis-4.0.14/
make

安装

安装编译后的redis代码到指定目录,这里是/usr/local/redis

1
make install PREFIX=/usr/local/redis

执行完后可以看到多了一个/usr/local/redis/bin目录,其中包含常用的redis工具

image-20220815183125974

启动

执行

1
./redis-server

此时的redis服务在当前终端运行,CTRL + C命令便会导致redis进程退出。

后台启动

复制安装包内的redis.conf文件到安装目录下

1
cp /opt/redis-4.0.14/redis.conf  /usr/local/redis/

修改 redis.confdaemonize 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
    2
    mkdir /usr/local/redis-cluster
    cp /usr/local/redis/bin /usr/local/redis-cluster/7001
  • 删除快照文件dump.rdb,避免残留数据影响

  • 修改redis.conf,移动到7001目录下,内容为

    1
    2
    3
    4
    # redis节点服务端口
    port 7001
    # 开启集群模式
    cluster-enabled yes
  • 7001 复制5份,从 70027006,分别修改端口为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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cd 7001
./redis-server redis.conf
cd ..
cd 7002
./redis-server redis.conf
cd ..
cd 7003
./redis-server redis.conf
cd ..
cd 7004
./redis-server redis.conf
cd ..
cd 7005
./redis-server redis.conf
cd ..
cd 7006
./redis-server redis.conf
cd ..

批量停止脚本,vim stop_batch.sh,加上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cd 7001
./redis-cli -p 7001 shutdown
cd ..
cd 7002
./redis-cli -p 7002 shutdown
cd ..
cd 7003
./redis-cli -p 7003 shutdown
cd ..
cd 7004
./redis-cli -p 7004 shutdown
cd ..
cd 7005
./redis-cli -p 7005 shutdown
cd ..
cd 7006
./redis-cli -p 7006 shutdown
cd ..

执行./start_batch.sh启动 redis 集群

登录客户端

redis集群采用P2P模式,是完全去中心化的,没有中心节点或代理节点。节点间采用ping-pong机制通信。每个节点都是一个redis实例。

集群没有统一入口,连接任意节点即可,-c表示允许在节点间自动跳转

1
./redis-cli -p 7001 -c 

此时如果访问的key不在当前节点上,会自动连接到对应的节点

查看集群信息

执行cluster nodes可查看集群的分片信息

1
cluster nodes

image-20211130203021477

可以看到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个槽位最为合适。

参考资料

  1. 为什么Redis集群有16384个槽
文章作者: SongGT
文章链接: http://www.songguangtao.xyz/2022/08/15/9.Redis部署/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 SongGuangtao's Blog
大哥大嫂[微信打赏]
过年好[支付宝打赏]