目录
一、工具版本
- redis 5.0.7
- VMware-workstation-full-14.1.7-12989993
- CentOS-7-x86_64-DVD-1908
- putty_V0.63.0.0.43510830
- FileZilla_3.37.4_win64-setup_bundled
二、排除问题及解决方案
如果是新安装的CentOS-7系统,需要下载安装一些命令,不然会遇到各种报错,下面是我遇到的一些问题及解决方案,提前贴出来,在执行的时候方面查询!
- -bash wget:未找到命令
# -bash wget:未找到命令
# 安装wget,在下载redis包时提示错误信息
yum install wget
- gcc:命令未找到
# 执行make命令时出错
yum -y install gcc automake autoconf libtool make
- redis编译报致命错误:jemalloc/jemalloc.h:没有那个文件或目录
# 执行make命令时出第二个错
make MALLOC=libc
分配器allocator, 如果有MALLOC 这个 环境变量, 会有用这个环境变量的 去建立Redis。
而且libc 并不是默认的 分配器, 默认的是 jemalloc, 因为 jemalloc 被证明 有更少的 fragmentation problems 比libc。
但是如果你又没有jemalloc 而只有 libc 当然 make 出错。 所以加这么一个参数,运行如下命令:
原文链接:https://blog.csdn.net/honchou56/article/details/53994708
- netstat: 未找到命令
yum -y install net-tools
三、开始安装
首先选择redis安装目录,我是用的是/usr/local
1.下载和解压
cd /usr/local/
mkdir redis
cd redis
# 此处出错查看------>排除问题及解决方案 1
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
tar xzvf redis-5.0.7.tar.gz
cd redis-5.0.7
# 此处出错查看------>排除问题及解决方案 2、3
make
2.处理节点配置文件
由于一个系统配置6个节点的伪集群,我们需要把这6个节点配置文件放置到不同的文件夹里
#建立配置文件文件夹,目前目录在redis-5.0.7下
mkdir 7000 7001 7002 7003 7004 7005
3.配置文件redis.conf
#端口
port 7000
#此redis实例作为集群的一个节点
cluster-enabled yes
#节点能够失联的最大时间
cluster-node-timeout 15000
#集群配置文件,系统自动维护,不能人工编辑,主要记录集群中有哪些节点,状态等参数
cluster-config-file nodes-7000.conf
#后台运行
daemonize yes
#持久化
appendonly yes
#非保护模式,设置为no此时外部网络可以直接访问否则需要bind ip
protected-mode no
#redis以守护进程方式运行时
pidfile /var/run/redis_7000.pid
强调: 网络上很多教程没有说 cluster-config-file 也需要跟着不同文件改变,导致我最初失败了很多次,只能启动一个节点。
port 、 cluster-config-file 、 pidfile 三个配置根据不同文件夹进行更改,最后放入对应的文件夹中。
4、启动节点
/usr/local/redis/redis-5.0.7/src/redis-server /usr/local/redis/redis-5.0.7/7000/redis.conf
/usr/local/redis/redis-5.0.7/src/redis-server /usr/local/redis/redis-5.0.7/7001/redis.conf
/usr/local/redis/redis-5.0.7/src/redis-server /usr/local/redis/redis-5.0.7/7002/redis.conf
/usr/local/redis/redis-5.0.7/src/redis-server /usr/local/redis/redis-5.0.7/7003/redis.conf
/usr/local/redis/redis-5.0.7/src/redis-server /usr/local/redis/redis-5.0.7/7004/redis.conf
/usr/local/redis/redis-5.0.7/src/redis-server /usr/local/redis/redis-5.0.7/7005/redis.conf
启动提示如图:
查看所有redis进程,可以看到已经启动的节点
# 这里提示netstat: 未找到命令 查看------>排除问题及解决方案 4
netstat -ap | grep redis
进入/var/run/目录下 可以看到每个节点对应的pid文件
5.开启集群
5.1 获取ip
通过ip addr 来获取ip,如果ens33下没有inet 地址,请查看下面地址开启网络服务Centos 7 输入ip addr 没有ip问题
5.2 创建集群
# 这里后面的ip是linux系统的ip,自行更改成刚才获取到的ip地址
/usr/local/redis/redis-5.0.7/src/redis-cli --cluster create 192.168.122.128:7000 192.168.122.128:7001 192.168.122.128:7002 192.168.122.128:7003 192.168.122.128:7004 192.168.122.128:7005 --cluster-replicas 1
提示如下图时,集群已经搭建完毕!
至此已经搭建成功!
四、 测试
1.登录到一个节点
redis-cli -c -h host -p port -a password
- -c表示集群
- -h表示地址
- -a表示auth,没有可省略
/usr/local/redis/redis-5.0.7/src/redis-cli -c -h 192.168.122.128 -p 7000
2.查看集群信息
cluster nodes
在节点7005插入aa=123,切换登录到节点7000后get aa 得到123,认证完毕!
五、加入新的节点
- 像前几步新建7006文件夹,把对应配置文件改好后放进去,启动节点
#添加7006节点至7000集群,后面的7000可以是集群内任意节点,
/usr/local/redis/redis-5.0.7/src/redis-cli --cluster add-node 192.168.122.128:7006 192.168.122.128:7002
有可能会报错Node 192.168.122.128:7006 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
进入这个新创的节点执行flushdb解决
进入任意一个节点,执行命令
/usr/local/redis/redis-5.0.7/src/redis-cli -c -h 192.168.122.128 -p 7003
cluster nodes
可以查看到7006已经在里面
六、 拓展
#查看某节点信息
/usr/local/redis/redis-5.0.7/src/redis-cli -h 127.0.0.1 -p 7006 info
#7007节点添加至cluster-master-id为7006的从节点
/usr/redis/bin/redis-cli --cluster add-node 192.168.195.128:7007 192.168.195.128:7000 --cluster-slave --cluster-master-id ac42afe9091f1f18a8ab609c06b9c64123e97f9b
#分配卡槽
/usr/redis/bin/redis-cli --cluster reshard 192.168.195.128:7000
#还原卡槽
/usr/redis/bin/redis-cli --cluster reshard 192.168.195.128:7000 --cluster-from ac42afe9091f1f18a8ab609c06b9c64123e97f9b --cluster-to 7630463201989e4226421779400e1b31aca74757 --cluster-slots 4096
#关于防火墙如果在虚拟机外部链接redis集群报错,可能是因为防火墙问题,比如这个错误:
redis.clients.jedis.exceptions.JedisNoReachableClusterNodeException: No reachable node in cluster
#查看防火墙状态
#执行后可以看到绿色字样标注的“active(running)”,说明防火墙是开启状态
systemctl status firewalld.service
#关闭运行的防火墙
systemctl stop firewalld.service
#查看防火墙状态
systemctl status firewalld.service
#永久关闭防火墙
systemctl disable firewalld.service
七、Amazing
刚才reids官网挂了