写在最前:服务器挖矿亲🐴biss
最近开始学redis了,在安装、配置、使用过程中遇到了不少的坑,在这里记录并分享一下解决办法
Redis安装
-
通过官网下载Redis的压缩包 https://redis.io/download
redis目前的最新版本是5.X,我下载的是4.0.14版本的,如果有需要4.0.14版本的redis压缩包可以在评论中留言
-
在安装redis之前需要先安装gcc,目的是为了编译文件
yum install gcc-c++
-
将压缩包放到服务器(或者虚拟机)中,由于我使用的华为云服务器,所以我把压缩包放到了 /root/software目录下,然后通过指令解压压缩包
cd /root/software tar -zxvf redis-4.0.14.tar.gz
-
把解压的文件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
-
打开 /usr/local/src/redis/deps 进行编译依赖项
cd /usr/local/src/redis/deps make hiredis lua jemalloc linenoise
-
打开 /usr/local/src/redis 进行编译
cd /usr/local/src/redis make
-
在上面的Redis目录安装把它安装到 /usr/local/redis 里面
mkdir /usr/local/redis make install PREFIX=/usr/local/redis
看到图中的提示说明安装成功 -
验证安装是否成功
cd /usr/local/redis/bin ls
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
-
启动Redis
cd /usr/local/redis/bin ./redis-server /root/myredis/redis.conf
注:默认情况,Redis不是在后台运行,我们需要把redis放在后台运行
vi /root/myredis/redis.conf
之后再次启动redis并且查看进程
# 查看进程 ps -ef|grep redis
可以看到在6379端口号已启动了redis -
客户端相关操作
# 连接 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
-
redis设置密码
config set requirepass 密码
注:如果你是云服务器的话,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
之后再次执行创建集群命令
redis集群搭建过程:
-
在 /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
-
准备六个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
-
修改新准备的六个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行
-
同时启动所有的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
-
使用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
注:集群连接代码必须要在同一行
-
集群设置密码
如果你需要使用外部主机连接集群,这里最好要设置密码,而且要设置强密码(字母+数字+英文特殊符号),不然你会被挖矿工疯狂挖矿,严重的还会导致你的服务器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
-
测试集群环境
# 连接7000 ./redis-cli -c -p 7000 -a 密码
可以发现插入的数据会存放到不同的redis中,到此集群搭建完成