9.1唐伯虎心糖:穿越时空的甜蜜契约,她与才子的绝代风华

核心内容摘要

穿越时光的低语:久久久久久久久久久久久久,一份永恒的承诺
喵盒社区:不止于撸猫,一场关于爱与陪伴的温暖奇遇

xinbays回来说感谢:一场关于回馈与共创的温暖回响

Redis主从复制

理解主从复制你可以把Redis主从复制想象成「老板和秘书」的关系主库master就是老板负责所有「写操作」新增、修改、删除数据手里有最全的业务笔记数据从库slave/replica就是秘书只做「读操作」查询数据会实时抄老板的笔记保证自己的笔记和老板一致客户要查数据时优先找秘书从库老板只专注写这样老板的工作量就少了整体效率更高而且如果老板临时有事主库宕机秘书手里也有完整数据能临时顶包查数据。

主从复制的核心原理分3阶段大白话Redis主从复制本质是「从库主动同步主库数据」分3步握手阶段建立连接从库主动给主库发消息“老板我要抄你的笔记了”主库确认后两者建立长连接全量同步第一次抄笔记如果是从库第一次同步主库会把自己所有数据打包成一个「快照文件」RDB文件发给从库从库先清空自己的笔记再加载这个快照保证和主库初始数据一致增量同步实时抄笔记全量同步后主库每做一次写操作比如改了一条数据就会把这个操作指令实时发给从库从库跟着执行一遍保证数据和主库实时一致。

Linux下主从复制演示步骤已装Redis假设你已经安装好Redis默认路径/usr/local/redis配置文件redis.conf演示「1主1从」步骤1准备主库默认Redis实例端口6379主库默认不用改核心配置只需要确保# 编辑主库配置文件6379端口vim/usr/local/redis/redis.conf# 确认以下配置没有就添加bind

0.

0.

0# 允许其他机器连接如果是本机演示

127.

0.

1也可以protected-mode no# 关闭保护模式测试用生产要配密码port6379# 主库端口daemonizeyes# 后台运行pidfile /var/run/redis_

pid logfile

logdbfilename dump_

rdb# 启动主库/usr/local/redis/src/redis-server /usr/local/redis/redis.conf步骤2准备从库新建6380端口的Redis实例# 复制一份配置文件给从库cp/usr/local/redis/redis.conf /usr/local/redis/redis_

conf# 编辑从库配置文件vim/usr/local/redis/redis_

conf# 修改以下配置和主库区分bind

0.

0.

0 protected-mode no port6380# 从库端口和主库不一样daemonizeyespidfile /var/run/redis_

pid logfile

logdbfilename dump_

rdb# 核心指定主库地址和端口关键配置replicaof

127.

0.

16379# Redis

0用replicaof

0前用slaveof# 启动从库/usr/local/redis/src/redis-server /usr/local/redis/redis_

conf步骤3验证主从复制是否生效#

连接主库6379写入数据/usr/local/redis/src/redis-cli -p

6379127.

0.

1:6379setnameredis-master# 主库写数据OK#

连接从库6380查询数据/usr/local/redis/src/redis-cli -p

6380127.

0.

1:6380get name# 从库能查到主库写的数据说明同步成功redis-master#

验证从库不能写数据从库默认只读

127.

0.

1:6380setage18(error)READONLY You cantwriteagainst areadonly replica.# 报错只读#

查看主从状态主库执行

127.

0.

1:6379info replication# 能看到connected_slaves:1以及从库的端口6380说明主从连接成功

Redis哨兵模式

理解哨兵模式主从复制解决了「读写分离」但有个大问题如果老板主库突然病倒了宕机虽然秘书从库能查数据但没人能写数据了业务会卡住。

哨兵模式就相当于给老板配了「专职保镖」哨兵进程保镖sentinel会一直盯着老板和秘书的状态每秒发心跳包如果发现老板宕机了保镖会从所有秘书里选一个「最靠谱的」通过投票升级成新老板然后通知其他秘书“别抄旧老板了以后抄新老板的笔记”等旧老板康复主库重启也不能再当老板了只能降级成秘书抄新老板的笔记。

哨兵模式的核心作用监控实时检查主库、从库是否活着自动故障转移主库挂了自动选新主库不用人工干预通知把故障和切换结果告诉运维人员比如发邮件、短信。

哨兵模式的简单工作逻辑哨兵进程启动后先和主库建立连接获取所有从库的信息哨兵每秒给主/从库发「PING」命令超过一定时间没回应就标记主库“主观下线”如果多个哨兵一般至少3个都认为主库“主观下线”就标记为“客观下线”哨兵们投票选一个从库当新主库然后命令其他从库同步新主库旧主库重启后变成从库。

Redis集群

理解Redis集群主从哨兵解决了「高可用」但如果数据量太大比如100G一个主库存不下或者每秒要处理10万次请求一个主库扛不住这时候就需要Redis集群。

你可以把Redis集群想象成「连锁超市」单节点Redis就是一家小超市老板一个人又收钱又理货人多了就挤不动货多了仓库也装不下Redis集群就是连锁超市分成多个分店节点每个分店有一个店长主节点和店员从节点顾客数据按「门牌号」哈希槽分配到不同分店比如

号哈希槽归分店A

号归分店B

号归分店C每个分店只负责自己的顾客店长管写店员管读就算一家分店关门节点宕机其他分店还能正常营业而且有店员顶包。

为什么要用Redis集群解决容量瓶颈单Redis节点最多存几G/几十G数据集群可以把数据分散到多个节点存几百G甚至T级数据解决性能瓶颈单节点QPS每秒请求数大概几万集群能把请求分散到多个节点QPS能提升到几十万更高的可用性集群里一个主节点宕机它的从节点会自动升级成主节点而且其他节点不受影响比哨兵模式的容错性更强。

Linux下Redis集群搭建步骤6节点3主3从Redis集群要求至少3个主节点每个主节点配1个从节点共6节点端口用

步骤1准备集群目录和配置文件#

创建集群目录mkdir-p /usr/local/redis/cluster/{7000,7001,7002,7003,7004,7005}#

复制配置文件到每个节点目录以7000为例其他节点改端口即可cp/usr/local/redis/redis.conf /usr/local/redis/cluster/7000/redis.conf#

编辑7000节点的配置文件vim/usr/local/redis/cluster/7000/redis.conf# 修改以下核心配置bind

0.

0.

0 protected-mode no port7000daemonizeyespidfile /var/run/redis_

pid logfile

logdbfilename dump_

rdbdir/usr/local/redis/cluster/7000# 节点数据目录cluster-enabledyes# 开启集群模式关键cluster-config-file nodes_

conf# 集群节点配置文件自动生成cluster-node-timeout15000# 节点超时时间15秒appendonlyyes# 开启AOF持久化可选增强数据可靠性#

复制7000的配置文件到

批量修改端口用sed命令forportin{

.7005};docp/usr/local/redis/cluster/7000/redis.conf /usr/local/redis/cluster/$port/redis.confsed-is/7000/$port/g/usr/local/redis/cluster/$port/redis.confdone步骤2启动所有集群节点# 批量启动6个节点forportin{

.7005};do/usr/local/redis/src/redis-server /usr/local/redis/cluster/$port/redis.confdone# 检查节点是否启动成功ps-ef|grepredis|grep-vgrep# 能看到6个redis进程端口

说明启动成功步骤3创建Redis集群Redis

0用redis-cli --cluster# 执行集群创建命令

127.

0.

1是本机IP生产改实际IP--cluster-replicas 1表示每个主节点配1个从节点/usr/local/redis/src/redis-cli --cluster create

127.

0.

1:

7000127.

0.

1:

7001127.

0.

2:

7002127.

0.

1:

7003127.

0.

1:

7004127.

0.

1:7005 --cluster-replicas1# 执行后会提示分配哈希槽输入「yes」确认Performinghashslots allocation on6nodes...Assign a different config epoch to eachnodeSending CLUSTER MEET messages tojointhe cluster Do you want to accept the proposed configuration?(typeyesto accept):yes步骤4验证集群是否搭建成功# 连接集群-c表示集群模式/usr/local/redis/src/redis-cli -c -p7000#

查看集群状态

127.

0.

1:7000cluster info# 能看到cluster_state:ok说明集群正常#

查看集群节点

127.

0.

1:7000cluster nodes# 能看到6个节点标记为master主或slave从以及哈希槽分配#

测试数据写入集群会自动把数据分配到对应主节点

127.

0.

1:7000setuser:1zhangsanOK# 查数据集群会自动路由到存储该数据的节点

127.

0.

1:7000get user:1zhangsan#

测试故障转移停掉一个主节点比如7000# 先退出redis-cli执行/usr/local/redis/src/redis-cli -p7000shutdown# 再连接7001查看集群状态/usr/local/redis/src/redis-cli -c -p

7001127.

0.

1:7001cluster nodes# 能看到7000的从节点比如7003升级成了主节点集群状态还是ok

总结主从复制核心是「读写分离数据备份」从库同步主库数据主写从读提升并发哨兵模式核心是「主库故障自动切换」解决主从复制的“主库宕机无主”问题保证高可用Redis集群核心是「分片存储分布式高可用」解决单节点容量/性能瓶颈数据按哈希槽分散到多个主节点每个主节点有从节点容错。

三个功能的递进关系主从复制基础→ 哨兵模式主从的高可用增强→ 集群大规模场景的分布式解决方案。

抖漫motion官方免费下载-抖漫motion官方免费下载应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123