redis分布式——哨兵机制、redis集群

1、redis主从配置,实现读写分离

1、根据redis.conf文件复制两个配置文件
6381.conf(主库)
6380.conf(从库)

2、编辑6381.conf

bing 0.0.0.0
port 6381
# 把保护模式设置为no,才能让外网访问
protected-mode no  

编辑6380.conf

bing 0.0.0.0
port 6380
# 把保护模式设置为no,才能让外网访问
protected-mode no  
# 设置为从数据库<slaveof 主库ip 主库端口>
slaveof 127.0.0.1 6381

3、启动两个redis

启动redis服务

sudo redis-server 6380.conf
sudo redis-server 6381.conf

启动redis客户端

redis-cli -p 6381
redis-cli -p 6380

输入命令info,能看到下面信息,说明主从已经搭建好了
在这里插入图片描述
读写分离示意:
在这里插入图片描述

2、哨兵机制

内部机制:

1、流言协议

当某个哨兵程序ping 发现监视的主服务器下线后(心跳检测), 会向监听该服务器的其他哨兵询问, 是否确认主服务器下线, 当 确认的哨兵数量 达到要求(配置文件中设置)后, 会确认主服务器下线(客观下线), 然后进入投票环节

2、投票协议

1、当确认主服务器客观下线后, 哨兵会通过 投票的方式 来授权其中一个哨兵主导故障转移处理
2、只有在 大多数哨兵都参加投票 的前提下, 才会进行授权, 比如有5个哨兵, 则需要至少3个哨兵投票才可能授权
3、目的是避免出现错误的故障迁移

3、建议最低配置

1、至少在3台服务器上分别启动至少一个哨兵
2、如果只有一台, 则服务器宕机后, 将无法进行故障迁移
3、如果只有两台, 一旦一个哨兵挂掉了, 则投票会失败

哨兵模式是Redis官方自带的工具, 是默认安装的
哨兵模式的配置模板在Redis的安装包中, 默认名为 sentinel.conf

2.1 配置步骤

1、编辑 sentinel.conf

在这里插入图片描述

2、创建3个配置文件,分别写入下面内容

# 在/etc/redis中创建三个配置文件
# sentinel_26380.conf
port 26380  
sentinel monitor mymaster 127.0.0.1 6381 2  
sentinel down-after-milliseconds mymaster 30000  
daemonize yes 
logfile "/var/log/redis-sentinel-26380.log"
  
# sentinel_26381.conf
port 26381  
sentinel monitor mymaster 127.0.0.1 6381 2  
sentinel down-after-milliseconds mymaster 30000  
daemonize yes 
logfile "/var/log/redis-sentinel-26381.log"

# sentinel_26382.conf
port 26382
sentinel monitor mymaster 127.0.0.1 6381 2  
sentinel down-after-milliseconds mymaster 30000  
daemonize yes 
logfile "/var/log/redis-sentinel-26382.log"

启动哨兵:

sudo redis-sentinel sentinel_26380.conf
sudo redis-sentinel sentinel_26381.conf
sudo redis-sentinel sentinel_26382.conf
2.2 python中使用哨兵
from redis.sentinel import Sentinel

# 构建哨兵的连接信息
sentinel_list = [
    ("127.0.0.1", 26380),
    ("127.0.0.1", 26381),
    ("127.0.0.1", 26382),
]

# 1.创建哨兵客户端对象
sentinel = Sentinel(sentinels=sentinel_list)

# 2.构建哨兵监视主从服务器别名
master_name = "mymaster"

# 3.利用哨兵客户端获取redis主客户端对象
redis_master = sentinel.master_for(master_name, decode_responses=True)

# 4.利用哨兵客户端获取redis从客户端对象
redis_slave = sentinel.slave_for(master_name, decode_responses=True)

# 主库写操作
redis_master.set("user:666", "小明")

# 从库读操作
print(redis_slave.get("user:666"))

3、redis集群

1、新建6个集群配置文件

# 新建:/etc/redis/7000.conf
port 7000
daemonize yes
pidfile 7000.pid
cluster-enabled yes
cluster-config-file 7000_node.conf
cluster-node-timeout 15000
appendonly yes



# 新建:/etc/redis/7001.conf
port 7001
daemonize yes
pidfile 7001.pid
cluster-enabled yes
cluster-config-file 7001_node.conf
cluster-node-timeout 15000
appendonly yes


# 新建:/etc/redis/7002.conf
port 7002
daemonize yes
pidfile 7002.pid
cluster-enabled yes
cluster-config-file 7002_node.conf
cluster-node-timeout 15000
appendonly yes


# 新建:/etc/redis/7003.conf
port 7003
daemonize yes
pidfile 7003.pid
cluster-enabled yes
cluster-config-file 7003_node.conf
cluster-node-timeout 15000
appendonly yes


# 新建:/etc/redis/7004.conf
port 7004
daemonize yes
pidfile 7004.pid
cluster-enabled yes
cluster-config-file 7004_node.conf
cluster-node-timeout 15000
appendonly yes


# 新建:/etc/redis/7005.conf
port 7005
daemonize yes
pidfile 7005.pid
cluster-enabled yes
cluster-config-file 7005_node.conf
cluster-node-timeout 15000
appendonly yes

2、启动redis集群

# ubantu集群配置
# 新建6个配置文件:/etc/redis/7000.conf

# 启动redis服务器
sudo /usr/local/bin/redis-server /etc/redis/7000.conf &
sudo /usr/local/bin/redis-server /etc/redis/7001.conf &
sudo /usr/local/bin/redis-server /etc/redis/7002.conf &
sudo /usr/local/bin/redis-server /etc/redis/7003.conf &
sudo /usr/local/bin/redis-server /etc/redis/7004.conf &
sudo /usr/local/bin/redis-server /etc/redis/7005.conf &

# 先查看⾃⼰的 gem 源是什么地址
gem source -l 

# 更新源
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
    
# 安装依赖
sudo gem install redis

# redis-trib.rb路径如下:
cd /usr/local/redis/src

sudo cp /usr/local/redis/src/redis-trib.rb  /usr/local/bin


# 创建集群
redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0 .1:7005
     
    
 """
redis-trib.rb  创建集群的命令
create 创建集群
--replicas 1    带卡槽和没有卡槽的比例 1:1  集群中6台服务器 3台带卡槽的 3台未带卡槽
  主[带卡槽  读写]-从[备份]
 """          
# 进入redis集群客户端记得加上 -c
redis-cli -h 127.0.0.1 -p 7000 -c

在这里插入图片描述

例如:我们进入redis 7004端口,它是没有卡槽值的,但是也能进行写操作,不过会根据卡槽值重定向到别的有卡槽值的redis中(如这里是7001)
在这里插入图片描述

4、集群redis在python中的使用

from rediscluster import RedisCluster


# 1.创建集群客户端对象
# 方案1:根据集群中任意一个ip和端口就能创建集群对象  蔓延机制[顺藤摸瓜]
# redis_cluter = RedisCluster(host="127.0.0.1", port=7005, decode_responses=True)

# 带卡槽的redis连接信息
startup_nodes = [
    {"host": "127.0.0.1", "port": 7000},
    {"host": "127.0.0.1", "port": 7001},
    {"host": "127.0.0.1", "port": 7002},
]

# 方案2:根据带卡槽的数据库连接信息创建集群对象
redis_cluter = RedisCluster(startup_nodes=startup_nodes,decode_responses=True)


redis_cluter.set("name:888", "888")
print(redis_cluter.get("name:888"))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值