最近开始学redis了,在安装、配置、使用过程中遇到了不少的坑,在这里记录并分享一下解决办法

Redis安装


  1. 通过官网下载Redis的压缩包 https://redis.io/downloadredis目前的最新版本是5.X,我下载的是4.0.14版本的,如果有需要4.0.14版本的redis压缩包可以在评论中留言
  2. yum install redis 安装软件包 无可用的软件包 redis安装不上_Redis

  3. 在安装redis之前需要先安装gcc,目的是为了编译文件
yum install gcc-c++
  1. 将压缩包放到服务器(或者虚拟机)中,由于我使用的华为云服务器,所以我把压缩包放到了 /root/software目录下,然后通过指令解压压缩包
cd /root/software
tar -zxvf redis-4.0.14.tar.gz

yum install redis 安装软件包 无可用的软件包 redis安装不上_linux_02

  1. 把解压的文件copy到 /usr/local/src 目录下,同时将文件夹名字改为redis
cp -r /root/software/redis-4.0.14 /usr/local/src/
改名
cd /usr/local/src/
mv redis-4.0.14  redis
  1. 打开 /usr/local/src/redis/deps 进行编译依赖项
cd /usr/local/src/redis/deps
make hiredis lua jemalloc linenoise
  1. 打开 /usr/local/src/redis 进行编译
cd /usr/local/src/redis
make
  1. 在上面的Redis目录安装把它安装到 /usr/local/redis 里面
mkdir /usr/local/redis
make install PREFIX=/usr/local/redis

yum install redis 安装软件包 无可用的软件包 redis安装不上_Redis_03


看到图中的提示说明安装成功

  1. 验证安装是否成功
cd /usr/local/redis/bin
ls

yum install redis 安装软件包 无可用的软件包 redis安装不上_配置文件_04


redis-benchmark:redis性能测试工具
redis-check-aof:检查aof日志的工具
redis-check-dump:检查rdb日志的工具
redis-cli:连接用的客户端
redis-server:redis服务进程

看到如图的启动文件就可以了

到这里redis已经安装完成了,不过我多做了一步,将redis的配置文件单独放到了一个文件夹中

mkdir /root/myredis
cp /usr/local/src/redis/redis.conf /root/myredis
  1. 启动Redis
cd /usr/local/redis/bin
./redis-server /root/myredis/redis.conf

yum install redis 安装软件包 无可用的软件包 redis安装不上_redis_05

注:默认情况,Redis不是在后台运行,我们需要把redis放在后台运行

vi /root/myredis/redis.conf

yum install redis 安装软件包 无可用的软件包 redis安装不上_配置文件_06

之后再次启动redis并且查看进程

# 查看进程
ps -ef|grep redis

yum install redis 安装软件包 无可用的软件包 redis安装不上_Redis_07


可以看到在6379端口号已启动了redis

  1. 客户端相关操作
# 连接
cd /usr/local/redis/bin
./redis-cli  默认是-h 127.0.0.1 -p 6379  
# 查看redis是否通,如果返回PONG说明通了
ping
# 停止redis
cd /usr/local/redis/bin
./redis-cli shutdown
#或者
pkill redis-server
# 客户端内停止redis
shutdown
# 退出
quit

yum install redis 安装软件包 无可用的软件包 redis安装不上_redis_08

  1. redis设置密码
config set requirepass 密码

yum install redis 安装软件包 无可用的软件包 redis安装不上_linux_09


注:如果你是云服务器的话,redis一定要设置密码,而且密码最好是字母+数字+英文特殊符号(这里一定要是英文的特殊符号,不然后期SpringBoot连接redis会连接不上),不然你的服务器很容易被别人挖矿当成肉鸡用,我一天之内被挖了两次,服务器也重置了两次

Redis高可用高并发集群搭建与配置

我使用了7000、7001、7002、7003、7004、7005六个端口搭建集群,三个主机,三个从机,我先把可能遇到的坑写在这里

错误一:sorry, can’t connect to node

解决方法:
1、确保你的六个redis是已经启动的,可以通过 ps -ef | grep redis 命令查看

2、修改redis几个节点里面的配置文件,将 protected-mode yes 改为 protected-mode no。关闭保护模式。同时还有 bin 127.0.0.1 修改为 0.0.0.0 或者连接 redis 的主机 ip

3、开放端口,由于我是使用的7000、7001、7002、7003、7004、7005端口,然后由于redis内部总线端口通信使用特殊协议,会使用 开放端口+10000 这个端口,所以我们还需要开放17000、17001、17002、17003、17004、17005端口,如果你是云服务器的话,不要忘记在控制台安全组中开放相应端口

# 开放端口命令
firewall-cmd --zone=public --add-port=7000/tcp --permanent
firewall-cmd --zone=public --add-port=7001/tcp --permanent
firewall-cmd --zone=public --add-port=7002/tcp --permanent
firewall-cmd --zone=public --add-port=7003/tcp --permanent
firewall-cmd --zone=public --add-port=7004/tcp --permanent
firewall-cmd --zone=public --add-port=7005/tcp --permanent
firewall-cmd --zone=public --add-port=17000/tcp --permanent
firewall-cmd --zone=public --add-port=17001/tcp --permanent
firewall-cmd --zone=public --add-port=17002/tcp --permanent
firewall-cmd --zone=public --add-port=17003/tcp --permanent
firewall-cmd --zone=public --add-port=17004/tcp --permanent
firewall-cmd --zone=public --add-port=17005/tcp --permanent
# 重启防火墙
firewall-cmd --reload
# 查看哪些端口是开启的
firewall-cmd --list-port

错误二:创建集群时一直处于"Waiting for the cluster to join…"的状态

这个错误是因为端口问题引起的,解决方法参考错误一

错误三:Node 121.36.17.228:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

解决方法:
1、将每个节点下aof、rdb、nodes.conf本地备份文件删除;

2、172.168.63.201:7001> flushdb #清空当前数据库(可省略)

3、再次执行脚本,正常情况下成功执行

错误四:ERR Slot 0 is already busy (Redis::CommandError)

错误提示是说:slot插槽被占用了、这是因为 搭建集群前时,以前redis的旧数据和配置信息没有清理干净。

解决方法:用 redis-cli 登录到每个节点执行 flushall 和 cluster reset

yum install redis 安装软件包 无可用的软件包 redis安装不上_配置文件_10

之后再次执行创建集群命令

redis集群搭建过程:

  1. 在 /root 路径下新建文件夹 redis-cluster,同时将 redis-server 和 redis-cli 拷贝进去
cd /root
mkdir redis-cluster

cp /usr/local/redis/bin/redis-server  /root/redis-cluster/redis-server
cp /usr/local/redis/bin/redis-cli  /rootredis-cluster/redis-cli
  1. 准备六个redis配置文件
cd /root/redis-cluster
mkdir redis-1
mkdir redis-2
mkdir redis-3
mkdir redis-4
mkdir redis-5
mkdir redis-6

cp /root/myredis/redis.conf /root/redis-cluster/redis-1/redis.conf
cp /root/myredis/redis.conf /root/redis-cluster/redis-2/redis.conf
cp /root/myredis/redis.conf /root/redis-cluster/redis-3/redis.conf
cp /root/myredis/redis.conf /root/redis-cluster/redis-4/redis.conf
cp /root/myredis/redis.conf /root/redis-cluster/redis-5/redis.conf
cp /root/myredis/redis.conf /root/redis-cluster/redis-6/redis.conf
  1. 修改新准备的六个redis配置文件
# Redis-1文件夹中redis.conf配置文件修改
bind 0.0.0.0                    69行
protected-mode no				88行
port 7000                       92行
daemonize yes                   136行
# 打开aof 持久化
appendonly yes                  672行 
# 开启集群
cluster-enabled yes             814行
# 集群的配置文件,该文件自动生成   
cluster-config-file nodes-7000.conf  822行
# 集群的超时时间
cluster-node-timeout 5000         828行

其他五个配置文件除了端口号之外其他和第一个配置文件修改相同,例如

# Redis-2文件夹中redis.conf配置文件修改
bind 0.0.0.0                    69行
protected-mode no				88行
port 7001                       92行
daemonize yes                   136行
# 打开aof 持久化
appendonly yes                  672行 
# 开启集群
cluster-enabled yes             814行
# 集群的配置文件,该文件自动生成   
cluster-config-file nodes-7001.conf  822行
# 集群的超时时间
cluster-node-timeout 5000         828行
  1. 同时启动所有的redis
cd /root/redis-cluster
./redis-server /root/redis-cluster/redis-1/redis.conf
./redis-server /root/redis-cluster/redis-2/redis.conf
./redis-server /root/redis-cluster/redis-3/redis.conf
./redis-server /root/redis-cluster/redis-4/redis.conf
./redis-server /root/redis-cluster/redis-5/redis.conf
./redis-server /root/redis-cluster/redis-6/redis.conf
  1. 使用docker 下载redis-trib的镜像运行
# 安装Docker
yum install docker
# 启动docker
systemctl start docker
# A: 下载镜像
docker pull inem0o/redis-trib

之后运行创建集群命令(192.168.120.129是服务器或者虚拟机密码,记得更换成你自己的)

docker run -it --net host inem0o/redis-trib create --replicas 1 192.168.120.129:7000 192.168.120.129:7001 192.168.120.129:7002 192.168.120.129:7003 192.168.120.129:7004 192.168.120.129:7005

注:集群连接代码必须要在同一行

  1. 集群设置密码
    如果你需要使用外部主机连接集群,这里最好要设置密码,而且要设置强密码(字母+数字+英文特殊符号),不然你会被挖矿工疯狂挖矿,严重的还会导致你的服务器ip被封禁
# 进入各个实例进行设置    -c 表示连接集群
./redis-cli -c -p 7000 
config set masterauth 密码
config set requirepass 密码
config rewrite

之后分别使用 ./redis-cli -c -p 7001,./redis-cli -c -p 7002 … 给每个节点设置上密码。

注:各个节点密码都必须一致,否则Redirected就会失败, 推荐这种方式,这种方式可以在redis启动的时候把密码写入到redis.conf里面去,且不用重启redis

  1. 测试集群环境
# 连接7000
./redis-cli -c -p 7000 -a 密码

yum install redis 安装软件包 无可用的软件包 redis安装不上_Redis_11


可以发现插入的数据会存放到不同的redis中,到此集群搭建完成