集群-缓存-Redis

Redis

简介:
Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

Redis是一个key-value存储系统。
Redis 是一个高性能的key-value数据库。
Redis支持主从同步。
Redis的官网地址,非常好记,是redis.io。

redis作为缓存,不用太大的硬盘空间,但内存要大,假设tomcat要mysql数据,数据在redis缓存里有,可以直接要数据(百度)。硬盘装个系统就可以。

Redis哨兵(Sentinel)模式
哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线。当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线。这样对于客户端而言,一切都是透明的。

实验准备
在centos7环境部署redis哨兵集群:

172.16.0.51 redis1
172.16.0.52 redis2
172.16.0.53 redis3

[root@redis1 ~]# tail -3 /etc/hosts
172.16.0.51 redis1.up.com	redis1
172.16.0.52 redis2.up.com	redis2
172.16.0.53 redis3.up.com	redis3

1. 安装redis

[root@redis1 ~]# lftp 172.16.0.99
lftp 172.16.0.99:~> cd scripts/     
lftp 172.16.0.99:/scripts> get redis-3.0.5.sh

[root@redis1 ~]# chmod +x redis-3.0.5.sh 
[root@redis1 ~]# ./redis-3.0.5.sh 

2 3 同上

2. 修改配置文件

[root@redis1 ~]# cd /etc/redis/
[root@redis1 /etc/redis]# ls
6379.conf
[root@redis1 /etc/redis]# vim 6379.conf
 71 bind 172.16.0.51		<---改
193 dir /var/lib/redis/6379		<---不需要改(264)
##落盘的目录
219 masterauth  redhat		<---改(294)
##master的验证密码
398 requirepass redhat		<---改(508)
##redis的访问密码,可以复杂一点
510 appendonly yes		<---改(700)
562 no-appendfsync-on-rewrite yes		<---改(752)

在redis1上部署哨兵

[root@redis1 ~]# lftp 172.16.0.99
lftp 172.16.0.99:~> cd tar
cd ok, cwd=/tar
lftp 172.16.0.99:/tar> get redis-3.0.5.tar.gz 

[root@redis1 ~]# tar zxf redis-3.0.5.tar.gz

[root@redis1 ~/redis-3.0.5]# cp sentinel.conf /etc/redis/
	##配置文件
[root@redis1 ~/redis-3.0.5/src]# cp redis-sentinel /bin/
	##启动命令

[root@redis1 ~/redis-3.0.5/src]# scp redis-sentinel 172.16.0.52:/bin/
[root@redis1 ~/redis-3.0.5/src]# scp redis-sentinel 172.16.0.53:/bin/

修改哨兵配置文件

[root@redis1 /etc/redis]# vim sentinel.conf
 53 sentinel monitor master 172.16.0.51 6379 1		<---改 名字--IP--SLAVE数量(84)
	##监控masterIP,集群存活的slave的最少数量是1个
 73 sentinel auth-pass master redhat		<---改(103)
	##写入master的验证密码  <---对应上边设置的密码
 82 sentinel down-after-milliseconds master 30000		<---改(113)
	##master被哨兵认定为失效的时间间隔,ms
 90 sentinel parallel-syncs master 1		<---改
	##允许1个slave指向新的master
115 sentinel failover-timeout master 180000		<---改
	##失效切换的超时时间,ms
	
将编辑好的配置文件发送给另外两台节点
[root@redis1 /etc/redis]# scp sentinel.conf 172.16.0.52:/etc/redis/
[root@redis1 /etc/redis]# scp sentinel.conf 172.16.0.53:/etc/redis/

[root@redis1 /etc/redis]# scp 6379.conf 172.16.0.52:/etc/redis/
[root@redis1 /etc/redis]# scp 6379.conf 172.16.0.53:/etc/redis/

redis2 修改配置文件:
[root@redis2 /etc/redis]# vim 6379.conf
 71 bind 172.16.0.52		<---改成本机的IP(70)
212 slaveof 172.16.0.51 6379		<---改成redismaster的IP (287?)
redis3 修改配置文件:
[root@redis3 /etc/redis]# vim 6379.conf
 71 bind 172.16.0.53		<---改成本机的IP
212 slaveof 172.16.0.51 6379		<---改成redismaster的IP

启动服务

[root@redis1 ~]# /etc/init.d/redis_6379 restart
[root@redis2 ~]# /etc/init.d/redis_6379 restart
[root@redis3 ~]# /etc/init.d/redis_6379 restart

[root@redis1 ~]# echo "/etc/init.d/redis_6379 restart" >> /etc/rc.local 
[root@redis2 ~]# echo "/etc/init.d/redis_6379 restart" >> /etc/rc.local 
[root@redis3 ~]# echo "/etc/init.d/redis_6379 restart" >> /etc/rc.local 

启动哨兵:

	master --> slave1 --> slave2

[root@redis1 ~]# /bin/redis-sentinel /etc/redis/sentinel.conf &
[root@redis2 ~]# /bin/redis-sentinel /etc/redis/sentinel.conf &
[root@redis3 ~]# /bin/redis-sentinel /etc/redis/sentinel.conf &

[root@redis1 ~]# echo "/bin/redis-sentinel /etc/redis/sentinel.conf &" >> /etc/rc.local
[root@redis2 ~]# echo "/bin/redis-sentinel /etc/redis/sentinel.conf &" >> /etc/rc.local
[root@redis3 ~]# echo "/bin/redis-sentinel /etc/redis/sentinel.conf &" >> /etc/rc.local

[root@redis1 ~]# chmod +x /etc/rc.d/rc.local
[root@redis2 ~]# chmod +x /etc/rc.d/rc.local
[root@redis3 ~]# chmod +x /etc/rc.d/rc.local

测试

查看3个redis的状态:

[root@redis1 ~]# redis-cli -h 172.16.0.51 -p 6379
172.16.0.51:6379> auth redhat		<---验证账号
OK
172.16.0.51:6379> info replication		<---查看主从信息
# Replication
role:master
connected_slaves:2
slave0:ip=172.16.0.52,port=6379,state=online,offset=125316,lag=1
slave1:ip=172.16.0.53,port=6379,state=online,offset=125316,lag=0
master_repl_offset:125316
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:125315

[root@redis2 ~]# redis-cli -h 172.16.0.52 -p 6379
[root@redis3 ~]# redis-cli -h 172.16.0.53 -p 6379
172.16.0.52:6379> auth redhat
OK
172.16.0.52:6379> info replication
# Replication
role:slave
master_host:172.16.0.51
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0

牢固性测试

关掉master–redis1
其它节点中会有滚屏提示,然后某一节点会自动接管master;
再次启动redis1,redis1变为slave

配置文件说明



    sentinel端口
    port
    #工作路径
    dir "/usr/local/redis-6380"
    # 守护进程模式
    daemonize yes
    # 指明日志文件名
    logfile "./sentinel.log"
    #哨兵监控的master,主从配置一样,在进行主从切换时6379会变成当前的master端口,
    sentinel monitor mymaster
    # master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
    sentinel down-after-milliseconds mymaster
    #若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
    sentinel failover-timeout mymaster
    #设置master和slaves验证密码
    sentinel auth-pass mymaster
    #哨兵程序自动添加的部分
    # Generated by CONFIG REWRITE
    sentinel config-epoch mymaster
    sentinel leader-epoch mymaster
    ###指明了当前群集的从库的ip和端口,在主从切换时该值会改变
    sentinel known-slave mymaster
    ###除了当前的哨兵还有哪些监控的哨兵
    sentinel known-sentinel mymaster  7a88891a6147e202a53601ca16a3d438e9d55c9d
    sentinel current-epoch 


如果遇到主从不切换的情况
修改配置文件中115 sentinel failover-timeout master 180000 值
将180000缩小即可

Redis关闭方法有两种

第一种
ps -ef | grep -i redis
kill -9 PID	

第二种
./bin/redis shutdown

centos7 启动时报“a start job is running for /etc/rc.d/rc.local compatibility”错误的问题

重启虚拟机 在引导界面按“e” 编辑第一个启动项,在“quiet”后加 systemd.unit=rescue.target (切换到单用户模式启动),按ctrl+x 启动 输入root密码 编辑一下rc.local,问题解决!

发布了57 篇原创文章 · 获赞 3 · 访问量 987

猜你喜欢

转载自blog.csdn.net/weixin_42502744/article/details/103800216