redis安装

redis安装服务器,建议最好使用root权限账号登录服务器,然后进行安装,否则会出现一些奇怪东西

安装包

下载地址:https://download.redis.io/releases/
在这里插入图片描述
点击下载
在服务器内直接使用下载地址下载安装

wget http://download.redis.io/releases/redis-5.0.5.tar.gz

中途选择是即可

安装

tar -zvxf redis-5.0.5.tar.gz

进入解压文件
在这里插入图片描述
进行安装

make

如果报错类似如下,说明没有安装gcc,需要安装下
在这里插入图片描述

yum install gcc-c++ -y

再次执行make,看看还会不会报错,如果提示如下
在这里插入图片描述

#执行命令可完成安装
make MALLOC=libc

再执行make安装,按照以下命令执行,执行成功后进入src
在这里插入图片描述

make install

文件移动

为了方便管理,将Redis文件中的conf配置文件和常用的命令移动到统一文件中,在解压的redis目录内

mkdir bin etc

在这里插入图片描述
将src中的部分文件移到bin文件夹中

cd src
mv redis-trib.rb mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server redis-sentinel ../bin
cd bin/
ls
显示以下文件
mkreleasehdr.sh  redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli  redis-sentinel  redis-server  redis-trib.rb

将redis.conf移动到etc中

mv redis.conf ./etc

所有的redis配置设定都在redis,conf中

开启后台启动

cd etc
vim redis.conf

在这里插入图片描述
设置指定ip访问,如果不指定ip访问,直接设置成0.0.0.0,默认是127.0.0.1
–20220312–
此处有问题,可以试试不绑定0.0.0.0,当然也可以绑定,博主单机部署的时候bind 0.0.0.0是正常没问题的,但是在集群时,多节点访问出现了问题,问题原因可以参考后面redis集群
在这里插入图片描述
–20220312更新—
bind 可以考虑试试不绑定ip地址,测试下效果,具体为什么参考下后面redis集群的bind绑定ip地址误区

启动redis

进入bin目录,启动时需要指定配置文件,否则会提示找不到配置文件,因为此次安装移动过配置文件

redis-server ../etc/redis.conf

显示以下表示启动成功
在这里插入图片描述

查看进程

netstat -tpln|grep 6379

在这里插入图片描述
关闭进程

kill -9 23049

关闭防火墙

启动防火墙 systemctl start firewalld
禁用防火墙 systemctl stop firewalld
设置开机启动 systemctl enable firewalld
停止并禁用开机启动 systemctl disable firewalld

测试效果

使用外部访问软件访问redis,连接成功说明正常
端口6379,没有密码
在这里插入图片描述
在linux中进入redis的bin目录

redis-cli -h ip地址 -c -p 6379

在这里插入图片描述
安装成功

设置密码

刚安装是没有密码的,为了安全起见我们需要设置密码,下面重新启动redis的实例来讲述如何设置密码
cd /root/resources/redis-5.0.5/bin/
redis-cli -h 127.0.0.1 -c -p 6379

查看进程

ps -ef|grep redis

在这里插入图片描述
进入6379实例

redis-cli -h 127.0.0.1 -c -p 6379

此时是不需要输入密码

查看密码
config get requirepass

在这里插入图片描述
密码是空的

设置密码
#设置密码
config set requirepass 123456
# 验证密码
auth 123456
# 退出
exit
# 进入
redis-cli -h 127.0.0.1 -c -p 6379 -a 123456
# 会提示警告
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe
# 其实不用理会,只是告诉你明文输入密码不安全而已
# 进入还有其他方式
redis-cli -h 127.0.0.1 -c -p 6379
auth 123456
# 成功进入

以上方式只是针对次数启动的redis实例起作用,关闭该实例后,重新启动redis将不需要输入密码,有兴趣的可以测试下

密码持久性

如果想要每次重启都会起作用,还得去修改redis.conf

cd /root/resources/redis-5.0.5/etc/
vim redis.conf

找到requirepass将注释去掉,写自己的密码
在这里插入图片描述
重新启动redis,请注意先将前面启动的6379实例关闭,然后再重启redis,需要读取etc内的redis配置文件
此次进入redis需要密码
在这里插入图片描述

cd /root/resources/redis-5.0.5/bin/
redis-cli -h 127.0.0.1 -c -p 6379
auth 123456

在这里插入图片描述

redis集群

redis cluster在设计的时候,就考虑到了去中心化,去中间件,也就是说,集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据。
Redis 集群没有并使用传统的一致性哈希来分配数据,而是采用另外一种叫做哈希槽 (hash slot)的方式来分配的。redis cluster 默认分配了 16384 个slot,当我们set一个key 时,会用CRC16算法来取模得到所属的slot,然后将这个key 分到哈希槽区间的节点上,具体算法就是:CRC16(key) % 16384。所以我们在测试的时候看到set 和 get 的时候,直接跳转到了7000端口的节点。
Redis 集群会把数据存在一个 master 节点,然后在这个 master 和其对应的salve 之间进行数据同步。当读取数据时,也根据一致性哈希算法到对应的 master 节点获取数据。只有当一个master 挂掉之后,才会启动一个对应的 salve 节点,充当 master 。
需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的一半时,整个集群就无法提供服务了。
需要准备至少6个实例,可以准备2台服务器、或者1台服务器
下面一台服务器作为实例说明

配置文件

创建实例配置文件目录

mkdir redis_cluster

创建6个配置文件夹

mkdir 7001 7002 7003 7004 7005 7006

复制redis的配置文件redis.conf到实例的文件夹内,进入redis-5.0.5目录下

cp etc/redis.conf /root/resources/redis_cluster/7001
cp etc/redis.conf /root/resources/redis_cluster/7002
cp etc/redis.conf /root/resources/redis_cluster/7003
cp etc/redis.conf /root/resources/redis_cluster/7004
cp etc/redis.conf /root/resources/redis_cluster/7005
cp etc/redis.conf /root/resources/redis_cluster/7006

进入实例目录内,修改配置文件redis.conf,将以下的配置找到,根据实际端口进行修改

port 7001 
bind 本机ip //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群 
daemonize yes //redis后台运行 
pidfile /var/run/redis_7001.pid //pidfile文件对应7001
cluster-enabled yes //开启集群 把注释#去掉 
cluster-config-file nodes_7001.conf //集群的配置 配置文件首次启动自动生成,把注释#去掉 
cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置  把注释#去掉 
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志 

剩余的7002 7003 7004 7005 7006也是一样修改

bind绑定ip地址的误区

—20220312–更新
本博主自己搭建的redis集群与应用服务是分机部署的,等于redis是需要从外部访问,以前看了很多网上的教程都是说bind 是指定可以访问的ip地址,其实这是一个误区,下面详情说下,有兴趣可以往下看,没兴趣可以直接将bind绑定的ip改成redis的ip地址 127.0.0.1,比如

bind 10.187.67.63 127.0.0.1

这样配置后,直接跳到启动服务那步骤即可
博主一开始是设定

bind 0.0.0.0

意思是任意ip都可以访问,但是集群后,发现节点直接无法通讯访问,节点报错都是显示无法连接127.0.0.1:7001 或者127.0.0.1:7002等等,就很奇怪,明明没有设置127.0.0.1这个ip地址为什么会出现这种情况,后来修改成

bind 10.187.67.63 127.0.0.1

集群节点之间访问就正常,可以观察如果只绑定一个redis的ip地址,比如

bind 10.187.67.63

ps -ef|grep redis
会显示redis的实例是有携带ip地址的,但是进入其中一个实例后,输入redis的简单操作命令,比如 keys * ,redis会报错,大致说无法定向通讯10.187.67.63的节点,所以博主一直在想是不是bind理解错误了,后来看了其他博主的文章后发现,bind其实是本机内部回环地址,具体说明可以看看别人的说法,博主一时也说不清楚,或者你直接使用博主方式

bind 10.187.67.63 127.0.0.1

参看文章链接:
搭建redis集群发现对Redis的bind的误区
Redis bind属性的配置与redis连接
Redis 配置文件中bind参数

启动服务

进入redis的bin目录

 redis-server /root/resources/redis_cluster/7001/redis.conf

以此类推启动剩余的实例

查看进程

ps -ef | grep redis //查看redis启动情况
netstat -tnlp | grep redis//查看redis端口开启情况

7001-7006端口都表示已启动,说明启动正常

搭建集群

进入redis的bin文件夹中

没有密码的情况集群

redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006

如果设置了密码,集群时不输入密码是无法集群成功的,会报没有权限问题

有密码的情况集群

所有实例设置的密码都是一样,应该只能设置成一样,不然后端不可能去配置多个密码,

redis-cli --cluster create  127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1 -a 密码

中途提示输入yes就可以了
在这里插入图片描述
集群搭建成功

验证效果

目前是刚搭建,没有任何key,进入其中两个实例查看key,看看是否存在key
验证方式,在一台机上set 一个key后,在另一实例上可以随时看到新的key

主从关系

进入任意一个redis实例

redis-cli -h 127.0.0.1 -p 7001
cluster nodes

在这里插入图片描述

主从关系信息

如果实例是slave,后面跟着的id号就是master的id
每行的组成结构如下:
ip:port …
每项的含义如下:

id: 节点ID,是一个40字节的随机字符串,这个值在节点启动的时候创建,并且永远不会改变(除非使用CLUSTER RESET HARD命令)。
ip:port: 客户端与节点通信使用的地址.
flags: 逗号分割的标记位,可能的值有: myself, master, slave, fail?, fail, handshake, noaddr, noflags. 下一部分将详细介绍这些标记.
master: 如果节点是slave,并且已知master节点,则这里列出master节点ID,否则的话这里列出”-“。
ping-sent: 最近一次发送ping的时间,这个时间是一个unix毫秒时间戳,0代表没有发送过.
pong-recv: 最近一次收到pong的时间,使用unix时间戳表示.
config-epoch: 节点的epoch值(or of the current master if the node is a slave)。每当节点发生失败切换时,都会创建一个新的,独特的,递增的epoch。如果多个节点竞争同一个哈希槽时,epoch值更高的节点会抢夺到。
link-state: node-to-node集群总线使用的链接的状态,我们使用这个链接与集群中其他节点进行通信.值可以是 connected 和 disconnected.
slot: 哈希槽值或者一个哈希槽范围. 从第9个参数开始,后面最多可能有16384个 数(limit never reached)。代表当前节点可以提供服务的所有哈希槽值。如果只是一个值,那就是只有一个槽会被使用。如果是一个范围,这个值表示为起始槽-结束槽,节点将处理包括起始槽和结束槽在内的所有哈希槽。
myself: 当前连接的节点.
master: 节点是master.
slave: 节点是slave.
fail?: 节点处于PFAIL 状态。 当前节点无法联系,但逻辑上是可达的 (非 FAIL 状态).
fail: 节点处于FAIL 状态. 大部分节点都无法与其取得联系将会将改节点由 PFAIL 状态升级至FAIL状态。
handshake: 还未取得信任的节点,当前正在与其进行握手.
noaddr: 没有地址的节点(No address known for this node).
noflags: 连个标记都没有(No flags at all)

如果有用,麻烦点个赞,博主在此谢谢!!!!!!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐