实验环境
redis版本:redis-6.2.6
服务器ip地址:192.168.10.100
redis安装目录:/data/redis
一、单机部署
1、编译安装
将redis压缩包解压至安装目录中
tar -zxvf redis-6.2.6.tar.gz -C ..
等待解压完成后进入到redis的安装目录中进行安装
cd /data/redis-6.2.6/src
make
make install PREFIX=/data/redis-6.2.6
创建其他存放目录
mkdir /data/redis-6.2.6/{logs,data}
mkdir /data/redis-6.2.6/logs/{run,sentinel}
mkdir /data/redis-6.2.6/data/{6379,6380,6381,sentinel}
mkdir /data/redis-6.2.6/data/sentinel/{6379,6380,6381}
2、设置环境变量
修改全局环境变量
vim /etc/profile
#在文件末尾加入
export REDIS_HOME=/data/redis-6.2.6/redis
export PATH=$REDIS_HOME/bin:$PATH
生效 source /etc/profile
3、修改配置文件
修改redis服务的配置文件
bind 0.0.0.0 //修改监听地址为0.0.0.0
daemonize yes //开启守护进程
pidfile "/data/redis/logs/run/redis_6379.pid"
logfile /data/redis-6.2.6/logg/redis_6379.log //指定日志文件目录
dir /data/redis-6.2.6/data/6379 //指定工作目录
appendonly yes //开启AOF持久化功能
requirepass Redis@15 //设置redis的登录密码
masterauth Redis@15 //设置redis哨兵连接登录密码
4、启动redis服务并测试
修改配置完成后启动redis服务
redis-server /data/redis-6.2.6/redis-6379.conf
检查进程和端口是否正常启动
#检查进程是否存在
ps -ef | grep redis
#检查端口是否监听
netstat -anlp | grep 6379
登录redis并测试
redis-cli -h 192.168.10.100 -p 6379 -a Redis@15
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> get keys*
(nil)
单机部署完成
二、主从(哨兵)模式部署
- 在主从复制的基础上起到主节点自动故障转移的作用
1、主从搭建
1.1、修改配置文件
复制redis的配置文件
cd /data/redis-6.2.6
cp redis-6379.conf redis-6380.conf
cp redis-6379.conf redis-6381.conf
修改redis-6380.conf配置文件
vim redis-6380.conf
#修改从节点的服务监听端口
port=6380
pidfile "/data/redis/logs/run/redis_6379.pid"
log "/data/redis/logs/redis_6380.log"
dir /data/redis-6.2.6/data/6380
replicaof 192.168.10.100 6379 ##添加一条指定要同步的Master节点IP和端口
修改redis-6381.conf配置文件
vim redis-6381.conf
#修改从节点的服务监听端口
port=6381
pidfile "/data/redis/logs/run/redis_6381.pid"
log "/data/redis/logs/redis_6381.log"
dir /data/redis-6.2.6/data/6381
replicaof 192.168.10.100 6379 ##添加一条指定要同步的Master节点IP和端口
1.2、启动reids服务
- 由于单机部署的时候reids没有停止,所以后续只需要启动从节点即可
逐个启动从节点
redis-server /data/redis-6.2.6/redis-6380.conf
redis-server /data/redis-6.2.6/redis-6381.conf
启动完成后检查进程和端口是否正常启动
#检查进程是否存在
ps -ef | grep redis
#检查端口是否监听
netstat -anlp | grep 6380
netstat -anlp | grep 6381
1.3、验证是否为主从模式
登录redis并查看redis主从模式的状态
redis-cli -h 192.168.10.100 -p 6379 -a Redis@15
127.0.0.1:6379> info replication
role:master
connected_slaves:2
slave0:ip=192.168.10.100,port=6380,state=online,offset=1582,lag=1
slave1:ip=192.168.10.100,port=6381,state=online,offset=1582,lag=1
master_replid:26ff9ff54709807b1e568f24ee28d9f540087bc2
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1582
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1582
在redis主节点中创建class键
redis-cli -h 192.168.10.100 -p 6379 -a Redis@15
127.0.0.1:6379> key*
(empty list or set)
127.0.0.1:6379> set class lisi
OK
127.0.0.1:6379> get class
"lisi"
master创建class,节点服务器slave1和slave2同步创建
登录从节点查看是否有此class键
redis-cli -h 192.168.10.100 -p 6380 -a Redis@15
127.0.0.1:6380> key*
"class"
2、哨兵模式部署
2.1、修改哨兵配置文件(所有节点)
修改sentinel-6379.conf的配置文件
vim /data/redis-6.2.6/sentinel-6379.conf
protected-mode no
port 26381
daemonize yes
pidfile "/data/redis/logs/run/redis_6379.pid"
logfile "/data/redis-6.2.6/logs/sentinel-6379.log"
dir /data/redis-6.2.6/data/sentinel/6379
sentinel monitor mymaster 192.168.10.100 6379 2
sentinel down-after-milliseconds mymaster 3000
sentinel failover-timeout mymaster 181000
sentinel auth-pass mymaster Redis@15
修改sentinel-6380.conf的配置文件
vim /data/redis-6.2.6/sentinel-6380.conf
protected-mode no
port 26381
daemonize yes
pidfile "/data/redis/logs/run/redis_6381.pid"
logfile "/data/redis-6.2.6/logs/sentinel-6380.log"
dir /data/redis-6.2.6/data/sentinel/6380
sentinel monitor mymaster 192.168.10.100 6379 2
sentinel down-after-milliseconds mymaster 3000
sentinel failover-timeout mymaster 181000
sentinel auth-pass mymaster Redis@15
修改sentinel-6381.conf的配置文件
vim /data/redis-6.2.6/sentinel-6381.conf
protected-mode no
port 26381
daemonize yes
pidfile "/data/redis/logs/run/redis_6381.pid"
logfile "/data/redis-6.2.6/logs/sentinel-6381.log"
dir /data/redis-6.2.6/data/sentinel/6381
sentinel monitor mymaster 192.168.10.100 6379 2
sentinel down-after-milliseconds mymaster 3000
sentinel failover-timeout mymaster 181000
sentinel auth-pass mymaster Redis@15
2.2启动哨兵模式
节点服务器先启动主节点服务器再启动从节点的服务器
启动主节点
redis-sentinel /data/redis-6.2.6/sentinel-6379.conf &
启动从节点
redis-sentinel /data/redis-6.2.6/sentinel-6380.conf &
redis-sentinel /data/redis-6.2.6/sentinel-6381.conf &
2.3、查看哨兵信息
启动完成后查看哨兵信息
redis-cli -h 192.168.10.100 -p 26379
127.0.0.1:26379> info sentinel
Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=sdown,address=192.168.10.100:6379,slaves=2,sentinels=3
2.4模拟故障
进入master节点并停止服务
redis-cli -h 192.168.10.100 -p 6379 -a Redis@15
shutdown
查看sentinel的日志
vim /data/redis-6.2.6/logs/sentinel-6379.log
66152:X 15 Jun 2022 16:05:35.615 # +monitor master mymaster 192.168.10.100 6379 quorum 2
66152:X 15 Jun 2022 16:06:05.619 # +sdown master mymaster 192.168.10.100 6379
登录sentinel查看哨兵信息
redis-cli -p 26379
127.0.0.1:26379> info sentinel
#Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=sdown,address=192.168.10.100:6379,slaves=0,sentinels=1
* status=sdown ##s表示主观下线
* status=odown ##o即objectively客观下线
三、Cluster集群部署
- redis的集群一般需要6个节点,3主3从。
1、创建6个端口的工作目录
创建目录并复制
mkdir -p /data/redis_cluster/redis600{1..6}
cp /data/redis-6.2.6/redis.conf /data/redis_cluster/redis6001/
cp /data/redis-6.2.6/redis.conf /data/redis_cluster/redis6002/
cp /data/redis-6.2.6/redis.conf /data/redis_cluster/redis6003/
cp /data/redis-6.2.6/redis.conf /data/redis_cluster/redis6004/
cp /data/redis-6.2.6/redis.conf /data/redis_cluster/redis6005/
cp /data/redis-6.2.6/redis.conf /data/redis_cluster/redis6006/
2、修改配置文件
除端口号和文件名称除外其余修改相同
bind 127.0.0.1 ##为允许连接redis的ip地址默认监听所有网卡,
protected -mode no ##修改,关闭保护模式
port 6001 ##修改,redis监听端口 端口也需要修改为不同
daemonize yes ##开启守护进程,以独立进程启动
cluster-enabled yes ## 取消注释,开启群集功能
cluster-config-file nodes-6001.conf ##取消注释,群集名称文件设置,需要修改为不同的名字
cluster-node-timeout 15000 ##取消注释群集超时时间设置
appendonly yes //修改,开启AOF持久化
3、启动redis cluster集群
启动
redis-server /data/redis_cluster/redis6001/redis.conf
redis-server /data/redis_cluster/redis6002/redis.conf
redis-server /data/redis_cluster/redis6003/redis.conf
redis-server /data/redis_cluster/redis6004/redis.conf
redis-server /data/redis_cluster/redis6005/redis.conf
redis-server /data/redis_cluster/redis6006/redis.conf
4、查看服务是否正常启动
查看进程启动情况
[root@node2 redis_cluster]#ps -ef | grep redis
root 5055 1 0 15:04 ? 00:00:00 redis-server 0.0.0.0:6001 [cluster]
root 5068 1 0 15:04 ? 00:00:00 redis-server 0.0.0.0:6002 [cluster]
root 5076 4198 0 15:04 pts/0 00:00:00 grep --color=auto redis
查看端口启动情况
[root@node2 redis_cluster]#netstat -anlp | grep 600
tcp 0 0 0.0.0.0:16001 0.0.0.0:* LISTEN 5055/redis-server 0
tcp 0 0 0.0.0.0:16002 0.0.0.0:* LISTEN 5068/redis-server 0
tcp 0 0 0.0.0.0:6001 0.0.0.0:* LISTEN 5055/redis-server 0
tcp 0 0 0.0.0.0:6002 0.0.0.0:* LISTEN 5068/redis-server 0
5、初始化redis cluster集群
等待redis启动完成后初始化reids cluster集群
redis-cli --cluster create 192.168.10.100:6001 192.168.10.100:6002 192.168.10.101:6001 192.168.10.101:6002 192.168.10.102:6001 192.168.10.102:6002 --cluster-replicas 1
##ip:port为redis cluster所在的服务器ip和监听的端口
#在如下提示时输入yes
Can I set the above configuration? (type 'yes' to accept):
##等待初始化完成
[OK] All nodes agree about slots configuration. Check for open slots... Check slots coverage... [OK] All 16384 slots covered.
6、查看集群情况
登录并查看集群情况
redis-cli -p 6001 cluster info
##输出如下内容
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:3
cluster_stats_messages_ping_sent:754
cluster_stats_messages_pong_sent:741
cluster_stats_messages_meet_sent:1
cluster_stats_messages_sent:1496
cluster_stats_messages_ping_received:741
cluster_stats_messages_pong_received:755
cluster_stats_messages_received:1496
查看节点情况
redis_cli -p 6001 cluster nodes
##输出以下内容
af8225c5865e5d20fdf82c8076cc2da3af8e8e77 192.168.10.102:6002@16002 slave 868bdeef07c24829858813e07b856ec39f51f490 0 1655449557000 3 connected
23f3d8aa26b369b0023d0cd3c444ae62bdd039e1 192.168.10.100:6002@16002 slave 53dac66e2408c73f54da11dab64367f448ecf1e8 0 1655449558670 5 connected
c2b81704c33647646539d203dffd42f7261a35c9 192.168.10.101:6002@16002 slave 145060e7b30e598769eb8805ba59b3b8f25d85fa 0 1655449557622 1 connected
53dac66e2408c73f54da11dab64367f448ecf1e8 192.168.10.102:6001@16001 master - 0 1655449558000 5 connected 10923-16383
145060e7b30e598769eb8805ba59b3b8f25d85fa 192.168.10.100:6001@16001 myself,master - 0 1655449556000 1 connected 0-5460
868bdeef07c24829858813e07b856ec39f51f490 192.168.10.101:6001@16001 master - 0 1655449557000 3 connected 5461-10922
测试,登录其中一个主节点创建一个key值
redis-cli -p 6001 -c
set class list
登录其他主节点查看是否存在在主节点创建的key
redis-cli -p 6001 -c
keys *
get class
至此以上redis搭建完成