redis-哨兵

发布时间 2023-04-23 18:19:56作者: ERROR404Notfound

1.哨兵高可用

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

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

先搭建一主两从:
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

1.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