一、Redis 6.x 的安装教程见 redis安装教程
因为没有足够的服务器资源,所以下面展示的是在一台服务器上搭建伪集群
二.搭建redis集群
redis集群有投票形式的容错机制,所以要超过半数投票来确定某个节点是否挂掉了,辣么最少就需要3个节点(2个节点投什么票对吧?),而一般一个主节点需要有从节点,达到高可用的目的,辣么redis最少就需要6个节点来集群。
假设搭建的6台端口分别为:7001,7002,7003,7004,7005,7006。
1、将之前跑的redis单例停掉
redis-cli -h xxx.xxx.xxx.xxx -p shutdown -a auth_password
#验证是否已关闭。
ps -ef|grep redis
2.创建redis-cluster目录作为集群目录
找到之前安装redis的目录,我的是/usr/local,创建redis-cluster目录,将之前装过的redis复制一份到redis-cluster目录中去并重命名为redis01。
cd /usr/local
mkdir redis-cluster
cp redis redis-cluster/redis01
3.编辑配置文件并复制出其它5个节点
cd redis01
vi ./rconfig/redis.conf #编辑redis.conf
修改以下一些参数:
# 端口号,redis01的改为7001.
port 7001
# 绑定IP
bind 192.168.200.130
# 密码也是个大坑,不设置还好,设置了对后面创建集群有很大影响,有的人不设置,但我认为真实环境为了安全考虑应该要设置的。
requirepass 123456
# 是否开启后台运行,是。
daemonize yes
# 存放redis数据的目录,比如快照、conf文件、aof日志等等,这个data目录如果没有自己创建,路径对应上就行。
dir /usr/local/redis-cluster/redis01/data
# 后台进程运行需要指定一个pid,虽然有默认的,但集群我们自己指定一个,自己命名。
pidfile /var/run/redis_7001.pid
# 日志文件路径
logfile /usr/local/redis-cluster/redis01/redis.log
# 开启集群
cluster-enabled yes
# 集群的配置,配置文件首次启动自动生成,会放在上面指定的data目录里,自行验证。
cluster-config-file nodes_7001.conf
# 请求超时,默认15秒,可自行设置,我设置为10秒。
cluster-node-timeout 10100
# aof日志开启,有需要就开启,它会每次写操作都记录一条日志,稍微耗性能一点,但实用性比快照要好。
appendonly yes
上述配置完成后记得保存,然后复制5份到同目录,分别为redis02、redis03、redis04、redis05、redis06。
cp -r redis01 redis02
cp -r redis01 redis03
cp -r redis01 redis04
cp -r redis01 redis05
cp -r redis01 redis06
最后,分别修改redis02、redis03、redis04、redis05、redis06中的redis.conf文件,参照第3点中的配置,把port、dir、pidfile、logfile、cluster-config-file的名称路径什么的都改成和节点对应的。
4.编写shell启动和关闭脚本
1、 由于有6个节点,一个个启动比较麻烦,我们编写一个shell直接全部启动,注意按一下方式启动 / 关闭的不是cluster client而只是普通的client
2、注意这里如果在运行redis-server命令时提示-bash command not find
,绝大多数情况是由于没有编译完全,此时回到redis的安装目录,我的是/opt/redis-6.0.9
,进入到其内的 src 目录 执行make install 命令,此时会在/usr/local/bin目录下生成相应的文件。
vim start-all.sh 创建出脚本并命名为start-all.sh
shell启动脚本如下:
cd redis01
redis-server ./rconfig/redis.conf
cd ..
cd redis02
redis-server ./rconfig/redis.conf
cd ..
cd redis03
redis-server ./rconfig/redis.conf
cd ..
cd redis04
redis-server ./rconfig/redis.conf
cd ..
cd redis05
redis-server ./rconfig/redis.conf
cd ..
cd redis06
redis-server ./rconfig/redis.conf
3、编写完shell脚本后保存退出,然后赋予权限,因为目前还不是可执行文件。变成绿色的就表示赋予权限成功,变成了可执行文件。
赋予权限:chmod +x start-all.sh
执行启动脚本:./start-all.sh
验证是否启动:ps aux|grep redis
如图,6个节点都启动了,并且是cluster模式,表示集群模式。
同理,由于6个节点,一个个关闭也比较麻烦,我们编写一个shell直接全部关闭。
vim shutdown-all.sh 创建关闭脚本,并命名为shutdown-all.sh
shell脚本如下:
cd redis01
redis-cli -p 7001 -a '123456' shutdown
cd ..
cd redis02
redis-cli -p 7002 -a '123456' shutdown
cd ..
cd redis03
redis-cli -p 7003 -a '123456' shutdown
cd ..
cd redis04
redis-cli -p 7004 -a '123456' shutdown
cd ..
cd redis05
redis-cli -p 7005 -a '123456' shutdown
cd ..
cd redis06
redis-cli -p 7006 -a '123456' shutdown
cd ..
创建完成后保存并退出,然后赋予权限,让其变为可执行文件。
chmod +x shutdown-all.sh
然后执行关闭脚本: ./shutdown-all.sh
验证是否全部关闭:ps aux|grep redis
PS: 这里关闭也有一个坑,就是因为密码的原因,如果没有设置requirepass,shell脚本中就不需要加上 -a ‘123456’ ,如果设置了密码,就必须加上这一句,否则一直关闭不成功。
5.创建集群,让6个节点都连接起来。
从redis 5.x开始不需要再借助redis-trib.rb来创建集群了,可以直接利用如下命令来创建集群
Redis 5提供的redis-cli –cluster的命令可以一次性自动的解决集群搭建问题,甚至将hash slots都给你平均分好了,只要你敲yes即可
redis-cli --cluster create
192.168.200.130:7001
192.168.200.130:7002
192.168.200.130:7003
192.168.200.130:7004
192.168.200.130:7005
192.168.200.130:7006
--cluster-replicas 1 # --cluster-replicas表示集群中每个master的slave节点的数量
-a xxxxxx #如果需要权限验证也就是master设置了require password的话可以在命令的最后面加上 -a xxx
六、client链接集群的某个节点和关闭集群
#链接集群的某个节点,注意不要忘记 -c 参数,没有它则此client链接的不是cluster上的节点
redis-cli -c -h xxx.xxx.xxx.xxx -p xxxx -a xxxx
#关闭集群的某个节点
redis-cli -c -h xxx.xxx.xxx.xxx -p xxxx -a xxxx shutdown
#查看集群的所有键值对
redis-cli -c -a xxxx --cluster call [host:port] keys \*
#清空集群的所有键值对
redis-cli -c -a xxxx --cluster call [host:port] flushall