幼儿饰品瑜伽美体用品微软
投稿投诉
微软创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品

Redis系列(3)哨兵高可用

  哨兵集群
  上篇文章介绍了Redis主从架构模式,在这个模式下,主库存在着单点问题,如果主库发生故障,那客户端就无法发送写请求,而且从库也无法进行数据复制同步了。所以一般部署Redis主库架构时,还会部署哨兵(Sentinel)集群来保证Redis的高可用性,在主库发生故障时,可以自动进行故障转移,将从库切换为新的主库。这篇文章就来看看如何部署哨兵集群,以及其工作的原理。哨兵部署架构
  哨兵机制是Redis官方高可用解决方案,哨兵本身也是集群分布式部署,且至少需要2个以上节点才能正常工作。
  上篇文章我们部署了一主两从,在此基础之上,我们在每台服务器上再启动一个哨兵实例,由三个哨兵组成的哨兵集群来监控Redis主从集群,部署架构如下图所示,这也是比较经典的3节点哨兵集群。
  部署哨兵集群
  哨兵其实就是一个运行在特殊模式下的Redis进程,部署哨兵的前提就是已经安装了Redis,安装方式可以参考Redis系列(1)单机版安装及数据持久化。
  安装好Redis后,将哨兵配置文件拷贝到varredis下:cpusrlocalsrcredis6。2。5sentinel。confetcredis复制代码
  修改配置文件中的如下配置:
  配置
  值
  说明
  bind
  绑定本机IP
  port
  26379hr端口
  daemonize
  yes
  后台运行
  pidfile
  varrunredissentinel。pid
  PID文件
  logfile
  varredislog26379。log
  日志文件
  dir
  varredis26379
  工作目录
  sentinelmonitor
  td
  要监控的mastertrtbody
  其中,sentinelmonitor可以有多个,因为一个哨兵集群可以监控多个Redis主从集群。sentinelmonitormymaster172。17。0。263792复制代码
  创建工作目录:mkdirpvarredis26379复制代码
  切换到redis安装目录:usrlocalsrcredis6。2。5src复制代码
  在每台机器上分别启动哨兵:。redissentineletcredissentinel。conf复制代码
  检查哨兵是否启动成功:〔rootcentos03src〕psefgrepredisroot1851003:05?00:00:05usrlocalbinredisserver172。17。0。4:6379root2131003:37?00:00:00。redissentinel172。17。0。4:26379〔sentinel〕复制代码检查哨兵状态
  启动完成后,可以查看哨兵日志,日志里会显示出每个哨兵监控的master,并能够自动发现对应的slave。〔rootcentos03src〕catvarredislog26379。log213:X28Dec202103:37:46。227oO0OoO0OoO0OoRedisisstartingoO0OoO0OoO0Oo213:X28Dec202103:37:46。227Redisversion6。2。5,bits64,commit00000000,modified0,pid213,juststarted213:X28Dec202103:37:46。227Configurationloaded213:X28Dec202103:37:46。227monotonicclock:POSIXclockgettime213:X28Dec202103:37:46。228Runningmodesentinel,port26379。213:X28Dec202103:37:46。228SentinelIDisf43d3d4bca3f809be708c17e4c1c8951de5c6d9d213:X28Dec202103:37:46。228monitormastermymaster172。17。0。26379quorum2213:X28Dec202103:37:46。230slaveslave172。17。0。4:6379172。17。0。46379mymaster172。17。0。26379213:X28Dec202103:37:46。234slaveslave172。17。0。3:6379172。17。0。36379mymaster172。17。0。26379213:X28Dec202103:37:47。955sentinelsentinelfbeaca3b7cc3a7fee7660dd2e239683021861d69172。17。0。326379mymaster172。17。0。26379213:X28Dec202103:37:48。063sentinelsentinel018048f0adc0523b4b13d8ddde04c8882bb3d9af172。17。0。226379mymaster172。17。0。26379复制代码
  接着可以连接到哨兵服务器:redisclih172。17。0。4p26379复制代码
  然后通过如下几个命令来检查哨兵的状态:sentinelmastermymastersentinelslavesmymastersentinelsentinelsmymastersentinelgetmasteraddrbynamemymaster复制代码删除哨兵节点
  增加哨兵节点时,集群会自动发现哨兵实例。
  如果要停止某个哨兵,需按如下步骤进行:停止哨兵进程在所有哨兵上执行SENTINELRESET,清理master状态在所有哨兵上执行SENTINELMASTERmymaster查看所有哨兵对数量是否达成了一致
  哨兵组成基本运行机制
  哨兵其实就是一个运行在特殊模式下的Redis进程,是Redis集群架构中非常重要的一个组件,哨兵主要负责的就是三个任务:监控、选主、通知。监控:负责监控redismaster和slave进程是否正常工作选主:如果master挂掉了,从salve中选举一个新的master出来通知:如果故障转移发生了,通知客户端新的master地址
  哨兵进程在运行时,会周期性地给所有的主库、从库发送PING命令,检测它们是否在线运行。如果从库没有在规定时间内响应哨兵的PING命令,哨兵就会把它标记为下线状态;如果主库没有在规定时间内响应哨兵的PING命令,哨兵就会判定主库下线,然后开始自动切换主库的流程。
  自动切换主库首先就是要选主,主库挂了以后,哨兵就需要从多个从库里,按照一定的规则选择一个从库实例,把它作为新的主库,集群就有了新主库。
  选好新主库后,哨兵就要去把新主库的连接信息通知给其他从库,让它们执行replicaof命令,和新主库建立连接,并进行数据复制。同时,哨兵会把新主库的连接信息通知给客户端,让它们把请求操作发到新主库上。
  集群发现机制
  启动哨兵的最小配置就是:sentinelmonitormasternameipredisportquorum复制代码
  哨兵实例启起来之后,就可以与主库建立连接,那么哨兵如何知道有哪些从库呢?
  哨兵会向主库发送INFO命令,INFO命令返回的结果中就包含了主库的信息以及从库的信息。有了从库的信息后,哨兵就可以和从库建立连接,定时发送PING命令检查主从库的健康状况。
  INFO命令中就包含从库的信息:
  哨兵发现机制
  哨兵只是连接到主库,那它怎么知道集群中其它的哨兵呢?哨兵之间也需要互相发现,在判断主库下线和选主的时候需要集群中的哨兵来共同投票完成。
  哨兵互相之间的发现,是通过Redis的pubsub(发布订阅)机制实现的,每个哨兵每隔2秒会往sentinel:hello这个频道里发送一个消息,这个消息包含自己的IP、端口、实例ID等信息,然后其他哨兵都可以消费到这个消息,就可以知道其他哨兵的信息了,然后建立连接。
  每个哨兵还会发送对主库的监控配置,这样可以跟其他哨兵交换对主库的监控配置,互相进行监控配置的同步。
  核心原理判断主库下线
  哨兵对主库的下线判断有主观下线(sdown)和客观下线(odown)两种,只有客观下线,才会开启主从切换的过程。
  哨兵会使用PING命令周期性的检测它自己和主、从库的网络连接情况,来判断实例的状态。如果主库或从库响应PING命令超时,哨兵就会标记它主观下线。
  PING检测超时时间参数如下,默认30秒:sentineldownaftermillisecondsmymaster30000复制代码
  如果是从库,那么就是简单的标记为主观下线,因为从库的下线一般影响不太大,集群的对外服务不会间断。而如果是主库主观下线,并不会立即开启主从切换,因为可能存在误判的情况。误判就是主库实际并没有故障,但可能由于集群网络压力较大、网络拥塞等情况导致哨兵误判。而一旦开启主从切换,就要去选择新主库,然后同步主从库数据,还要去通知客户端连接到新主库,开销非常大。所以有必要判断是否误判,减少误判的情况。
  减少误判的办法就是通过多个哨兵实例一起来判断,只有哨兵集群中超过指定数量的实例认为主库主观下线,才会认为主库客观下线,表明主库下线已经是一个客观事实了。
  哨兵集群中任何一个实例只要判断主库主观下线后,就会给其他实例发送ismasterdownbyaddr命令,其他实例会根据自己和主库的连接情况,返回Y(赞成票)或N(反对票)。一个哨兵只要获得仲裁所需的赞成票数后,就可以标记主库客观下线。
  仲裁所需的赞成票数量就是sentinelmonitor参数中指定的quorum值。例如,有3个哨兵,quorum配置的是2,那么,一个哨兵需要2张赞成票,就可以标记主库为客观下线了,这两票包括自己的一票和另外一个哨兵的一票。sentinelmonitormasternameipredisportquorum复制代码
  判断主库下线的流程大致如下:
  Leader选举
  一段时间内,哨兵集群中可能有多个哨兵都判定主库客观下线,这时就需要选一个哨兵出来执行主从切换。判定主库客观下线的哨兵接着会向其它哨兵发送命令,让它给自己投票,表明希望由自己来执行主从切换。这个投票过程为Leader选举,最终执行主从切换的哨兵称为Leader。
  投票过程中,判定主库客观下线的哨兵首先给自己投一票赞成票,然后给其它哨兵发送命令,其它哨兵在未投票的情况下,会投赞成票,否则投反对票。哨兵成为Leader需满足以下条件:得到半数以上的赞成票(majorityN21),且得到的票数quorum。
  例如有5个哨兵,majority3,quorum2,那么哨兵就必须得到3票以上才能成为Leader;如果quorum5,那么就必须得到5票才能成为Leader。
  如果没有哨兵得到足够的票数,那么这轮投票就不会产生Leader,哨兵集群会等待一段时间后再重新选举,等待的时间为故障转移超时时间的2倍。故障转移超时时间配置如下,默认180秒:sentinelfailovertimeoutmymaster180000复制代码
  可以看到,哨兵集群能够成功投票,很大程度上依赖于选举命令的正常网络传播和传输快慢。如果网络压力较大或有短时堵塞,就可能导致没有一个哨兵能拿到半数以上的赞成票,网络状况好的哨兵就可能得到半数以上的赞成票。
  哨兵数量
  前面说过,哨兵集群需要至少3个实例才能正常工作,如果只有2个实例,那么一个哨兵想成为Leader,必须获得2票才行,虽然正常情况下也能完成选举,但如果有个哨兵挂掉了,那么此时就无法得到足够的票数,就无法执行主从切换了。因此,2个哨兵实例无法保证哨兵集群高可用,通常我们至少会配置3个哨兵实例。
  但哨兵实例也不是越多越好,哨兵在判定主观下线和选举哨兵Leader时,都需要和其他节点进行通信,哨兵实例越多,通信的次数也就越多,而且部署多个哨兵时,会分布在不同机器上,节点越多带来的机器故障风险也会越大,这些问题都会影响到哨兵的通信和选举,出问题时也就意味着选举时间会变长,切换主从的时间变久。选择新主库
  哨兵Leader选举出来之后,Leader就可以开始执行主从切换了,主从切换首先就是要选择新的主库。
  选择新主库的规则如下:
  1。网络状况
  首先检查从库的网络状况,如果从库与主库断连超过downaftermilliseconds10毫秒,说明这个从库的网络状况不好,不适合用来做主库,被过滤掉。
  2。从库优先级
  接下来对剩下的从库按优先级(replicapriority)排序,数值越低,优先级越高,如果有一个优先级最高的,那么它就是新的主库了。一般在服务器配置不一样的时候,我们可以给高配置服务器的实例设置高优先级。
  优先级配置,默认100,数值越低优先级越高。注意注释中的说明,不要设置为0,设置为0表示这个从节点不会作为主库(master),就不会被哨兵选择作为主库。ThereplicapriorityisanintegernumberpublishedbyRedisintheINFOoutput。ItisusedbyRedisSentinelinordertoselectareplicatopromoteintoamasterifthemasterisnolongerworkingcorrectly。Areplicawithalowprioritynumberisconsideredbetterforpromotion,soforinstanceiftherearethreereplicaswithpriority10,100,25Sentinelwillpicktheonewithpriority10,thatisthelowest。Howeveraspecialpriorityof0marksthereplicaasnotabletoperformtheroleofmaster,soareplicawithpriorityof0willneverbeselectedbyRedisSentinelforpromotion。Bydefaultthepriorityis100。replicapriority100复制代码
  3。复制偏移量
  如果上一步从库的优先级都一样,接下来就要判断从库和原主库的复制进度(offset),从库复制进度越靠后,优先级就越高。
  主从库都会维护一个偏移量,主库写入N字节的指令,主库偏移量(masterreploffset)就会加N,从库接收了N字节的数据,从库偏移量(slavereploffset)就会加上N。如果有从库的偏移量最接近主库的偏移量,那它就是新的主库。
  4。比较runID
  最后,在优先级和复制进度都相同的情况下,按runID排序,ID号最小的从库会被选为新主库。
  以上就是选主的一个整体流程:
  通知客户端
  哨兵之间通过pubsub机制组成集群,同时,哨兵又通过INFO命令,获得了从库的连接信息,也能和从库建立连接,并进行监控。主从库切换后,客户端也需要知道新主库的连接信息,所以,哨兵还需要把新主库的信息告诉客户端。
  哨兵和客户端间的信息同步也是基于pubsub机制来完成的,不过是基于哨兵的pubsub机制,客户端可以从哨兵订阅消息。哨兵提供的消息订阅频道有很多,不同频道包含了主从库切换过程中的不同关键事件。
  客户端和哨兵建立连接后,就可以订阅这些事件。主从切换完成后,客户端就会监听到switchmaster事件,这时客户端就可以从哨兵那得到新主库的地址和端口了。
  通过pubsub机制,有了这些事件通知,客户端不仅可以在主从切换后得到新主库的连接信息,还可以监控到主从库切换过程中发生的各个重要事件。这样,客户端就可以知道主从切换进行到哪一步了,有助于了解切换进度。配置版本号
  哨兵在切换主库时,会从要切换到的新主库那里得到一个epoch(版本号)每次切换的epoch都是唯一的。如果第一个选举出的哨兵切换失败了,那么其他哨兵,会等待failovertimeout时间,然后接替继续执行切换,此时会重新获取一个新的epoch。
  哨兵完成切换之后,会在自己本地更新生成最新的master配置,然后通过pubsub机制同步给其他的哨兵。这时epoch版本号就起作用了,因为各种消息都是通过一个channel去发布和监听的,所以一个哨兵完成一次新的切换之后,新的master配置是跟着新的epoch版本号的,其他的哨兵都是根据版本号的大小来更新自己的master配置的。数据丢失
  Redis主从复制存在两种数据丢失的情况:
  1。异步复制
  主库同步数据到从库是异步的,所以可能有部分数据还未同步到从库,主库就宕机了,这部分数据就丢失了。
  2。脑裂
  如果主库所在服务器脱离了正常网络,与其它从库都无法连接,但实际上主库还运行着。而哨兵会认为主库宕机了,然后开始选择新的主库,这时集群就会有两个主库,这就是脑裂。这时可能客户端还没来得及切换到新的主库,然后继续向旧主库写数据,而旧主库恢复后,会被当成新主库的一个从库,数据也会被清空,重新从新主库复制数据,那么这部分数据也会丢失。
  有两个配置可以减少异步复制和脑裂问题导致的数据丢失:minreplicastowrite1默认3minreplicasmaxlag10默认10复制代码
  这两个配置的意思是至少有1个(minreplicastowrite)从库,与主库的复制同步延迟超过10秒(minreplicasmaxlag)后,主库就不再接收任何写请求。
  这两个配置可以确保任何一个从库跟主库如果延时超过10秒,主库就不会接收客户端任何写请求,最多丢失10秒的数据。集群容灾演练
  下面通过一些测试来看下在主库宕机时,哨兵是否能重新选主并切换新主库。主库下线分析
  首先在其中一个哨兵实例上查看当前主库的信息如下(172。17。0。2):
  现在将主库kill掉,并删除PID文件:
  可以查看哨兵日志:
  首先可以得知当前哨兵ID为:SentinelIDis018048f0adc0523b4b13d8ddde04c8882bb3d9af
  杀掉主库后,可以看到哨兵判定master主观下线(sdown):sdownmastermymaster172。17。0。26379
  接着有quorum数量的哨兵都认为master主观下线了,状态变为客观下线(odown):odownmastermymaster172。17。0。26379quorum22
  接着就获取了一个新的epoch版本号:newepoch1
  然后是投票选举Leader阶段:当前哨兵投票给了自己,另外两个哨兵也投票给了自己:voteforleader018048f0adc0523b4b13d8ddde04c8882bb3d9af1f43d3d4bca3f809be708c17e4c1c8951de5c6d9dvotedfor018048f0adc0523b4b13d8ddde04c8882bb3d9af1fbeaca3b7cc3a7fee7660dd2e239683021861d69votedfor018048f0adc0523b4b13d8ddde04c8882bb3d9af1复制代码
  选出了新出库(172。17。0。4):selectedslaveslave172。17。0。4:6379172。17。0。46379mymaster172。17。0。26379
  实例退出主观下线状态:odownmastermymaster172。17。0。26379
  从库重新配置事件:slavereconfinprogslave172。17。0。3:6379172。17。0。36379mymaster172。17。0。26379160:X21Feb202203:48:47。494slavereconfdoneslave172。17。0。3:6379172。17。0。36379mymaster172。17。0。26379
  新主库切换完成:switchmastermymaster172。17。0。26379172。17。0。46379
  至此,我们通过日志可以看到Redis主备切换的一个过程,然后在哨兵上也可以看到主库已经切换成功。
  旧主库上线
  再将旧主库重新启动:
  启动之后在哨兵日志中可以看到旧主库已经退出主观下线状态了:sdownslave172。17。0。2:6379172。17。0。26379mymaster172。17。0。46379
  接着在新主库(172。17。0。4)中查看,可以发现旧主库(172。17。0。2)已经变为新主库的一个从库了。
  至此,我们可以确认哨兵集群是能够正常工作的,在主库宕机时,能够选出新主库,并完成主从切换,并通知客户端更新主库信息。旧主库重新上线后,会自动切换为新主库的从库。
  作者:bojiangzhou
  链接:https:juejin。cnpost7067024548884906020

锁定季后赛席位!热火保住东部第一,绿军双杰空砍51分,洛瑞2北京时间3月31日,NBA常规赛的较量正在如火如荼地进行,东部某支绿队坐镇主场迎击迈阿密热火。东部战区排名前3的两支球队将展开一场激烈对决,本场比赛之前,热火以42胜28负的战……去湖南必点的6道湘菜,是湘菜之魂,老板以为你是湖南人来了湖南,首先要去的便是橘子洲头,去领略一番橘子洲头的壮阔。逛完橘子洲头,也便要填一填饥肠辘辘的肚子了,可供选择的湖南美食那真是数都数不过来。湖南美食除了数量繁多,……国外最新研究为什么我们应该带皮吃猕猴桃(奇异果)?为什么我们应该吃掉猕猴桃的皮?因为这将使您获得更多的维生素。这种水果具有绿色的果肉和棕色蓬松的果皮,不仅非常好吃,而且对您的健康也有好处。例如,猕猴桃只是一个维生素炸弹,……杭州植物园绣球开得正好,看!它还会变色呢钱江晚报小时新闻记者章然通讯员江水恒眼下,杭州植物园木本绣球开得正好,工作人员拍下了几组它的美照,先一起欣赏一下它的美好身姿吧。在杭州植物园的盆栽园,满树雪白、大朵……执迷的油城从草原到油城从托里到克拉玛依(维吾尔语:黑油),两百公里,公交车三十九元。清晨离开县城时,我在这里的暂居生活也宣告结束。在托里住久了,已结下深厚感情,再去克拉玛依时……宁夏地质局政府开放日邀请市民开启地学探秘之旅12月10日,在宁夏地质局举办的政府开放日活动中,宁夏教育、医疗等行业代表、社区干部、志愿者及市民代表等受邀参观了宁夏地质博物馆,零距离探秘古象的前世今生,并了解了宁夏地质事业……缺铁性贫血的饮食治疗缺铁性贫血(IronDeficiencyAnemia,IDA)指体内贮存铁消耗殆尽,不能满足正常血红蛋白(Hb)生成的需要时发生的一种小细胞低色素性贫血,是最常见的贫血类型。据……微信又添新功能!网友这次还真的挺实用的来源:广州日报微信关怀模式,现在都支持听文字消息了。开启后,点一下聊天中的文字消息就能听到。无论你是安卓手机,还是苹果手机,更新到最新版本就能用。朋友们可以这……有种整容叫董洁离婚,前夫潘粤明逆天改命,她却像换个人在一次综艺节目上,董洁的儿子顶顶和一个外国小朋友打招呼,董洁看见后,唯恐儿子冷落了自己,立即开启了撒娇模式,委屈巴巴地对着顶顶说:你再不理我,我就伤心了。吓得顶顶赶……男人过了60岁,做好这三件事,一般都会长寿前言:男人过了60岁之后,想要保持幸福的生活,就必须做好该做的事情,同时也要养成很多良好习惯,只要能够做到这些日子就会幸福。不要觉得60岁之后,可以依靠老伴儿,依靠儿女,……春日花卉山桃花山桃花原产中国西北地区,抗寒耐旱,较耐盐碱。树皮光滑古铜红色,花粉色或者白色。3月中下旬即可盛放,是城市园林应用中常见的早春观花植物。京城公园里大部分都植有山桃树,或粉或……长期不发烧不感冒的人,更容易患癌症吗?医生来告诉你答案人吃五谷杂粮,怎么可能不生病呢?就算身体再健康的人也会出现一些疾病,比如感冒,发烧。虽然每个人都会有发烧现象,但是不同身体素质的人发生的频率却不一样,对于免疫力较差的人而……
了不起,中国球员!张安达打出职业生涯首杆147满分2022斯诺克欧洲大师赛资格赛第2局,中国选手张安达打出官方纪录的第177杆、本赛季首杆、职业生涯首杆147满分!最后的清彩阶段黄球相当有难度,他也成为了史上第7位打出满分杆的……加班久了脖子疼,戴上西屋UX5颈椎按摩器,办公久坐不攒病久坐成疾。道理我懂,可咱的工作岗位不答应。单位小职员,桌面工作者,每天一堆任务。电脑屏幕前面的这一平方米就是我们的战场,键盘要敲,鼠标要点,你想起身活动?摸鱼的帽子扣过来……30!国乒女单名将大获全胜,淘汰法国一姐晋级,有望挑战王曼昱2022年7月13日,WTT球星挑战赛继续进行,国乒混双首战告捷,王楚钦王曼昱苦战五局险胜,率先晋级八强,女单赛场也传来喜讯,范思琦横扫法国一姐袁嘉楠,有望挑战王曼昱。范……云南福石科技有限公司打造精细磷化工产业平台来源:【昆明日报掌上春城】掌上春城讯今年6月,由云南福石科技有限公司研发生产的高端磷系阻燃剂正式投入试生产。和同类产品相比,该产品在阻燃的同时,还能最大程度降低对塑料性能……NBA十大劲爆消息湖人詹姆斯有分歧,阿杜暗讽库里詹姆斯等人1。勒布朗詹姆斯和湖人队在这个休赛季的球员补强目标上有一定的分歧,勒布朗詹姆斯想要湖人拿下凯里欧文,巴迪希尔德或埃里克戈登,这样湖人才有机会竞争力。2。达米恩利拉德和波特……糖尿病患者按这8个方法吃蔬菜,既能帮助控制血糖,又能预防并发蔬菜富含膳食纤维、抗氧化剂,按这8个方法吃,有助于控制餐后血糖,预防糖尿病并发症。不同颜色的蔬菜,营养也有别蔬菜的营养价值与其颜色有密切关系:蔬菜的颜色越深,营养价……得了胃病,忌口是关键?若想养好胃,这3种食物真得少碰出现胃病的人常见症状是胃胀气、食欲减退、消化不良、胃痛,有这些符合的疾病特征不要耽误,如需用药应该听从医生意见。当然,在胃部保养这方面有许多知识要了解,那些会加重病情的食物要远……江苏派发2亿绿色节能家电补贴促消费第一中标企业苏宁易购为进一步拉动消费、促进实体复苏回暖,江苏省惠民促消费举措持续加码。7月8日,江苏省宣布向全省居民派发2亿元绿色节能家电补贴。这也是全国范围内已经出台的、专门用于线下绿色节能家电……苹果放大招!iPhone14又有猛料实体SIM卡槽没了距离iPhone14系列发布还有不到两个月的时间了,网上也有很多关于iPhone14的爆料信息,像四种机型,芯片、配色以及感叹屏等等,似乎只要等发布会上库克公布价格就行了。……赵雅芝的搭配越来越高级,穿大衣出门很大气,年轻感也自然在这个特殊的时候,春季出门千万不要着急穿着很薄的服装,天气还不算很暖和,感冒了就不太方便了。风衣和大衣还是很受欢迎的款式。若是选择了大衣,记得选择相对年轻的款式,因为春季……淘淘琪琪漂流记获得喜马拉雅儿童区首页推荐,荣登喜马拉雅新品榜单的《科学小神兽》有声故事来了!配上音频阅读体验更佳哦!内容简介爸爸妈妈带着淘淘和琪琪来玩漂流,……WiFi传输功能升级手作体验,NV2700电脑绣花缝纫一体机上海2022年7月5日美通社在DIY成为一种时尚潮流的今天,个性化手作受到越来越多人的喜爱。Brother新款电脑绣花缝纫一体机NV2700,兼具缝纫与绣花功能的新世代缝纫机,……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网