范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

云原生Redisonk8s编排部署讲解与实战操作

  一、概述
  REmote DIctionary Server( Redis  ) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。
  Redis有三种集群模式:主从模式,Sentinel(哨兵)模式,Cluster模式,这三种模式环境编排部署都会在本文章介绍与实战操作。
  想了解更多关于redis概念与原理介绍,可参考我这篇文章:Redis原理介绍与环境部署(主从模式、哨兵模式、集群模式)
  二、redis 主从模式编排部署实战操作
  地址:https://artifacthub.io/packages/helm/bitnami/redis 1)下载chart 包helm repo add bitnami https://charts.bitnami.com/bitnami  helm pull bitnami/redis --version 17.3.7  tar -xf redis-17.3.7.tgz2)构建镜像
  这里就不重新构建镜像了,只是把远程镜像tag一下,推到本地harbor仓库加速下载镜像。有不清楚怎么构建镜像的小伙伴,可以私信或者留言。 docker pull docker.io/bitnami/redis:7.0.5-debian-11-r7  # tag docker tag docker.io/bitnami/redis:7.0.5-debian-11-r7 myharbor.com/bigdata/redis:7.0.5-debian-11-r7  # 推送镜像到本地harbor仓库 docker push myharbor.com/bigdata/redis:7.0.5-debian-11-r73)修改yaml编排redis/templates/master/pv.yaml
  新增 pv.yaml  文件,内容如下:{{- range .Values.master.persistence.local }} --- apiVersion: v1 kind: PersistentVolume metadata:   name: {{ .name }}   labels:     name: {{ .name }} spec:   storageClassName: {{ $.Values.master.persistence.storageClass }}   capacity:     storage: {{ $.Values.master.persistence.size }}   accessModes:     - ReadWriteOnce   local:     path: {{ .path }}   nodeAffinity:     required:       nodeSelectorTerms:         - matchExpressions:             - key: kubernetes.io/hostname               operator: In               values:                 - {{ .host }} --- {{- end }}redis/templates/replicas/pv.yaml
  新增 pv.yaml  文件,内容如下:{{- range .Values.replica.persistence.local }} --- apiVersion: v1 kind: PersistentVolume metadata:   name: {{ .name }}   labels:     name: {{ .name }} spec:   storageClassName: {{ $.Values.replica.persistence.storageClass }}   capacity:     storage: {{ $.Values.replica.persistence.size }}   accessModes:     - ReadWriteOnce   local:     path: {{ .path }}   nodeAffinity:     required:       nodeSelectorTerms:         - matchExpressions:             - key: kubernetes.io/hostname               operator: In               values:                 - {{ .host }} --- {{- end }}redis/values.yaml  global:   redis:     password: "123456"  ...  image:   registry: myharbor.com   repository: bigdata/redis   tag: 7.0.5-debian-11-r7  master:   count: 1   persistence:     enabled: true     size: 8Gi     storageClass: "local-redis-storage"     local:     - name: redis-0       host: "local-168-182-110"       path: "/opt/bigdata/servers/redis/data/data1"  replica:   replicaCount: 2   persistence:     enabled: true     size: 8Gi     storageClass: "local-redis-storage"     local:     - name: redis-1       host: "local-168-182-111"       path: "/opt/bigdata/servers/redis/data/data1"     - name: redis-2       host: "local-168-182-112"       path: "/opt/bigdata/servers/redis/data/data1"4)开始部署# 创建存储目录 mkdir /opt/bigdata/servers/redis/data/data1  # 先检查语法 helm lint ./redis  # 开始安装 helm install redis ./redis -n redis --create-namespace
  NOTES REVISION: 1 TEST SUITE: None NOTES: CHART NAME: redis CHART VERSION: 17.3.7 APP VERSION: 7.0.5  ** Please be patient while the chart is being deployed **  Redis  can be accessed on the following DNS names from within your cluster:      redis-master.redis.svc.cluster.local for read/write operations (port 6379)     redis-replicas.redis.svc.cluster.local for read-only operations (port 6379)    To get your password run:      export REDIS_PASSWORD=$(kubectl get secret --namespace redis redis -o jsonpath="{.data.redis-password}" | base64 -d)  To connect to your Redis  server:  1. Run a Redis  pod that you can use as a client:     kubectl run --namespace redis redis-client --restart="Never"  --env REDIS_PASSWORD=$REDIS_PASSWORD  --image myharbor.com/bigdata/redis:7.0.5-debian-11-r7 --command -- sleep infinity     Use the following command to attach to the pod:     kubectl exec --tty -i redis-client     --namespace redis -- bash  2. Connect using the Redis  CLI:    REDISCLI_AUTH="$REDIS_PASSWORD" redis-cli -h redis-master    REDISCLI_AUTH="$REDIS_PASSWORD" redis-cli -h redis-replicas  To connect to your database from outside the cluster execute the following commands:      kubectl port-forward --namespace redis svc/redis-master 6379:6379 &     REDISCLI_AUTH="$REDIS_PASSWORD" redis-cli -h 127.0.0.1 -p 6379
  5)测试验证kubectl get pods,svc -n redis -owide
  # 登录master,可读可写 kubectl exec -it redis-master-0 -n redis -- redis-cli -h redis-master -a $(kubectl get secret --namespace redis redis -o jsonpath="{.data.redis-password}" | base64 -d)  # 登录slave,只读 kubectl exec -it redis-master-0 -n redis -- redis-cli -h redis-replicas -a $(kubectl get secret --namespace redis redis -o jsonpath="{.data.redis-password}" | base64 -d)
  6)卸载helm uninstall redis-sentinel -n redis-sentinel # delete ns  kubectl delete ns redis-sentinel --force # delete pv kubectl delete pv `kubectl get pv|grep ^redis-|awk "{print $1}"` --force  rm -fr /opt/bigdata/servers/redis/data/data1/*三、redis 哨兵模式编排部署实战操作
  主从模式的弊端就是不具备高可用性,当master挂掉以后,Redis将不能再对外提供写入操作,因此sentinel应运而生。
  1)构建镜像
  这里也重新构建镜像了,有不懂构建镜像的小伙伴可以在评论下方留言。这里也只是把远程的镜像推送到本地harbor。 docker pull docker.io/bitnami/redis-sentinel:7.0.5-debian-11-r6 # tag docker tag docker.io/bitnami/redis-sentinel:7.0.5-debian-11-r6 myharbor.com/bigdata/redis-sentinel:7.0.5-debian-11-r6 # push docker push  myharbor.com/bigdata/redis-sentinel:7.0.5-debian-11-r62)修改yaml编排redis-sentinel/values.yaml  replica:   # replica.replicaCount与sentinel.quorum值一样   replicaCount: 3   storageClass: "local-redis-storage"     local:     - name: redis-0       host: "local-168-182-110"       path: "/opt/bigdata/servers/redis/data/data1"     - name: redis-1       host: "local-168-182-111"       path: "/opt/bigdata/servers/redis/data/data1"     - name: redis-2       host: "local-168-182-112"       path: "/opt/bigdata/servers/redis/data/data1"  sentinel:   enabled: true   image:     registry: myharbor.com     repository: bigdata/redis-sentinel     tag: 7.0.5-debian-11-r6   quorum: 3redis-sentinel/templates/replicas/pv.yaml
  新增 pv.yaml  文件,内容如下:{{- range .Values.sentinel.persistence.local }} --- apiVersion: v1 kind: PersistentVolume metadata:   name: {{ .name }}   labels:     name: {{ .name }} spec:   storageClassName: {{ $.Values.sentinel.persistence.storageClass }}   capacity:     storage: {{ $.Values.sentinel.persistence.size }}   accessModes:     - ReadWriteOnce   local:     path: {{ .path }}   nodeAffinity:     required:       nodeSelectorTerms:         - matchExpressions:             - key: kubernetes.io/hostname               operator: In               values:                 - {{ .host }} --- {{- end }}3)开始部署# 创建存储目录 mkdir -p /opt/bigdata/servers/redis/data/data1  helm install redis-sentinel ./redis-sentinel -n redis-sentinel --create-namespace
  NOTES NAME: redis-sentinel LAST DEPLOYED: Fri Nov  4 22:42:52 2022 NAMESPACE: redis-sentinel STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: CHART NAME: redis CHART VERSION: 17.3.7 APP VERSION: 7.0.5  ** Please be patient while the chart is being deployed **  Redis  can be accessed via port 6379 on the following DNS name from within your cluster:      redis-sentinel.redis-sentinel.svc.cluster.local for read only operations  For read/write operations, first access the Redis  Sentinel cluster, which is available in port 26379 using the same domain name above.    To get your password run:      export REDIS_PASSWORD=$(kubectl get secret --namespace redis-sentinel redis-sentinel -o jsonpath="{.data.redis-password}" | base64 -d)  To connect to your Redis  server:  1. Run a Redis  pod that you can use as a client:     kubectl run --namespace redis-sentinel redis-client --restart="Never"  --env REDIS_PASSWORD=$REDIS_PASSWORD  --image myharbor.com/bigdata/redis:7.0.5-debian-11-r7 --command -- sleep infinity     Use the following command to attach to the pod:     kubectl exec --tty -i redis-client     --namespace redis-sentinel -- bash  2. Connect using the Redis  CLI:    REDISCLI_AUTH="$REDIS_PASSWORD" redis-cli -h redis-sentinel -p 6379 # Read only operations    REDISCLI_AUTH="$REDIS_PASSWORD" redis-cli -h redis-sentinel -p 26379 # Sentinel access  To connect to your database from outside the cluster execute the following commands:      kubectl port-forward --namespace redis-sentinel svc/redis-sentinel 6379:6379 &     REDISCLI_AUTH="$REDIS_PASSWORD" redis-cli -h 127.0.0.1 -p 6379
  查看 kubectl get pods,svc -n redis-sentinel -owide
  4)模拟故障测试# 查看 kubectl exec -it redis-sentinel-node-0 -n redis-sentinel -- redis-cli -h redis-sentinel -a $(kubectl get secret --namespace redis-sentinel redis-sentinel -o jsonpath="{.data.redis-password}" | base64 -d) info replication
  模拟故障,kill master pod kubectl delete pod redis-sentinel-node-0 -n redis-sentinel
  再次查看master所在节点,master节点已经切换到其它节点了。
  再测试读写 # 登录master节点 kubectl exec -it redis-sentinel-node-0 -n redis-sentinel -- redis-cli -h redis-sentinel-node-2.redis-sentinel-headless -a $(kubectl get secret --namespace redis-sentinel redis-sentinel -o jsonpath="{.data.redis-password}" | base64 -d)  # 登录slave节点 kubectl exec -it redis-sentinel-node-0 -n redis-sentinel -- redis-cli -h redis-sentinel-node-0.redis-sentinel-headless -a $(kubectl get secret --namespace redis-sentinel redis-sentinel -o jsonpath="{.data.redis-password}" | base64 -d)
  5)卸载helm uninstall redis-sentinel -n redis # delete ns  kubectl delete ns redis --force # delete pv kubectl delete pv `kubectl get pv|grep ^redis-|awk "{print $1}"` --force  rm -fr /opt/bigdata/servers/redis/data/data1/*四、redis 集群模式编排部署实战操作
  集群模式 可以说是sentinel+主从模式的结合体,通过cluster可以实现主从和master重选功能,所以如果配置两个副本三个分片的话,就需要六个Redis实例。因为Redis的数据是根据一定规则分配到cluster的不同机器的,当数据量过大时,可以新增机器进行扩容。
  1)下载chart 包helm repo add bitnami https://charts.bitnami.com/bitnami  helm pull bitnami/redis-cluster --version 8.2.7  tar -xf redis-cluster-8.2.7.tgz2)构建镜像
  这里就不重新构建镜像了,只是把远程镜像tag一下,推到本地harbor仓库加速下载镜像。有不清楚怎么构建镜像的小伙伴,可以私信或者留言。 docker pull docker.io/bitnami/redis-cluster:7.0.5-debian-11-r9  # tag docker tag docker.io/bitnami/redis-cluster:7.0.5-debian-11-r9 myharbor.com/bigdata/redis-cluster:7.0.5-debian-11-r9  # 推送镜像到本地harbor仓库 docker push myharbor.com/bigdata/redis-cluster:7.0.5-debian-11-r93)修改yaml编排redis-cluster/templates/pv.yaml
  新增 pv.yaml  文件,内容如下:{{- range .Values.persistence.local }} --- apiVersion: v1 kind: PersistentVolume metadata:   name: {{ .name }}   labels:     name: {{ .name }} spec:   storageClassName: {{ $.Values.persistence.storageClass }}   capacity:     storage: {{ $.Values.persistence.size }}   accessModes:     - ReadWriteOnce   local:     path: {{ .path }}   nodeAffinity:     required:       nodeSelectorTerms:         - matchExpressions:             - key: kubernetes.io/hostname               operator: In               values:                 - {{ .host }} --- {{- end }}password: "123456"  ...  image:   registry: myharbor.com   repository: bigdata/redis-cluster   tag: 7.0.5-debian-11-r9  ...  persistence:   storageClass: "local-redis-cluster-storage"   local:     - name: redis-cluster-0       host: "local-168-182-110"       path: "/opt/bigdata/servers/redis-cluster/data/data1"     - name: redis-cluster-1       host: "local-168-182-110"       path: "/opt/bigdata/servers/redis-cluster/data/data2"     - name: redis-cluster-2       host: "local-168-182-110"       path: "/opt/bigdata/servers/redis-cluster/data/data3"     - name: redis-cluster-3       host: "local-168-182-111"       path: "/opt/bigdata/servers/redis-cluster/data/data1"     - name: redis-cluster-4       host: "local-168-182-111"       path: "/opt/bigdata/servers/redis-cluster/data/data2"     - name: redis-cluster-5       host: "local-168-182-111"       path: "/opt/bigdata/servers/redis-cluster/data/data3"     - name: redis-cluster-6       host: "local-168-182-112"       path: "/opt/bigdata/servers/redis-cluster/data/data1"     - name: redis-cluster-7       host: "local-168-182-112"       path: "/opt/bigdata/servers/redis-cluster/data/data2"     - name: redis-cluster-8       host: "local-168-182-112"       path: "/opt/bigdata/servers/redis-cluster/data/data3"    cluster:   init: true   # 一主两从(三组)   nodes: 9   replicas: 24)开始部署# 创建存储目录 mkdir -p /opt/bigdata/servers/redis-cluster/data/data{1..3}  helm install redis-cluster ./redis-cluster -n redis-cluster --create-namespace
  NOTES NOTES: CHART NAME: redis-cluster CHART VERSION: 8.2.7 APP VERSION: 7.0.5** Please be patient while the chart is being deployed **   To get your password run:     export REDIS_PASSWORD=$(kubectl get secret --namespace "redis-cluster" redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d)  You have deployed a Redis  Cluster accessible only from within you Kubernetes Cluster.INFO: The Job to create the cluster will be created.To connect to your Redis  cluster:  1. Run a Redis  pod that you can use as a client: kubectl run --namespace redis-cluster redis-cluster-client --rm --tty -i --restart="Never"   --env REDIS_PASSWORD=$REDIS_PASSWORD  --image myharbor.com/bigdata/redis-cluster:7.0.5-debian-11-r9 -- bash  2. Connect using the Redis  CLI:  redis-cli -c -h redis-cluster -a $REDIS_PASSWORD
  查看 kubectl get pods,svc -n redis-cluster -owide
  5)故障模拟测试kubectl exec -it redis-cluster-0 -n redis-cluster -- redis-cli -c -h redis-cluster -a $(kubectl get secret --namespace "redis-cluster" redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d) CLUSTER INFO  kubectl exec -it redis-cluster-0 -n redis-cluster -- redis-cli -c -h redis-cluster -a $(kubectl get secret --namespace "redis-cluster" redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d) CLUSTER NODES
  删除其中一个master节点 kubectl delete pod redis-cluster-1 -n redis-cluster  # 再查看节点情况 kubectl exec -it redis-cluster-0 -n redis-cluster -- redis-cli -c -h redis-cluster -a $(kubectl get secret --namespace "redis-cluster" redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d) CLUSTER NODES
  6)卸载helm uninstall redis-cluster -n redis-cluster # delete ns  kubectl delete ns redis-cluster --force # delete pv kubectl delete pv `kubectl get pv|grep ^redis-cluster-|awk "{print $1}"` --force  rm -fr /opt/bigdata/servers/redis-cluster/data/data{1..3}/*
  git地址:https://gitee.com/hadoop-bigdata/redis-on-k8s
  Redis on k8s 三种模式的编排部署就先到这里了,小伙伴有任何疑问,欢迎给我留言哦,后续会持续更新【大数据+云原生】相关的问题~

象棋杀棋练习五步杀297象棋杀棋练习五步杀,适合初级象棋爱好者,天天象棋业5以下水平可以练练。没有特别说明的都是红先胜。上期答案,仅供参考,部分棋局并非唯一解。1。车二进六象退2。车二平三士退3。车三平四以巴风云(11)约旦圣河,提比利亚,加利利湖沿岸的宗教圣地约旦河,一条在圣经中出现170余次被亚伯拉罕诸教奉为最神圣的河流,在圣经开篇创世纪的描述中,涓流不息的约旦河,滋润了两岸肥沃大平原,草丰水美植被繁茂,被称为耶和华的花园。其后耶稣基广东早茶为何如此受欢迎广东早茶是一种岭南民间饮食风俗。广东人饮早茶,有的是当作早餐的,一般都是全家老小围坐一桌,共享天伦之乐。有的喝完早茶即去上班,有的则以此消闲。消闲族大多为街坊退休老人,他们一般来得2022年6月12日游华山这个月华山不要门票,我跟团前往,一看我就是个梦怀诗和远方的穷人。旅游路线索道上北峰到东峰,路过中峰然后到南峰,从南峰到西峰,从西峰坐索道下。我大概是最晚一个坐上大巴的,但没有一句抱来旅游吗?不要门票哦翻开我的生活日记贵州山美水美人更美,没有红艳如火的火烧云,也没有落日的余晖,可就是这样的景色,却能给人带来喜悦,为了拍摄这些风景,就算是等待,那也是值得的。我们这里的山很高啊,当太你知道夏天该去哪里旅游吗?贵州云上屋脊,在海拔两千九百米的高原平台上,长满了十万余亩野生韭菜,这里是世界上最大面积的连片野生韭菜生长带,全国唯一野生韭菜花保护区,中国野生韭菜多星韭之乡,被誉为东方的普罗旺斯旅欧笔记临见巴黎埃菲尔铁塔临见巴黎李南方午后的巴黎沐浴着斜阳广延的宫殿峨耸的教堂直插云端的埃菲尔铁塔风姿各异的三十七座桥梁都腾光耀影在塞纳河的金波里荡漾塞纳河上的桥岁末的风带着欧洲的寒凉吹遍榭香丽世界第一!盘点我国56项世界遗产!登上邮票竟有这么多了你知道我国有多少世界级遗产吗?截至2022年6月,中国已有56项世界文化和自然遗产列入世界遗产名录,其中世界文化遗产38项世界文化与自然双重遗产4项世界自然遗产14项,在世界遗产名夏日炎炎哪里去消暑?安岳上七里玩水好地方连续几天阴凉,今天突然爆热,动一动全身冒汗,市民大喊吃不消,多想找个舒适地方凉快凉快。这几天某音上爆红安岳小九寨,其实就是我经常去的上七里,多年来这个地方也没变化也没什么人来玩,没揭秘全球最贵餐厅,12000每位到底是怎样一种震撼体验?大家对于上海的那家紫外线感官餐厅UltravioletbyPaulPairet应当很熟悉了,每位高达6000RMB的价格就算提前3个月预订也往往一位难求。正所谓人外有人,天外有天!清迈很美,汪汪为玛丽娅实现了与大象零距离接触,她为何感动哭了泰国清迈,这座小城安静淡雅,空气干净清新,让人心情无比舒爽的安静。作为东南亚著名的避暑旅游胜地,气候凉爽,树木葱翠,百花争艳。清迈盛产大象,人和大象这种可爱的动物近距离接触的最佳选
澳网王欣瑜内岛萌夏晋级女双第二轮1月19日,中国选手王欣瑜(右)日本选手内岛萌夏在比赛中庆祝得分。新华社发(胡泾辰摄)当日,在澳大利亚墨尔本进行的澳大利亚网球公开赛女双首轮比赛中,中国选手王欣瑜日本选手内岛萌夏组凯泽斯劳滕和莱斯特城奇迹哪一个含金量更高一点?先申明一下,在前两天本人发的拜托!不要再把升班马夺冠称为凯泽斯劳滕奇迹文中,对那些夺冠的升班马没有任何贬低之处,他们能夺冠,本身就说明他们很牛很努力,没有人能随随便便成功!文字表达恭喜火箭队!又一签约达成,为文班亚马加盟铺平道路,申京同受益火箭与黄蜂队的比赛结束之后,休城的年轻球员们会迎来2天的休息时间,对于火箭队来说,近几场比赛的赛程还算比较轻松,与黄蜂队的比赛结束之后,要等到2天之后的22号火箭队才会去客场挑战森东契奇空砍4115独行侠惜败奇才奇才数据(2126)凯尔库兹马30分5篮板布拉德利比尔22分4助攻德尼阿夫迪亚15分10篮板2抢断威尔巴顿8分德朗赖特10分6助攻3抢断丹尼尔加福德9分7篮板蒙特莫里斯13分5助攻最古老的足球赛事,拥有152年历史的英格兰足总杯阿联酋足总杯(英格兰足总杯)顾名思义是一场国内比赛,但这并没有阻止它成为全球关注的赛事,因此自然地,像澳大利亚这样热爱运动的国家会对它产生极大的兴趣。悉尼是足协亚太奖杯巡回赛的其中人生三大悟,悟人道,悟世道,悟天道人的一生,无论是从事什么职业,什么年龄,或者处于什么状态,其实都离不开一个悟字。人活一辈子,就是一个不断悟道的过程。在悟道的路上,谁悟得深,悟得透,谁就活得明白活得潇洒自在。所有的曾经顶峰相见!桃田不再是桃田,石宇奇下手可不留情!国羽三连胜北京时间1月25日,2023年印尼羽毛球大师赛super500继续进行,国羽首日14人出战双打,6胜1负,新星程星陈芳卉高级别巡回赛首秀止步资格赛。本日18人出赛,单打正赛正式开启女乒巴黎奥运布阵,陈梦或身兼三项,孙颖莎继续打辅助2022年中国乒乓球的表现并不够出色,为此刘国梁也是做出了紧急的应对,对教练组进行了24人的重新竞聘,最终马琳王皓和肖战,也是分别获得了升职,国乒最忙碌的事情,还是要对2024年巴2换1!快船报价拉塞尔,筹码诚意十足北京时间1月25日,NBA常规赛正在如火如荼的进行之中,就在上午刚刚结束的洛城内战中,湖人在主场迎战快船!詹姆斯飙进生涯新高的9个三分球,进账全场最高的46分。但湖人仅第三节得分优C罗影响力凸显,沙特开启引援潮,五大联赛要颤抖了自从C罗加盟沙特俱乐部利雅得胜利以后,扩大了理想与现实之间的差距,让球星捞金行为不再令人鄙夷。引进C罗是沙特足球振兴计划的重要部分,后续还将陆续引进更多球星和教练,让联赛的竞技水平3个养生常识都是骗人的,越养越坏,60岁以上的老年人一定要警惕我是家庭菜购。我每天的任务就是进市场逛商场赶大集购物买菜。由于时间一长,会经常碰到很多的老同事老朋友,也会遇到许多的新鲜事,还会结识一些新菜友。大家经常相遇,在一起拉拉呱聊聊天说说