Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

स्टैक की रचना - MySQL कंटेनरों के डॉकर परिनियोजन को सरल बनाएं

डॉकर 1.13 कंपोज़-फाइल सपोर्ट नामक एक लंबे समय से प्रतीक्षित सुविधा का परिचय देता है, जो हमें अपने कंटेनरों को एक लंबी कमांड के बजाय एक अच्छी सरल कॉन्फ़िगरेशन फ़ाइल के साथ परिभाषित करने की अनुमति देता है। यदि आप हमारे पिछले “MySQL on Docker” ब्लॉग पोस्ट पर एक नज़र डालते हैं, तो हमने कंटेनरों और सेवाओं को चलाने के लिए कई लंबी कमांड लाइनों का उपयोग किया है। कंपोज़-फाइल का उपयोग करके, कंटेनरों को आसानी से परिनियोजन के लिए निर्दिष्ट किया जाता है। यह मानवीय त्रुटि के जोखिम को कम करता है क्योंकि आपको कई मापदंडों के साथ लंबे कमांड को याद रखने की आवश्यकता नहीं होती है।

इस ब्लॉग पोस्ट में, हम आपको दिखाएंगे कि MySQL परिनियोजन के आसपास सरल उदाहरणों का उपयोग करके कंपोज़-फ़ाइल का उपयोग कैसे करें। हम मानते हैं कि आपके पास 3 भौतिक मेजबानों पर डॉकर इंजन 1.13 स्थापित है और झुंड मोड सभी मेजबानों पर कॉन्फ़िगर किया गया है।

कंपोज़-फ़ाइल का परिचय

कंपोज़-फाइल में, आप YAML प्रारूप में सब कुछ निर्दिष्ट करते हैं, न कि उन सभी तर्कों को याद रखने की कोशिश करने के लिए जिन्हें हमें डॉकर कमांड को पास करना है। आप यहां सेवाओं, नेटवर्क और वॉल्यूम को परिभाषित कर सकते हैं। परिभाषा को डॉकर द्वारा उठाया जाएगा और यह "डॉकर रन|नेटवर्क|वॉल्यूम" कमांड को कमांड-लाइन पैरामीटर पास करने जैसा है।

एक परिचय के रूप में, हम एक साधारण स्टैंडअलोन MySQL कंटेनर को तैनात करने जा रहे हैं। कंपोज़ फ़ाइल लिखना शुरू करने से पहले, आपको सबसे पहले रन कमांड को जानना होगा। डॉकर ब्लॉग श्रृंखला पर हमारे पहले MySQL से लिया गया, आइए निम्नलिखित "डॉकर रन" कमांड लिखें:

$ docker run --detach \
--name=test-mysql \
--publish 6603:3306 \
--env="MYSQL_ROOT_PASSWORD=mypassword" \
-v /storage/docker/mysql-datadir:/var/lib/mysql \
mysql

डॉकर-कंपोज़ कमांड वर्तमान निर्देशिका में "docker-compose.yml" नामक एक डिफ़ॉल्ट फ़ाइल की तलाश करेगा। तो, आइए पहले आवश्यक निर्देशिकाएं पहले से बनाएं:

$ mkdir -p ~/compose-files/mysql/single
$ mkdir -p /storage/docker/mysql-datadir
$ cd ~/compose-files/mysql/single

YAML में, यहाँ लिखा जाना चाहिए:

version: '2'

services:
  mysql:
    image: mysql
    container_name: test-mysql
    ports:
      - 6603:3306
    environment:
      MYSQL_ROOT_PASSWORD: "mypassword"
    volumes:
      - /storage/docker/mysql-datadir:/var/lib/mysql

उपरोक्त सामग्री को "~/compose-files/mysql/single/docker-compose.yml" में सहेजें। सुनिश्चित करें कि आप वर्तमान निर्देशिका ~/compose-files/mysql/single में हैं, फिर निम्न आदेश चलाकर इसे सक्रिय करें:

$ docker-compose up -d
WARNING: The Docker Engine you're using is running in swarm mode.

Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node.

To deploy your application across the swarm, use `docker stack deploy`.

Creating test-mysql

सत्यापित करें कि कंटेनर अलग मोड में चल रहा है या नहीं:

[[email protected] single]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
379d5c15ef44        mysql               "docker-entrypoint..."   8 minutes ago       Up 8 minutes        0.0.0.0:6603->3306/tcp   test-mysql

बधाई हो! अब हमारे पास एक MySQL कंटेनर है जो केवल एक कमांड के साथ चल रहा है।

एक स्टैक परिनियोजित करना

कंपोज़-फाइल चीजों को सरल बनाती है, यह हमें एक स्पष्ट दृष्टिकोण प्रदान करती है कि बुनियादी ढांचा कैसा दिखना चाहिए। आइए एक कंटेनर स्टैक बनाएं जिसमें एक समर्पित नेटवर्क के तहत एक MySQL इंस्टेंस का उपयोग करके ड्रूपल पर चलने वाली वेबसाइट शामिल है और उन्हें एक साथ लिंक करें।

ऊपर के समान, आइए इस स्टैक को बनाने के लिए कमांड लाइन संस्करण को सही क्रम में देखें:

$ docker volume create mysql_data
$ docker network create drupal_mysql_net --driver=bridge
$ docker run -d --name=mysql-drupal --restart=always -v mysql_data:/var/lib/mysql --net=drupal_mysql_net -e MYSQL_ROOT_PASSWORD="mypassword" -e MYSQL_DATABASE="drupal" mysql
$ docker run -d --name=drupal -p 8080:80 --restart=always -v /var/www/html/modules -v /var/www/html/profiles -v /var/www/html/themes -v /var/www/html/sites --link mysql:mysql --net=drupal_mysql_net drupal

रचना शुरू करने के लिए, आइए पहले अपने नए स्टैक के लिए एक निर्देशिका बनाएं:

$ mkdir -p ~/compose-files/drupal-mysql
$ cd ~/compose-files/drupal-mysql

फिर, नीचे दिए अनुसार docker-compose.yml की लिखित सामग्री बनाएं:

version: '2'

services:
  mysql:
    image: mysql
    container_name: mysql-drupal
    environment:
      MYSQL_ROOT_PASSWORD: "mypassword"
      MYSQL_DATABASE: "drupal"
    volumes:
      - mysql_data:/var/lib/mysql
    restart: always
    networks:
      - drupal_mysql_net

  drupal:
    depends_on:
      - mysql
    image: drupal
    container_name: drupal
    ports:
      - 8080:80
    volumes:
      - /var/www/html/modules
      - /var/www/html/profiles
      - /var/www/html/themes
      - /var/www/html/sites
    links:
      - mysql:mysql
    restart: always
    networks:
      - drupal_mysql_net

volumes:
  mysql_data:

networks:
  drupal_mysql_net:
    driver: bridge

उन्हें आग लगा दो:

$ docker-compose up -d
..
Creating network "drupalmysql_drupal_mysql_net" with driver "bridge"
Creating volume "drupalmysql_mysql_data" with default driver
Pulling drupal (drupal:latest)...
..
Creating mysql-drupal
Creating drupal

डॉकर निम्नानुसार परिनियोजन करेगा:

  1. नेटवर्क बनाएं
  2. वॉल्यूम बनाएं
  3. चित्र खींचो
  4. mysql-drupal बनाएं (क्योंकि कंटेनर "ड्रूपल" इस पर निर्भर है)
  5. ड्रूपल कंटेनर बनाएं

इस बिंदु पर, हमारी वास्तुकला को इस प्रकार दर्शाया जा सकता है:

फिर हम स्थापना विज़ार्ड पृष्ठ में MySQL होस्ट के रूप में 'mysql' निर्दिष्ट कर सकते हैं क्योंकि दोनों कंटेनर एक साथ जुड़े हुए हैं। इतना ही। उन्हें फाड़ने के लिए, बस उसी निर्देशिका के अंतर्गत निम्न आदेश चलाएँ:

$ docker-compose down

संबंधित कंटेनरों को समाप्त कर दिया जाएगा और तदनुसार हटा दिया जाएगा। ध्यान दें कि docker-compose कमांड व्यक्तिगत भौतिक होस्ट को Docker चलाने के लिए बाध्य है। झुंड में कई भौतिक मेजबानों पर चलने के लिए, इसे "डॉकर स्टैक" कमांड का उपयोग करके अलग तरह से व्यवहार करने की आवश्यकता है। हम इसे अगले भाग में समझाएंगे।

डॉकर पर कईनाईन माइएसक्यूएल:अपने डेटाबेस को कंटेनरीकृत कैसे करेंडॉकर कंटेनर वर्चुअलाइजेशन के शीर्ष पर एक MySQL सेवा चलाने पर विचार करते समय आपको जो कुछ समझने की आवश्यकता है उसे खोजें। श्वेत पत्र डाउनलोड करें

झुंड में ढेर की रचना करना

सबसे पहले, सुनिश्चित करें कि डॉकर इंजन v1.13 पर चल रहा है और स्वार्म मोड सक्षम और तैयार स्थिति में है:

$ docker node ls
ID                           HOSTNAME       STATUS  AVAILABILITY  MANAGER STATUS
8n8t3r4fvm8u01yhli9522xi9 *  docker1.local  Ready   Active        Reachable
o1dfbbnmhn1qayjry32bpl2by    docker2.local  Ready   Active        Reachable
tng5r9ax0ve855pih1110amv8    docker3.local  Ready   Active        Leader

डॉकर झुंड मोड के लिए स्टैक सुविधा का उपयोग करने के लिए, हमें डॉकर कंपोज़ संस्करण 3 प्रारूप का उपयोग करना होगा। हम MySQL बैकएंड के रूप में 3-नोड गैलेरा सेटअप के अलावा, उपरोक्त के समान एक सेटअप को तैनात करने जा रहे हैं। हमने इस ब्लॉग पोस्ट में पहले ही विवरण में समझाया है।

सबसे पहले, हमारे नए स्टैक के लिए एक निर्देशिका बनाएं:

$ mkdir -p ~/compose-files/drupal-galera
$ cd ~/compose-files/drupal-galera

फिर निम्नलिखित पंक्तियों को “docker-compose.yml” में जोड़ें:

version: '3'

services:

  galera:
    deploy:
      replicas: 3
      restart_policy:
        condition: on-failure
        delay: 30s
        max_attempts: 3
        window: 60s
      update_config:
        parallelism: 1
        delay: 10s
        max_failure_ratio: 0.3
    image: severalnines/pxc56
    environment:
      MYSQL_ROOT_PASSWORD: "mypassword"
      CLUSTER_NAME: "my_galera"
      XTRABACKUP_PASSWORD: "mypassword"
      DISCOVERY_SERVICE: '192.168.55.111:2379,192.168.55.112:2379,192.168.55.207:2379'
      MYSQL_DATABASE: 'drupal'
    networks:
      - galera_net

  drupal:
    depends_on:
      - galera
    deploy:
      replicas: 1
    image: drupal
    ports:
      - 8080:80
    volumes:
      - drupal_modules:/var/www/html/modules
      - drupal_profile:/var/www/html/profiles
      - drupal_theme:/var/www/html/themes
      - drupal_sites:/var/www/html/sites
    networks:
      - galera_net

volumes:
  drupal_modules:
  drupal_profile:
  drupal_theme:
  drupal_sites:

networks:
  galera_net:
    driver: overlay

ध्यान दें कि हमारे द्वारा उपयोग की जाने वाली गैलेरा छवि (कई / पीएक्ससी 56) के लिए प्रत्येक डॉकर भौतिक होस्ट पर एक रनिंग वगैरह क्लस्टर स्थापित करने की आवश्यकता होती है। कृपया इस ब्लॉग पोस्ट को आवश्यक चरणों पर देखें।

हमारी कंपोज़-फ़ाइल का एक महत्वपूर्ण भाग पुनरारंभ_पॉलिसी अनुभाग के अंतर्गत max_attempts पैरामीटर है। विफलता के मामले में हमें पुनरारंभ की संख्या पर एक कठिन सीमा निर्दिष्ट करनी होगी। यह परिनियोजन प्रक्रिया को सुरक्षित बना देगा, क्योंकि डिफ़ॉल्ट रूप से, झुंड अनुसूचक कंटेनरों को पुनरारंभ करने के प्रयास में कभी हार नहीं मानेगा। यदि ऐसा होता है, तो प्रोसेस लूप भौतिक होस्ट के डिस्क स्थान को अनुपयोगी कंटेनरों से भर देगा जब शेड्यूलर कंटेनरों को वांछित स्थिति में नहीं ला सकता है। MySQL जैसी स्टेटफुल सेवाओं को हैंडल करते समय यह एक सामान्य तरीका है। उन्हें असंगत स्थिति में चलाने के बजाय उन्हें पूरी तरह से नीचे लाना बेहतर है।

उन सभी को शुरू करने के लिए, बस उसी निर्देशिका में निम्न आदेश निष्पादित करें जहां docker-compose.yml रहता है:

$ docker stack deploy --compose-file=docker-compose.yml my_drupal

सत्यापित करें कि स्टैक 2 सेवाओं (ड्रूपल और गैलेरा) के साथ बनाया गया है:

$ docker stack ls
NAME       SERVICES
my_drupal  2

हम बनाए गए स्टैक में वर्तमान कार्यों को भी सूचीबद्ध कर सकते हैं। परिणाम "docker service ps my_drupal_galera" और "docker service ps my_drupal_drupal" कमांड का एक संयुक्त संस्करण है:

$ docker stack ps my_drupal
ID            NAME                IMAGE                      NODE           DESIRED STATE  CURRENT STATE           ERROR  PORTS
609jj9ji6rxt  my_drupal_galera.1  severalnines/pxc56:latest  docker3.local  Running        Running 7 minutes ago
z8mcqzf29lbq  my_drupal_drupal.1  drupal:latest              docker1.local  Running        Running 24 minutes ago
skblp9mfbbzi  my_drupal_galera.2  severalnines/pxc56:latest  docker1.local  Running        Running 10 minutes ago
cidn9kb0d62u  my_drupal_galera.3  severalnines/pxc56:latest  docker2.local  Running        Running 7 minutes ago

एक बार जब हम रनिंग के रूप में करंट स्टेट प्राप्त कर लेते हैं, तो हम पोर्ट 8080 पर किसी भी डॉकर होस्ट आईपी एड्रेस या होस्टनाम से जुड़कर ड्रुपल इंस्टॉलेशन शुरू कर सकते हैं, क्योंकि इस मामले में हमने डॉक 3 का इस्तेमाल किया था (यद्यपि ड्रुपल कंटेनर डॉकटर 1 पर तैनात है), http ://192.168.55.113:8080/। स्थापना के साथ आगे बढ़ें और 'गैलेरा' को MySQL होस्ट और 'ड्रूपल' को डेटाबेस नाम के रूप में निर्दिष्ट करें (जैसा कि MYSQL_DATABASE पर्यावरण चर के तहत कंपोज़-फाइल में परिभाषित किया गया है):

इतना ही। कंपोज़-फाइल का उपयोग करके स्टैक परिनियोजन को सरल बनाया गया था। इस समय, हमारी वास्तुकला कुछ इस तरह दिख रही है:

अंत में, स्टैक को हटाने के लिए, बस निम्न कमांड चलाएँ:

$ docker stack rm my_drupal
Removing service my_drupal_galera
Removing service my_drupal_drupal
Removing network my_drupal_galera_net

कंपोज़-फाइल का उपयोग करने से आपका समय बच सकता है और लंबी कमांड लाइनों के साथ काम करने की तुलना में मानवीय त्रुटि के जोखिम को कम किया जा सकता है। मल्टी-कंटेनर डॉकर एप्लिकेशन के साथ काम करने से पहले मास्टर करने के लिए यह एक आदर्श टूल है, कई परिनियोजन वातावरण (जैसे देव, परीक्षण, स्टेजिंग, प्री-प्रोड, प्रोड) से निपटने और MySQL गैलेरा क्लस्टर की तरह बहुत अधिक जटिल सेवाओं को संभालने से पहले। हैप्पी कंटेनराइज़िंग

!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल दो टेबल्स से आंतरिक जुड़ने और सीमा के साथ चयन

  2. MySQL कार्यक्षेत्र में संबंध कैसे बनाएं

  3. डेटाबेस सेटअप करें और AWS Redshift और Mysql में केवल-पढ़ने के लिए उपयोगकर्ता बनाएं

  4. MySQL:#126 - तालिका के लिए गलत कुंजी फ़ाइल

  5. GET_FORMAT () उदाहरण – MySQL