Redhat_rhel8.0_Redis伪集群主从复制_读写分离配置详细。
一、搭建redis_一主二从_伪集群准备工作:
1.1、一台redis-redhat_8服务器,并且已安装redis服务。(详细安装请看redis文章)
1.2、安装目录如下:
文件目录:/root/redis/redis-6.2.1
编译目录:/redis_install/etc/bin
启动文件目录:/root/redis_install/etc
二、复制redis.conf启动文件( 三份 ):
[root@Redis etc]# ls
redis-79.conf redis-80.conf redis-81.conf redis.conf
三、编辑redis-79.conf、redis-80.conf、redis-81.conf配置文件
端口号:port 6380
开启后台启动:daemonize yes
日志文件:pidfile /var/run/redis_6380.pid
日志文件:logfile “6380.log”
持久化:dbfilename dump80.rdb
主从关系:replicaof “masterip” “masterport”
主从关系密码:masterauth “master-password“
四、启动redis(三个)服务
[root@Redis ~]# /redis_install/etc/bin/redis-server redis_install/etc/redis-79.conf
[root@Redis ~]# /redis_install/etc/bin/redis-server redis_install/etc/redis-80.conf
[root@Redis ~]# /redis_install/etc/bin/redis-server redis_install/etc/redis-81.conf
[root@Redis ~]# ps -ef | grep redis //查看redis进程是否启动。备注:kill -9 PID 杀死进程。
root 13508 1 0 20:33 ? 00:00:00 /redis_install/etc/bin/redis-server 127.0.0.1:6379
root 13536 1 0 20:33 ? 00:00:00 /redis_install/etc/bin/redis-server 127.0.0.1:6380
root 13546 1 0 20:33 ? 00:00:00 /redis_install/etc/bin/redis-server 127.0.0.1:6381
root 13564 2339 0 20:33 pts/3 00:00:00 grep --color=auto redis
五、开启三个服务器连接框
六、登录redis-6379、redis-6380、redis-6381服务查看
每一个redis服务启动,默认都是master。
七、配置主从复制。在redis-6380和redis-6381为从服务器。
127.0.0.1:6380> slaveof 127.0.0.1 6379
OK
127.0.0.1:6380> info replication
Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
127.0.0.1:6381> slaveof 127.0.0.1 6379
OK
127.0.0.1:6381> info replication
Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
八、在redis-6379上验证
九、测试:主次复制,读写分离!
也就是redis-6379可读写,但redis-6380和redis6381不可写,只能读。
至此成功!
存在问题:当redis-6379_master宕机以后,redis-6380和redis-6381还是slave。
解决方法:设置选举机制,当服务器redis-6379宕机以后,redis-6380选举为master。
一、哨兵进程搭建
1.1、哨兵模式是一种特殊模式,哨兵是一个独立的进程,独立运行。
1.2、原理是:哨兵通过发送命令,等待redis服务器响应,从而监控运行的多个redis实例。
二、新建立一个窗口
2.1、在/root/redis_install/etc文件下,创建哨兵配置文件。
[root@Redis etc]# vim sentinel.con
写入如下配置文件:
sentinel monitor my_redis 127.0.0.1 6379 1
2.2、启动哨兵模式配置文件
[root@Redis ~]# redis-sentinel redis_install/etc/sentinel.conf
2.3、此时redis-6379为master,现关闭redis-6379服务。
2.4查看rediss-6380是否变为master
至此成功!
2.5、再次启动redis-6379,它还是slave,而redis-6380还是master。
缓存穿透:当一个用户去读取一个数据,首先会去redis缓存去找,没有找到的话,就会去mysql数据库寻找。那么,后面查询的数据都会去mysql中查找。这样就造成了mysql雪崩。
解决问题:
1、布隆过滤器:是一种数据结构,对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃,从而避免了对底层存储系统的查询压力。
2、存储空对象:当存储层不命中后,即使返回的空对象也将其缓存起来,同时会设置一个过期时间,之后再次访问这个数据将会从缓存中获取,保护了后端数据源。(不建议)