系统为 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
|