国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

基于K8S部署redis哨兵集群

IT那活兒 / 3560人閱讀
基于K8S部署redis哨兵集群


本 文 主 要 內(nèi) 容



  • 什么是Kubernetes分布式容器管理平臺(tái)

  • PaaS平臺(tái)redis-sentinel集群架構(gòu)簡(jiǎn)介

  • PaaS平臺(tái)部署redis哨兵集群

  • redis-sentinel容器測(cè)試及驗(yàn)證

  • redis-sentienl容器集群之客戶(hù)端程序?qū)崿F(xiàn)




Kubernetes分布式容器管理平臺(tái)



Kubernetes是一個(gè)開(kāi)源的容器集群管理系統(tǒng),可以實(shí)現(xiàn)容器集群的自動(dòng)化部署、自動(dòng)擴(kuò)縮容、維護(hù)更新等功能,是當(dāng)下較熱門(mén)的PSSA集群技術(shù)之一。


Kubernetes的主要核心組件:

●Apiserver:

apiserver提供了資源操作的唯一入口,并提供認(rèn)證、授權(quán)、訪問(wèn)控制、API注冊(cè)和發(fā)現(xiàn)等機(jī)制,封裝了核心對(duì)象的增刪改查操。


●scheduler:

負(fù)責(zé)集群資源的調(diào)度和管理,按照預(yù)定的調(diào)度策略將Pod調(diào)度到相應(yīng)的機(jī)器上。


●controller-manager:

負(fù)責(zé)維護(hù)集群的狀態(tài),比如故障檢測(cè)、自動(dòng)擴(kuò)展、滾動(dòng)更新等。


●kubelet:

運(yùn)行在minion節(jié)點(diǎn),負(fù)責(zé)維護(hù)容器的生命周期,同時(shí)也負(fù)責(zé)Volume(CVI)和網(wǎng)絡(luò)(CNI)的管理,例如啟停容器,監(jiān)控運(yùn)行狀態(tài)等。


●etcd:

etcd是一個(gè)高可用的鍵值存儲(chǔ)系統(tǒng)。


●flannel:

為集群中的所有節(jié)點(diǎn)重新規(guī)劃IP地址的使用規(guī)則。


●pod:

它是Kubernetes資源中最小的調(diào)度單元,也是基礎(chǔ)單元。


Kubernetes架構(gòu)圖:


Kubernetes中創(chuàng)建pod過(guò)程:

  • 用戶(hù)通過(guò) REST API 創(chuàng)建一個(gè) Pod。

  • apiserver 將其寫(xiě)入 Etcd數(shù)據(jù)庫(kù)。

  • scheduluer 檢測(cè)到未綁定 Node 的 Pod,開(kāi)始調(diào)度并更新 Pod 的 Node 綁定。

  • kubelet 檢測(cè)到有新的 Pod 調(diào)度過(guò)來(lái),通過(guò) container runtime 運(yùn)行該 Pod。

  • kubelet 通過(guò) container runtime 獲取取到 Pod 狀態(tài)并更新到 apiserver 中。


使用Kubernetes部署服務(wù)的幾個(gè)好處:

1)服務(wù)自動(dòng)故障遷移;

2)自動(dòng)資源調(diào)度;

3)實(shí)現(xiàn)資源隔離;

4)采用docker容器;

5)RBAC認(rèn)證增加了Kubernetes的安全。


Kubernetes的優(yōu)勢(shì):

 1)可移動(dòng):公有云、私有云、混合云、多態(tài)云;

 2)可擴(kuò)展:模塊化、插件化、可掛載、可組合;

 3)自修復(fù):自動(dòng)部署、自動(dòng)重啟、自動(dòng)復(fù)制、自動(dòng)伸縮。




PaaS平臺(tái)redis-sentinel集群架構(gòu)簡(jiǎn)介



redis哨兵架構(gòu)介紹:

●  Redis Sentinel是一個(gè)分布式系統(tǒng),RedisSentinel為Redis提供高可用性??梢栽跊](méi)有人為干預(yù)的情況下阻止某種類(lèi)型的故障。

●可以在一個(gè)架構(gòu)中運(yùn)行多個(gè)Sentinel,這些進(jìn)程使用gossip協(xié)議來(lái)接收關(guān)于主服務(wù)器是否下線的信息,并使用投票協(xié)議(agreement protocols)來(lái)決定是否執(zhí)行自動(dòng)故障遷移, 以及選擇哪個(gè)從服務(wù)器作為新的主服務(wù)器。


PaaS平臺(tái)redis-sentinel架構(gòu)圖工作流程圖:




PaaS平臺(tái)部署redis哨兵集群過(guò)程



redis-sentinel鏡像準(zhǔn)備,使用dockerfile構(gòu)建如下鏡像:

  • Redis Sentienl鏡像

al_redis_sentinel_v2_4.0.10.tar


  • Redis master鏡像

al_redis-sentinel_master_4.0.10.tar


  • Redis slave鏡像

al_redis_slave_4.0.10.tar


編寫(xiě)redis-sentinel網(wǎng)絡(luò)清單文件:





vim redis_sentinel.yaml

---

apiVersion:extensions/v1beta1

kind:Deployment

metadata:

annotations:

deployment.kubernetes.io/revision: "2"

labels:

service_name: redis-sentinel1

name: redis-sentinel1

namespace: core-610

spec:

replicas: 1

revisionHistoryLimit: 5

selector:

matchLabels:

service_name: redis-sentinel1

strategy:

rollingUpdate:

maxSurge: 0%

maxUnavailable: 100%

type: RollingUpdate

template:

metadata:

annotations:

service.alauda.io/version: "5"

labels:

service_name: redis-sentinel1

namespace: core-610

spec:

affinity:

podAffinity: {}

podAntiAffinity: {}

containers:

- env:

- name: REDIS_SENTINEL_PORT

value: "26378"

- name: MASTER_NAME

value: mymaster

- name: MASTER_HOST

value: 192.168.1.94

- name: MASTER_PORT

value: "6378"

- name: QUONUM

value: "1"

- name: DOWN_AFTER_MILLSECONDS

value: "8000"

- name: NUMSLAVES

value: "1"

- name: FAILOVER_TIMEOUT

value: "60000"

- name: AUTH_PASS

value: xxxxxx  

image:xxx.xxx.xxx.xxx/pro568/al_redis_sentinel:4.0.10

imagePullPolicy: Always

name: redis-sentinel1

resources:

limits:

cpu: "0.5"

memory: 512Mi

requests:

cpu: "0.5"

memory: 512Mi

terminationMessagePath:/dev/termination-log

terminationMessagePolicy: File

volumeMounts:

- mountPath: /data

name: redis-sentinel1

dnsPolicy: ClusterFirst

restartPolicy: Always

schedulerName: default-scheduler

securityContext: {}

terminationGracePeriodSeconds: 10

volumes:

- name: redis-sentinel1

persistentVolumeClaim:

claimName: redis-sentinel1

---

apiVersion:extensions/v1beta1

kind:Deployment

metadata:

annotations:

deployment.kubernetes.io/revision: "1"

labels:

service_name: redis-master1

name: redis-master1

namespace: core-610

spec:

replicas: 1

revisionHistoryLimit: 5

selector:

matchLabels:

service_name: redis-master1

strategy:

rollingUpdate:

maxSurge: 0

maxUnavailable: 1

type: RollingUpdate

template:

metadata:

annotations:

service.alauda.io/version: "1"

labels:

service_name: redis-master1

namespace: core-610

spec:

affinity:

podAffinity: {}

podAntiAffinity: {}

containers:

- env:

- name: REDIS_PORT

value: "6378"

- name: REDIS_PASSWORD

value: xxxxxx

- name: __ALAUDA_FULL_NAME__

- name: __CREATE_TIME__

value: "2020-01-10T15:10:24"

- name: __ALAUDA_APP_NAME__

value: gzky-sentinel

- name: REDIS_MAXMEMORY

value: "536870912"

- name: __ALAUDA_SERVICE_NAME__

value: redis-master1

- name: __ALAUDA_SERVICE_VERSION__

value: "1060"

- name: __ALAUDA_OVER_COMMIT_CPU__

value: "512"

- name: __ALAUDA_OVER_COMMIT_MEM__

value: "512"

- name: MASTER_AUTH

value: xxxxxx

- name: MAXCLIENTS

value: "8000"

- name: __ALAUDA_CONTAINER_SIZE__

value: "0.5"

- name: __ALAUDA_REGION_NAME__

- name: __ALAUDA_SERVICE_ID__

value: redis-master1

image:xxx.xxx.xxx.xxx/pro568/al_redis-sent_master:4.0.10

imagePullPolicy: Always

name: redis-master1

resources:

limits:

cpu: 250m

memory: 512Mi

requests:

cpu: 250m

memory: 512Mi

terminationMessagePath:/dev/termination-log

terminationMessagePolicy: File

volumeMounts:

- mountPath: /data

name: redis-rep1

dnsPolicy: ClusterFirst

hostNetwork: true

restartPolicy: Always

schedulerName: default-scheduler

securityContext: {}

terminationGracePeriodSeconds: 10

volumes:

- name: redis-rep1

persistentVolumeClaim:

claimName: redis-rep1


---

apiVersion:extensions/v1beta1

kind:Deployment

metadata:

annotations:

deployment.kubernetes.io/revision: "2"

labels:

service_name: redis-slave-1

name: redis-slave-1

namespace: core-610

spec:

replicas: 1

revisionHistoryLimit: 5

selector:

matchLabels:

service_name: redis-slave-1

strategy:

rollingUpdate:

maxSurge: 0

maxUnavailable: 1

type: RollingUpdate

template:

metadata:

annotations:

service.alauda.io/version: "2"

labels:

service_name: redis-slave-1

namespace: core-610

spec:

affinity:

podAffinity: {}

podAntiAffinity: {}

containers:

- env:

- name: REDIS_PORT

value: "6378"

- name: REDIS_PASSWORD

value: xxxxxx

- name: __ALAUDA_FULL_NAME__

- name: __CREATE_TIME__

value: "2020-01-10T15:10:24"

- name: __ALAUDA_APP_NAME__

value: gzky-sentinel

- name: REDIS_MAXMEMORY

value: "536870912"

- name: __ALAUDA_SERVICE_NAME__

value: redis-slave-1

- name: __ALAUDA_SERVICE_VERSION__

value: "1057"

- name: __ALAUDA_OVER_COMMIT_CPU__

value: "512"

- name: __ALAUDA_OVER_COMMIT_MEM__

value: "512"

- name: REDIS_SLAVE_OF

value: 192.168.1.94 6378

- name: MASTER_AUTH

value: xxxxxx

- name: MAXCLIENTS

value: "8000"

- name: __ALAUDA_CONTAINER_SIZE__

value: "0.5"

- name: __ALAUDA_REGION_NAME__

- name: __ALAUDA_SERVICE_ID__

value: redis-slave-1

image:xxx.xxx.xxx.xxx/pro568/al_redis_slave:4.0.10

imagePullPolicy: Always

name: redis-slave-1

resources:

limits:

cpu: 250m

memory: 512Mi

requests:

cpu: 250m

memory: 512Mi

terminationMessagePath:/dev/termination-log

terminationMessagePolicy: File

volumeMounts:

- mountPath: /data

name: redis-rep1

dnsPolicy: ClusterFirst

hostNetwork: true

restartPolicy: Always

schedulerName: default-scheduler

securityContext: {}

terminationGracePeriodSeconds: 10

volumes:

- name: redis-rep1

persistentVolumeClaim:

claimName: redis-rep1



在PaaS平臺(tái)使用清單文件部署redis-sentinel容器集群。

執(zhí)行部署命令:

kubectl  apply -fredis_sentinel.yaml


PaaS平臺(tái)查看redis-sentinelPOD運(yùn)行狀態(tài):





redis-sentinel容器測(cè)試及驗(yàn)證



查看sentinel集群節(jié)點(diǎn)信息:

redis-cli -h 192.168.1.92 -p 26379

192.168.1.92:26379>sentinel master mymaster    #查看主節(jié)點(diǎn)信息


192.168.1.92:26379>sentinelmaster slaves     #查看從節(jié)點(diǎn)信息


客戶(hù)端寫(xiě)入測(cè)試數(shù)據(jù):

#客戶(hù)端連接master節(jié)點(diǎn),寫(xiě)入一條數(shù)據(jù)

[root@node3~]# redis-cli -h 192.168.1.94 -p 6378

192.168.1.94:6378>set foo bar

OK

192.168.1.94:6379>get foo

"bar"

#然后客戶(hù)端再連接任意slave節(jié)點(diǎn),通過(guò)get獲取上面的那條數(shù)據(jù)


[root@node1~]# redis-cli -h 192.168.1.95 -p 6379

192.168.1.95:6378>get foo

"bar"


master節(jié)點(diǎn)可以寫(xiě)入和讀取;而slave節(jié)點(diǎn)默認(rèn)只能讀取而不能寫(xiě)入。以此實(shí)現(xiàn)主從復(fù)制、讀寫(xiě)分離。




redis-sentienl容器集群之客戶(hù)端程序?qū)崿F(xiàn)



客戶(hù)端實(shí)現(xiàn)原理:


redis哨兵模式客戶(hù)端程序?qū)崿F(xiàn)過(guò)程描述:

  • 連接所有的Sentinel的節(jié)點(diǎn),返回可一個(gè)可用的sentinel結(jié)合列表。


  • 向可用的sentinel節(jié)點(diǎn)發(fā)送get-master-addr-by-name masterName請(qǐng)求;獲取redis節(jié)點(diǎn)(master/salve)和信息。


  • 返回信息中會(huì)驗(yàn)證節(jié)點(diǎn)是否是master角色。


  • 如果sentinel檢測(cè)到master節(jié)點(diǎn)變化,會(huì)failover。


  • 實(shí)現(xiàn)讀寫(xiě)分離;讀走Slave,寫(xiě)走M(jìn)aster。


以上是今天帶來(lái)的基于K8S的redis哨兵模式的掃盲和實(shí)驗(yàn)案例,后續(xù)會(huì)繼續(xù)給大家?guī)?lái)具體使用中碰到的問(wèn)題,趟過(guò)的坑。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/130197.html

相關(guān)文章

  • UCloud 基于Kubernetes Operator的服務(wù)化實(shí)踐

    摘要:宋體是面向內(nèi)部基于打造的容器服務(wù)平臺(tái),旨在提升內(nèi)部研發(fā)效率,幫助改善規(guī)范研發(fā)流程。宋體作為容器編排框架,可以減輕配置部署管理和監(jiān)控大規(guī)模容器應(yīng)用的負(fù)擔(dān)。宋體核心原理宋體解釋不得不提中兩個(gè)最具價(jià)值的理念聲明式和控制器模式。KUN(Keep UCloud Nimble)是面向 UCloud 內(nèi)部、基于 Kubernetes 打造的容器服務(wù)平臺(tái),旨在提升內(nèi)部研發(fā)效率,幫助改善、規(guī)范研發(fā)流程。在 K...

    zorpan 評(píng)論0 收藏0
  • Linux_基于Docker搭建Redis集群

    摘要:時(shí)間年月日星期二說(shuō)明基于,開(kāi)始本教程前,請(qǐng)確保您的系統(tǒng)已安裝。為了保證集群的高可用,下面開(kāi)始配置哨兵模式。 時(shí)間:2017年07月11日星期二 說(shuō)明:基于Ubuntu16.04-64bit,開(kāi)始本教程前,請(qǐng)確保您的Linux系統(tǒng)已安裝Docker。 步驟一:Redis鏡像安裝 1、下載Redis鏡像 鏡像中心 推薦使用網(wǎng)易蜂巢的鏡像中心 地址:https://c.163.com/hub...

    hoohack 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<