博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis sentinel 客户端
阅读量:5874 次
发布时间:2019-06-19

本文共 4985 字,大约阅读时间需要 16 分钟。

1.  报错问题

sentinel客户端
调用master = sentinel.discover_master('mymaster')时报错
 
  File "D:\MyDev\python36\lib\site-packages\redis\connection.py", line 629, in read_response
    raise response
redis.exceptions.ResponseError: DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 4) Setup a bind address or an authentication password. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside.
 
命令测试
[root@s21 ~]# redis-cli -h 192.168.1.20 -p 26379         
192.168.1.20:26379>
192.168.1.20:26379> ping
(error) DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 4) Setup a bind address or an authentication password. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside.
192.168.1.20:26379>
 
 
修改redis配置
bind 0.0.0.0
port 6379
requirepass abc
# protected-mode yes   #这里修改yes no 不影响。 不该sentinel配置依旧会报错
 
sentinel配置添加
protected-mode no
 
 
测试不再报错
 
 

2. 代码

# 测试sentinel时注释掉直连部分

#/usr/bin/env python3# -*- coding:utf-8 -*-#   mail: infaaf@126.comimport redisfrom redis.sentinel import Sentinelimport random#直接连接方式client= redis.StrictRedis(host='192.168.1.20',port=6379,db=0,password='abc')res=client.get('k1').decode()print('直接连接方式操作',res)# sentinel连接方式sentinel = Sentinel([('192.168.1.20',26379),('192.168.1.21',26379),('192.168.1.22',26379)],socket_timeout=0.1)master = sentinel.discover_master('mymaster')slave = sentinel.discover_slaves('mymaster')# print(master)  # ('192.168.1.20', 6379)# print(slave)   # [('192.168.1.22', 6379), ('192.168.1.21', 6379)]writeclient= redis.StrictRedis(host=master[0],port=master[1],db=0,password='abc')r= random.randrange(0,len(slave))readclient=redis.StrictRedis(host=slave[r][0],port=slave[r][1],db=0,password='abc')userdict={
'name':'tom','type':'cat'}writeclient.hmset('u:1',userdict)res = readclient.hget('u:1','name').decode()print(res)
View Code

修改版

#/usr/bin/env python3# -*- coding:utf-8 -*-#   mail: infaaf@126.comimport redisfrom redis.sentinel import Sentinelimport random#直接连接方式# client= redis.StrictRedis(host='192.168.1.20',port=6379,db=0,password='abc')# res=client.get('k1').decode()# print('直接连接方式',res)# 哨兵连接方式: 从sentinel获取主从节点后连接   # 从redis2.8开始支持sentinel = Sentinel([('192.168.1.20',26379),('192.168.1.21',26379),('192.168.1.22',26379)],socket_timeout=0.1)master = sentinel.discover_master('mymaster')slave = sentinel.discover_slaves('mymaster')print(master)  # ('192.168.1.20', 6379)print(slave)   # [('192.168.1.22', 6379), ('192.168.1.21', 6379)]# 手动过程连接 (测试用)writeclient= redis.StrictRedis(host=master[0],port=master[1],db=0,password='abc')r= random.randrange(0,len(slave))readclient=redis.StrictRedis(host=slave[r][0],port=slave[r][1],db=0,password='abc')userdict={
'name':'tom','type':'cat'}writeclient.hmset('u:1',userdict)res = readclient.hget('u:1','name').decode()print('哨兵连接方式 clinet: {client}, res: {res}'.format(client=slave[r],res=res))# 自动连接 (实际使用)automaster = sentinel.master_for('mymaster', socket_timeout=0.5, password='abc', db=0)w_ret = automaster.set('foo', 'bar')autoslave = sentinel.slave_for('mymaster', socket_timeout=0.5, password='abc', db=0)r_ret = autoslave.get('foo')print('自动选取从节点获取数据',r_ret)
View Code

 

 

 

结果

 

转载于:https://www.cnblogs.com/infaaf/p/9826421.html

你可能感兴趣的文章
11G数据的hive初测试
查看>>
如何使用Core Text计算一段文本绘制在屏幕上之后的高度
查看>>
==和equals区别
查看>>
2010技术应用计划
查看>>
XML 节点类型
查看>>
驯服 Tiger: 并发集合 超越 Map、Collection、List 和 Set
查看>>
Winform开发框架之权限管理系统改进的经验总结(3)-系统登录黑白名单的实现...
查看>>
Template Method Design Pattern in Java
查看>>
MVC输出字符串常用四个方式
查看>>
LeetCode – LRU Cache (Java)
查看>>
JavaScript高级程序设计--对象,数组(栈方法,队列方法,重排序方法,迭代方法)...
查看>>
【转】 学习ios(必看经典)牛人40天精通iOS开发的学习方法【2015.12.2
查看>>
nginx+php的使用
查看>>
在 ASP.NET MVC 中使用异步控制器
查看>>
SQL语句的执行过程
查看>>
Silverlight开发历程—动画(线性动画)
查看>>
详解Linux中Load average负载
查看>>
HTTP 协议 Cache-Control 头——性能啊~~~
查看>>
丢包补偿技术概述
查看>>
PHP遍历文件夹及子文件夹所有文件
查看>>