Redis集群安装(三主三从一哨兵)
一,搭建环境
在三台服务器上分别搭建redis并测试是否能启动(搭建方法)
二,Redis cluster三主三从
配置环境变量
vim /etc/profile
#添加如下内容
export REDIS_HOME=/usr/local/redis/redis-6.0.5
export PATH=$PATH:$REDIS_HOME/bin
1.搭建节点
以一台为例子,其他可以节点一样,重复操作即可。建议在三台机器上搭建,一台机器一主一从
①创建文件夹
mkdir -p /usr/local/redis/redis_cluster/6380/conf/
mkdir -p /usr/local/redis/redis_cluster/6380/logs/
mkdir -p /usr/local/redis/redis_cluster/6380/data/
mkdir -p /usr/local/redis/redis_cluster/6381/conf/
mkdir -p /usr/local/redis/redis_cluster/6381/logs/
mkdir -p /usr/local/redis/redis_cluster/6381/data/
②创建配置文件
6380节点
vim /usr/local/redis/redis_cluster/6380/conf/redis.conf
文件内容:
# bind 127.0.0.1 这一行给注释掉,这里的bind指的是只有指定的网段才能远程访问这个redis,注释掉后,就没有这个限制了。
#bind 127.0.0.1
# 设置端口,区分集群中Redis的实例
port 6380
# 后台运行
daemonize yes
# pid进程文件名,以端口号命名
pidfile /var/run/redis-6380.pid
# 日志文件名称,以端口号为目录来区分
logfile /usr/local/redis/redis_cluster/6380/logs/redis.log
# 数据文件存放地址,以端口号为目录名来区分
dir /usr/local/redis/redis_cluster/6380/data
# 启用集群
cluster-enabled yes
# 配置每个节点的配置文件,同样以端口号为名称
cluster-config-file nodes_6380.conf
# 配置集群节点的超时时间
cluster-node-timeout 15000
# 启动AOF增量持久化策略
appendonly yes
# 发生改变,则记录日志
appendfsync always
#900 秒内至少有 1 个 key 被改变
save 900 1
#300 秒内至少有 300 个 key 被改变
save 300 10
#60 秒内至少有 10000 个 key 被改变
save 60 10000
# 后台存储错误停止写。
stop-writes-on-bgsave-error yes
# 存储至本地数据库时(持久化到 rdb 文件)是否压缩数据,默认为 yes
rdbcompression yes
# RDB 文件的是否直接偶像 chcksum
rdbchecksum yes
# 本地持久化数据库文件名,默认值为 dump.rdb
dbfilename dump.rdb
# 密码,注意集群各节点密码要保持一致
requirepass cquisse
6381节点
vim /usr/local/redis/redis_cluster/6381/conf/redis.conf
文件内容:
# bind 127.0.0.1 这一行给注释掉,这里的bind指的是只有指定的网段才能远程访问这个redis,注释掉后,就没有这个限制了。
#bind 127.0.0.1
# 设置端口,区分集群中Redis的实例
port 6381
# 后台运行
daemonize yes
# pid进程文件名,以端口号命名
pidfile /var/run/redis-6381.pid
# 日志文件名称,以端口号为目录来区分
logfile /usr/local/redis/redis_cluster/6381/logs/redis.log
# 数据文件存放地址,以端口号为目录名来区分
dir /usr/local/redis/redis_cluster/6381/data
# 启用集群
cluster-enabled yes
# 配置每个节点的配置文件,同样以端口号为名称
cluster-config-file nodes_6381.conf
# 配置集群节点的超时时间
cluster-node-timeout 15000
# 启动AOF增量持久化策略
appendonly yes
# 发生改变,则记录日志
appendfsync always
#900 秒内至少有 1 个 key 被改变
save 900 1
#300 秒内至少有 300 个 key 被改变
save 300 10
#60 秒内至少有 10000 个 key 被改变
save 60 10000
# 后台存储错误停止写。
stop-writes-on-bgsave-error yes
# 存储至本地数据库时(持久化到 rdb 文件)是否压缩数据,默认为 yes
rdbcompression yes
# RDB 文件的是否直接偶像 chcksum
rdbchecksum yes
# 本地持久化数据库文件名,默认值为 dump.rdb
dbfilename dump.rdb
# 密码,注意集群各节点密码要保持一致
requirepass cquisse
2.设置开机启动
vim /etc/rc.local
#添加如下内容
/usr/local/redis/redis-6.0.5/bin/redis-server /usr/local/redis/redis_cluster/6380/conf/redis.conf
/usr/local/redis/redis-6.0.5/bin/redis-server /usr/local/redis/redis_cluster/6381/conf/redis.conf
如果开机启动不生效,可以执行 chmod +x /etc/rc.d/rc.local
3.启动各个节点,创建集群,检查状态
redis-server /usr/local/redis/redis_cluster/6380/conf/redis.conf
redis-server /usr/local/redis/redis_cluster/6381/conf/redis.conf
查看启动情况
ps -ef|grep redis root 1535085 1 0 18:05 ? 00:00:32 redis-server [ip]6380 [cluster] root 1535625 1 2 18:08 ? 00:01:22 redis-server [ip]:6381 [cluster] root 1546480 19893 0 19:10 pts/0 00:00:00 grep --color=auto redis
创建集群,这里的IP是外网IP,-a后面是密码,2>/dev/null 是将标准错误忽略。要确保加入的节点是empty。如果不为空,连接节点执行flushall \ flushdb\ cluster reset
在Redis集群中,连接节点执行flushall / flushdb命令或者cluster reset命令都会对数据进行清除或者重置,但是它们的作用不一样。 flushall 命令会清空当前Redis 实例中的所有数据库,包括主库和从库中的所有数据,是一个危险的命令,会导致所有数据的丢失. flushdb命令会清空当前Redis实例中指定的数据库,如果没有指定参数,则默认清空的是所有数据库中的数据。 cluster reset命令会使Redis集群回到初始状态,重置集群中所有的节点,包括主节点、从节点和插槽分配情况等,此命令也是一个危险命令,会导致所有数据的丢失。 这些命令通常在进行Redis.集群的测试、部署、维护等工作时使用,但一定要在谨慎的情况下使用,以免造成数据的意外丢失。
redis-cli --cluster create [IP1]:6380 [IP1]:6381 [IP2]:6380 [IP2]:6381 [IP3]:6380 [IP3]:6381 --cluster-replicas 1 -a cquisse 2>/dev/null
检查状态
redis-cli --cluster check [IP1]:6380 -a cquisse 2>/dev/null
xxx.xxx.xxx.xxx:6379 (3a81002e…) -> 0 keys | 5461 slots | 1 slaves. xxx.xxx.xxx.xxx:6380 (dfe7994a…) -> 0 keys | 5461 slots | 1 slaves. xxx.xxx.xxx.xxx:6380 (c4e9009c…) -> 0 keys | 5462 slots | 1 slaves. [OK] 0 keys in 3 masters. 0.00 keys per slot on average.
Performing Cluster Check (using node xxx.xxx.xxx.xxx:6379) M: 3a81002e6a20133d44895f3f0e72e0ee16028ccf xxx.xxx.xxx.xxx:6380 slots:[0-5460] (5461 slots) master 1 additional replica(s) S: 57bfa604ff4c27de83a5c37540078d4262b293fc xxx.xxx.xxx.xxx:6381 slots: (0 slots) slave replicates 3a81002e6a20133d44895f3f0e72e0ee16028ccf S: baabb58a937192d87dbc83518da94f990c9533a6 xxx.xxx.xxx.xxx:6381 slots: (0 slots) slave replicates c4e9009cbe6ea4c2a439777d16021fecd754a2ba M: dfe7994a2457a87fec7409064358d750d48e8e39 xxx.xxx.xxx.xxx:6380 slots:[10923-16383] (5461 slots) master 1 additional replica(s) M: c4e9009cbe6ea4c2a439777d16021fecd754a2ba xxx.xxx.xxx.xxx:6380 slots:[5461-10922] (5462 slots) master 1 additional replica(s) S: 7ba2ab130e5c6917635888ee8577fa5cf3ea2838 xxx.xxx.xxx.xxx:6381 slots: (0 slots) slave replicates dfe7994a2457a87fec7409064358d750d48e8e39 [OK] All nodes agree about slots configuration. Check for open slots… Check slots coverage… [OK] All 16384 slots covered.
至此,集群搭建完成
三,哨兵
1.创建sentinel相关的文件夹
mkdir -p /usr/local/redis/redis_cluster/27001/conf/
mkdir -p /usr/local/redis/redis_cluster/27001/logs/
mkdir -p /usr/local/redis/redis_cluster/27001/data/
2.创建配置文件
cd /usr/local/redis/redis_cluster/27001/conf/
vim sentinel.conf
根据集群状态中的主节点来配置,即 M:开头的
bind 0.0.0.0
port 27001
daemonize yes
pidfile /var/run/redis-sentinel.pid
logfile /usr/local/redis/redis_cluster/27001/logs/redis-sentinel.log
dir /usr/local/redis/redis_cluster/27001/data
sentinel monitor mymaster1 xxx.xxx.xxx.xxx 6380 2
sentinel monitor mymaster2 xxx.xxx.xxx.xxx 6380 2
sentinel monitor mymaster3 xxx.xxx.xxx.xxx 6380 2
sentinel down-after-milliseconds mymaster1 10000
sentinel down-after-milliseconds mymaster2 10000
sentinel down-after-milliseconds mymaster3 10000
sentinel parallel-syncs mymaster1 1
sentinel parallel-syncs mymaster2 1
sentinel parallel-syncs mymaster3 1
sentinel failover-timeout mymaster1 15000
sentinel failover-timeout mymaster2 15000
sentinel failover-timeout mymaster3 15000
启动哨兵
redis-sentinel /usr/local/redis/redis_cluster/27001/conf/sentinel.conf
查看redis-sentinel进程
ps -ef|grep sentinel