一、概述 REmoteDIctionaryServer(Redis)是一个由SalvatoreSanfilippo写的keyvalue存储系统,是跨平台的非关系型数据库。 Redis有三种集群模式:主从模式,Sentinel(哨兵)模式,Cluster模式,这三种模式环境编排部署都会在本文章介绍与实战操作。 想了解更多关于redis概念与原理介绍,可参考我这篇文章:Redis原理介绍与环境部署(主从模式、哨兵模式、集群模式) 二、redis主从模式编排部署实战操作 地址:https:artifacthub。iopackageshelmbitnamiredis1)下载chart包helmrepoaddbitnamihttps:charts。bitnami。combitnamihelmpullbitnamiredisversion17。3。7tarxfredis17。3。7。tgz2)构建镜像 这里就不重新构建镜像了,只是把远程镜像tag一下,推到本地harbor仓库加速下载镜像。有不清楚怎么构建镜像的小伙伴,可以私信或者留言。dockerpulldocker。iobitnamiredis:7。0。5debian11r7tagdockertagdocker。iobitnamiredis:7。0。5debian11r7myharbor。combigdataredis:7。0。5debian11r7推送镜像到本地harbor仓库dockerpushmyharbor。combigdataredis:7。0。5debian11r73)修改yaml编排redistemplatesmasterpv。yaml 新增pv。yaml文件,内容如下:{{range。Values。master。persistence。local}}apiVersion:v1kind:PersistentVolumemetadata:name:{{。name}}labels:name:{{。name}}spec:storageClassName:{{。Values。master。persistence。storageClass}}capacity:storage:{{。Values。master。persistence。size}}accessModes:ReadWriteOncelocal:path:{{。path}}nodeAffinity:required:nodeSelectorTerms:matchExpressions:key:kubernetes。iohostnameoperator:Invalues:{{。host}}{{end}}redistemplatesreplicaspv。yaml 新增pv。yaml文件,内容如下:{{range。Values。replica。persistence。local}}apiVersion:v1kind:PersistentVolumemetadata:name:{{。name}}labels:name:{{。name}}spec:storageClassName:{{。Values。replica。persistence。storageClass}}capacity:storage:{{。Values。replica。persistence。size}}accessModes:ReadWriteOncelocal:path:{{。path}}nodeAffinity:required:nodeSelectorTerms:matchExpressions:key:kubernetes。iohostnameoperator:Invalues:{{。host}}{{end}}redisvalues。yamlglobal:redis:password:123456。。。image:registry:myharbor。comrepository:bigdataredistag:7。0。5debian11r7master:count:1persistence:enabled:truesize:8GistorageClass:localredisstoragelocal:name:redis0host:local168182110path:optbigdataserversredisdatadata1replica:replicaCount:2persistence:enabled:truesize:8GistorageClass:localredisstoragelocal:name:redis1host:local168182111path:optbigdataserversredisdatadata1name:redis2host:local168182112path:optbigdataserversredisdatadata14)开始部署创建存储目录mkdiroptbigdataserversredisdatadata1先检查语法helmlint。redis开始安装helminstallredis。redisnrediscreatenamespace NOTESREVISION:1TESTSUITE:NoneNOTES:CHARTNAME:redisCHARTVERSION:17。3。7APPVERSION:7。0。5PleasebepatientwhilethechartisbeingdeployedRediscanbeaccessedonthefollowingDNSnamesfromwithinyourcluster:redismaster。redis。svc。cluster。localforreadwriteoperations(port6379)redisreplicas。redis。svc。cluster。localforreadonlyoperations(port6379)Togetyourpasswordrun:exportREDISPASSWORD(kubectlgetsecretnamespaceredisredisojsonpath{。data。redispassword}base64d)ToconnecttoyourRedisserver:1。RunaRedispodthatyoucanuseasaclient:kubectlrunnamespaceredisredisclientrestartNeverenvREDISPASSWORDREDISPASSWORDimagemyharbor。combigdataredis:7。0。5debian11r7commandsleepinfinityUsethefollowingcommandtoattachtothepod:kubectlexecttyiredisclientnamespaceredisbash2。ConnectusingtheRedisCLI:REDISCLIAUTHREDISPASSWORDredisclihredismasterREDISCLIAUTHREDISPASSWORDredisclihredisreplicasToconnecttoyourdatabasefromoutsidetheclusterexecutethefollowingcommands:kubectlportforwardnamespaceredissvcredismaster6379:6379REDISCLIAUTHREDISPASSWORDredisclih127。0。0。1p6379 5)测试验证kubectlgetpods,svcnredisowide 登录master,可读可写kubectlexecitredismaster0nredisredisclihredismastera(kubectlgetsecretnamespaceredisredisojsonpath{。data。redispassword}base64d)登录slave,只读kubectlexecitredismaster0nredisredisclihredisreplicasa(kubectlgetsecretnamespaceredisredisojsonpath{。data。redispassword}base64d) 6)卸载helmuninstallredissentinelnredissentineldeletenskubectldeletensredissentinelforcedeletepvkubectldeletepvkubectlgetpvgrepredisawk{print1}forcermfroptbigdataserversredisdatadata1三、redis哨兵模式编排部署实战操作 主从模式的弊端就是不具备高可用性,当master挂掉以后,Redis将不能再对外提供写入操作,因此sentinel应运而生。 1)构建镜像 这里也重新构建镜像了,有不懂构建镜像的小伙伴可以在评论下方留言。这里也只是把远程的镜像推送到本地harbor。dockerpulldocker。iobitnamiredissentinel:7。0。5debian11r6tagdockertagdocker。iobitnamiredissentinel:7。0。5debian11r6myharbor。combigdataredissentinel:7。0。5debian11r6pushdockerpushmyharbor。combigdataredissentinel:7。0。5debian11r62)修改yaml编排redissentinelvalues。yamlreplica:replica。replicaCount与sentinel。quorum值一样replicaCount:3storageClass:localredisstoragelocal:name:redis0host:local168182110path:optbigdataserversredisdatadata1name:redis1host:local168182111path:optbigdataserversredisdatadata1name:redis2host:local168182112path:optbigdataserversredisdatadata1sentinel:enabled:trueimage:registry:myharbor。comrepository:bigdataredissentineltag:7。0。5debian11r6quorum:3redissentineltemplatesreplicaspv。yaml 新增pv。yaml文件,内容如下:{{range。Values。sentinel。persistence。local}}apiVersion:v1kind:PersistentVolumemetadata:name:{{。name}}labels:name:{{。name}}spec:storageClassName:{{。Values。sentinel。persistence。storageClass}}capacity:storage:{{。Values。sentinel。persistence。size}}accessModes:ReadWriteOncelocal:path:{{。path}}nodeAffinity:required:nodeSelectorTerms:matchExpressions:key:kubernetes。iohostnameoperator:Invalues:{{。host}}{{end}}3)开始部署创建存储目录mkdirpoptbigdataserversredisdatadata1helminstallredissentinel。redissentinelnredissentinelcreatenamespace NOTESNAME:redissentinelLASTDEPLOYED:FriNov422:42:522022NAMESPACE:redissentinelSTATUS:deployedREVISION:1TESTSUITE:NoneNOTES:CHARTNAME:redisCHARTVERSION:17。3。7APPVERSION:7。0。5PleasebepatientwhilethechartisbeingdeployedRediscanbeaccessedviaport6379onthefollowingDNSnamefromwithinyourcluster:redissentinel。redissentinel。svc。cluster。localforreadonlyoperationsForreadwriteoperations,firstaccesstheRedisSentinelcluster,whichisavailableinport26379usingthesamedomainnameabove。Togetyourpasswordrun:exportREDISPASSWORD(kubectlgetsecretnamespaceredissentinelredissentinelojsonpath{。data。redispassword}base64d)ToconnecttoyourRedisserver:1。RunaRedispodthatyoucanuseasaclient:kubectlrunnamespaceredissentinelredisclientrestartNeverenvREDISPASSWORDREDISPASSWORDimagemyharbor。combigdataredis:7。0。5debian11r7commandsleepinfinityUsethefollowingcommandtoattachtothepod:kubectlexecttyiredisclientnamespaceredissentinelbash2。ConnectusingtheRedisCLI:REDISCLIAUTHREDISPASSWORDredisclihredissentinelp6379ReadonlyoperationsREDISCLIAUTHREDISPASSWORDredisclihredissentinelp26379SentinelaccessToconnecttoyourdatabasefromoutsidetheclusterexecutethefollowingcommands:kubectlportforwardnamespaceredissentinelsvcredissentinel6379:6379REDISCLIAUTHREDISPASSWORDredisclih127。0。0。1p6379 查看kubectlgetpods,svcnredissentinelowide 4)模拟故障测试查看kubectlexecitredissentinelnode0nredissentinelredisclihredissentinela(kubectlgetsecretnamespaceredissentinelredissentinelojsonpath{。data。redispassword}base64d)inforeplication 模拟故障,killmasterpodkubectldeletepodredissentinelnode0nredissentinel 再次查看master所在节点,master节点已经切换到其它节点了。 再测试读写登录master节点kubectlexecitredissentinelnode0nredissentinelredisclihredissentinelnode2。redissentinelheadlessa(kubectlgetsecretnamespaceredissentinelredissentinelojsonpath{。data。redispassword}base64d)登录slave节点kubectlexecitredissentinelnode0nredissentinelredisclihredissentinelnode0。redissentinelheadlessa(kubectlgetsecretnamespaceredissentinelredissentinelojsonpath{。data。redispassword}base64d) 5)卸载helmuninstallredissentinelnredisdeletenskubectldeletensredisforcedeletepvkubectldeletepvkubectlgetpvgrepredisawk{print1}forcermfroptbigdataserversredisdatadata1四、redis集群模式编排部署实战操作 集群模式可以说是sentinel主从模式的结合体,通过cluster可以实现主从和master重选功能,所以如果配置两个副本三个分片的话,就需要六个Redis实例。因为Redis的数据是根据一定规则分配到cluster的不同机器的,当数据量过大时,可以新增机器进行扩容。 1)下载chart包helmrepoaddbitnamihttps:charts。bitnami。combitnamihelmpullbitnamiredisclusterversion8。2。7tarxfrediscluster8。2。7。tgz2)构建镜像 这里就不重新构建镜像了,只是把远程镜像tag一下,推到本地harbor仓库加速下载镜像。有不清楚怎么构建镜像的小伙伴,可以私信或者留言。dockerpulldocker。iobitnamirediscluster:7。0。5debian11r9tagdockertagdocker。iobitnamirediscluster:7。0。5debian11r9myharbor。combigdatarediscluster:7。0。5debian11r9推送镜像到本地harbor仓库dockerpushmyharbor。combigdatarediscluster:7。0。5debian11r93)修改yaml编排redisclustertemplatespv。yaml 新增pv。yaml文件,内容如下:{{range。Values。persistence。local}}apiVersion:v1kind:PersistentVolumemetadata:name:{{。name}}labels:name:{{。name}}spec:storageClassName:{{。Values。persistence。storageClass}}capacity:storage:{{。Values。persistence。size}}accessModes:ReadWriteOncelocal:path:{{。path}}nodeAffinity:required:nodeSelectorTerms:matchExpressions:key:kubernetes。iohostnameoperator:Invalues:{{。host}}{{end}}password:123456。。。image:registry:myharbor。comrepository:bigdataredisclustertag:7。0。5debian11r9。。。persistence:storageClass:localredisclusterstoragelocal:name:rediscluster0host:local168182110path:optbigdataserversredisclusterdatadata1name:rediscluster1host:local168182110path:optbigdataserversredisclusterdatadata2name:rediscluster2host:local168182110path:optbigdataserversredisclusterdatadata3name:rediscluster3host:local168182111path:optbigdataserversredisclusterdatadata1name:rediscluster4host:local168182111path:optbigdataserversredisclusterdatadata2name:rediscluster5host:local168182111path:optbigdataserversredisclusterdatadata3name:rediscluster6host:local168182112path:optbigdataserversredisclusterdatadata1name:rediscluster7host:local168182112path:optbigdataserversredisclusterdatadata2name:rediscluster8host:local168182112path:optbigdataserversredisclusterdatadata3cluster:init:true一主两从(三组)nodes:9replicas:24)开始部署创建存储目录mkdirpoptbigdataserversredisclusterdatadata{1。。3}helminstallrediscluster。redisclusternredisclustercreatenamespace NOTESNOTES:CHARTNAME:redisclusterCHARTVERSION:8。2。7APPVERSION:7。0。5PleasebepatientwhilethechartisbeingdeployedTogetyourpasswordrun:exportREDISPASSWORD(kubectlgetsecretnamespaceredisclusterredisclusterojsonpath{。data。redispassword}base64d)YouhavedeployedaRedisClusteraccessibleonlyfromwithinyouKubernetesCluster。INFO:TheJobtocreatetheclusterwillbecreated。ToconnecttoyourRediscluster:1。RunaRedispodthatyoucanuseasaclient:kubectlrunnamespaceredisclusterredisclusterclientrmttyirestartNeverenvREDISPASSWORDREDISPASSWORDimagemyharbor。combigdatarediscluster:7。0。5debian11r9bash2。ConnectusingtheRedisCLI:redisclichredisclusteraREDISPASSWORD 查看kubectlgetpods,svcnredisclusterowide 5)故障模拟测试kubectlexecitrediscluster0nredisclusterredisclichredisclustera(kubectlgetsecretnamespaceredisclusterredisclusterojsonpath{。data。redispassword}base64d)CLUSTERINFOkubectlexecitrediscluster0nredisclusterredisclichredisclustera(kubectlgetsecretnamespaceredisclusterredisclusterojsonpath{。data。redispassword}base64d)CLUSTERNODES 删除其中一个master节点kubectldeletepodrediscluster1nrediscluster再查看节点情况kubectlexecitrediscluster0nredisclusterredisclichredisclustera(kubectlgetsecretnamespaceredisclusterredisclusterojsonpath{。data。redispassword}base64d)CLUSTERNODES 6)卸载helmuninstallredisclusternredisclusterdeletenskubectldeletensredisclusterforcedeletepvkubectldeletepvkubectlgetpvgrepredisclusterawk{print1}forcermfroptbigdataserversredisclusterdatadata{1。。3} git地址:https:gitee。comhadoopbigdataredisonk8s Redisonk8s三种模式的编排部署就先到这里了,小伙伴有任何疑问,欢迎给我留言哦,后续会持续更新【大数据云原生】相关的问题