系统为 Redhat 7.4
数据库为 Redis 5.0.8
1. redis集群规划
节点编号 | IP地址 | 端口 | 节点类型 | 配置文件 |
---|---|---|---|---|
1 | 172.18.95.83 | 6379 | 主 | /home/redis/cluster/6379/redis_6379.conf |
2 | 172.18.95.84 | 6379 | 主 | /home/redis/cluster/6379/redis_6379.conf |
3 | 172.18.95.85 | 6379 | 主 | /home/redis/cluster/6379/redis_6379.conf |
4 | 172.18.95.83 | 6380 | 从 | /home/redis/cluster/6380/redis_6380.conf |
5 | 172.18.95.84 | 6380 | 从 | /home/redis/cluster/6380/redis_6380.conf |
6 | 172.18.95.85 | 6380 | 从 | /home/redis/cluster/6380/redis_6380.conf |
7 | 172.18.95.83 | 6381 | 从 | /home/redis/cluster/6381/redis_6381.conf |
8 | 172.18.95.84 | 6381 | 从 | /home/redis/cluster/6381/redis_6381.conf |
9 | 172.18.95.85 | 6381 | 从 | /home/redis/cluster/6381/redis_6381.conf |
2 安装redis软件
首先我们根据以前的内容安装3套redis
其中配置文件的目录参考上面的规划
3.新建目录
三台机器
su - redis
mkdir -p /home/redis/cluster/6379
mkdir -p /home/redis/cluster/6380
mkdir -p /home/redis/cluster/6381
4.集群配置文件
接下来我们分别在/home/redis/cluster目录下建立哨兵配置文件(共9个)
这里以节点1为例,其他节点参考
其实只是比单机的配置文件多了一些集群相关的配置
节点1
$ cat /home/redis/cluster/6379/redis_6379.conf
daemonize yes
bind 172.18.95.83
port 6379
tcp-backlog 1024
timeout 300
tcp-keepalive 300
databases 16
requirepass 123456
masterauth 123456
cluster-enabled yes
cluster-node-timeout 15000
cluster-config-file nodes-6379.conf
pidfile "/home/redis/cluster/6379/redis_6379.pid"
loglevel notice
logfile "/home/redis/cluster/6379/redis_6379.log"
dir "/home/redis/cluster/6379"
dbfilename "dump.rdb"
stop-writes-on-bgsave-error no
rdbcompression yes
rdbchecksum yes
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
aof-load-truncated yes
no-appendfsync-on-rewrite no
aof-rewrite-incremental-fsync yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 32mb
maxclients 65503
maxmemory 1gb
maxmemory-policy allkeys-lru
# replication
slave-serve-stale-data yes
slave-read-only yes
repl-disable-tcp-nodelay no
repl-backlog-size 32mb
# slow log
slowlog-log-slower-than 10000
slowlog-max-len 1024
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 512mb 512mb 60
client-output-buffer-limit pubsub 64mb 16mb 60
protected-mode yes
# security
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command KEYS ""
上面参数我们需要根据实际情况修改一些参数
bind 172.18.95.84 127.0.0.1 监听地址,个使用本机IP地址
port 6380 监听端口
maxmemory redis允许使用的大内存,根据服务器配置和业务需求决定
requirepass 123456 redis密码,可以注释掉表示不设置
masterauth 123456 连接master时用的密码,如master未设置可注释掉
还需要根据实际修改配置文件和日志文件的路径和名称
5.启动redis
接下来我们启动所有8个redis节点
启动redis
su - redis
172.18.95.83
/usr/local/bin/redis-server /home/redis/cluster/6379/redis_6379.conf
/usr/local/bin/redis-server /home/redis/cluster/6380/redis_6380.conf
/usr/local/bin/redis-server /home/redis/cluster/6381/redis_6381.conf
172.18.95.84
/usr/local/bin/redis-server /home/redis/cluster/6379/redis_6379.conf
/usr/local/bin/redis-server /home/redis/cluster/6380/redis_6380.conf
/usr/local/bin/redis-server /home/redis/cluster/6381/redis_6381.conf
172.18.95.85
/usr/local/bin/redis-server /home/redis/cluster/6379/redis_6379.conf /usr/local/bin/redis-server /home/redis/cluster/6380/redis_6380.conf
/usr/local/bin/redis-server /home/redis/cluster/6381/redis_6381.conf
这时我们查看集群状态发现是fail的,而且没有其他节点的信息
集群文件也只有一个节点的信息
[redis@SYTEST1 6379]$ more nodes-6379.conf
9a74ab968c706a36d7a44427a45e4c151a8bfa63 :0@0 myself,master - 0 0 0 connected
vars currentEpoch 0 lastVoteEpoch 0
同时集群也是不能写入的
172.18.95.83:6379> set hello world
(error) CLUSTERDOWN Hash slot not served
172.18.95.83:6379>
6. 搭建集群
接下来我们来搭建集群
除了手动搭建,我们这里使用命令来自动化安装
redis 3和4的版本需要使用ruby脚本来完成自动化安装,到了5的版本,该功能已经集成到redis-cli命令中
我们输入如下命令完成搭建
因为我们这里舍得6379端口是主节点所以我们将6379的端口写在前面
其中一个节点
redis-cli -a "123456" --cluster create 172.18.95.83:6379 172.18.95.84:6379 172.18.95.85:6379 172.18.95.83:6380 172.18.95.84:6380 172.18.95.85:6380 172.18.95.83:6381 172.18.95.84:6381 172.18.95.85:6381 --cluster-replicas 2
--cluster-replicas 2 表示一主两从
这里填入yes
可以看到该命令已经将从节点分配在不同节点上了,并且6379端口为主节点
后完成了搭建并打印结果
对于集群我们只要保证主从节点不在同一个服务器就可以了,如果需要固定的主从关系,请使用后面的命令来改变关系
7.连接redis集群
我们使用如下命令来连接集群,可选择任一节点
[redis@SYTEST1 6379]$ redis-cli -h 172.18.95.83 -p 6379 -a 123456 -c
这里必须加入-c参数,否则如果操作的key的slot值不在该节点会导致命令执行失败
8.查询集群信息
查询节点信息
cluster nodes
查询slot信息
该命令可以更直观的查看集群的架构
cluster slots
查询集群状态
cluster info
手动failover
有时集群宕机重启后可能会导致主备节点在同一台机器上,这时需要手动指定一个从节点成为主节点
从节点#172.18.95.83:6380> cluster failover
重新指定主库
我们同样可以手动指定从节点同步哪个主节点
后面跟的是主节点的node id
从节点># 172.18.95.85:6380> cluster replicate 2fb4d5cf998a562e1391c082eb34a1476c8f620f