redis7单节点、主从、哨兵、集群的安装和配置

redis7安装和配置

2022年4月份正式发布的redis 7.0,是目前历史上变化最大的版本,有超过50个以上的新增命令

官网:

https://redis.io

中文镜像

http://redis.cn

中文学习网:

https://redis.com.cn/

redis版本,建议升级到6.0.8版本以上,防止出现安全问题

安装

查看自己的服务器操作系统位数,确保是64位:

getconf LONG_BIT

查看GCC版本,redis由C编写,所以需要由GCC环境

[root@psh redis-7.0.11]# gcc -v

使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
目标:x86_64-redhat-linux
配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
线程模型:posix
gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)

下载安装包后,解压到自定义目录目录

cd /usr/local

tar -xzvf redis-7.0.11.tar.gz 

进入redis目录

cd /usr/local/redis-7.0.11

请添加图片描述

执行安装命令

make && make install

出现It's a good idea to run 'make test' ;说明安装成功

请添加图片描述

执行默认安装,会安装在

/usr/local/bin 

文件说明

  • redis-benchmark 性能测试工具
  • redis-check-aof 修复由问题的aof文件
  • redis-check-rdb 修复由问题的dump.rdb文件
  • redis-cli 客户端入口
  • redis-sentinel redis集群
  • redis-server redis 服务器启动命令

修改redis的配置文件:

cd /usr/local/redis-7.0.11
-- 备份原本的配置文件,防止配置错误
cp redis.conf /usr/local/redis-7.0.11/myredis.conf

vim myredis.conf

-- 查看文件的行数
set nu

做以下修改

vim /usr/local/redis-7.0.11/myredis.conf

将 daemonize no 改为 yes ,可以作为服务器后台启动

将 protected-mode yes 改为 no ,关闭保护模式

将bind 127.0.0.1 -::1 注释掉,否则只能本机访问

设置redis密码: requirepass  123456


开放端口

 firewall-cmd --zone=public --add-port=6379/tcp --permanent
 
firewall-cmd --reload #重启
firewall systemctl stop firewalld.service #停止
firewall systemctl disable firewalld.service #禁止firewall开机启动

redis服务器启动

/usr/local/bin/redis-server /usr/local/redis-7.0.11/myredis.conf

redis客户端启动

/usr/local/bin/redis-cli 

redis设置密码后,不使用密码也能登录,但是无法操作,会提示没有授权

请添加图片描述

可以使用 ./redis-cli -a 123456 ,带密码登录,会提示这样不安全,但是可以正常使用

请添加图片描述

也可以先连接,在授权,这样就没有警告了

请添加图片描述

关闭

在redis客户端直接使用 shutdown 就可以关闭服务器,然后在退出即可
127.0.0.1:6379> shutdown
not connected> quit

或者
/usr/local/bin/redis-cli -a 123456 shutdown

新建一个系统服务文件:

vi /etc/systemd/system/redis.service

[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /usr/local/redis-7.0.11/myredis.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target
重载系统服务	systemctl daemon-reload

启动	systemctl start redis

停止	systemctl stop redis

重启	systemctl restart redis

查看状态	systemctl status redis

设置开机自启动	systemctl enable redis

配置RDB

vim /usr/local/redis-7.0.11/myredis.conf

redis7以前

# save m n  表示m秒内数据集存在n次修改,就会触发bgsave ,进行RDB持久化
save 900 1
save 300 10
save 60 10000

redis7对RDB的持久化规则做出了修改

# 默认为:
save 3600 1 300 100 60 10000

#为了方便测试,本地调整为:
save 60 100

#rdb文件路径默认为 dir ./  ,为了方便查看,文件夹设置为:(这里的文件夹不能为空)
mkdir dumpfiles
dir /usr/local/redis-7.0.11/dumpfiles

# 如果有当前机器有多个redis实例,建议修改rdb文件名称,这里没有改
dbfilename dump.rdb

重启redis,执行save,查看 /usr/local/redis-7.0.11/dumpfiles文件夹,存在rdb文件

  • 自动触发,达到配置文件中自动保存的频次
  • 手动触发:调用save、bgsave命令,save阻塞,bgsave不阻塞

RDB文件修复

/usr/local/bin/redis-check-rdb   /usr/local/redis-7.0.11/dumpfiles/dump.rdb

禁用rdb

# 只在本次运行过程中禁用rdb
/usr/local/bin/redis-cli config set  save ""

# 更改配置文件
save ""

配置AOF

开启AOF

vim /usr/local/redis-7.0.11/myredis.conf

# 把appendonly no 改为 yes
appendonly yes 

设置aof文件的路径

# 在redis6,aof保存文件的位置和RBD保存文件的位置一样,都是通过redis.conf配置文件的dir配置


# 在redis7的时候,新增了配置 appenddirname 配置,专门用来配置aof文件的保存位置,这里是在RDB文件下在新建appendonlydir文件夹
appenddirname "appendonlydir"

aof文件在redis6的时候是只有一个 appendonly.aof文件

在redis7的时候变成了三个

  • appendonly.aof..base.rdb 是基础aof文件,由子进程通过重写产生,该文件最多只有一个
  • appendonly.aof..incr.aof 是增量的aof文件,在aof重写的时候产生,可能会存在多个
  • appendonly.aof..history.aof 是历史的aof,由base和incr变化而来,每次aof重写完成,之前的base和incr 都会变为history,history类型的aof文件是会被自动删除的
  • appendonly.aof.manifest 清单文件用来跟踪和管理这些aof文件,方便定位和查找

aof的修复命令,注意文件名

/usr/local/bin/redis-check-aof --fix  /usr/local/redis-7.0.11/dumpfiles/appendonlydir/appendonly.aof.1.incr.aof

配置主从

主从复制

  • 可以配置到配置文件

    • -- 只配从库不配主库
      replicaof 主库ip 主库端口号
      
  • 也可以使用命令的方式临时切换

    • SLAVEOF 主库ip 主库端口号
      
      SLAVEOF  192.168.158.168  6380
      
  • 把自己切换为主机

    SLAVEOF no one 
    

这里的两台从机都是从已经配置好rdb和aof的主机拷贝过来的,所以就不在配aof和rdb

需要保证服务器间可以ping通,防火墙对应端口可以访问

vim /usr/local/redis-7.0.11/myredis.conf

修改从机的端口号

port 6380

修改进程id,可以不改,不会对主从造成影响,但是有歧义

pidfile /var/run/redis_6380.pid

修改日志文件目录(主从机都需要改)

logfile "/usr/local/redis-7.0.11/mylogs/redislog.log"

mkdir /usr/local/redis-7.0.11/mylogs

修改密码(最好主从机都改,可以只改主机)

requirepass 123456

配置主机,和从机访问主机的密码,这里主机不用配(如果要配置哨兵,主节点也要配)

replicaof  192.168.158.167  6379

masterauth "123456"

给从机开放新的端口

firewall-cmd --zone=public --add-port=6380/tcp --permanent
 
firewall-cmd --reload #重启
firewall systemctl stop firewalld.service #停止
firewall systemctl disable firewalld.service #禁止firewall开机启动

firewall-cmd --zone=public --add-port=6381/tcp --permanent

配置哨兵

记得配置主机的,从机访问主机的密码

vim /usr/local/redis-7.0.11/myredis.conf

masterauth "123456"

进入哨兵机器

cd /usr/local/

#上传redis压缩包,并解压

tar -xzvf redis-7.0.11.tar.gz 

#在三台哨兵上分别安装redis,参考上面redis的安装,不需要对redis配置文件进行修改

备份 sentinel.conf 配置文件,防止意外出现

cd /usr/local/redis-7.0.11

cp sentinel.conf sentinel.conf.bak

修改三台哨兵的配置文件

 vim sentinel.conf
 # 或者使用sz sentinel.conf ,把文件下载到本机进行编辑,最后再上传服务器
bind 0.0.0.0

# 默认就是关闭保护模式
protected-mode no

# 默认端口
port 26379
# 改为yes,可以后台启动
daemonize yes
# 进程id可以不改
pidfile /var/run/redis-sentinel.pid
# 日志文件位置
logfile "/usr/local/redis-7.0.11/sentinel.log"
# 工作目录, 要手动创建对应的文件夹 mkdir  dir
dir /usr/local/redis-7.0.11/dir  
# 设置要监控的服务器,参数为: masterName 主机的ip 主机端口  法定投票数(表示最少需要多少个哨兵认为客观下线,同意故障迁移)
sentinel monitor mymaster 192.168.158.167  6379 2
# 接主节点的密码
sentinel auth-pass mymaster 123456


# 以下配置使用默认即可
# 主节点多少毫秒没有应答哨兵,哨兵就会主观上认为主节点下线
sentinel down-after-milliseconds mymaster 30000

# 故障转移的超时时间
sentinel failover-timeout mymaster 180000


开放端口

 firewall-cmd --zone=public --add-port=26379/tcp --permanent
 
firewall-cmd --reload #重启
firewall systemctl stop firewalld.service #停止
firewall systemctl disable firewalld.service #禁止firewall开机启动

启动哨兵

/usr/local/bin/redis-sentinel   /usr/local/redis-7.0.11/sentinel.conf --sentinel 

查看集群状态

info – Replication

关闭主机点,哨兵的选举日志如下:

请添加图片描述

启用哨兵后,哨兵会对redis的配置文件进行重写

请添加图片描述

配置集群

集群配置:3主3从,为了节约资源,每个redis服务器启动两个redis实例,共需要3台服务器,一个以6380启动,一个以6381启动

mkdir /usr/local/redis-7.0.11/cluster

redis会根据制定的配置文件进行启动,在每个服务器上,新建两个集群的配置文件,并修改redis集群配置文件

cd /usr/local/redis-7.0.11/cluster/

vim  /usr/local/redis-7.0.11/cluster/redisCluster6381.conf

vim  /usr/local/redis-7.0.11/cluster/redisCluster6382.conf

文件内容

  • 6381
bind 0.0.0.0

# 默认就是关闭保护模式
protected-mode no

# 默认端口
port 6381
# 改为yes,可以后台启动
daemonize yes
# 进程id可以不改
pidfile /var/run/redis-6381.pid
# 日志文件位置
logfile "/usr/local/redis-7.0.11/redis6381.log"
# 工作目录, 要手动创建对应的文件夹 mkdir  dir
dir /usr/local/redis-7.0.11/cluster
# RDB
dbfilename dump6381.rdb
# aof
appendonly yes 
appenddirname "appendonly6381.aof"


requirepass  123456
masterauth  123456

# 打开集群
cluster-enabled yes
# 集群的配置文件
cluster-config-file nodes-6381.conf
cluster-node-timeout 5000

  • 6382
bind 0.0.0.0

# 默认就是关闭保护模式
protected-mode no

# 默认端口
port 6382
# 改为yes,可以后台启动
daemonize yes
# 进程id可以不改
pidfile /var/run/redis-6382.pid
# 日志文件位置
logfile "/usr/local/redis-7.0.11/redis6382.log"
# 工作目录, 要手动创建对应的文件夹 mkdir  dir
dir /usr/local/redis-7.0.11/cluster
# RDB
dbfilename dump6382.rdb
# aof
appendonly yes 
appenddirname "appendonly6382.aof"


requirepass  123456
masterauth  123456

# 打开集群
cluster-enabled yes
# 集群的配置文件
cluster-config-file nodes-6382.conf
cluster-node-timeout 5000

开放端口

firewall-cmd --zone=public --add-port=6381/tcp --permanent
firewall-cmd --zone=public --add-port=6382/tcp --permanent
 
firewall-cmd --reload #重启
firewall systemctl stop firewalld.service #停止
firewall systemctl disable firewalld.service #禁止firewall开机启动

启动

/usr/local/bin/redis-server /usr/local/redis-7.0.11/cluster/redisCluster6381.conf

/usr/local/bin/redis-server /usr/local/redis-7.0.11/cluster/redisCluster6382.conf

开机自启

变更系统服务文件,因为使用集群了,之前自启的单节点就不要开机自启了:

vi /etc/systemd/system/redis.service

[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /usr/local/redis-7.0.11/cluster/redisCluster6381.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target
vi /etc/systemd/system/redis01.service

[Unit]
Description=redis01-server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /usr/local/redis-7.0.11/cluster/redisCluster6382.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target
重载系统服务	systemctl daemon-reload

启动	systemctl start redis

停止	systemctl stop redis

重启	systemctl restart redis

查看状态	systemctl status redis

设置开机自启动	systemctl enable redis  	systemctl enable redis01
		

构建集群关系

执行以下命令创建集群,出现确认选项,输入yes

 --cluster-replicas 1 表示给每个master创建一个slave

/usr/local/bin/redis-cli -a 123456 --cluster create --cluster-replicas 1 192.168.158.167:6381  192.168.158.167:6382  192.168.158.168:6381  192.168.158.168:6382 192.168.158.169:6381  192.168.158.169:6382

本次用到的ip:port

192.168.158.167:6381 192.168.158.167:6382

192.168.158.168:6381 192.168.158.168:6382

192.168.158.169:6381 192.168.158.169:6382

此时创建集群会出现一直等待的情况,因为没有开放总线端口

集群总线

  • 每个Redis集群中的节点都需要打开两个TCP连接。一个连接用于正常的给Client提供服务,比如6379,还有一个额外的端口(通过在这个端口号上加10000)作为数据端口,例如:redis的端口为6379,那么另外一个需要开通的端口是:6379 + 10000, 即需要开启 16379。16379端口用于集群总线,这是一个用二进制协议的点对点通信信道。这个集群总线(Cluster bus)用于节点的失败侦测、配置更新、故障转移授权,等等。
firewall-cmd --zone=public --add-port=16381/tcp --permanent
firewall-cmd --zone=public --add-port=16382/tcp --permanent
 
firewall-cmd --reload #重启
firewall systemctl stop firewalld.service #停止
firewall systemctl disable firewalld.service #禁止firewall开机启动

开放端口后创建集群需要删除以下文件,重新创建集群

cd /usr/local/redis-7.0.11/cluster

rm -rf  dump6382.rdb
rm -rf  dump6381.rdb
rm -rf  nodes-6381.conf
rm -rf  nodes-6382.conf
rm -rf  appendonly6381.aof
rm -rf  appendonly6382.aof

集群创建成功

请添加图片描述
请添加图片描述

查看集群关系

cluster nodes

集群的主从情况需要看集体分配

请添加图片描述

查看集群环境

cluster info

集群的上下线

连接集群是要加 c ,把key路由到正确的节点,如下图会把key路由到指定的节点

/usr/local/bin/redis-cli  -a 123456  -p 6381 -c

请添加图片描述

cluster nodes 查看集群情况,当前节点是主节点,关闭主节点,再次查看集群情况,发现原本的主节点连接不上了,而且选举出了新的主节点

请添加图片描述

重启之前的主节点,再次查看集群情况,之前的主节点变成了从节点

请添加图片描述

手动故障转移,或者节点丛属关系的调整

# 登录到刚才宕机的主节点
/usr/local/bin/redis-cli  -a 123456  -p 6382 -c

# 恢复原有集群结构
cluster failover

cluster nodes

请添加图片描述

集群的扩容缩容

扩容

把新节点加入集群

/usr/local/bin/redis-cli  -a 123456 --cluster  add-node  ip:port 

重新分配槽位

/usr/local/bin/redis-cli   -a 123456 --cluster reshard ip:port 
# 执行上面的命令后,还需要输入要迁移的槽的个数和目标节点的id
# 重新分配的成本很高,所以当有新节点加入集群,重新划分槽实际上是之前每一个主节点都分出一部分槽给新的主节点,而不是全部重新分配

为新的主节点分配从节点

/usr/local/bin/redis-cli  -a 123456 --cluster  add-node   新从节点ip:port  新主节点ip:port --cluster-salve      --cluster-master-id  新主节点id

缩容

先清除从节点

/usr/local/bin/redis-cli  -a 123456 --cluster  del-node  从节点ip:port  从节点id

主节点归还槽号

/usr/local/bin/redis-cli   -a 123456 --cluster reshard ip:port 

在清除主节点

/usr/local/bin/redis-cli  -a 123456 --cluster  del-node  主节点ip:port  主节点id

可视化工具的安装下载

下载地址

https://github.com/RedisInsight/RedisDesktopManager/releases
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值