[toc] 系统为 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 其中配置文件的目录参考上面的规划 所有安装包也可使用下面链接下载 链接:https://pan.baidu.com/s/1hoDE8WyVyjkc5uXn4uuqtQ 提取码:jce0 ### 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 cluster-slave-validity-factor 10 cluster-migration-barrier 1 cluster-require-full-coverage no 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 6379 监听端口 - maxmemory redis允许使用的最大内存,根据服务器配置和业务需求决定 - requirepass 123456 redis密码,可以注释掉表示不设置 - masterauth 123456 连接master时用的密码,如master未设置可注释掉 - 还需要根据实际修改配置文件和日志文件的路径和名称 ### 5.启动redis 接下来我们启动所有9个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的,而且没有其他节点的信息 [image:938 size:orig] 集群文件也只有一个节点的信息 ``` [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 ``` [image:939 size:orig] --cluster-replicas 2 表示一主两从 这里填入yes 可以看到该命令已经将从节点分配在不同节点上了,并且6379端口为主节点 最后完成了搭建并打印结果 [image:940 size:orig] 对于集群我们只要保证所有主节点分布在不同服务器上,并且主从不在同一个服务器就可以了,如果需要固定的主从关系,请使用后面的命令来改变关系 ## 7.连接redis集群 我们使用如下命令来连接集群,可选择任一节点 ``` [redis@SYTEST1 6379]$ redis-cli -h 172.18.95.83 -p 6379 -a 123456 -c ``` 这里必须加入-c参数,否则如果操作的key的slot值不在该节点会导致命令执行失败 ## 8.查询集群信息 **查询节点信息** ``` cluster nodes ``` [image:941 size:orig] **查询slot信息** 该命令可以更直观的查看集群的架构 ``` cluster slots ``` [image:942 size:orig] **查询集群状态** ``` cluster info ``` [image:943 size:orig] **手动failover** 有时集群宕机重启后可能会导致主备节点在同一台机器上,这时需要手动指定一个从节点成为主节点 ``` 从节点#172.18.95.83:6380> cluster failover ``` **重新指定主库** 我们同样可以手动指定从节点同步哪个主节点 后面跟的是主节点的node id ``` 从节点># 172.18.95.85:6380> cluster replicate 2fb4d5cf998a562e1391c082eb34a1476c8f620f ```