redis主从从,redis-7.0.13

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)

redis主从从,redis-7.0.13_第1张图片

链接:https://download.redis.io/releases/redis-7.0.13.tar.gz?_gl=11itkjl8_gaNjQ4ODk5MzUxLjE2OTU0NTQ0NTU._ga_8BKGRQKRPV*MTY5NTQ1NDQ1NS4xLjEuMTY5NTQ1NTI3OC4xMC4wLjA.

安装redis

从源安装 Redis |雷迪斯

redis主从从,redis-7.0.13_第2张图片

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主从从,redis-7.0.13_第3张图片

安装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 923 18:01 bin
drwxr-xr-x 3 root root  24 923 18:01 include
drwxr-xr-x 4 root root  64 923 18:01 lib
drwxr-xr-x 3 root root  17 923 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 
                               ^
编译中断。
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 923 18:24 src/redis-cli
ll src/redis-server
-rwxr-xr-x 1 root root 7018488 923 18:24 src/redis-server
ll src/redis-sentinel
-rwxr-xr-x 1 root root 7018488 923 18:24 src/redis-sentinel

部署redis 主从从结构

瑞迪斯配置 |雷迪斯 (redis.io)

Redis 配置文件示例 |雷迪斯

瑞迪斯复制 |雷迪斯 (redis.io)
redis主从从,redis-7.0.13_第4张图片
redis主从从,redis-7.0.13_第5张图片
redis主从从,redis-7.0.13_第6张图片

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 的高可用性 |雷迪斯
redis主从从,redis-7.0.13_第7张图片

哨兵配置文件 默认文件

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-7.0.13_第8张图片

启动redis两种方式

  1. 命令行

    redis-server /path/to/your/redis.conf

  2. 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 
#config set requirepass 123456
# config rewrite

#从服务器设置,复制哪个主服务器
replicaof 192.168.1.1 6379

#从服务器配置密码
masterauth <password>
## 也可通过命令行,在从服务器将密码配置写入配置文件
## config set masterauth 
## ## 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 
#config set requirepass 123456
# config rewrite

#从服务器设置,复制哪个主服务器
replicaof 192.168.1.1 6379

#从服务器配置密码
masterauth <password>
## 也可通过命令行,在从服务器将密码配置写入配置文件
## config set masterauth 
## ## config set masterauth 123456
## config rewrite

瑞迪斯复制 |雷迪斯 (redis.io)
redis主从从,redis-7.0.13_第9张图片

你可能感兴趣的:(redis,bootstrap,数据库)