部署Redis主从架构
一、主从复制的工作流程
1、主库会基于ping check的方式检查从库书否在线,如果在线的话 直接同步数据到从库,从库也可以主动像主库发送同步请求,主库如果启动了持久化功能会不断啊数据同步到磁盘上,主库一旦收到从库的请求时会把内存中的数据做快照,然后把数据文件同步给从库,由从库保存到本地文件中,之后把数据加载到内存中完成数据重建
2、特点
①支持一主多从
②支持级联复制
Master以非阻塞方式同步数据至slave(master可以同时处理多个slave的读写请求,salve端在同步数据时也可以使用非阻塞方式);
二、搭建一个一主两从的架构
Cong12 30.1.1.10 master
Cong13 30.1.1.11 slave
Cong14 30.1.1.12 slave
1.1安装所有的插件
因为redis是基于c++编译的软件所以我们要安装GCC的插件编译环境 lrzsz工具包是为了我们从物理机获得 redis的安装包
1.2解压安装
tar -zxvf redis-5.0.5.tar.gz 解压安装包到当前目录下
Cd 进入redis-5.05 的目录下执行 make 进行编译
编译完成后执行make install PREFIX=/usr/local/redis 把redis安装到这个目录下
安装完成
1.3 配置redis的启动环境
Mkdir -p /usr/local/redis/etc 创建一个etc的目录来存放redis的配置文件
Cp从redis-5.05 这个目录复制redis.conf到 /usr/local/redis/etc下面
启动我们的redis服务
可以看到我们的服务是在前台运行并且发出了三个警告 这三个警告是不能忽视的
①The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 大概意思是对于一个高负载的环境tcp设置128的值太小了所以我们要把它设置的大一点上面也提到了我们要设支撑511
Vim /etc/sysctl.conf 在配置文件末尾加上这两行
net.core.somaxconn = 511
②WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory = 1’ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1’ for thi s to take effect. “警告超限”内存设置为0!在内存不足的情况下,后台保存可能会失败。若要解决此问题,请将“vm.overcommit_memory=1”添加到/etc/sysctl.conf,然后重新启动或运行命令“sysctl vm.overcommit_memory=1”以使其生效。
我们要在/etc/sysctl.conf下添加一行
vm.overcommit_memory=1
1③WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command ‘echo never > /sys/kernel/mm/transparent_hugepage/enabled’ as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
11754:M 08 Aug 2021 13:47:24.041 * Ready to accept connections
警告您的内核中启用了透明大页面(THP)支持。这将导致Redis的延迟和内存使用问题。要解决此问题,请以root用户身份运行命令“echo never>/sys/kernel/mm/transparent_hugepage/enabled”,并将其添加到/etc/rc.local中,以便在重新启动后保留设置。禁用THP后,必须重新启动Redis
我们需要在命令行执行
echo never > /sys/kernel/mm/transparent_hugepage/enabled
1④设置打开目录的深度
修改/etc/security/limits.conf文件,在文件末尾添加下面的两行:
-
soft nofile 10032
-
hard nofile 10032
修改/etc/pam.d/login文件,在文件末尾添加下面的内容:
session required /usr/lib64/security/pam_limits.so
重新登录使配置生效
1⑤把redis启动设置为后台启动
Vim /usr/local/redis/etc/redis.conf
把redis作为守护进程的方式放在后台启动
1⑥为redis的命令做软连接使redis的命令可以在终端上直接生效
1.4配置主库的配置文件
Vim /usr/local/redis/etc/redis.conf
修改
30.1.1.10 是我本机的ip修改redis提供服务的ip
为redis认证设置一个密码
修改pid和logfile的存放路径方便我们查看(也可不修改)
路径 redis/data log log1 是手动创建
开启redis的日志文件持久化aof 默认是开启数据文件持久化
apendfsync always|everysec|no #调用fsync()写数据到硬盘中,always是每一次写操作就马上同步到日志中,everysec是每隔一秒强制fsync,no是不调用fsync(),让操作系统自己决定何时同步。
这就是主库所有的配置
1.4.1配置从库 相比于主库由些许差别
在主库配置的基础上增加了这两个需要手动添加 添加在replication的模块下
Replicaof 30.1.1.10 6379 是指定主库的IP地址和端口
Masterauth 123456 是认证密码
主库从库同步的信息
另一个从库重复这个从库的所有操作!