1.搭建单节点的redis: 优点是部署简单。 缺点是读写压力大,全部在一个服务器上面。 没有高可用性,服务器挂掉后,就无法使用了 2.读写分离: 主服务器负责读写 从服务器只负责读,会把读的压力分散出去。 提高了一定的可用性,一个从服务器宕机后,另外两天服务器还可以继续工作。 缺点是: 主服务器挂掉后,就不能继续写操作了。 3.哨兵机制,主备切换: 监控主服务器有无挂机,挂机后,重新选举主服务器。 缺点是: 1.写的压力没有被分散掉,所有的写的压力都在服务器上面。 2.主服务器通过 发布订阅 形式,那么主服务器有12W条数据,那么从服务器同样有12万条数据。 那么对资源是一种浪费。如何解决? 搭建集群。 4.搭建集群 例如:3台主服务器,3台从服务器。 集群环境如何存储数据: 例如12W条数据,每天服务器存储2W条左右数据。 某个数据如何存储数据呢? 根据hash值计算,例如23800,那么就是进行插入第二个服务器当中。
安装简单:make预编译–》make install 安装–》配置redis-conf文件
缺点:
1.现在只有一台服务器,读写都在上面,如果访问量比较大,读写压力会很大。
2.当宕机时,就无法使用redis了。
小例子:火车站有:售票窗口:赋值卖票出票,自动售票机只负责出票。比如火车站只有一个售票窗口,既卖票又出票,所有的人都需要去一个售票窗口,就会很慢。如果发生某些问题,那么就会停止所有操作。
解决方法:
1.集群概念:开启多个窗口,解决压力。当某一个窗口出了问题,其他窗口还可以继续使用。
2. 主从概念:有101个人,前一百个人是买票的,第101个人是取票的。买票很慢,取票很快。那么自动取票机,就会缓解此事情。窗口相当于主节点。自动取票机是从节点,只负责取票。
redis大部分数据是频繁访问的,所以读的压力很大,写的压力是很小的。
数据如何通讯的:发布订阅
先保证通信没有问题:master / slave 通过Ping 、pong来确保相互通信是正常的。
发布订阅:当master发布信息后,其他的所有slave都能接受到信息。
Redis支持主从复用。数据可以从主服务器向任意数量的从服务器上同步,同步使用的是发布/订阅机制。MaterSlave的模式,从Slave向Master发起SYNC命令。
可以是1 Master 多Slave,可以分层,Slave下可以再接Slave,可扩展成树状结构。
因为没有两台电脑,所以只能在一台机器上搭建两个Redis服务端。
这里使用单机来模拟redis 主从服务器 ,实现读写分离配置
vim中显示行号:
#引用公共配置 include /opt/redis/conf/redis-common.conf #进程编号记录文件 pidfile /var/run/redis-6379.pid #进程端口号 port 6379 #日志记录文件 logfile "/opt/redis/log/redis-6379.log" #数据记录文件 dbfilename dump-6379.rdb #追加文件名称 appendfilename "appendonly-6379.aof" #下面的配置无需在6379里配置 #备份服务器从属于6379推荐配置配局域网IP #slaveof 192.168.0.121 6379
#引用公共配置 include /opt/redis/conf/redis-common.conf #进程编号记录文件 pidfile /var/run/redis-6380.pid #进程端口号 port 6380 #日志记录文件 logfile "/opt/redis/log/redis-6379.log" #数据记录文件 dbfilename dump-6380.rdb #追加文件名称 appendfilename "appendonly-6379.aof" #下面的配置无需在6379里配置 #备份服务器从属于6379推荐配置配局域网IP #slaveof 192.168.0.121 6379
#引用公共配置 include /opt/redis/conf/redis-common.conf #进程编号记录文件 pidfile /var/run/redis-6381.pid #进程端口号 port 6381 #日志记录文件 logfile "/opt/redis/log/redis-6379.log" #数据记录文件 dbfilename dump-6381.rdb #追加文件名称 appendfilename "appendonly-6379.aof" #下面的配置无需在6379里配置 #备份服务器从属于6379推荐配置配局域网IP slaveof 192.168.0.121 6379
优点:
缺点:
哨兵会去检测整个主从复用,如果主服务器挂掉后,会重新选举slave服务器来当做master服务器。那么挂掉的主服务器,重启后,会是slave服务器。
注释端口,每个私有配置都有自己的端口
后台启动 yes
关闭进程、日志文件
哨兵监控的服务器地址:***,
2:三个哨兵监控,就需要2个统一选举。
5个哨兵,需要3确实统一选举。
连接主服务器的密码
如何判断主节点有无挂掉?
例如只有一秒网络不好,master没有连接上。并不能立马去选举。
判断连续30秒,没有连接上,那么需要进行选举。
本人设为10秒,当哨兵连续30秒都没有ping通,则重新进行选举。
当哨兵出现选举不成功时,默认180秒后重新选举
#引用公共配置 include /opt/redis/conf/sentinel-common.conf #进程端口号 port 26379 #进程编号记录文件 pidfile /var/run/sentinel-26379.pid #日志记录文件(为了方便查看日志,先注释掉,搭好环境后再打开) logfile "/opt/redis/log/sentinel-26379.log"
#引用公共配置 include /opt/redis/conf/sentinel-common.conf #进程端口号 port 26380 #进程编号记录文件 pidfile /var/run/sentinel-26380.pid #日志记录文件(为了方便查看日志,先注释掉,搭好环境后再打开) logfile "/opt/redis/log/sentinel-26380.log"
#引用公共配置 include /opt/redis/conf/sentinel-common.conf #进程端口号 port 26381 #进程编号记录文件 pidfile /var/run/sentinel-26381.pid #日志记录文件(为了方便查看日志,先注释掉,搭好环境后再打开) logfile "/opt/redis/log/sentinel-26381.log"
当主节点宕机后,需要两个哨兵认为是宕机了, 才进行主备切换
tail -f /opt/redis/log/sentinel-26379.log
sdown:主服务器下线了
odown:3个哨兵,2个哨兵说已经下线了。
tyr :尝试重新连接服务器,连接失败。
seelct:选择了6381服务器,为主服务器
。
3台主服务器,3台从服务器。
集群环境如何存储数据:
例如12W条数据,每天服务器存储2W条左右数据。
某个数据如何存储数据呢?
根据hash值计算,例如23800,那么就是进行插入第二个服务器当中。