Redis源码方式安装及Sentinel配置
· 阅读需 13 分钟
安装环境及Redis源码版本
OS: Ubuntu 22.04.3 LTS
Redis: 7.2.3
如下,准备3个VM
No. | host name | IP | node roles |
---|---|---|---|
#1 | redis-server1 | 172.25.254.131 | redis (master), sentinel |
#2 | redis-server2 | 172.25.254.132 | redis (slave), sentinel |
#3 | redis-server3 | 172.25.254.133 | redis (slave), sentinel |
编译器安装
sudo apt update
sudo apt install build-essential
# 如需使用systemd管理服务,需要先安装libsystemd-dev(Debian/Ubuntu)包,或systemd-devel(CentOS)包
sudo apt install libsystemd-dev
# or
# sudo yum -y install systemd-devel
参考redis源码文件夹中的README:
To build with systemd support, you'll need systemd development libraries (such as libsystemd-dev on Debian/Ubuntu or systemd-devel on CentOS) and run:
% make USE_SYSTEMD=yes
Redis 源码下载及编译安装
# 源码下载
curl -O https://download.redis.io/redis-stable.tar.gz
# or
wget https://download.redis.io/redis-stable.tar.gz
# 解压
tar -xzvf redis-stable.tar.gz
cd redis-stable
# 源码编译及安装,systemd选项可根据自己的需要加减
make USE_SYSTEMD=yes
sudo make PREFIX=/usr/local/redis-server install
# 拷贝redis,sentinel配置文件模板到安装目录
sudo cp redis.conf sentinel.conf /usr/local/redis-server/
# 生成日志目录
sudo mkdir /usr/local/redis-server/logs
创建Redis 管理账户
创建系统账户及配置权限
sudo adduser --system --group --no-create-home redis
sudo chown -R redis:redis /usr/local/redis-server
Replication配置 (Master / Slave)
各服务器上编辑redis.conf
文件,配置参考如下
master服务器 #1 (172.25.254.131)
sudo vim /usr/local/redis-server/redis.conf
# 监听IP,如果是开发、测试环境可配置0.0.0.0或直接注释处理
# 如果服务器暴露在公网或不安全的网络环境下,可配置指定IP提供安全性
bind 172.25.254.131
# 工作目录(working directory),rdb, aof文件保存的位置,Redis需要拥有该文件目录的R/W权限。
dir /usr/local/redis-server/
# 为数据同步,slave连接master时使用的密码
# 考虑到发生故障转移,建议master,slave配置同样的密码
masterauth mypass
# 设置密码
requirepass mypass
# 日志文件位置
logfile "/usr/local/redis-server/logs/redis.log"
# redis会周期性的dump RDB文件,故障发生时可能会丢失一些尚未保存的数据
# 如果不能接受数据的丢失,可开启AOF功能
appendonly yes
# aof文件写入周期,appendonly为yes时,配置将生效
# 有3个可配置参数(no, always, everysec)
# no: 会由操作系统来决定持久化的频率,这种方式对其他另外两种而言性能最好,但可能每次持久化操作间的间隔有些长
# always: 每次发生Redis的写命令时都会触发持久化动作,非常影响性能
# everysec: 会以一秒的频率触发持久化动作,在这种方式下能很好地平衡持久化需求和性能间的关系,一般情况下取这个值。
# If unsure, use "everysec".
appendfsync everysec
slave 서버 #2 (172.25.254.132)
sudo vim /usr/local/redis-server/redis.conf
# 监听IP,如果是开发、测试环境可配置0.0.0.0或直接注释处理
# 如果服务器暴露在公网或不安全的网络环境下,可配置指定IP提供安全性
bind 172.25.254.132
# 工作目录(working directory),rdb, aof文件保存的位置,Redis需要拥有该文件目录的R/W权限。
dir /usr/local/redis-server/
# 为数据同步,slave连接master时使用的密码
# 考虑到发生故障转移,建议master,slave配置同样的密码
masterauth mypass
# 设置密码
requirepass mypass
# master ip/port ( master节点需要注释掉该配置)
replicaof 172.25.254.131 6379
# 日志文件位置
logfile "/usr/local/redis-server/logs/redis.log"
# redis会周期性的dump RDB文件,故障发生时可能会丢失一些尚未保存的数据
# 如果不能接受数据的丢失,可开启AOF功能
appendonly yes
# aof文件写入周期,appendonly为yes时,配置将生效
# 有3个可配置参数(no, always, everysec)
# no: 会由操作系统来决定持久化的频率,这种方式对其他另外两种而言性能最好,但可能每次持久化操作间的间隔有些长
# always: 每次发生Redis的写命令时都会触发持久化动作,非常影响性能
# everysec: 会以一秒的频率触发持久化动作,在这种方式下能很好地平衡持久化需求和性能间的关系,一般情况下取这个值。
# If unsure, use "everysec".
appendfsync everysec
slave 서버 #3 (172.25.254.133)
sudo vim /usr/local/redis-server/redis.conf
# 监听IP,如果是 开发、测试环境可配置0.0.0.0或直接注释处理
# 如果服务器暴露在公网或不安全的网络环境下,可配置指定IP提供安全性
bind 172.25.254.133
# 工作目录(working directory),rdb, aof文件保存的位置,Redis需要拥有该文件目录的R/W权限。
dir /usr/local/redis-server/
# master ip/port ( master节点需要注释掉该配置)
replicaof 172.25.254.131 6379
# 为数据同步,slave连接master时使用的密码
# 考虑到发生故障转移,建议master,slave配置同样的密码
masterauth mypass
# 设置密码
requirepass mypass
# 日志文件位置
logfile "/usr/local/redis-server/logs/redis.log"
# redis会周期性的dump RDB文件 ,故障发生时可能会丢失一些尚未保存的数据
# 如果不能接受数据的丢失,可开启AOF功能
appendonly yes
# aof文件写入周期,appendonly为yes时,配置将生效
# 有3个可配置参数(no, always, everysec)
# no: 会由操作系统来决定持久化的频率,这种方式对其他另外两种而言性能最好,但可能每次持久化操作间的间隔有些长
# always: 每次发生Redis的写命令时都会触发持久化动作,非常影响性能
# everysec: 会以一秒的频率触发持久化动 作,在这种方式下能很好地平衡持久化需求和性能间的关系,一般情况下取这个值。
# If unsure, use "everysec".
appendfsync everysec
创建systemd Unit文件
sudo vim /etc/systemd/system/redis-server.service
[Unit]
Description=Redis data structure server
Documentation=https://redis.io/documentation
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/local/redis-server/bin/redis-server /usr/local/redis-server/redis.conf --supervised systemd --daemonize no
LimitNOFILE=10032
NoNewPrivileges=yes
Type=notify
TimeoutStartSec=infinity
TimeoutStopSec=infinity
UMask=0077
User=redis
Group=redis
[Install]
WantedBy=multi-user.target
各服务器上启动redis实例
systemctl start redis-server
启动后确认启动状态:
systemctl status redis-server
● redis-server.service - Redis data structure server
Loaded: loaded (/etc/systemd/system/redis-server.service; disabled; vendor preset: enabled)
Active: active (running) since Fri 2023-12-22 05:19:08 UTC; 6s ago
Docs: https://redis.io/documentation
Main PID: 48121 (redis-server)
Status: "Ready to accept connections"
Tasks: 6 (limit: 2178)
Memory: 2.3M
CPU: 19ms
CGroup: /system.slice/redis-server.service
└─48121 "/usr/local/redis-server/bin/redis-server *:6379" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" >
Dec 22 05:19:08 kafka-server1 systemd[1]: Starting Redis data structure server...
Dec 22 05:19:08 kafka-server1 systemd[1]: Started Redis data structure server.
确认Replication(主从同步状态)
先确认master的replication状态
cd /usr/local/redis-server/bin
./redis-cli -h 172.25.254.131
172.25.254.131:6379> auth mypass
OK
172.25.254.131:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.25.254.133,port=6379,state=online,offset=95561,lag=0
slave1:ip=172.25.254.132,port=6379,state=online,offset=95561,lag=0
master_failover_state:no-failover
master_replid:e396c5f17b331fc17d89f9c03e27e8a4548214f9
master_replid2:b950d0774916c8901184640d4652864788e2a51e
master_repl_offset:95561
second_repl_offset:94277
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:94277
repl_backlog_histlen:1285