Redis 学习笔记(二)【原创】

公司引入redis服务已经有两年多时间了,目前已经很有很多项目在使用,并且一直很稳定,日常客户端链接数维持在2k左右。由于原先只做了主从,没有做failover,随着项目的增多,存在一定的安全隐患,因此最近腾出时间研究redis服务升级。
目前可选的方案:
1)sentinel集群 + redis主从
2)redis cluster
两种方案的区别:
1)sentinel集群 + redis主从 主要是可靠性方面考虑。原理比较简单, 通过sentinel集群对redis master进行监控,并在出现问题时进行通知和自动故障迁移。客户端会通过sentinel订阅master地址,当发生切换时,会自动通知客户端[img]http://dl2.iteye.com/upload/attachment/0128/4089/01e17e3d-61c9-3aad-b4b1-2819e2f9f23c.png[/img]
2)redis cluster 主要从可扩展性和可靠性考虑。redis cluster进行分片存储,对key进行CRC16并对slots取余,存储在对应的slot中。客户端缓存slot与nodes的对应关系。
[img]http://dl2.iteye.com/upload/attachment/0128/3816/a6a4bef7-6d1c-3bb4-b92a-e1c5739c632a.jpg[/img]
我个人认为两者的架构目标是不同的,第一种方式支持的是众多的小项目,单个redis支持多个db.我曾在网上看到有的公司运行了200多个redis实例,这对维护非常麻烦,个人认为还是改成多个db比较方便。第二种方式支持的是支持超高并发的项目,这时候单个redis的访问已经成为瓶颈,需要进行redis分片来分流压力。redis cluster是不支持多个db的,只支持db0,按照官网的说法,多个不相干项目合并在一个redis实例中不是集群设计的目标,因此没有必要引入这种区分db的复杂性。redis cluster由于实现了分片,因此对scan,keys等命令的支持也比较弱,需要进行一定的改造。
结合目前公司对redis的使用情况,倾向选择第一种解决方案。

一、下载
目前官网最新版是4.0,官网说3.2是一个久经考验的版本,相对来说4.0还不够成熟。那就下个3.2的吧。 下载地址:http://download.redis.io/releases/redis-3.2.11.tar.gz

二、安装
cd /usr/local
tar -zxvf redis-3.2.11.tar.gz

三、配置
cd redis-3.2.11
vi sentinel.conf

port 26379
#后台启动
daemonize yes
#记录日志文件
logfile "/var/log/logstash/sentinel.log"
#设置远程访问地址
bind 127.0.0.1 192.168.3.10
#监控192.168.3.131 6379的redis主实例,sentinel会自动发现并监控它的从实例。多个监控相同master的sentinel会自动组成集群。 2表示至少两个sentinel实例认为失效才会启动故障迁移
sentinel monitor mymaster 192.168.3.131 6379 2
#设置连接redis master的密码
sentinel auth-pass mymaster 123456
#如果30s没连上,则认为redis实例失效
sentinel down-after-milliseconds mymaster 30000
#如果180s没完成failover,则认为本次failover失败,重新进行failover
sentinel failover-timeout mymaster 180000
#在执行故障转移时, 最多可以有多少个从Redis实例在同步新的主实例
sentinel parallel-syncs mymaster 1
#sentinel检测到redis实例异常时,调用报警脚本。该配置项可选,但是很常用。
sentinel notification-script mymaster /usr/local/redis-3.2.11/bin/notify.sh



通知脚本写一句日志,通过filebeat+ELK邮件通知管理员。
mkdir bin
mkdir -p /var/log/logstash
vi /usr/local/redis-3.2.11/bin/notify.sh

echo "master failovered at `date`" > /var/log/logstash/redis_failover.log

chmod 755 ./bin/notify.sh
cd src
make && make install
cp redis-sentinel ../bin
cp redis-cli ../bin

四、启动
cd ../bin
redis-sentinel /usr/local/redis-3.2.11/sentinel.conf

两个警告:
1)Increased maximum number of open files to 10032 (it was originally set to 1024).
解决方法:
echo "ulimit -n 10032" >> /etc/profile
source /etc/profile
(可以通过ulimit -a 查看设置结果)

2)The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
解决方法:
echo "net.core.somaxconn = 512" > /etc/sysctl.conf
sysctl -p

设置开机自启动:
echo "redis-sentinel /usr/local/redis-3.2.11/sentinel.conf" >> /etc/rc.local

五、停止
./redis-cli -p 26379
shutdown

六、操作命令
./redis-cli -p 26379
info sentinel
sentinel masters
sentinel slaves mymaster
sentinel get-master-addr-by-name mymaster
sentinel reset <pattern>
sentinel failover <master name>

七、集群
因为投票机制至少需要3台sentinel, 所以在另外两台机器重复以上操作。

八、注意问题:
1. 如果redis服务设置了密码,那么master的redis.conf也要设置 masterauth "123456", 否则当主从切换之后,从节点连不上主节点
2. 集群运行几天之后,突然发现测试环境

master0:name=mymaster,status=sdown,address=192.168.3.131:6379,slaves=0,sentinels=1

sdown是说明主观下线了,sentinels=1是说明找不到其他的sentinel了,所以没有达到最少2票的选举要求,sdown不会变成odown. slaves=0说明没有发现redis slave. 貌似是发现机制出问题了。
检查配置:

protected-mode yes
bind 192.168.3.18 127.0.0.1

好像也没有问题。查了很久,抱着试试看态度改成:

protected-mode no
bind 0.0.0.0

重启sentinel节点就好了。

master0:name=mymaster,status=ok,address=192.168.3.131:6379,slaves=1,sentinels=3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
尚硅谷是一个教育机构,他们提供了一份关于Redis学习笔记。根据提供的引用内容,我们可以了解到他们提到了一些关于Redis配置和使用的内容。 首先,在引用中提到了通过执行命令"vi /redis-6.2.6/redis.conf"来编辑Redis配置文件。这个命令可以让你进入只读模式来查询"daemonize"配置项的位置。 在引用中提到了Redis会根据键值计算出应该送往的插槽,并且如果不是该客户端对应服务器的插槽,Redis会报错并告知应该前往的Redis实例的地址和端口。 在引用中提到了通过修改Redis的配置文件来指定Redis的日志文件位置。可以使用命令"sudo vim /etc/redis.conf"来编辑Redis的配置文件,并且在文件中指定日志文件的位置。 通过这些引用内容,我们可以得出结论,尚硅谷的Redis学习笔记涵盖了关于Redis的配置和使用的内容,并提供了一些相关的命令和操作示例。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Redis学习笔记--尚硅谷](https://blog.csdn.net/HHCS231/article/details/123637379)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Redis学习笔记——尚硅谷](https://blog.csdn.net/qq_48092631/article/details/129662119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值