Redis主从复制实现

Redis主从复制实现:

Redis中的主从复制,也就是Master-Slave模型,其实现相对比较简单,一般使用在多个Redis实例间的数据同步以及Redis集群中用的比较多。

 

·     工作原理

·     特征说明

·     如何配置

·     验证使用

 

1、工作原理

在Master和Slave互通之后,首先,Slave会发送sync同步指令,当Master收到指令后,将在后台启动存盘进程,同时收集所有来自Slave的修改数据集的指令信息,当后台进程完成之后,Master将发送对应的数据库文件到对应的Slave中,以完成一次完整的同步工作。其次Slave在接受到数据库文件之后,将其存盘并加载到内存中。最后,Master继续收集修改命令和新增的修改指令,并依次发送给Slave,其将在本次执行这些数据的修改命令,从而最终达到数据同步的实现。

 

NOTE:

A、 当Master与Slave出现当机时,Slave会自动重新连接并一次性完成同步;

B、 当Master收到多个Slave发送sync指令时,其会在后台开启个队列来保持多个Slave可以有序高效的执行;

 

2、特征说明

A、一个Master可以同步多个Slave,实现主从复制;

B、一个Slave同时也可以接收其它Slaves的连接和同步请求,以缓解Master同步的压力;

C、Master Server是以非阻塞的方式为Slave提供服务,所以其在与Slave同步时,也可以接受正常的查询和修改的指令;

D、Slave Server同样也是以非阻塞方式完成数据同步,在同步期间,也可以继续接受客户端的查询请求;

E、Master可以将数据保存操作交给Slaves完成,从而避免了在Master中要有独立的进程来完成此操作;

 

3、如何配置

因为限于只有一台电脑设备,所以这里是在一台设备上同时启动两个Redis服务器实例,端口号分别为:6379和6380,具体如下操作:

A、创建6379和6380配置文件

redis.conf:6379为默认配置文件,作为Master服务配置;

redis_6380.conf:6380为同步配置,作为Slave服务配置;

 

B、配置slaveof同步指令

在Slave对应的conf配置文件中,添加以下内容:

slaveof 127.0.0.1 6379

 

NOTE:

添加slaveof指令,重启redis服务,生效Master-Slave同步执行;

修改该文件的port为6380,以及数据库文件存放为止dir,确保Master和Slave存放的数据不冲突和被覆盖;

 

4、验证使用

A、开启Master和Slave服务

$redis-server /redis/etc/redis.conf  // 6379实例-Master

$redis-server /redis/etc/redis_6380.conf // 6380实例-Slave

然后,在两个客户端打开redis-cli:

$redis-cli –p 6379  // 6379实例客户端

$redis-cli  -p 6380  // 6380实例客户端

 

B、在Master中添加mykey和mykey2键值

 

C、在Slave中检查mykey和mykey2是否存在

 

从上面的截图可以看出,Master和Slave已经同步完成,因为在Slave中没做任何的set/get操作,所有操作在Master进行,但是可以在Slave中查看到同样的操作。

 

D、在Master中删除mykey2,查看Slave中显示

在Master删除mykey2:

在Slave查看mykey2是否存在:

 

E、在Slave中新增和删除键可以吗?

默认在Slave中修改键会报错:

(error) READONLY You can't write against a read only slave.

 

原因是需要设置slave-read-only为no,重启服务之后生效,然后再执行set/get是可以的,但是不会同步到Master中去,因为需要在Master的redis.conf添加slaveof<server>:<port>才行,此时Master也已经变为Slave了。

 

 

好了,到这里已经使用例子总结说明了,Redis的复制原理、特性以及主从复制的使用。

 

 

 

 

技术讨论群:

489451956(新)

 

 

 

 

<think>嗯,用户想了解运维工程师的八股文,也就是面试中常见的问题和知识点。首先,我需要确定运维工程师的核心领域,比如基础概念、网络、操作系统、数据库、中间件、监控、自动化、云计算、安全、故障处理等。然后分门别类整理常见问题,确保覆盖全面。 基础部分可能包括运维职责、DevOps、CI/CD的区别,还有Linux常用命令,比如进程管理、日志查看、权限设置。网络方面,TCP/IP模型、三次握手、四次挥手,以及HTTP和HTTPS的区别都是常问的。还有防火墙配置,比如iptables和firewalld,可能需要解释它们的区别和使用场景。 操作系统方面,用户可能想知道进程和线程的区别,内存管理,比如虚拟内存和Swap空间,以及文件系统相关的问题,比如inode的作用。Shell脚本也是重点,比如如何编写备份脚本或处理文本数据。 数据库部分,SQL优化、备份恢复、主从复制和分库分表策略都是常见问题。中间件如Nginx和Tomcat的配置优化,负载均衡算法也需要涵盖。 监控工具如Zabbix、Prometheus,以及日志分析工具ELK栈,可能需要解释它们的原理和使用方法。自动化方面,Ansible、SaltStack、Jenkins的用法,还有容器技术如Docker和Kubernetes的基础知识,包括核心组件和网络模型。 云计算部分,AWS、阿里云等常见服务的运维操作,比如ECS、VPC、S3,以及IaC工具Terraform。安全方面,防火墙策略、漏洞扫描、DDoS防护措施,以及HTTPS的配置步骤。 故障处理需要实际案例,比如服务器崩溃或数据库响应慢的诊断流程。软技能如沟通和压力应对也可能被问到。 在整理这些内容时,要确保每个知识点简明扼要,重点突出。可能还需要注意最近的技术趋势,比如云原生和微服务,以及运维工程师向SRE角色的转变。另外,要提醒用户结合项目经验准备,用实际例子展示能力。最后,保持结构清晰,分点说明,方便用户理解和复习。</think>以下为运维工程师面试常见知识点("八股文")的体系化整理,内容覆盖基础概念与高频问题,供参考学习: --- ### 一、基础概念篇 1. **运维核心职责** - 保障系统稳定性(SLA 99.9%/99.99%)、自动化部署、监控告警、容量规划、故障恢复等 - DevOps核心思想:开发与运维协同,CI/CD流水线实现快速交付 2. **Linux基础** - 常用命令: ```bash ps aux | grep nginx # 查看进程 netstat -tunlp # 查看端口占用 lsof -i :8080 # 定位端口进程 ``` - 日志分析:`grep "ERROR" /var/log/app.log | awk '{print $3}' | sort | uniq -c` - 权限管理:`chmod 755 script.sh`(rwx权限计算) --- ### 二、网络与协议篇 1. **TCP/IP模型** - 三次握手过程:SYN → SYN-ACK → ACK - 四次挥手:FIN → ACK → FIN → ACK(TIME_WAIT状态作用) - **HTTP vs HTTPS**:SSL/TLS加密层、端口80 vs 443、证书机制 2. **防火墙与安全组** - iptables四表五链:`iptables -A INPUT -p tcp --dport 22 -j ACCEPT` - 云平台安全组配置(如AWS Security Group、阿里云ECS安全组) --- ### 三、操作系统篇 1. **进程与线程** - 进程间通信方式:管道、信号、共享内存、Socket - 内存管理:虚拟内存机制、Swap空间设置原则 2. **文件系统** - inode结构:存储文件元数据(权限、时间戳、数据块指针) - 磁盘I/O优化:`noatime`挂载选项、RAID级别选择(RAID 0/1/5/10) --- ### 四、数据库篇 1. **MySQL高频问题** - 索引优化:B+树结构、最左前缀原则、覆盖索引 - 主从复制原理:binlog格式(ROW/STATEMENT)、半同步复制 - 慢查询分析:`EXPLAIN`执行计划、`slow_query_log`配置 2. **Redis核心知识点** - 持久化机制:RDB快照 vs AOF日志 - 缓存穿透/雪崩解决方案:布隆过滤器、随机过期时间 --- ### 五、监控与自动化篇 1. **监控体系** - 分层监控:硬件层(Zabbix)、应用层(Prometheus+Granfana)、日志层(ELK) - 关键指标:CPU利用率、磁盘IOPS、网络丢包率、JVM GC时间 2. **自动化工具** - Ansible核心概念:Inventory文件、Playbook YAML语法 - 示例任务:批量部署Nginx ```yaml - hosts: webservers tasks: - name: Install nginx apt: name=nginx state=present ``` --- ### 六、云计算与容器篇 1. **Docker核心** - 镜像分层原理、Dockerfile最佳实践(多阶段构建) - 网络模式:bridge/host/none的区别 2. **Kubernetes架构** - 核心组件:API Server、etcd、kubelet、Controller Manager - Service类型:ClusterIP、NodePort、LoadBalancer --- ### 七、故障排查思路 1. **通用方法论** - 定位流程:监控指标 → 日志分析 → 复现验证 → 修复验证 - 经典案例: - CPU飙高:`top → pidstat -p <PID> 1 3 → jstack` - 磁盘满:`df -h → du -sh * → lsof | grep deleted` --- ### 八、趋势与进阶方向 1. **云原生技术栈** - Service Mesh(Istio)、Serverless架构(AWS Lambda) 2. **SRE(站点可靠性工程)** - 错误预算(Error Budget)、SLI/SLO定义 --- **建议学习路径**: 1. 夯实Linux/网络基础 → 2. 掌握1-2种监控/自动化工具 → 3. 深入理解至少一个公有云平台 → 4. 参与实际故障演练 注:面试时需结合项目经验,用`STAR法则`(情境-任务-行动-结果)描述实际问题解决过程。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云水之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值