Redis 单节点部署

1. 前提条件

  1. 安装前确保集群已经完成基础环境配置
  2. 本次安装 redis 版本为 6.2.10,安装包为:redis-6.2.10-amd64.tar.gz,ARM 芯片的安装包对应为:redis-6.2.10-aarch64.tar.gz 安装步骤没什么区别,为方便配置程序提前进行了编译并同时对配置文件做了部分修改,因此和默认安装包存在部分差别,另外版本号请以实际的为准。

2. 环境和参数准备

  1. Redis安装目录设置为:/opt/redis-6.2.10-amd64
  2. Redis 持久化目录设置为:/data/redis
  3. 优化内核参数:开启内存过量提交、提高TCP listen队列长度

编辑/etc/sysctl.conf, 例如:vim /etc/sysctl.conf, 添加参数如下:

vm.overcommit_memory=1
net.core.somaxconn=4096
net.ipv4.tcp_max_syn_backlog=4096

保存然后执行 sysctl -p 生效。

3. 安装与配置

首先解压安装包到安装目录:

tar xvzf redis-6.2.10-amd64.tar.gz -C /opt/
cd /opt/redis-6.2.10-amd64
ls -l

当前目录结构如下:

.
├── 00-RELEASENOTES
├── acl
│   ├── users-6379.acl
│   ├── users-6380.acl
│   └── users-6381.acl
├── bin
│   ├── redis-benchmark
│   ├── redis-check-aof -> redis-server
│   ├── redis-check-rdb -> redis-server
│   ├── redis-cli
│   ├── redis-sentinel -> redis-server
│   └── redis-server
├── conf
│   ├── redis-6379.conf
│   ├── redis-6380.conf
│   └── redis-6381.conf
├── redis.conf
├── sentinel.conf
├── sentinel-users.acl
├── services
│   ├── redis-sentinel.service
│   ├── redis.service
│   └── redis@.service
├── standalone-multi-instance.sh
└── users.acl

4 directories, 21 files

其中bin目录下面是可执行文件,例如redis-serverredis-cli等,当前目录下的文件时是单实例用到的配置文件,其中redis.confusers.acl是Redis的配置文件以及默认用户,sentinel.conf以及sentinel-users.acl是Sentinel服务的配置文件以及默认用户,services下是用于systemd管理的服务文件。

需要注意的是,程序包预置了单机多实例的支持,可以快速在单个节点上开启端口运行多个实例,当前支持开启 6379, 6380, 6381 3 个端口并使用系统服务管理,具体的配置文件在 conf 目录下,用户权限文件在 acl 目录下,配置文件中都已经自动对应好,无需手动修改,只需要执行 standalone-multi-instance.sh 脚本即可自动配置多实例,这部分内容将在最后来说,下面继续以手动方式配置单实例,如果需要查看多实例一键配置可以查看后面的 5. 快速配置单机多实例 部分。

当前因为只安装Redis单节点服务,所以可以先不用关心Sentinel相关的配置文件,然后我们编辑redis.conf来修改Redis的配置,默认的配置暂时不列出,主要涉及到修改或者特别说明的配置如下:

# 默认为了安全只绑定回环地址
bind 127.0.0.1 -::1
# 如果需要外部访问需要绑定实际的网卡
# bind 192.168.62.31
# 或者绑定所有的网卡
bind 0.0.0.0 ::

# 服务监听的端口号
port 6379

# pid文件 不同的实例要单独修改
pidfile /var/run/redis_6379.pid
# 日志文件 不同的实例要单独修改
logfile "/var/log/redis_6379.log"

# RDB 持久化的目录 默认为: ./ 务必修改正确
dir "/data/redis/"
# RDB 持久化文件 如果多个实例务必修改为不同的 例如: dump-6380.rdb
dbfilename dump.rdb

# 用于ACL文件 默认为./users.acl 务必修改为实际的绝对路径
aclfile /opt/redis-6.2.10-amd64/users.acl

修改完上面的配置,保存并退出,然后可以启动Redis服务尝试:

# 启动前先创建数据目录
mkdir /data/redis
./bin/redis-server ./redis.conf

启动之后进入客户端:./bin/redis-cli -p 6379,进入后首先执行认证才可以进行访问:

AUTH <username> <password>

默认 Redis 的 users.acl 中配置了 4 个用户,分别为:默认用户、开发用户、复制用户以及Sentinel管理用户,默认用户权限最高因此不要对外开放,而开发用户主要是用于程序使用,并且关闭了管理权限以及敏感操作的命令,复制用户主要用于搭建主从集群时副本节点复制数据的认证,Sentinel管理用户是Sentinel角色在执行Redis故障转移时所使用的用户,如果没有配置Sentinel可以不用关心。

认证之后可以查看当前的用户:

ACL LIST

这样Redis就基本上配置完毕了,如果需要自定义启动多个实例则需要复制多个配置文件并小心修改其中的配置,也可以复制多份程序并修改配置,然后再启动即可,或者参考后面的一键配置单机多实例,支持自动配置连续的多个端口号实例。

为了方便使用Redis相关命令可以将bin目录添加至环境变量中:

export PATH=$PATH:/opt/redis-6.2.10-amd64/bin

将上面的指令添加至/etc/profile或者~/.bashrc中均可。

4. 配置systemd接管Redis服务

为了方便设置开机启动或者管理Redis进程,可以将Redis服务添加至systemd管理,服务文件在services/redis.service中:

[Unit]
Description=redis
After=network.target local-fs.target

[Service]
User=root
Group=root
Type=forking
ExecStart={{ redis_home }}/bin/redis-server {{ redis_home }}/redis.conf
TimeoutSec=90s
RestartSec=10s
Restart=always
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity

[Install]
WantedBy=multi-user.target

将其中的{{ redis_home }}变量替换为当前的安装目录:/opt/redis-6.2.7-amd64如下:

[Unit]
Description=redis
After=network.target local-fs.target

[Service]
User=root
Group=root
Type=forking
ExecStart=/opt/redis-6.2.7-amd64/bin/redis-server /opt/redis-6.2.7-amd64/redis.conf
TimeoutSec=90s
RestartSec=10s
Restart=always
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity

[Install]
WantedBy=multi-user.target

然后保存服务文件,并添加至系统服务中:

cp services/redis.service /usr/lib/systemd/system

然后需要停止掉手动启动的Redis服务,重新使用systemd启动:

systemctl start redis.service
# 查看状态
systemctl status redis.service

然后可以设置开机自动启动:

systemctl enable redis.service

以上就是Redis单节点的安装步骤。

5. 快速配置单机多实例

程序包默认内置了 3 个端口的单机多实例,端口号依次是 6379,6380,6381 分别对应配置文件目录 conf 下面的 3 个配置文件,同时用户 ACL 文件在 acl 目录下,默认配置和文件都关联好了,不需要手动修改太多的配置,部署之前仍然是先解压安装包到既定的目录:

tar xvzf redis-6.2.10-amd64.tar.gz -C /opt/
cd /opt/redis-6.2.10-amd64
ls -l

有下面几个必要的配置项可能需要改:

# 绑定的网卡 默认为了安全只绑定回环地址
bind 127.0.0.1 -::1
# 如果需要外部访问需要绑定实际的网卡
# bind 192.168.62.31
# 或者绑定所有的网卡
bind 0.0.0.0 ::

# RDB 持久化的目录 默认为: ./ 务必修改正确
dir "/data/redis/"

只有上面两个配置项需要手动修改下,其他的都默认配置好了,如果有其他参数需要调整直接手动配置即可,3 个配置文件的修改方法完全一样,修改完成保存,然后创建数据目录:

mkdir -p /data/redis

然后执行脚本安装:

./standalone-multi-instance.sh

执行之后就会自动安装好系统服务并将配置初始好了,然后会提示启动的命令,我们可以根据需要启动 Redis 服务:

# 启动服务写法: redis@<端口号>.service
# 可以只启动其中 1 个或者多个
systemctl start redis@6379.service
systemctl start redis@6380.service
systemctl start redis@6381.service
# 查看服务状态
systemctl status redis@6379.service
systemctl status redis@6380.service
systemctl status redis@6381.service

启动后注意查看或者登录客户端确认 Redis 服务状态是否正常,最后如果需要可以设置开机自动启动服务:

systemctl enable redis@6379.service
systemctl enable redis@6380.service
systemctl enable redis@6381.service

这样单机多实例就快捷配置完了。