redis-哨兵

1.哨兵高可用

主从存在的问题:
主从复制,主节点发生鼓掌,可以手动转移,让其中一个slave变成master,这就是哨兵
主从复制,只能是主来写数据,所以写的能力和存储能力有限,需要做集群
哨兵:sentinel
哨兵就是一个redis进程

哨兵的工作原理:
1.多个sentinel发现并确认master有问题
2.选取出一个sentinel作为领导
3.选取一个slave作为新的master
4.通知其余slave成为新的master的salve
5.通知客户端主从变化
6.等待老的master复活成为新的master的slave

搭建哨兵步骤:
一:先搭建redis一主两从:
1.现将6379端口的配置文件复制一份到redis_6390.conf:

cp redis_6379.conf redis_6390.conf

2.配置从

daemonize yes
port 6390
dir "/root/redis-6.2.9/data2"
logfile "6390.log"

appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite yes
aof-use-rdb-preamble yes

slaveof 127.0.0.1 6379
slave-read-only yes

3.需要在redis目录下新建data2目录:

mkdir data2

4.然后我们启动从:

./src/redis-server ./redis_6381.conf &

5.再启动主:

./src/redis-server ./redis_6379.conf &

6.连接客户端:

# -p是指端口,不写默认连接6379
./src/redis-cli -p 6381

7.连接6379的服务端:

./src/redis-cli
info  # info查看服务端信息

image
image
二:配置哨兵文件,启动哨兵(哨兵是一个redis的进程)
1.新建sentinal_26379.conf的哨兵配置文件,编辑:
vim sentinal_26379.conf

port 26379
daemonize yes
dir /root/redis/data5  # data5文件可以保存缓存,多个哨兵可以使用一个data文件
bind 0.0.0.0
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000

2.复制两份,端口分别改为26380和26381

cp sentinal_26379.conf sentinal_26380.conf
cp sentinal_26379.conf sentinal_26381.conf
#  26380和26381的配置文件只需要将端口修改为26380和26381即可,三个配置文件都使用data5文件

3.启动哨兵

./src/redis-sentinel sentinel_26379.conf
./src/redis-sentinel sentinel_26380.conf
./src/redis-sentinel sentinel_26381.conf

image
image
以上高可用就搭建完毕
三.主库停止服务
主库可能是手动宕机,也可能是被动宕机
现在我们在主服务端(6379)设置值,可以在从服务端看到值:
image
image
然后我们手动停止掉6379的进程:

kill -9 6379的进程号

这是我们再查看6381的info,发现6381成了主:
image
所以此时我们停掉=一台从服务器,或者停掉一台哨兵,依然不会影响我们的数据安全

2.redis操作哨兵

高可用架构后,不能直接连接某一个主库了,因为主库可能会挂掉,后来它就不是主库了
之前的链接redis的操作(不能用了):

import redis
conn=redis.Redis(host='',port=6379)
conn.set()
conn.close()

新的连接哨兵的操作:
1.搭建哨兵:

vim sentinel_26379.conf  # 配置26380,26381时将数字改掉

2.配置哨兵,配置三个端口的哨兵,分别是26379,26380,26381:

port 26379
daemonize yes
dir data
protected-mode no
bind 0.0.0.0
logfile "redis_sentinel.log"
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

image
哨兵26380:

port 26380
daemonize yes
dir data
protected-mode no
bind 0.0.0.0
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

哨兵26381:

port 26381
daemonize yes
dir data
protected-mode no
bind 0.0.0.0
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

image
3.配置一主两从:
首先配置主库:
vim redis_6379.conf

daemonize no
bind 0.0.0.0
protected-mode no
port 6379
timeout 0
dir /data

配置从库6380:
vim redis_6380.conf

daemonize no
bind 0.0.0.0
protected-mode no
port 6380
timeout 0
dir /data

slaveof 127.0.0.1 6379  # 是6379的从库
slave-read-only yes

配置从库6381:

daemonize no
bind 0.0.0.0
protected-mode no
port 6381
timeout 0
dir /data

slaveof 127.0.0.1 6379
slave-read-only yes

image
4.在redis根路径创建 data目录

mkdir /data

5.启动三个:

./src/redis-server ./redis_6379.conf &  # 加&表示在后台运行
#  如果提示端口被占用,先用kill -9停止进程
./src/redis-server ./redis_6380.conf &
./src/redis-server ./redis_6381.conf &

image
6.查看进程:

ps aux |grep redis

image
7.连接主库6379,设置name:

./src/redis-cli -p 6379
set name max

8.退出,连接从库,查看name,发现有值:

exit
./src/redis-cli -p 6380
get name  # max

9.启动哨兵

./src/redis-sentinel sentinel_26379.conf
./src/redis-sentinel sentinel_26380.conf
./src/redis-sentinel sentinel_26381.conf

此时有一个主:6381,两个从:6379和6392
image
我们停掉6381:

kill -9 6381进程号

此时我们再直接连接6381的客户端是连不上的,我们需要先启动6381的服务端:这句命令在redis目录下执行,在redis目录下有一个 redis_6381.conf,直接启动即可:

./src/redis-server redis_6381.conf

image
然后我们再连接6381的客户端即可连接成功:

./src/redis-cli -p 6381

image
此时的6381已经不是主了:
image
此时的6381可以读取,但是无法写入:
image

posted @   ERROR404Notfound  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
Title
点击右上角即可分享
微信分享提示