डेटाबेस के लिए डॉकर का उपयोग नहीं किया जाना चाहिए क्या कारण हैं?


25

मैं डॉकर के लिए उपयोग के मामलों के बारे में एक मित्र के साथ चर्चा कर रहा हूं । टीम में एक व्यक्ति डॉकटर का उपयोग हर चीज के लिए करना चाहता है - जैसे एक प्रकार का यूनिवर्सल यूनिक्स प्रक्रिया आवरण। दूसरे का मानना ​​है कि Docker का उपयोग केवल Microservices और AWS लैंबडा स्टाइल ऐप जैसे स्टेटलेस एप्लिकेशन के लिए किया जाना चाहिए ।

हमने दोनों के लिए अवधारणाओं का इंजीनियर इंजीनियर बनाया है। हमारे डॉकस्टर क्लस्टर में हमारे पास एक साझा ड्राइव है जो डॉकर होस्ट के माउंट होने पर माउंट हो जाता है, और यदि एक कंटेनर में एक डेटाबेस माउंट किया जाता है, तो यह केवल साझा ड्राइव के लिए एक वॉल्यूम माउंट करता है।

इसके विपरीत सबूत दिखाए जाने के बावजूद मेरा दोस्त अभी भी अपनी स्थिति पर कायम है। (उनका यह भी तर्क है कि स्टैक में जटिलता को जोड़कर डॉकर अनावश्यक जोखिम जोड़ता है ।)

मैं उनकी बात को सुनने और समझने की कोशिश कर रहा हूं, दोनों सहानुभूति के साथ काम करते हैं, लेकिन उसके साथ बेहतर कारण भी। (हम सभी काफी अच्छी तरह से मिलते हैं - इसलिए यह इन-जेस्ट और गंभीर चर्चा का मिश्रण है)।

सवाल के पीछे तरह का है: क्या डेटाबेस मवेशी हैं ? यह टिप्पणी बताती है कि आपके डेटाबेस के लिए एक अच्छा स्वचालित बैकअप और पुनर्प्राप्ति रणनीति एक पशु सर्वर से अप्रभेद्य है।

मेरा सवाल है: क्या कारण हैं कि डॉकर को डेटाबेस के लिए उपयोग नहीं किया जाना चाहिए?

संपादित करें: लोगों ने मुझे अपनी शब्दावली स्पष्ट करने के लिए कहा है। मैं मान रहा था कि डेटाबेस एप्लिकेशन कंटेनर में था, और भंडारण वॉल्यूम में था। मेरा मतलब था कि RDBMS कंटेनर में है, और डेटाबेस स्टोरेज वॉल्यूम में है।

कुछ टिप्पणीकारों ने सुझाव दिया है कि डेटाबेस के साथ काम करने वाले वॉल्यूम ड्राइवर बहुत अच्छी तरह से नहीं लिखते हैं। (या प्रभाव के लिए कुछ है)। क्या आप उस पर विस्तार कर सकते हैं?



इस ब्लॉग के लेखक के अनुसार कंटेनरों के अंदर डेटाबेस नहीं चलाना चाहिए क्योंकि क्लाउड प्रदाता प्रबंधित डेटाबेस प्रदान करते हैं।
030

जवाबों:


20

जब लोग डॉकर में एक डेटाबेस चलाने के बारे में बात करते हैं, तो वे डेटा को कंटेनर में संग्रहीत करने के लिए नहीं होते हैं; वे डीबी सॉफ्टवेयर के साथ एक डॉकटर छवि होने के बारे में बात कर रहे हैं, और डेटा को वॉल्यूम के रूप में माउंट कर रहे हैं (एक बांध की मात्रा, कंटेनर की मात्रा नहीं)।

Docker में वॉल्यूम एक आवश्यक हिस्सा हैं, और कुछ ऐसा नहीं है जो परतदार हो या सिर्फ उससे निपटा हो। डॉकर सिर्फ स्टेटलेस (माइक्रो) सेवाओं के लिए नहीं बना है।

मेरी इच्छा के अनुसार, मुझे डॉकटर में डेटाबेस न चलाने का कोई तकनीकी कारण नहीं मिल रहा है , इसलिए दुर्भाग्य से मैं तर्क के दूसरे पक्ष को चुनूँगा और इसलिए शायद आपको वह उत्तर न मिले जो आप खोज रहे हैं।

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

  • एक कंटेनर में स्वयं DB सॉफ्टवेयर की पैकेजिंग आपको सामान्य लाभ प्रदान करती है - हर जगह एक ही संस्करण होना, निर्भरता / साझा पुस्तकालय मुद्दों से बचना, डेवलपर लैपटॉप पर या जहाँ भी आपको आवश्यकता होती है, ठीक उसी DB को स्पिन करने में सक्षम होना।
  • यह कहीं भी चलने के लिए एक स्नैप हो रहा है; अद्यतन तुच्छ है, और इसी तरह। सभी डॉकटर लाभ लागू होते हैं। डॉकरहब पर एक ओरेकल छवि है जो आपको एक या तीन मिनट (और साथ ही दूसरों के लिए) निश्चित रूप से एक काम कर रहे डीबी को स्पिन करने की अनुमति देती है।
  • लोगों ने प्रदर्शन परीक्षण किया और वॉल्यूम और नंगे धातु के बीच कोई I / O अंतर नहीं पाया ( https://www.percona.com/blog/2016/02/11/measuring-docker-io-overhead/ , https: // stackoverflow .com / questions / 21889053 / what-is-the-runtime-performance-cost-of-a-docker-container )।
  • हुड के तहत, यह डॉकटर की तरह किसी भी तरह सभी I / O को स्वीकार नहीं करता है। यह सिर्फ मानक लिनक्स उपकरणों के साथ रचनात्मक हो जाता है (इस मामले में mounts बाँधता है, आंतरिक कर्नेल तालिकाओं का प्रबंधन करता है जो डॉक-फू को संभव बनाता है)।
  • जाहिर है कि इसका मतलब यह नहीं है कि आप डीबी के दो उदाहरण चला सकते हैं और बस उन्हें एक ही फाइल पर काम करना है, लेकिन कोई भी इसे लागू नहीं कर रहा है। डॉकर आपको वॉल्यूम के साथ-साथ स्वचालित और जादुई रूप से रेस-फ्री एक्सेस नहीं देता है, और कभी भी ऐसा करने का दिखावा नहीं करता है। बाकी लाभ अभी भी लागू होते हैं। यदि आपका डीबी स्वयं इस तरह के संघर्षों का पता नहीं लगाता है, तो आप उस छवि को बेहतर तरीके से एक सीएमडी स्क्रिप्ट की आपूर्ति करते हैं जो वॉल्यूम के पहले से ही उपयोग में होने पर एक दूसरे कंटेनर को स्पिन करने से मना कर देता है।
  • आपको कंटेनर को बंद करने / बंद करने में थोड़ा अधिक सावधान रहना होगा (जैसे आप बस एक नंगे धातु डीबी सर्वर को बंद नहीं करेंगे), लेकिन यह काफी प्रबंधनीय होना चाहिए।

अब, परिस्थितियों के आधार पर, ऐसा न करने के नरम कारण हो सकते हैं:

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

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


एक अन्य कारक यह है कि अगर विकल्प एक प्रबंधित DB सेवा का उपयोग कर रहा है बनाम अपनी मेजबानी।
avi

3

मैंने इसके बारे में गहराई से लिखा है लेकिन यहाँ सारांश है:

  • विभाजित मस्तिष्क को रोकने (एक से अधिक मास्टर नोड का चुनाव) को हल करने की आवश्यकता है। ऐसा करने में विफलता भयावह हो सकती है

  • डेटाबेस को एक उदाहरण पर बंद करने में सक्षम करने के लिए कोई उत्पादन तैयार साझा भंडारण समाधान नहीं हैं और आपके सभी डेटा को खोए बिना दूसरे पर लाया जाता है।


धन्यवाद - यह लगभग एक उचित जवाब है। हालाँकि आपके ब्लॉग पोस्ट में - आप एक चेतावनी जोड़ते हैं जो इस धारणा को मान्य करता है कि मैंने ऊपर लिखा है। "नीचे दिए गए मुद्दे केवल साझा डेटाबेस में एक अलग नोड पर स्वचालित रूप से इसे शुरू करने की क्षमता या क्षमता के साथ अपने डेटाबेस को चलाने से संबंधित नहीं हैं।" Ie - आपकी ब्लॉग पोस्ट कहती है कि मैंने जो स्थिति ऊपर लिखी है वह वैध है।
बाज़ी

आपके प्रश्न से ऐसा लगता है कि आप डीबी शुरू करने और वॉल्यूम को बढ़ाने के लिए किसी प्रकार के ऑर्केस्ट्रेशन का उपयोग कर रहे हैं। लेकिन फिर आपको ऑर्केस्ट्रेशन के साथ एक संभावित स्थिरता समस्या है, जिसके बारे में मैं बात करता हूं। जब आप बिना ऑर्केस्ट्रेशन का उपयोग करते हैं, तो मेरी कैविटी स्पष्ट रूप से होती है।
रोबो

क्या आपने flynn.io देखा है? वे कथित रूप से उत्पादन के लिए तैयार हैं और एक कोरूम राज्य मशीन (जॉयंट मैनेट पर आधारित) का उपयोग करके विभाजित-मस्तिष्क परिदृश्यों से बचते हैं।
एलिक्स एक्सल

इन बिंदुओं में से कोई भी कैसेंड्रा या अन्य वितरित डेटाबेस पर लागू नहीं होता है, लेकिन मुझे अभी भी नहीं लगता कि इसे कंटेनर में चलाना एक अच्छा विचार है।
dres

0

जब आप कहते हैं कि डेटा को डॉकटर कंटेनर में रखा गया है, तो क्या यह कहना अधिक सही नहीं होगा कि "डेटाबेस" को डॉकटर कंटेनर में रखा गया है? यदि आप अपने डेटा को कंटेनर के बाहर रख रहे हैं, तो आप अपने डेटाबेस में कंटेनर को नहीं रखने की "सही" बात कर रहे हैं।

निश्चित रूप से, एक कंटेनर में DBMS डालते हुए शहर में जाएं, यह एक ऐसा डेटा प्रबंधित करता है जिसे आप बाहर स्टोर करते हैं, व्यक्तिगत रूप से मुझे लगता है कि यह सिर्फ अच्छा डिज़ाइन है क्योंकि यह तर्क और डेटा के बीच एक स्वच्छ अलगाव रखता है। एक बार जब आप अपने डेटा को एक कंटेनर में डालते हैं, तो आप संभावित रूप से आग से खेल रहे होते हैं।

हालांकि कंटेनर स्टोरेज ड्राइवरों ने एक लंबा रास्ता तय किया है, मैं व्यक्तिगत रूप से अभी तक गोता लगाने और अपने डेटा को एक कंटेनर में उलझ जाने के लिए तैयार नहीं हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.