प्रौद्योगिकी साझेदारी

[K8s संस्थापन redis] pvc विना k8s वातावरणे redis sentinel क्लस्टरं संस्थापयन्तु

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

आमुख

k8s क्लस्टरमध्ये स्टेटफुल् सेवानां निर्माणं तुल्यकालिकरूपेण कष्टप्रदम् अस्ति संग्रहण। अयं लेखः विद्यमानवातावरणस्य आधारेण redis समूहस्य निर्माणार्थं तथा च redis सेवायाः उच्च-उपलब्धतां प्राप्तुं आँकडा-स्थायित्वं उच्च-उपलब्धतां च प्राप्तुं होस्ट्-मार्ग-सम्बद्धतायाः भारित-बहुप्रतियाः उपयोगं करिष्यति

1. परिस्थितयः पर्यावरणविवरणं च : १.

K8s संस्करणं k8s-1.29.4, वातावरणं दूरसञ्चारसङ्गणककक्षे निर्मितं भवति, यत्र षट् कार्यकर्ता नोड् सन्ति used.वर्तमानसमये redis-operator मूलतः साझाभण्डारणस्य उपयोगं करोति ।

2. आवश्यकताविवरणम् : १.

  • redis sentinel cluster इत्यस्य निर्माणं कुर्वन्तु ।
  • उच्च उपलब्धता: यदि k8s नोड् म्रियते अथवा pod पुनः आरभ्यते तर्हि उपयोगः प्रभावितः न भविष्यति ।
  • उच्चप्रदर्शनम् : उच्चप्रदर्शनयुक्तं IO प्राप्तुं स्थानीयडिस्कं पठन्तु लिखन्तु यदि साझाभण्डारणस्य संसाधनं हार्डवेयरप्रदर्शनं च पर्याप्तं नास्ति तर्हि IO कार्यक्षमतायाः अटङ्कः भविष्यति ।
  • दत्तांशसुरक्षा : स्विचओवर अथवा नोड् विफलतायाः अनन्तरं दत्तांशः यथासम्भवं पूर्णः भवितुमर्हति
  • सरलं स्थापना, सुलभं प्रबन्धनं, अनुरक्षणं च

3. कार्यान्वयनसिद्धान्ताः निर्देशाः च

    1. एकं स्वामी, द्वौ दासौ, त्रीणि च प्रहरणप्रक्रियाभिः सह, redis sentinel cluster निर्मायताम् ।
    1. रेडिस् त्रीणि स्वतन्त्राणि स्टेट्फुल्सेट्-इत्येतत् एकं प्रतिलिपिं च निर्मातुं उपयुङ्क्ते, यदा तु सेन्टिनेल-प्रक्रिया एकं परिनियोजनं त्रीणि प्रतिलिपानि च निर्मातुं उपयुङ्क्ते ।
    1. redis प्रक्रिया प्राथमिकं तथा बैकअप नोड् कार्यान्वितुं नोड् आत्मीयतायाः भारस्य च उपयोगं करोति ।
    1. रेडिस् सेवाशिरःरहितसेवायाः उपयोगं करोति, सेन्टिनेल् च सेवासेवायाः उपयोगं करोति ।
    1. द्वयोः दासयोः समूहस्य कृते तथा च भारस्य अनुसारं सक्रियस्य बैकअपस्य च कृते षट् नोड्स् इत्यस्य लेबलनाम योजना करणीयम् ।

नोट्: अस्मिन् समाधानेन निर्मिताः redis केवलं k8s क्लस्टरस्य अन्तः एव उपयोक्तुं शक्यन्ते, तथा च LoadBlancer अथवा NodePort इत्यस्य माध्यमेन क्लस्टरस्य बहिः उपयोगाय प्रदातुं न शक्यन्ते, यतः Sentinel मध्ये निर्वाचितस्य मुख्यस्य redis इत्यस्य IP pod इत्यस्य IP भवति यदा a स्विचः भवति, तत् निर्धारयितुं न शक्यते यत् मुख्यं redis कः अस्ति।

4. विस्तृतपदार्थाः

4.1.नोड् लेबल् योजना
नोड नामभूमिकानामपत्र
k8s-कार्यकर्ता-120-81निमन्त्रकःभण्डारण-चयनकर्ता=नोड-एक-मास्टर
k8s-कार्यकर्ता-120-82निमन्त्रकःभण्डारण-चयनकर्ता=नोड-ख-मास्टर
k8s-कार्यकर्ता-120-83निमन्त्रकःभण्डारण-चयनकर्ता=नोड-ग-मास्टर
k8s-कार्यकर्ता-120-84सज्जी करोतुभण्डारण-चयनकर्ता=नोड-एक-स्ल्वे
k8s-कार्यकर्ता-120-85सज्जी करोतुभण्डारण-चयनकर्ता=नोड-एक-स्ल्वे
k8s-कार्यकर्ता-120-86सज्जी करोतुभण्डारण-चयनकर्ता=नोड-एक-स्ल्वे

नोट्: अत्र भूमिकाविभागः निर्दिशति: यतः redis इत्यस्य एकः मास्टरः द्वौ च स्लेवौ स्तः, प्रत्येकं redis pod त्रयः मास्टर नोड् इत्यत्र पतति यदा मास्टर नोड् विफलः भवति उदाहरणार्थं: नाम defaultapp- The अस्ति redis-a-0 इत्यस्य pod पूर्वनिर्धारितरूपेण storage-selector=node-a-master इति लेबलयुक्ते नोड् इत्यत्र पतति यदा नोड् विफलः भवति तदा storage-selector=node-a-slve इति लेबलयुक्ते नोड् इत्यस्य भारस्य आधारेण तस्य मेलनं भविष्यति . नोडस्य उपरि ।

4.2.configmap विन्यासः रचयन्तु

विन्यासे चत्वारि सञ्चिकाः सन्ति तथा च वितरणविवरणं यथा भवति ।
sentinel.conf: Sentinel विन्याससञ्चिका पूर्वनिर्धारितरूपेण, प्रथमः statefulset मुख्य redis इत्यस्य रूपेण उपयुज्यते, तथा च विन्यासः: resolve-hostnames होस्ट्-नामानि समर्थयति ।
redis-master.conf: मुख्यं redis विन्याससञ्चिका, स्मृतिः 256M, विन्यासपोर्ट् 6379, विन्यासगुप्तशब्दः redis#123, भण्डारणमार्गः च /data/redis इति
redis.conf: redis विन्याससञ्चिकातः, स्मृतिं 256M मध्ये विन्यस्य, पोर्ट् 6380 मध्ये विन्यस्य, गुप्तशब्दं विन्यस्य: redis#123, भण्डारणमार्गः /data/redis-2 अस्ति, तथा च तः समन्वयनीयं दत्तांशं विन्यस्यताम् मुख्य रेडिस।
run.sh: मुख्यं कार्यं भिन्नानि विन्याससञ्चिकाः चालयितुं भूमिकां निर्धारयितुं, होस्ट्-नाम्ना आधारेण निर्देशिकां निर्मातुं, ततः भण्डारणनिर्देशिकायाः ​​सह मृदुतया सम्बद्धं कर्तुं च अस्ति । इदं सोपानं मुख्यतया प्रत्येकस्य सेवायाः redis दत्तांशं स्वकीयनिर्देशिकायां संग्रहीतुं भवति नूतनं redis रचयति समये नोड् इत्यत्र निर्देशिकाविग्रहं न जनयिष्यति ।

apiVersion: v1
kind: ConfigMap
metadata:
  name: defaultapp-redis-config
  namespace: default-ns
  labels:
    appname: default-app
    app: defaultapp-redis-config
data:
  sentinel.conf: |
    sentinel monitor mymaster defaultapp-redis-a-0.defaultapp-redis-a.default-ns.svc.cluster.local 6379 2
    sentinel auth-pass mymaster redis#123
    sentinel down-after-milliseconds mymaster 30000
    sentinel parallel-syncs mymaster 1
    sentinel failover-timeout mymaster 180000
    SENTINEL resolve-hostnames yes
    SENTINEL announce-hostnames yes
  redis-master.conf: |
    maxmemory 256mb
    requirepass redis#123
    save 3600 1 300 10 60 100
    dir /data/redis
    masterauth redis#123
  redis.conf: |
    maxmemory 256mb
    requirepass redis#123
    save 3600 1 300 10 60 100
    dir /data/redis
    replicaof defaultapp-redis-a-0.defaultapp-redis-a.default-ns.svc.cluster.local 6379
    masterauth redis#123
  run.sh: |
    #!/bin/sh
    role=$1
    hname=$(hostname)
    if [ $role == "master" ];then
        echo "run redis master"
        [ -d /home/redis/$hname ] || mkdir -p /home/redis/$hname
        [ -d /data ] || mkdir /data
        ln -s /home/redis/$hname /data/redis
        redis-server /etc/redis/redis-master.conf
    elif [ $role == "sentinel" ];then
        echo "run redis sentinel"
        mkdir -p /etc/redis
        cp /home/redis/sentinel.conf /etc/redis/
        redis-sentinel /etc/redis/sentinel.conf
    else
        echo "run redis slave"
        [ -d /home/redis/$hname ] || mkdir -p /home/redis/$hname
        [ -d /data ] || mkdir /data
        ln -s /home/redis/$hname /data/redis
        redis-server /etc/redis/redis.conf
    fi