redis主从从,redis-7.0.13
- 下载redis
- 安装redis
- 安装redis-7.0.13过程
- 报错1、没有gcc,
- 报错2、没有python3,
- 报错3、[adlist.o] 错误 127
- 解决安装报错
- 安装完成
- 部署redis 主从从结构
- redis主服务器
- 配置redis
- 启动redis
- 登录redis
- redis默认是主
- redis从服务器1
- redis从服务器2
- 部署3哨兵 redis-sentinel
- 未成功故障切换
- 哨兵配置文件 默认文件
- redis.conf 默认文件
下载redis
下载 |雷迪斯 (redis.io)
链接:https://download.redis.io/releases/redis-7.0.13.tar.gz?_gl=11itkjl8_gaNjQ4ODk5MzUxLjE2OTU0NTQ0NTU._ga_8BKGRQKRPV*MTY5NTQ1NDQ1NS4xLjEuMTY5NTQ1NTI3OC4xMC4wLjA.
安装redis
从源安装 Redis |雷迪斯
python链接:
https://www.python.org/ftp/python/3.11.5/Python-3.11.5.tgz
curl -o Python-3.11.5.tgz https://www.python.org/ftp/python/3.11.5/Python-3.11.5.tgz
安装redis-7.0.13过程
报错1、没有gcc,
报错2、没有python3,
报错3、[adlist.o] 错误 127
tar xf redis-7.0.13.tar.gz
cd redis-7.0.13
make
# 报错 没有命令 cc,没有python3,[adlist.o] 错误 127
cd src && make all
sh: cc: 未找到命令
which: no python3 in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
make[1]: 进入目录“/data/redis1/redis-stable/src”
CC Makefile.dep
make[1]: 离开目录“/data/redis1/redis-stable/src”
sh: cc: 未找到命令
which: no python3 in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
make[1]: 进入目录“/data/redis1/redis-stable/src”
....
MAKE hiredis
cd hiredis && make static
make[3]: 进入目录“/data/redis1/redis-stable/deps/hiredis”
cc -std=c99 -c -O3 -fPIC -Wall -Wextra -Werror -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers -g -ggdb -pedantic alloc.c
make[3]: cc:命令未找到
make[3]: *** [alloc.o] 错误 127
make[3]: 离开目录“/data/redis1/redis-stable/deps/hiredis”
make[2]: *** [hiredis] 错误 2
make[2]: 离开目录“/data/redis1/redis-stable/deps”
make[1]: [persist-settings] 错误 2 (忽略)
CC adlist.o
/bin/sh: cc: 未找到命令
make[1]: *** [adlist.o] 错误 127
make[1]: 离开目录“/data/redis1/redis-stable/src”
make: *** [all] 错误 2
解决安装报错
#安装python3,安装gcc
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel gcc make
cd /data/
curl -o Python-3.11.5.tgz https://www.python.org/ftp/python/3.11.5/Python-3.11.5.tgz
tar xf Python-3.11.5.tgz
cd Python-3.11.5.tgz
mkdir -p /usr/local/tools/
./configure --prefix=/usr/local/tools/
make && make install
ll /usr/local/tools/
总用量 0
drwxr-xr-x 2 root root 202 9月 23 18:01 bin
drwxr-xr-x 3 root root 24 9月 23 18:01 include
drwxr-xr-x 4 root root 64 9月 23 18:01 lib
drwxr-xr-x 3 root root 17 9月 23 18:01 share
#配置python环境变量
vim /etc/profile
export PYTHON_HOME=/usr/local/tools
export PATH=$PYTHON_HOME/bin:$PATH
source /etc/profile
which python3
/usr/local/tools/bin/python3
#再次make redis
cd /data/redis-7.0.13
make && make install
#报错
cd src && make all
make[1]: 进入目录“/data/redis/redis-7.0.13/src”
CC adlist.o
In file included from adlist.c:34:0:
zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录
#include <jemalloc/jemalloc.h>
^
编译中断。
make[1]: *** [adlist.o] 错误 1
make[1]: 离开目录“/data/redis/redis-7.0.13/src”
make: *** [all] 错误 2
# 使用make MALLOC=libc
make MALLOC=libc
#编译成功
CC cli_common.o
LINK redis-cli
CC redis-benchmark.o
LINK redis-benchmark
INSTALL redis-check-rdb
INSTALL redis-check-aof
Hint: It's a good idea to run 'make test' ;)
make[1]: 离开目录“/data/redis/redis-7.0.13/src”
安装完成
ll src/redis-cli
-rwxr-xr-x 1 root root 1083416 9月 23 18:24 src/redis-cli
ll src/redis-server
-rwxr-xr-x 1 root root 7018488 9月 23 18:24 src/redis-server
ll src/redis-sentinel
-rwxr-xr-x 1 root root 7018488 9月 23 18:24 src/redis-sentinel
部署redis 主从从结构
瑞迪斯配置 |雷迪斯 (redis.io)
Redis 配置文件示例 |雷迪斯
瑞迪斯复制 |雷迪斯 (redis.io)
redis主服务器
配置redis
cd /data/redis/redis-7.0.13
cp redis.conf redis.conf.bak
ln -s /data/redis/redis-7.0.13/src/redis-server /usr/local/bin/redis-server
ln -s /data/redis/redis-7.0.13/src/redis-sentinel /usr/local/bin/redis-sentinel
ln -s /data/redis/redis-7.0.13/src/redis-cli /usr/local/bin/redis-cli
mkdir -p /data/redisdata/
vim redis.conf
bind 192.168.75.143
port 6379
protected-mode no
daemonize no
pidfile /var/run/redis_6379.pid
loglevel notice
#Redis服务器的工作目录
dir /data/redisdata/
#Redis日志文件的路径,如果设置为空字符串,表示不记录日志文件,只在终端打印
logfile /data/redis.log
#
##Redis服务器支持的数据库数量
databases 16
#
##是否总是显示Redis的logo,如果设置为yes,每次启动Redis时都会打印logo
always-show-logo no
#服务器密码
requirepass "123456"
#连接主服务器的密码
masterauth 123456
启动redis
src/redis-server redis.conf &
登录redis
[root@redis2 redis-7.0.13]# redis-cli -h 192.168.75.143
192.168.75.143:6379> ping
(error) NOAUTH Authentication required.
192.168.75.143:6379> auth 123456
OK
192.168.75.143:6379> ping
PONG
192.168.75.143:6379>
redis默认是主
192.168.75.143:6379> info
# Server
redis_version:7.0.13
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:6199b82bc88869ee
redis_mode:standalone
os:Linux 3.10.0-862.el7.x86_64 x86_64
arch_bits:64
monotonic_clock:POSIX clock_gettime
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:4.8.5
process_id:1403
process_supervised:no
run_id:16267262862dc73b8cebb24273cf04274ac40e90
tcp_port:6379
server_time_usec:1695627161454916
uptime_in_seconds:61
uptime_in_days:0
hz:10
configured_hz:10
lru_clock:1128345
executable:/data/redis/redis-7.0.13/src/redis-server
config_file:/data/redis/redis-7.0.13/redis.conf
io_threads_active:0
# Clients
connected_clients:1
cluster_connections:0
maxclients:10000
client_recent_max_input_buffer:24
client_recent_max_output_buffer:0
blocked_clients:0
tracking_clients:0
clients_in_timeout_table:0
# Replication
role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:4e46cf3ce0a63154324bec95ecd029f7ad681a28
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
redis从服务器1
cd /data/redis/redis-7.0.13
cp redis.conf redis.conf.bak
vim redis.conf
bind 192.168.75.144
port 6379
protected-mode no
daemonize no
pidfile /var/run/redis_6379.pid
loglevel notice
#Redis服务器的工作目录
dir /data/redisdata/
#Redis日志文件的路径,如果设置为空字符串,表示不记录日志文件,只在终端打印
logfile /data/redis.log
#
##Redis服务器支持的数据库数量
databases 16
#
##是否总是显示Redis的logo,如果设置为yes,每次启动Redis时都会打印logo
always-show-logo no
#服务器密码
requirepass "123456"
#从服务器设置,复制哪个主服务器
replicaof 192.168.75.143 6379
#连接主服务器的密码
masterauth 123456
redis从服务器2
cd /data/redis/redis-7.0.13
cp redis.conf redis.conf.bak
vim redis.conf
bind 192.168.75.145
port 6379
protected-mode no
daemonize no
pidfile /var/run/redis_6379.pid
loglevel notice
#Redis服务器的工作目录
dir /data/redisdata/
#Redis日志文件的路径,如果设置为空字符串,表示不记录日志文件,只在终端打印
logfile /data/redis.log
#
##Redis服务器支持的数据库数量
databases 16
#
##是否总是显示Redis的logo,如果设置为yes,每次启动Redis时都会打印logo
always-show-logo no
#服务器密码
requirepass "123456"
#从服务器设置,复制哪个主服务器
replicaof 192.168.75.143 6379
#连接主服务器的密码
masterauth 123456
部署3哨兵 redis-sentinel
未成功故障切换
Redis Sentinel 的高可用性 |雷迪斯
哨兵配置文件 默认文件
sentinel.conf
#是否开启保护模式,'no'表示关闭,默认为关闭
protected-mode no
#Redis Sentinel监听的端口号
port 26379
#是否以后台进程形式运行,'no'表示在前台运行,默认为'no'"
daemonize no
#Redis Sentinel后台运行的进程ID文件路径
pidfile /var/run/redis-sentinel.pid
#Redis Sentinel的日志文件路径,此处为空,表示没有指定日志文件,日志打印到控制台。后台运行时如果不配置日志文件,日志将写入/dev/null
logfile ""
#Redis Sentinel的工作目录
dir /tmp
#定义要监视的主服务器,格式为'master-name ip port quorum'。
# 此处监视名为'mymaster'的主服务器,其在IP地址127.0.0.1的6379端口上运行,并且需要2个Sentinel同意才能进行故障转移,3节点的哨兵集群写2 数字需大于哨兵集群节点总数的一半
sentinel monitor mymaster 127.0.0.1 6379 2
#定义主服务器失败所需的时间(毫秒)。如果主服务器在指定的时间内没有响应,Sentinel将认为它已经失败
sentinel down-after-milliseconds mymaster 30000
#定义了ACL日志的最大长度,以KB为单位。0表示没有限制
acllog-max-len 128
#定义在执行故障转移时,可以同时进行主从同步的数量,示在执行故障转移时,最多只有一个从节点会成为新的主节点。其他从节点会尝试复制新的主节点,但是不会成为主节点。
sentinel parallel-syncs mymaster 1
#定义故障转移的超时时间(毫秒)。如果在这个时间内没有完成故障转移,Sentinel将停止并尝试其他方法
sentinel failover-timeout mymaster 180000
#是否禁止在运行时通过脚本重新配置Sentinel,'yes'表示禁止
sentinel deny-scripts-reconfig yes
#是否允许Sentinel解析主机名,'no'表示不允许
SENTINEL resolve-hostnames no
#是否允许Sentinel宣布其主机名,'no'表示不允许
SENTINEL announce-hostnames no
#如果主服务器因重启而消失的时间超过这个值(以毫秒为单位),Sentinel将认为主服务器已经失败。此处为0,表示关闭此功能
SENTINEL master-reboot-down-after-period mymaster 0
管理红人 |雷迪斯 (redis.io)
redis配置
启动redis两种方式
-
命令行
redis-server /path/to/your/redis.conf
-
systemctl
cp redis-7.0.13/utils/systemd-redis_server.service /usr/lib/systemd/system/redis.service
vim /usr/lib/systemd/system/redis.service
sudo systemctl daemon-reload
sudo systemctl enable redis
sudo systemctl start redis
redis.conf 默认文件
#绑定Redis服务器到指定的IP地址,多个IP地址用空格分隔。如 127.0.0.1 -::1 表示绑定到本机的所有IPv4和IPv6的地址
bind 127.0.0.1 -::1
#保护模式,如果是yes,没有密码的客户端将不能访问Redis服务器
protected-mode yes
#如需要设置Redis的密码
requirepass yourpassword
#Redis服务器监听的端口号
port 6379
#TCP连接队列的最大长度
tcp-backlog 511
#客户端连接闲置多长时间后关闭,0表示关闭此功能
timeout 0
#TCP连接的保持活跃时间,单位是秒
tcp-keepalive 300
#是否让Redis以守护进程方式运行,如果是yes,Redis将在后台运行
daemonize no
#如果Redis以守护进程方式运行,这个选项将指定一个文件名,Redis会把它的进程ID写入这个文件。
pidfile /var/run/redis_6379.pid
#Redis日志的级别,可选值包括debug、verbose、notice和warning
loglevel notice
#Redis日志文件的路径,如果设置为空字符串,表示不记录日志文件,只在终端打印
logfile ""
#Redis服务器支持的数据库数量
databases 16
#是否总是显示Redis的logo,如果设置为yes,每次启动Redis时都会打印logo
always-show-logo no
#是否设置进程标题,如果设置为yes,Redis会使用一个包含有用信息的标题
set-proc-title yes
#设置进程标题的格式
proc-title-template "{title} {listen-addr} {server-mode}"
#如果在后台保存数据时发生错误,是否停止写入操作
stop-writes-on-bgsave-error yes
#是否启用RDB数据持久化时的压缩功能
rdbcompression yes
#是否启用RDB文件的校验和,如果启用,会增加大约10%的性能消耗
rdbchecksum yes
#RDB数据持久化文件的名称
dbfilename dump.rdb
#是否在每次写入RDB文件后删除旧的RDB文件
rdb-del-sync-files no
#Redis服务器的工作目录
dir ./
#当主从复制链接断开时,从服务器是否继续提供服务
replica-serve-stale-data yes
#从服务器是否为只读模式
#从 Redis 2.6 开始,副本支持默认启用的只读模式
replica-read-only yes
#是否启用无盘复制
repl-diskless-sync yes
#无盘复制的延迟时间,单位是秒
repl-diskless-sync-delay 5
#无盘复制的最大从服务器数量
repl-diskless-sync-max-replicas 0
#是否从无盘复制的从服务器加载数据
repl-diskless-load disabled
#是否禁用TCP_NODELAY选项
repl-disable-tcp-nodelay no
#从服务器的优先级,用于主从复制
replica-priority 100
#ACL日志的最大长度
acllog-max-len 128
#是否启用延迟释放内存的策略,如果是yes,当内存达到maxmemory限制时,Redis将使用更少的CPU时间来删除键
lazyfree-lazy-eviction no
#是否启用延迟释放内存的策略,如果是yes,当键过期时,Redis将使用更少的CPU时间来删除键
lazyfree-lazy-expire no
#是否启用延迟释放内存的策略,如果是yes,当服务器删除键时,Redis将使用更少的CPU时间来删除键
lazyfree-lazy-server-del no
#是否启用延迟释放内存的策略,如果是yes,当从服务器接收到主服务器的全量复制数据时,Redis将使用更少的CPU时间来删除键
replica-lazy-flush no
#是否启用延迟释放内存的策略,如果是yes,当用户调用DEL命令删除键时,Redis将使用更少的CPU时间来删除键
lazyfree-lazy-user-del no
#是否启用延迟释放内存的策略,如果是yes,当用户调用FLUSHALL或FLUSHDB命令时,Redis将使用更少的CPU时间来删除键
lazyfree-lazy-user-flush no
#当系统内存不足时,是否调整Redis的OOM分数
oom-score-adj no
#OOM分数的调整值
oom-score-adj-values 0 200 800
#是否禁用透明大页面(THP)
disable-thp yes
#是否开启AOF持久化
appendonly no
#AOF持久化文件的名称
appendfilename "appendonly.aof"
#AOF文件保存的目录
appenddirname "appendonlydir"
#AOF文件同步到磁盘的策略
appendfsync everysec
#在重写AOF文件期间是否禁用fsync操作
no-appendfsync-on-rewrite no
#当前AOF文件大小增长达到上次AOF重写后大小的一定百分比时,将触发AOF重写,即重新生成AOF文件。
#这个百分比就是auto-aof-rewrite-percentage,设置为100表示AOF文件大小增长到上次AOF重写后大小的两倍时,触发AOF重写
auto-aof-rewrite-percentage 100
#AOF文件的最小大小,只有AOF文件大小大于此值时,才会触发AOF重写
auto-aof-rewrite-min-size 64mb
#如果AOF文件在加载时出现截断错误(比如文件损坏),是否继续加载。设置为yes表示继续加载,设置为no表示停止加载
aof-load-truncated yes
#在AOF文件中使用RDB格式的preamble,这有助于在AOF重写时更快地生成新的AOF文件
aof-use-rdb-preamble yes
#是否在AOF文件中记录每个写命令的执行时间戳,设置为no表示不记录
aof-timestamp-enabled no
#慢查询日志的阈值,单位是微秒。只有当查询执行时间超过此值时,才会被记录到慢查询日志中
slowlog-log-slower-than 10000
#慢查询日志的最大长度,即最多保存多少条慢查询日志
slowlog-max-len 128
#延迟监控的阈值,单位是微秒。如果服务器在一段时间内持续超过此阈值,则会触发延迟监控
latency-monitor-threshold 0
#哪些类型的键空间事件需要发送给客户端,比如'K$'表示所有键空间事件都发送
notify-keyspace-events ""
#哈希类型可以存储的最大列表元素数量
hash-max-listpack-entries 512
#哈希类型每个列表元素的最大值
hash-max-listpack-value 64
#列表类型可以存储的最大列表大小
list-max-listpack-size -2
#列表类型压缩的深度
list-compress-depth 0
#集合类型可以存储的最大整数集合元素数量
set-max-intset-entries 512
#有序集合类型可以存储的最大列表元素数量
zset-max-listpack-entries 128
#有序集合类型每个列表元素的最大值
zset-max-listpack-value 64
#HyperLogLog数据结构的最大空间占用,单位是字节
hll-sparse-max-bytes 3000
#流数据结构每个节点的最大空间占用,单位是字节
stream-node-max-bytes 4096
#流数据结构每个节点的最大元素数量
stream-node-max-entries 100
#是否在执行命令时进行主动哈希扩展,设置为yes表示进行主动哈希扩展
activerehashing yes
#设置客户端输出缓冲区的限制,normal表示普通客户端,0 0 0表示不限制
client-output-buffer-limit normal 0 0 0
#设置从服务器客户端输出缓冲区的限制,256mb 64mb 60分别表示硬限制、软限制和持续时间
client-output-buffer-limit replica 256mb 64mb 60
#设置发布订阅客户端输出缓冲区的限制,32mb 8mb 60分别表示硬限制、软限制和持续时间
client-output-buffer-limit pubsub 32mb 8mb 60
#服务器每秒执行多少次事件循环,即服务器的运行频率
hz 10
#是否动态调整服务器的运行频率,设置为yes表示动态调整
dynamic-hz yes
#"在AOF重写期间是否对每个写入命令执行fsync操作,设置为yes表示执行
aof-rewrite-incremental-fsync yes
#在生成RDB文件期间是否对每个写入命令执行fsync操作,设置为yes表示执行
rdb-save-incremental-fsync yes
#是否启用jemalloc的后台线程,设置为yes表示启用
jemalloc-bg-thread yes
#主服务器设置密码
#requirepass "123456"
#通过命令行,在主服务将密码写入配置文件
#config set requirepass <password>
#config set requirepass 123456
# config rewrite
#从服务器设置,复制哪个主服务器
replicaof 192.168.1.1 6379
#从服务器配置密码
masterauth <password>
## 也可通过命令行,在从服务器将密码配置写入配置文件
## config set masterauth <password>
## ## config set masterauth 123456
## config rewrite
瑞迪斯复制 |雷迪斯 (redis.io)
整服务器的运行频率,设置为yes表示动态调整
dynamic-hz yes
#"在AOF重写期间是否对每个写入命令执行fsync操作,设置为yes表示执行
aof-rewrite-incremental-fsync yes
#在生成RDB文件期间是否对每个写入命令执行fsync操作,设置为yes表示执行
rdb-save-incremental-fsync yes
#是否启用jemalloc的后台线程,设置为yes表示启用
jemalloc-bg-thread yes
#主服务器设置密码
#requirepass "123456"
#通过命令行,在主服务将密码写入配置文件
#config set requirepass <password>
#config set requirepass 123456
# config rewrite
#从服务器设置,复制哪个主服务器
replicaof 192.168.1.1 6379
#从服务器配置密码
masterauth <password>
## 也可通过命令行,在从服务器将密码配置写入配置文件
## config set masterauth <password>
## ## config set masterauth 123456
## config rewrite
瑞迪斯复制 |雷迪斯 (redis.io)