Redis主从复制(master/slave)
1 概念
一个主人有好几个仆从
2 一台Redis服务器(主master)的数据复制到其他多个Redis服务器(从slave),主机主要进行写的操作,从记进行读的操作
3 主从复制主要为了解决读写分离,80%的情况下都是在进行读操作,我们把所有读操作的压力分配到从机上,写的操作请求交给主机进行处理,这样的模式可以减缓服务器压力,在架构中经常使用,最低的配置一般是三个,即为一主二从
我们在开发中最低的配置一般是三个,即为一主二从
网络异常,图片无法展示
|
4 基本的一主二从模型
暂时无法在文档外展示此内容
网络异常,图片无法展示
|
5 主从复制的作用
网络异常,图片无法展示
|
6 为什么使用主从复制?
如果只有一台redis服务器的话,如果发生宕机会导致数据丢失,而且读写不分离会给redis造成过大的压力,在公司中,主从复制是必须使用的
网络异常,图片无法展示
|
7 配置主从复制环境(注:目前没有Linux系统,在windows10上进行操作,有的是截图)
1 默认情况下,每台Redis服务器都是主节点 ,Redis配置主从复制记住一句话:只配置从库,不用配置主库,Redis默认自己本身就是一个主库
2 查看当前库的信息的命令
127.0.0.1:6379> info replication #查看当前库的信息 # Replication role:master #角色 从机 当前是个主机 connected_slaves:0 #当前连接的从机个数 当前有0个从机,没有从机 master_replid:2f88f386e76af7e9b23fcd6909e49529e48492e6 #随机生成的ID master_replid2:0000000000000000000000000000000000000000 #随机生成的ID master_repl_offset:0 second_repl_offset:-1 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0
3 linux下配置需要修改复制三个配置文件,修改对应的信息
1.端口号
2.pid 名字
3.log文件 日志名字
4.dump.rdb备份文件名字
4 修改完毕之后,启动我们的3个redis服务器,可以通过进程命令查看信息 ps-ef|grep redis
网络异常,图片无法展示
|
5 默认情况下,每台Redis服务器都是主节点,我们一般情况下只需要去配置从机就好了
认老大 一主二从
1 从机进行配置
真实的主从复制配置应该是在文件中进行配置的,这样的话就是永久的.我们这里使用的是命令,是暂时的
1 使用配置文件配置
需要把注释解开,把主机的ip+端口进行填入,如果主机有密码的话,还需要写入主机的密码
网络异常,图片无法展示
|
2 使用命令配置(slaveof)
1 给从机进行配置并且查看从机信息
127.0.0.1:6379> slaveof 127.0.0.1 6379 #从机进行配置主机 ip 端口 找谁当自己老大 OK 127.0.0.1:6379> info replication #查看本机信息 # Replication role:slave #当前角色是从机 #可以看到主机信息 master_host:127.0.0.1 #主机ip master_port:6379 #主机端口 master_link_status:down master_last_io_seconds_ago:-1 master_sync_in_progress:0 slave_repl_offset:1 master_link_down_since_seconds:1638625163 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:9a6a05f442945636e5a8bd3623a7d398efa43f1f master_replid2:0000000000000000000000000000000000000000 master_repl_offset:0 second_repl_offset:-1 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0
2 查看主机配置
网络异常,图片无法展示
|
如果继续在从机上进行slaveof配置主机信息,那么从机的数量也会继续进行变化
3 主机从机配置以及数据共享的细节
1 主机可以写(设置值),从机只能读,不能写,主机中的所有信息和数据,都会自动被从机保存,就算主机蹦了,但是数据不会丢失,会保存在从机中
1 主机写数据
网络异常,图片无法展示
|
2 从机也可以读取到相同的数据,但是从机不能写
网络异常,图片无法展示
|
2 如果主机断开连接宕机,从机依旧是可以连接到主机的读取数据的,但是没有写操作了(因为主机断了),这个时候如果主机回来了(正常运行),从机依旧可以直接获取到主机的信息(保证了我们的高可用性,当然我们目前这个策略还不行,高级点的策略应该是,就算我主机断了,从机们也会立马选举出来一个从机作为主机)
3 如果是命令行配置我们的主从复制,我们的从机断了(宕机)后再次连接,不进行配置的话就会变成主机(默认是一个主机),不会读取到我们配置的那个主机的数据,如果我们收到使用slaveof命令配置主机的话,还是可以正常读取到我们主机的数据
8 复制原理(全量复制,增量复制)
网络异常,图片无法展示
|
9 另外一种主从配置方式
主机-》从机/主机-》从机
层层链路,上一个master连接下一个slave,依次这样连接,这种的方式也是可以完成我们的主从复制的
暂时无法在文档外展示此内容
10 如果没有老大了(主机),那么能不能选择在我们的从机中选择一个老大出来呢?
在哨兵模式没有出来前,我们一般通过手动来完成的 (slaveof no one),如果主机断开连接了,那么我们可以使用slaveof no one使自己作为主机,其他的节点就可以手动连接到最新的那个主机(主节点),如果这个时候老大(主机)恢复了,那就只能重新配置连接,哨兵模式出来以后,我们就不用手动来配置,可以自动完成这一系列的操作
127.0.0.1:6379> slaveof no one #让自己做主机 OK 127.0.0.1:6379> info replication #查看本机信息 # Replication role:master #主机 connected_slaves:0 #没有从机 从机个数为0 master_replid:2bd621cb6661097489977e9547aae78ad351d7e4 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:0 second_repl_offset:-1 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 127.0.0.1:6379>