016-学习Redis-主从服用

  • 回顾内容:
  • 一、主从讲解:
  • 1、redis的优缺点
  • 2、主从概念-例子:
  • 3、主从概念-提出读写分离
  • 二、主从服用-读写分离
  • 1. 将重复的配置设为公用。
  • 2.创建三个私有的配置文件
  • 3.启动三个服务器:
  • 4.测试主从、读取
  • 5、优缺点
  • 三、主从服用-哨兵配置
  • 1、将哨兵配置文件改为公用。mv移动、修改名字
  • 编写公用的配置
  • 2、创建三个私有的配置文件
  • 3、启动哨兵服务器
  • 四、主从服用-主备切换,进行模拟演示:挂掉主服务器
  • 1.查看日志
  • 2、模拟服务器挂机的状态
  • 1.kill -9 master
  • 2.master哨兵日志信息:
  • 3、重启启动原来的master 6379
  • 1.6379发现是slave了
  • 2.现在的6381是master
  • 4、主从服务器,读写测试:
  • 1、主服务器 6381。读写都可以
  • 2、从服务器。只读
  • 五、集群


回顾内容:

1.搭建单节点的redis:
	优点是部署简单。
	缺点是读写压力大,全部在一个服务器上面。
	没有高可用性,服务器挂掉后,就无法使用了
2.读写分离:
	主服务器负责读写
	从服务器只负责读,会把读的压力分散出去。
	提高了一定的可用性,一个从服务器宕机后,另外两台服务器还可以继续工作。
	主从服务器的内容是同步的。
	缺点是:
	服务器挂掉后,就不能继续写操作了。
3.哨兵机制,主备切换:
	监控主服务器有无挂机,挂机后,重新选举主服务器。
	缺点是:
	1.写的压力没有被分散掉,所有的写的压力都在服务器上面。
	2.主服务器通过 发布订阅 形式,那么主服务器有12W条数据,那么从服务器同样有12万条数据。
	那么对资源是一种浪费。如何解决? 搭建集群。
4.搭建集群
	例如:3台主服务器,3台从服务器。

集群环境如何存储数据:
	例如12W条数据,每天服务器存储2W条左右数据。

某个数据如何存储数据呢?
	根据hash值计算,例如23800,那么就是进行插入第二个服务器当中。

一、主从讲解:

1、redis的优缺点

安装简单:make预编译–》make install 安装–》配置redis-conf文件

缺点:
1.现在只有一台服务器,读写都在上面,如果访问量比较大,读写压力会很大。
2.当宕机时,就无法使用redis了。

2、主从概念-例子:

小例子:火车站有:售票窗口:赋值卖票出票,自动售票机只负责出票。比如火车站只有一个售票窗口,既卖票又出票,所有的人都需要去一个售票窗口,就会很慢。如果发生某些问题,那么就会停止所有操作。
解决方法:
1.集群概念:开启多个窗口,解决压力。当某一个窗口出了问题,其他窗口还可以继续使用。
2. 主从概念:有101个人,前一百个人是买票的,第101个人是取票的。买票很慢,取票很快。那么自动取票机,就会缓解此事情。窗口相当于主节点。自动取票机是从节点,只负责取票。

3、主从概念-提出读写分离

redis大部分数据是频繁访问的,所以读的压力很大,写的压力是很小的。
数据如何通讯的:发布订阅
先保证通信没有问题:master / slave 通过Ping 、pong来确保相互通信是正常的。
发布订阅:当master发布信息后,其他的所有slave都能接受到信息。

Redis支持主从复用。数据可以从主服务器向任意数量的从服务器上同步,同步使用的是发布/订阅机制。MaterSlave的模式,从Slave向Master发起SYNC命令。
可以是1 Master 多Slave,可以分层,Slave下可以再接Slave,可扩展成树状结构。
因为没有两台电脑,所以只能在一台机器上搭建两个Redis服务端。
这里使用单机来模拟redis 主从服务器 ,实现读写分离配置

二、主从服用-读写分离

  1. 创建三个目录:mkdir -p /opt/redis/ 日志、数据、配置文件
    根据配置文件启动redis服务器。那么就需要有三个配置文件。
  2. 将redis自带的配置文件(原本),复制到 /opt/redis/conf
    cp redis.conf /opt/redis/conf

1. 将重复的配置设为公用。

mv 是移动,就是不指定其他目录,则就是更改文件名。

redis集群主从会切换条件 redis集群手动主从切换_配置文件

vim中显示行号:

redis集群主从会切换条件 redis集群手动主从切换_redis_02

  • 所有ip地址都能访问:
  • 保护模式:改为no.
  • 端口号:每个主从节点,在自己的配置文件上面,在加上。
  • 后台启动:改为yes
  • 每个服务器都有进程文件,注释掉
  • 关闭日志
  • 关闭持久化opt
  • 更改日志目录
  • 从服务器访问主服务器的密码
  • 主服务器登录时,访问的密码
  • yes:主服务器是读写,从服务器是只读【正式工作是yes,默认即可】
  • no:主从都可以读写

2.创建三个私有的配置文件

redis集群主从会切换条件 redis集群手动主从切换_配置文件_03


redis集群主从会切换条件 redis集群手动主从切换_配置文件_04

  • 6379的配置文件:
#引用公共配置
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.75.100 6379
  • 6380的配置文件:
#引用公共配置
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.75.100 6379
  • 6381的配置文件:
#引用公共配置
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.75.100 6379

3.启动三个服务器:

redis集群主从会切换条件 redis集群手动主从切换_数据库_05

  • 开启三个服务器:

redis集群主从会切换条件 redis集群手动主从切换_配置文件_06


redis集群主从会切换条件 redis集群手动主从切换_服务器_07


redis集群主从会切换条件 redis集群手动主从切换_数据库_08

  • 查看主从节点信息:info replication

4.测试主从、读取

  • 主节点:能读能写
  • 从节点:只能读,不能写

5、优缺点

优点:

  1. 分散了读的压力
  2. 提高了一定的可用性:某个从服务器宕机了,其他服务器依旧可以使用。

缺点:

  1. 主服务器挂机了,就不能支持写操作了。

三、主从服用-哨兵配置

哨兵会去检测整个主从复用,如果主服务器挂掉后,会重新选举slave服务器来当做master服务器。那么挂掉的主服务器,重启后,会是slave服务器。

1、将哨兵配置文件改为公用。mv移动、修改名字

  1. 赋值哨兵配置文件,到/opt/redis/conf。
    从redis解压目录下复制sentinel.conf至/opt/redis/conf/

编写公用的配置

  1. 注释端口,每个私有配置都有自己的端口
  2. redis集群主从会切换条件 redis集群手动主从切换_数据库_09

  3. 后台启动 yes
  4. redis集群主从会切换条件 redis集群手动主从切换_数据库_10

  5. 关闭进程、日志文件
  6. redis集群主从会切换条件 redis集群手动主从切换_配置文件_11

  7. 哨兵监控的服务器地址:
    【端口号后面的2】2是什么意思呢?:三个哨兵监控,就需要2个统一选举。
    5个哨兵,需要3确实统一选举。
  8. redis集群主从会切换条件 redis集群手动主从切换_服务器_12

  9. 连接主服务器的密码
  10. redis集群主从会切换条件 redis集群手动主从切换_服务器_13

  11. 如何判断主节点有无挂掉?
    例如只有一秒网络不好,master没有连接上。并不能立马去选举。
    判断连续30秒,没有连接上,那么需要进行选举。
    本人设为10秒,当哨兵连续30秒都没有ping通,则重新进行选举。
  12. redis集群主从会切换条件 redis集群手动主从切换_数据库_14

  13. 当哨兵出现选举不成功时,默认180秒后重新选举
  14. redis集群主从会切换条件 redis集群手动主从切换_服务器_15

2、创建三个私有的配置文件

redis集群主从会切换条件 redis集群手动主从切换_redis集群主从会切换条件_16

#引用公共配置
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"

3、启动哨兵服务器

redis集群主从会切换条件 redis集群手动主从切换_服务器_17

四、主从服用-主备切换,进行模拟演示:挂掉主服务器

1.查看日志

当主节点宕机后,需要两个哨兵认为是宕机了, 才进行主备切换

tail -f /opt/redis/log/sentinel-26379.log

redis集群主从会切换条件 redis集群手动主从切换_数据库_18

2、模拟服务器挂机的状态

1.kill -9 master

redis集群主从会切换条件 redis集群手动主从切换_服务器_19

  • 查看master信息
    连接失败

2.master哨兵日志信息:

sdown:主服务器下线了

odown:3个哨兵,2个哨兵说已经下线了。

tyr :尝试重新连接服务器,连接失败。

seelct:选择了6381服务器,为主服务器

redis集群主从会切换条件 redis集群手动主从切换_redis集群主从会切换条件_20


redis集群主从会切换条件 redis集群手动主从切换_服务器_21


redis集群主从会切换条件 redis集群手动主从切换_数据库_22

3、重启启动原来的master 6379


redis集群主从会切换条件 redis集群手动主从切换_redis_23

1.6379发现是slave了

redis集群主从会切换条件 redis集群手动主从切换_服务器_24

2.现在的6381是master

redis集群主从会切换条件 redis集群手动主从切换_配置文件_25

4、主从服务器,读写测试:

1、主服务器 6381。读写都可以

redis集群主从会切换条件 redis集群手动主从切换_数据库_26

2、从服务器。只读

redis集群主从会切换条件 redis集群手动主从切换_数据库_27

五、集群

3台主服务器,3台从服务器。
集群环境如何存储数据:
例如12W条数据,每天服务器存储2W条左右数据。

某个数据如何存储数据呢?
根据hash值计算,例如23800,那么就是进行插入第二个服务器当中。

redis集群主从会切换条件 redis集群手动主从切换_数据库_28