运维之道

您所在的位置:网站首页 redis手动切换主从节点 运维之道

运维之道

2023-08-05 20:58| 来源: 网络整理| 查看: 265

Redis 主从复制 (一主多从) 搭建、并实现读写分离 前言:

由于redis的高性能,在应用中对其依赖很高,有时候一台redis服务器性能不够,需要配置redis集群。最简单来说就是一台用来读,一台用来写。一般对读的需求比较大,所以可以配置一主(读)多从(写)。 在这里插入图片描述

通过持久化功能,Redis保证了即使在服务器重启的情况下也不会丢失(或少量丢失)数据,但是由于数据是存储在一台服务器上的,如果这台服务器出现故障,比如硬盘坏了,也会导致数据丢失。为了避免单点故障,我们需要将数据复制多份部署在多台不同的服务器上,即使有一台服务器出现故障其他服务器依然可以继续提供服务。这就要求当一台服务器上的数据更新后,自动将更新的数据同步到其他服务器上,这时候就用到了Redis的主从复制。

在这里插入图片描述 Redis提供了复制(replication)功能来自动实现多台redis服务器的数据同步(例如:每天19点新闻联播,基本从cctv1-8,各大卫视都会播放)

一、主从复制的方式和工作原理

Redis的主从复制是异步复制,异步分为两个方面,一个是master服务器在将数据同步到slave时是异步的,因此master服务器在这里仍然可以接收其他请求,一个是slave在接收同步数据也是异步的。

1、复制方式 Redis主从复制分为以下三种方式: 当master服务器与slave服务器正常连接时,master服务器会发送数据命令流给slave服务器,将自身数据的改变复制到slave服务器。当因为各种原因master服务器与slave服务器断开后,slave服务器在重新连上master服务器时,会尝试重新获取断开后未同步的数据即部分同步,或者称为部分复制。如果无法部分同步(比如初次同步),则会请求进行全量同步,这时master服务器会将自己的rdb文件发送给slave服务器进行数据同步,并记录同步期间的其他写入,再发送给slave服务器,以达到完全同步的目的,这种方式称为全量复制。 2、工作原理

master服务器会记录一个replicationId的伪随机字符串,用于标识当前的数据集版本,还会记录一个当数据集的偏移量offset,不管master是否有配置slave服务器,replication Id和offset会一直记录并成对存在,我们可以通过以下命令查看replication Id和offset:

info repliaction

通过redis-cli在master或slave服务器执行该命令会打印类似以下信息(不同服务器数据不同,打印信息不同):

connected_slaves:1 slave0:ip=127.0.0.1,port=6380,state=online,offset=9472,lag=1 master_replid:2cbd65f847c0acd608c69f93010dcaa6dd551cee master_repl_offset:9472

当master与slave正常连接时,slave使用PSYNC命令向master发送自己记录的旧master的replication id和offset,而master会计算与slave之间的数据偏移量,并将缓冲区中的偏移数量同步到slave,此时master和slave的数据一致。

而如果slave引用的replication太旧了,master与slave之间的数据差异太大,则master与slave之间会使用全量复制的进行数据同步。

二、主机规划 主机IPmaster192.168.182.11slave192.168.182.12slave192.168.182.13 三、Redis 安装 1、运维之道 | Redis 安装及配置解析

需要在三台主机中安装部署 Redis 服务

2、关闭安全策略 [root@localhost ~]# systemctl stop firewalld [root@localhost ~]# setenforce 0 四、Redis 主从复制搭建 1、修改master主库配置文件 # bind 127.0.0.1 ///将bind 127.0.0.1这行注释或者指定ip。(本例是注释,即所有ip都能连接) daemonize yes ///开启守护进程 requirepass 123456 ///设置访问密码(由于redis性能非常高,撞库风险极大,建议线上把密码设置非常复杂,最好能在第2步中指定ip) 启动redis-server服务 [root@localhost bin]# redis-server redis.conf 18912:C 11 Jan 2020 11:16:40.530 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 18912:C 11 Jan 2020 11:16:40.530 # Redis version=5.0.0, bits=64, commit=00000000, modified=0, pid=18912, just started 18912:C 11 Jan 2020 11:16:40.530 # Configuration loaded

拓展:既然用到主从了,那说明对redis依赖非常高,还有几个参数可根据服务器配置需要来设置

第一个就是客户端最大连接数(maxclients),默认是10000,可根据需求更改 # maxclients 10000 第二个就是最大内存(默认不受限制,但如果有多个从服务器,建议还是设置个低于服务器内存的值) # maxmemory 第三个是内存策略,如果内存足够用则不用管,如果内存不够用,建议设置最近最少使用策略(LRU),默认是内存不够则报错 # maxmemory-policy noeviction 2、修改slave从库配置文件 daemonize yes 开启守护进程 286 # replicaof 配置所属主服务器ip和端口,在第287行新增 slaveof 192.168.182.11 6379 293 # masterauth 配置所属主服务器的密码,在第294行新增 masterauth 123456 325 replica-read-only yes 从服务器通常是只读,所以要配置只读(默认是只读,不要更改即可) 启动 redis-cli 服务 [root@localhost bin]# redis-server redis.conf 17707:C 11 Jan 2020 11:38:35.620 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 17707:C 11 Jan 2020 11:38:35.620 # Redis version=5.0.0, bits=64, commit=00000000, modified=0, pid=17707, just started 17707:C 11 Jan 2020 11:38:35.620 # Configuration loaded 五、测试 redis 主从复制 1、info 查询主从信息 # Replication role:master connected_slaves:2 slave0:ip=192.168.182.13,port=6379,state=online,offset=238,lag=1 slave1:ip=192.168.182.12,port=6379,state=online,offset=238,lag=0 master_replid:58a9ddd240c352682fa91579cecf02abfca8db54 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:238 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:238 2、读写测试 在主库中创建key键值 127.0.0.1:6379> set redis:test villian OK 127.0.0.1:6379> get redis:test "villian" 在从库中可查询到主库创建的key键值 127.0.0.1:6379> keys * 1) "redis:test" 当向从库写入数据时,从库会报错,因为设置了只读模式 127.0.0.1:6379> set redis:1 villian (error) READONLY You can't write against a read only replica.

翻译:https://blog.csdn.net/qq_39669058/article/details/87720731



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3