Redis架构
如上图,每组Redis实例采用1主2从实现高可用,通过3组集群做分片实现负载均衡,部署3个Sentinel实例对每个Redis节点做监控。
Redis部署方案
使用三台服务器(开发环境为192.168.192.1, 192.168.192.2, 192.168.192.3),每台服务器部署3个Redis实例(端口为6380,6381,6382),同时每台机器部署一个Sentinel监控(端口为26380)。应用程序通过Jedis在客户端做hash实现分片。如下图:
Redis安装
安装redis需安装GCC编译器,若系统已安装则跳过此步骤
yum install -y gcc g++ gcc-c++ make
安装redis,在3台机器上分别安装
wget http://download.redis.io/releases/redis-3.0.7.tar.gz tar -xzvf redis-3.0.7.tar.gz cd redis-3.0.7 make MALLOC=libc #3.0.5版本不需要增加MALLOC=libc参数 make install #此命令可以不执行,执行此命令将Redis命令安装到/usr/local/bin/目录
在192.168.192.1服务器上配置redis实例
cd /usr/local/ mkdir redis cd redis mkdir redis-6380 mkdir redis-6381 mkdir redis-6382 mkdir sentinel-26380
创建并编辑redis-6380/redis.conf文件: vi redis-6380/redis.conf
daemonize yes
appendonly yes
port 6380
requirepass football
masterauth football
pidfile /usr/local/redis/redis-6380/redis.pid
logfile /usr/local/redis/redis-6380/redis-6380.log
dir /usr/local/redis/redis-6380
dbfilename dump-6380.rdb
appendfilename appendonly-6380.aof
创建并编辑redis-6381/redis.conf文件: vi redis-6381/redis.conf
daemonize yes
appendonly yes
port 6381
requirepass football
masterauth football
pidfile /usr/local/redis/redis-6381/redis.pid
logfile /usr/local/redis/redis-6381/redis-6381.log
dir /usr/local/redis/redis-6381
dbfilename dump-6381.rdb
appendfilename appendonly-6381.aof
slaveof 192.168.192.2 6381
创建并编辑redis-6382/redis.conf文件: vi redis-6382/redis.conf
daemonize yes
appendonly yes
port 6382
requirepass football
masterauth football
pidfile /usr/local/redis/redis-6382/redis.pid
logfile /usr/local/redis/redis-6382/redis-6382.log
dir /usr/local/redis/redis-6382
dbfilename dump-6382.rdb
appendfilename appendonly-6382.aof
slaveof 192.168.192.3 6382
创建并编辑sentinel-26380/sentinel.conf文件: vi sentinel-26380/sentinel.conf
port 26380
dir /usr/local/redis/sentinel-26380
sentinel monitor master-6380 192.168.192.1 6380 2
sentinel monitor master-6381 192.168.192.2 6381 2
sentinel monitor master-6382 192.168.192.3 6382 2
sentinel down-after-milliseconds master-6380 30000
sentinel down-after-milliseconds master-6381 30000
sentinel down-after-milliseconds master-6382 30000
sentinel parallel-syncs master-6380 1
sentinel parallel-syncs master-6381 1
sentinel parallel-syncs master-6382 1
sentinel failover-timeout master-6380 180000
sentinel failover-timeout master-6381 180000
sentinel failover-timeout master-6382 180000
Redis目录结构:
redis
redis-6380
redis.conf
redis-6381
redis.conf
redis-6382
redis.conf
sentinel-26380
sentinel.conf
将redis目录复制到192.168.192.2及192.168.192.3上
scp -r /usr/local/redis root@192.168.192.2:/usr/local/
scp -r /usr/local/redis root@192.168.192.3:/usr/local/
修改192.168.192.2配置文件
redis-6380/redis.conf:
daemonize yes
appendonly yes
port 6380
requirepass football
masterauth football
pidfile /usr/local/redis/redis-6380/redis.pid
logfile /usr/local/redis/redis-6380/redis-6380.log
dir /usr/local/redis/redis-6380
dbfilename dump-6380.rdb
appendfilename appendonly-6380.aof
slaveof 192.168.192.1 6380
redis-6381/redis.conf:
daemonize yes
appendonly yes
port 6381
requirepass football
masterauth football
pidfile /usr/local/redis/redis-6381/redis.pid
logfile /usr/local/redis/redis-6381/redis-6381.log
dir /usr/local/redis/redis-6381
dbfilename dump-6381.rdb
appendfilename appendonly-6381.aof
redis-6382/redis.conf:
daemonize yes
appendonly yes
port 6382
requirepass football
masterauth football
pidfile /usr/local/redis/redis-6382/redis.pid
logfile /usr/local/redis/redis-6382/redis-6382.log
dir /usr/local/redis/redis-6382
dbfilename dump-6382.rdb
appendfilename appendonly-6382.aof
slaveof 192.168.192.3 6382
修改192.168.192.3配置文件
redis-6380/redis.conf
daemonize yes
appendonly yes
port 6380
requirepass football
masterauth football
pidfile /usr/local/redis/redis-6380/redis.pid
logfile /usr/local/redis/redis-6380/redis-6380.log
dir /usr/local/redis/redis-6380
dbfilename dump-6380.rdb
appendfilename appendonly-6380.aof
slaveof 192.168.192.1 6380
redis-6381/redis.conf
daemonize yes
appendonly yes
port 6381
requirepass football
masterauth football
pidfile /usr/local/redis/redis-6381/redis.pid
logfile /usr/local/redis/redis-6381/redis-6381.log
dir /usr/local/redis/redis-6381
dbfilename dump-6381.rdb
appendfilename appendonly-6381.aof
slaveof 192.168.192.2 6381
redis-6382/redis.conf
daemonize yes
appendonly yes
port 6382
requirepass football
masterauth football
pidfile /usr/local/redis/redis-6382/redis.pid
logfile /usr/local/redis/redis-6382/redis-6382.log
dir /usr/local/redis/redis-6382
dbfilename dump-6382.rdb
appendfilename appendonly-6382.aof
在3台服务器上逐个启动redis实例
redis-server ./redis-6380/redis.conf
redis-server ./redis-6381/redis.conf
redis-server ./redis-6382/redis.conf
在3台服务器上启动sentinel实例
nohup redis-sentinel ./sentinel-26380/sentinel.conf > ./sentinel-26380/sentinel.log 2>&1 &