文章目录
前言:
redis集群基础理论知识见我之前博客:
一、redis集群----主从复制
1.1 实验环境
-
在主从模式的redis系统中,从数据库在整个系统中起到了数据冗余备份和读写分离的作用
-
节点部署:
master IP地址:192.168.226.128
- 功能:提供读、写
slave1 IP地址:192.168.226.132
- 功能:只读
slave2 IP地址:192.168.226.133
- 功能:只读
1.2 实验过程
-
① 所有节点安装redis
此处只演示master节点
[root@master ~]# yum install -y gcc gcc-c++ make
#可以选择直接下载压缩包,本次实验已将压缩包下好,所以直接挂载使用就好了
#在线下载命令:
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
#挂载使用
[root@master ~]# mount.cifs //192.168.226.1/LAMP-C7 /mnt
Password for root@//192.168.226.1/LAMP-C7:
[root@master ~]# cd /mnt
[root@master mnt]# tar zxvf redis-5.0.7.tar.gz -C /usr/local
#编译安装
[root@master mnt]# cd /usr/local
[root@master local]# mv redis-5.0.7 redis
[root@master redis]# cd redis
[root@master redis]# make
[root@master src]# cd src
[root@master src]# make install
.......省略部分内容
- ② 修改主配置文件
#master节点
[root@master src]# vim /usr/local/redis/redis.conf
#69行 修改监听地址为0.0.0.0(在实验环境使用),现网环境建议绑定从服务器IP地址
#136行 开启守护进程
daemonize yes
#171行 修改日志文件目录
logfile /usr/local/redis/redis.log
#263行 修改工作目录
dir /usr/local/redis
#699行 开启AOF持久化功能
appendonly yes
#slave节点
#与master节点修改一直,多修改一个同步master节点IP和端口
replicaof 192.168.226.128 6379
- ③ 所有节点设置防火墙规则、放通6379端口的信息流通
[root@master src]# firewall-cmd --zone=public --add-port=6379/tcp --permanent
success
[root@master src]# firewall-cmd --reload
success
- ④ 设置内存分配策略
[root@master src]# vim /etc/sysctl.conf
#在行尾添加以下内容
vm.overcommit_memory = 1
----》wq
#刷新生效
[root@master src]# sysctl -p
-
内核参数overcommit_memory
overcommit_memory是内核分配策略
可选值:0、1、2
- 0 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
- 1 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
- 2 表示内核允许分配超过所有物理内存和交换空间总和的内存
-
⑤ 启动redis服务,先启动master节点、再启动slave节点
[root@master src]# /usr/local/redis/src/redis-server /usr/local/redis/redis.conf
[root@master src]# netstat -natp | grep redis
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 93265/redis-server
- 此时查看日志可看到两个slave节点已成功连接
[root@master src]# tail -f /usr/local/redis/redis.log
93265:M 26 Mar 2020 20:43:21.781 * Background saving terminated with success
93265:M 26 Mar 2020 20:43:21.781 * Synchronization with replica 192.168.226.132:6379 succeeded
93265:M 26 Mar 2020 20:43:24.224 * Replica 192.168.226.133:6379 asks for synchronization
93265:M 26 Mar 2020 20:43:24.224 * Full resync requested by replica 192.168.226.133:6379
93265:M 26 Mar 2020 20:43:24.224 * Starting BGSAVE for SYNC with target: disk
93265:M 26 Mar 2020 20:43:24.224 * Background saving started by pid 94625
94625:C 26 Mar 2020 20:43:24.225 * DB saved on disk
94625:C 26 Mar 2020 20:43:24.225 * RDB: 2 MB of memory used by copy-on-write
93265:M 26 Mar 2020 20:43:24.299 * Background saving terminated with success
93265:M 26 Mar 2020 20:43:24.300 * Synchronization with replica 192.168.226.133:6379 succeeded
- 可通过登录数据库查看master信息
[root@master src]# redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2 #以下为已连接的从服务器信息
slave0:ip=192.168.226.132,port=6379,state=online,offset=168,lag=1
slave1:ip=192.168.226.133,port=6379,state=online,offset=168,lag=0
master_replid:c358000ba4eaaebd56176e3b273e7973bb5efa8b
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:168
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:168
-
⑤ 验证主从复制
再主节点创建键值对,从服务也可查询到信息,但是不能创建新的键值对
#master节点
127.0.0.1:6379> set work money
OK
127.0.0.1:6379> keys *
1) "work"
127.0.0.1:6379> get work
"money"
127.0.0.1:6379> exit
#slave节点
[root@slave1 src]# redis-cli -h 192.168.226.132 -p 6379
192.168.226.132:6379> keys *
1) "work"
192.168.226.132:6379> get work
"money"
二、redis 群集----哨兵模式
2.1 哨兵模式原理
- 哨兵(sentinel) 是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master并将所有slave连接到新的master。
2.2 哨兵模式作用
-
① 监控
不断的检查master和slave是否正常运行。
master存活检测、master与slave运行情况检测
-
② 通知(提醒)
当被监控的服务器出现问题时,向其他(哨兵间,客户端)发送通知。
-
③ 自动故障转移
断开master与slave连接,选取一个slave作为master,将其他slave连接到新的master,并告知客户端新的服务器地址
PS:哨兵也是一台redis服务器,只是不提供数据服务
通常哨兵配置数量为单数(因为哨兵在监控时通常只要哨兵数量的一半加1认为master宕机了就认定master宕机了
哨兵一般是与redis工作节点是分开设置的,服务启动顺序为:先启动主机、在启动从机、最后启动哨兵
2.3 哨兵配置项
2.4 哨兵工作原理
-
主从切换
哨兵在进行主从切换的过程中经历三个阶段
-
① 监控:同步信息
-
② 通知:保持连通
-
③ 故障转移:
发现问题
竞选负责人
优先新master
新master上任后,其他slave切换master,原master作为slave故障恢复后连接
-
-
阶段一:监控阶段
-
阶段二:通知阶段
- 阶段三:故障转移阶段
2.5 实验过程
- 修改哨兵模式的配置文件(所有节点)
[root@master src]# cd ..
[root@master redis]# vim sentinel.conf
#17行 开启:关闭保护模式
protected-mode no
#26行 指定sentinel为后台启动
daemonize yes
#36行 指定日志存放路径
logfile /usr/local/redis/sentinel.log
#65行 指定数据库存放路径
dir /usr/local/redis
#84行 至少有几个哨兵检测到主服务器故障了,才进行故障迁移
sentinel monitor mymaster 192.168.226.128 6379 2
#113行 指定哨兵在监控Redis服务时,判定服务器挂掉的时间周期,默认30000毫秒(30秒)
#此处为了见效快,改为3秒
sentinel down-after-milliseconds mymaster 3000
#146行 指定出现故障后,故障切换的最大超时时间,超过该值,认定切换失败,默认为180000毫秒(3分钟)
sentinel failover-timeout mymaster 120000
-
开启哨兵模式
哨兵模式,现开启master节点的,再开启slave节点的
#后台运行
/usr/local/redis/src/redis-sentinel /usr/local/redis/sentinel.conf &
- 查看哨兵信息
[root@master redis]# redis-cli -h 192.168.226.128 -p 26379 info Sentinel
2.6 故障模拟
- 查看redis-server进程号
[root@master redis]# ps -ef | grep redis
root 29568 1 0 21:39 ? 00:00:01 /usr/local/redis/src/redis-sentinel *:26379 [sentinel]
root 44714 12307 0 21:52 pts/0 00:00:00 grep --color=auto redis
root 93265 1 0 20:42 ? 00:00:04 /usr/local/redis/src/redis-server 0.0.0.0:6379
- kill进程号模拟故障
[root@master redis]# kill -9
#查看日志
[root@master redis]# tail -f /usr/local/redis/sentinel.log
#以下为主节点故障,从节点顶替主节点
switch-master mymaster 192.168.226.128 6379 192.168.226.132 6379