Centos7中搭建Redis6集群操作步骤
下载安装包
# 进入软件下载目录
cd /root/software
# 下载安装包
wget https://download.redis.io/releases/redis-6.2.0.tar.gz
# 确认下载安装包
ll
解压安装装包
# 进入安装目录
cd /root/program
# 创建安装软件目录
mkdir redis
cd redis
# 确认当前目录
pwd
# /root/program/redis
# 复制安装包
cp /root/software/redis-6.2.0.tar.gz .
# 解压目录
tar -xvf redis-6.2.0.tar.gz
安装依赖
# 确认gcc是否已安装及版本
gcc -v
# 安装gcc依赖
yum install gcc
# CentOS7默认安装的是4.8.5,而redis6.0只支持5.3以上版本,这里将gcc升级到9
yum install centos-release-scl
yum install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
# 永久切换gcc版本
echo “source /opt/rh/devtoolset-9/enable” >> /etc/profile
# 临时切换gcc版本
scl enable devtoolset-9 bash
# 查看gcc版本
gcc -v
安装
# 进入解压后目录
cd /root/program/redis/redis-6.2.0
# 编译
make MALLOC=libc
# 安装
make install PREFIX=/usr/local/redis
# 确认是否安装成功
cd /usr/local/redis/bin
# 如果出现下面的结果则证明已安装成功
[root@localhost bin]# ll
total 8424
-rwxr-xr-x. 1 root root 963456 Mar 1 10:00 redis-benchmark
lrwxrwxrwx. 1 root root 12 Mar 1 10:00 redis-check-aof -> redis-server
lrwxrwxrwx. 1 root root 12 Mar 1 10:00 redis-check-rdb -> redis-server
-rwxr-xr-x. 1 root root 1202888 Mar 1 10:00 redis-cli
lrwxrwxrwx. 1 root root 12 Mar 1 10:00 redis-sentinel -> redis-server
-rwxr-xr-x. 1 root root 6452272 Mar 1 10:00 redis-server
# 配置全局可以使用Redis命令
cp redis-cli /usr/bin/redis-cli
cp redis-server /usr/bin/redis-server
# 确认是否可以使用全局变量
redis-cli
创建目录
# 创建对应数据文件目录
cd /root/
mkdir data
cd data/
mkdir redis
cd redis/
# 确认当前所在的操作目录
pwd
# /root/data/redis
# 创建相应的文件目录
mkdir run log data conf
# 创建数据对应rdb文件每个端口对应目录
cd data
mkdir 7000 7001 7002 7003 7004 7005
设置配置文件
# 进入安装包目录
cd /root/program/redis/redis-6.2.0
# 复制配置文件到目标目录
cp redis.conf /root/data/redis/conf/redis_7000.conf
# 进入配置文件对应目录
cd /root/data/redis/conf
# 配置配置文件内容,修改文件内容如下:
vim redis_7000.conf
# 一.允许远程访问
#1. 注释掉下面代码,或者改为 bind 0.0.0.0,第75行
bind 0.0.0.0
#2. 关闭保护模式,第94行
protected-mode no
# 二.通用配置
#1. 开启守护进程,第247行
daemonize yes
#2. 配置密码(必须设置相同的密码,不设masterauth的话宕机了不能自动恢复),第879行
requirepass tdfdsfnkinki.net
#集群节点间的访问密码,第474行
masterauth tdfdsfnkinki.net
# 持久化类型
appendonly yes
appendfilename "appendonly-7000.aof"
# 三.集群配置
port 7000 #配置端口,第98行
cluster-enabled yes #开启集群,第1363行
cluster-config-file nodes-7000.conf #集群节点配置文件,第1371行
pidfile /root/data/redis/run/redis_7000.pid #进程文件ID对应文件,第279行
cluster-node-timeout 5000 #集群节点超时时间,超过这个时间,集群认为该节点故障,如果是主节点,会进行相应的主从切换,第1377行
# 四.配置对应目录
logfile /root/data/redis/log/redis_7000.log #日志文件,第292行
dir /root/data/redis/data/7000 #目录要提前创建好,第444行
# 将当前7000的配置文件复制为其他端口的配置文件,7001、7002、7003、7004、7005
# 复制配置文件
cp redis_7000.conf redis_7001.conf
cp redis_7000.conf redis_7002.conf
cp redis_7000.conf redis_7003.conf
cp redis_7000.conf redis_7004.conf
cp redis_7000.conf redis_7005.conf
# 修改与端口号有关的配置,对应端口号与当前端口号一致,在所有的配置文件中均需要进行修改配置,具体修改内容如下所示:
# 二.通用配置
appendfilename "appendonly-7000.aof"
# 三.集群配置
port 7001 #配置端口,第98行
cluster-config-file nodes-7001.conf #集群节点配置文件,第1371行
pidfile /root/data/redis/run/redis_7001.pid #进程文件ID对应文件,第279行
# 四.配置对应目录
logfile /root/data/redis/log/redis_7001.log #日志文件,第292行
dir /root/data/redis/data/7001 #目录要提前创建好,第444行
创建启动服务
下面以7000端口为例创建系统服务,其余端口模仿此配置进行修改,需修改对应的端口号数据。
# 创建服务文件
vim /etc/systemd/system/redis-7000.service
# 文件内容如下:
[Unit]
Description=The redis-cluster-server-7000 Process Manager
After=syslog.target network.target
[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /root/data/program/redis/data/conf/redis_7000.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
# 重新加载
systemctl daemon-reload
# 启动服务
systemctl start redis-7000
# 查看服务状态
systemctl status redis-7000
# 设置开机启动
systemctl enable redis-7000
制作启动文件
# 系统对应的服务即可
systemctl start redis-7000
systemctl start redis-7001
systemctl start redis-7002
systemctl start redis-7003
systemctl start redis-7004
systemctl start redis-7005
启动并验证Redis
# 查看启动状态
ps aux | grep redis
开放防火墙端口
# 查看防火墙状态
systemctl status firewalld
# 查看已经开放的端口
firewall-cmd --list-ports
# 开放端口
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-ports
创建集群
用以下命令创建集群,--cluster-replicas 1 参数表示希望每个主服务器都有一个从服务器,这里则代表3主3从,前3个代表3个master,后3个代表3个slave。
通过该方式创建的带有从节点的机器不能够自己手动指定主节点,Redis集群会尽量把主从服务器分配在不同机器上。
# 进入启动脚本目录
cd /root/data/redis
# 启动集群
./cluster_start.sh
# 创建集群
redis-cli -a tdfdsfnkinki.net --cluster create 192.168.110.129:7000 192.168.110.129:7001 192.168.110.129:7002 192.168.110.129:7003 192.168.110.129:7004 192.168.110.129:7005 --cluster-replicas 1
# 确认对应主从节点配置信息,没有问题后输入yes即可,输出的信息如下所示:
[root@localhost redis]# redis-cli -a ttknoa@cnki.net --cluster create 192.168.110.129:7000 192.168.110.129:7001 192.168.110.129:7002 192.168.110.129:7003 192.168.110.129:7004 192.168.110.129:7005 --cluster-replicas 1
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.110.129:7004 to 192.168.110.129:7000
Adding replica 192.168.110.129:7005 to 192.168.110.129:7001
Adding replica 192.168.110.129:7003 to 192.168.110.129:7002
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: a91202256714e5c1988e651e0561f36fa3e893af 192.168.110.129:7000
slots:[0-5460] (5461 slots) master
M: 9e9a9dd3256aef33108c33955237b593df64448c 192.168.110.129:7001
slots:[5461-10922] (5462 slots) master
M: e6c4b9ead90526d54713f5471f4bdb763a32156f 192.168.110.129:7002
slots:[10923-16383] (5461 slots) master
S: 1c1a7082395374d3364f856317afaaec01251c9a 192.168.110.129:7003
replicates e6c4b9ead90526d54713f5471f4bdb763a32156f
S: 81880bd5afd523932df5f201141fbca2c422d267 192.168.110.129:7004
replicates a91202256714e5c1988e651e0561f36fa3e893af
S: c7f24bdc1d7648f1841d3a958d108279bd552025 192.168.110.129:7005
replicates 9e9a9dd3256aef33108c33955237b593df64448c
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
..
>>> Performing Cluster Check (using node 192.168.110.129:7000)
M: a91202256714e5c1988e651e0561f36fa3e893af 192.168.110.129:7000
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: e6c4b9ead90526d54713f5471f4bdb763a32156f 192.168.110.129:7002
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: c7f24bdc1d7648f1841d3a958d108279bd552025 192.168.110.129:7005
slots: (0 slots) slave
replicates 9e9a9dd3256aef33108c33955237b593df64448c
M: 9e9a9dd3256aef33108c33955237b593df64448c 192.168.110.129:7001
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: 1c1a7082395374d3364f856317afaaec01251c9a 192.168.110.129:7003
slots: (0 slots) slave
replicates e6c4b9ead90526d54713f5471f4bdb763a32156f
S: 81880bd5afd523932df5f201141fbca2c422d267 192.168.110.129:7004
slots: (0 slots) slave
replicates a91202256714e5c1988e651e0561f36fa3e893af
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
集群其他操作
# 连接到集群上(任何一个节点即可),进行集群信息的查看
redis-cli -c -h 192.168.110.129 -p 7000 -a tdfdsfnki.net
# 查看节点信息
cluster nodes
# 查看集群信息
cluster info
# 查看槽位信息
cluster slots
# 计算某个key的槽位
cluster keyslot xxx
# 关闭redis
./redis-cli shutdown
#直接结束线程
kill -p pid
注意
这里是在一台服务器部署的,所以各个redis实例之间是可以相互通信的,如果是多服务器部署cluster,除了保证redis基础端口开放,还要保证cluster的通信端口开放,即 通信端口=基础端口号 + 10000 。
主节点上有槽位,删除前必须先把槽位迁移。
新加进去的节点默认都为master主节点。
当被删除掉的节点重新起来之后不能自动加入集群,但其和主的复制还是正常的,也可以通过该节点看到集群信息(通过其他正常节点已经看不到该被del-node节点的信息)。
如果想要再次加入集群,则需要先在该节点执行cluster reset,再用add-node进行添加,进行增量同步复制。