यह मॉड्यूल क्या करता है #
Memcached एक टेक्स्ट फ़ाइल और मुट्ठी भर फ़्लैग से कॉन्फ़िगर होता है: कितनी RAM दें, कितने थ्रेड, कितने कनेक्शन। सही आंकड़े इंस्टेंस के आकार पर निर्भर करते हैं, और ग़लती महँगी पड़ती है — या तो कैश कम पड़ता है या सिस्टम की ज़रूरी RAM खा जाते हैं।
memcached मॉड्यूल यह सब और सेवा के आसपास की हर चीज़ संभालता है: मशीन की असली RAM से ट्यूनिंग गिनता है, SASL क्रेडेंशियल संभालता है (इस इमेज में अनिवार्य), पहले बूट पर बनने वाला TLS प्रमाणपत्र बनाए रखता है —वह कभी AMI में नहीं पकाया जाता— और सेवा के आँकड़ों के साथ सीधी स्थिति देता है।
क्रेडेंशियल पढ़ने या कॉन्फ़िगरेशन बदलने वाले कमांड को root चाहिए (sudo लगाएँ)। optimize से सावधान: नए मान लागू करने पर सेवा पुनः चालू होती है, और पुनः चालू होने से कैश खाली हो जाता है। यदि आप स्वयं पुनः चालू करना चाहें तो --no-restart लगाएँ।
त्वरित गाइड #
जो करना है वह चुनिए। हर नुस्ख़े में कमांड पहले से लिखा है — बस उसे कॉपी करें और कॉपी करें दबाएँ।
1
सेवा की स्थिति देखें
एक नज़र में देखें कि कैश ठीक है और कौन-सी ट्यूनिंग लागू है।
ubuntu उपयोगकर्ता से SSH द्वारा अपने इंस्टेंस से जुड़ें।
स्थिति पूछें: दिखेगा किन पोर्ट पर सुन रहा है, TLS और SASL चालू हैं या नहीं, लागू ट्यूनिंग और सीधे आँकड़े (उपयोग में मेमोरी, आइटम, हिट और मिस):
$ sudo imaxe memcached statusडैशबोर्ड या स्क्रिप्ट के लिए चाहिए? --json जोड़ें:
$ sudo imaxe memcached status --jsonhits बढ़ता रहे और evictions कम रहे तो कैश का आकार ठीक है। निष्कासन बढ़ जाएँ तो कैश का आकार समायोजित करें पर जाएँ।2
कैश से जुड़ें
उपयोगकर्ता, पासवर्ड और पोर्ट लें ताकि अपना ऐप वहाँ जोड़ सकें।
इस इमेज में SASL अनिवार्य है: गुमनाम पहुँच नहीं है। इस इंस्टेंस के क्रेडेंशियल माँगें (पासवर्ड छिपा हुआ आता है):
$ sudo imaxe memcached credentialsजब सचमुच कॉपी करना हो, उसे खुले रूप में दिखाएँ:
$ sudo imaxe memcached credentials --show-password11211 TLS पर चलता है; 11212 सादा टेक्स्ट है और केवल loopback पर सुनता है, सिस्टम के अपने औज़ारों के लिए। 11211 को इंटरनेट पर न खोलें: अपने VPC के CIDR के लिए खोलें।3
कैश का आकार समायोजित करें
मशीन के असली आकार के हिसाब से मेमोरी, थ्रेड और कनेक्शन दोबारा गिनें।
पहले देखें कि क्या मान निकलेंगे, कुछ बदले बिना:
$ sudo imaxe memcached optimize --showठीक लगें तो लागू करें। सेवा पुनः चालू होगी और कैश खाली हो जाएगा:
$ sudo imaxe memcached optimizeअधिक कैश और सिस्टम के लिए कम गुंजाइश चाहिए? RAM का प्रतिशत बढ़ाएँ:
$ sudo imaxe memcached optimize --memory-pct 75--dry-run से वह कॉन्फ़िगरेशन ब्लॉक भी दिखता है जो लिखा जाता। और --no-restart से बिना पुनः चालू किए लागू होता है: नए मान अगले बूट पर असर करेंगे।4
SASL उपयोगकर्ता बनाएँ
अपने ऐप्लिकेशन के क्रेडेंशियल बनाएँ, बदलें या हटाएँ।
SASL डेटाबेस में मौजूद उपयोगकर्ता सूचीबद्ध करें:
$ sudo imaxe memcached users listहर ऐप्लिकेशन के लिए एक बनाएँ, यादृच्छिक पासवर्ड के साथ:
$ sudo imaxe memcached users add app1कोई ख़ास पासवर्ड चाहिए? उसे मानक इनपुट से दें ताकि वह ps या शेल इतिहास में न आए:
$ sudo imaxe memcached users add app1 --stdinimaxe memcached users rotate <उपयोगकर्ता>। नाम न दें तो उत्पाद के उपयोगकर्ता का बदलता है।5
TLS प्रमाणपत्र जाँचें
समाप्ति तिथि जाँचें और इंस्टेंस का प्रमाणपत्र नवीनीकृत करें।
प्रमाणपत्र हर इंस्टेंस के पहले बूट पर बनता है, इसलिए मशीनों के बीच कभी साझा नहीं होता। जो चल रहा है उसे देखें:
$ sudo imaxe memcached tls showजब चाहें नवीनीकृत करें, भले ही मौजूदा अब भी वैध हो:
$ sudo imaxe memcached tls renew --forcetls show छापता है।क्रेडेंशियल और प्रमाणपत्र हर बूट पर instance-setup बनाता है, जिसे systemd बुलाता है। अगर कोई कमांड 65 कोड लौटाए तो उस इंस्टेंस ने अपना पहला बूट पूरा नहीं किया: कुछ भी बदलने से पहले sudo systemctl status memcached देखें।
सारांश #
imaxe memcached <उपकमांड> [flags]लगभग हर उपकमांड को root चाहिए (sudo लगाएँ) क्योंकि वे SASL डेटाबेस, प्रमाणपत्र या सेवा की कॉन्फ़िगरेशन पढ़ते हैं। मशीन-पठनीय आउटपुट के लिए status, credentials, users list या tls show के साथ --json लगाएँ।
उपकमांड #
| उपकमांड | क्या करता है | प्रासंगिक फ़्लैग |
|---|---|---|
| optimize | इस इंस्टेंस के लिए सर्वोत्तम कैश आकार, थ्रेड और कनेक्शन गिनकर लागू करता है। | --memory-pct --dry-run --show --no-restart |
| status | सेवा की स्थिति: श्रोता, TLS, SASL, लागू ट्यूनिंग और सीधे आँकड़े। | --json |
| credentials | इस इंस्टेंस के SASL क्रेडेंशियल और जुड़ने का तरीका दिखाता है। | --json --show-password |
| users | SASL उपयोगकर्ता संभालता है: list, add, rotate और delete। | --password --stdin --json |
| set-password | प्रोडक्ट के SASL उपयोगकर्ता का पासवर्ड बदलता है। users rotate का शॉर्टकट। | --random --stdin |
| open-port | होस्ट फ़ायरवॉल (ufw) में memcached पोर्ट खोलता है। | --cidr --json |
| close-port | होस्ट फ़ायरवॉल में पोर्ट बंद करता है और मौजूदा नियम हटाता है। | --json |
| tls | इस इंस्टेंस का TLS प्रमाणपत्र: show और renew। | --force --json |
| instance-setup | सेवा चालू होने से पहले इंस्टेंस तैयार करता है। हर बूट पर systemd इसे बुलाता है। | --bake |
आर्ग्युमेंट और फ़्लैग #
| फ़्लैग | प्रकार | डिफ़ॉल्ट | विवरण |
|---|---|---|---|
| --memory-pct | int | 60 | optimize में: उपयोग-योग्य RAM का वह प्रतिशत जो कैश को मिलता है। |
| --reserve-mem-mb | int | 512 | optimize में: MB में वह RAM जिसे छुआ नहीं जाता, सिस्टम और बाक़ी सेवाओं के लिए सुरक्षित। |
| --threads | int | 0 | optimize में: कार्यकारी थ्रेड। 0 इन्हें CPU संख्या से निकालता है। |
| --max-connections | int | 0 | optimize में: एक साथ कनेक्शन। 0 इन्हें कैश आकार से निकालता है। |
| --dry-run | bool | false | optimize में: कुछ नहीं लिखता; मान और लागू होने वाला कॉन्फ़िगरेशन ब्लॉक दिखाता है। |
| --show | bool | false | optimize में: केवल गिने गए मान छापता है। |
| --no-restart | bool | false | optimize में: कॉन्फ़िगरेशन लिखता है पर सेवा पुनः चालू नहीं करता। पुनः चालू होने से कैश खाली होता है। |
| --password | string | — | users add/rotate में: निर्दिष्ट पासवर्ड। न दें तो यादृच्छिक बनता है। |
| --stdin | bool | false | users add/rotate में: पासवर्ड मानक इनपुट से पढ़ता है, ताकि वह ps या इतिहास में न दिखे। |
| --show-password | bool | false | credentials में: पासवर्ड खुले रूप में छापता है। डिफ़ॉल्ट रूप से छिपा रहता है। |
| --force | bool | false | tls renew में: मौजूदा प्रमाणपत्र वैध और इसी इंस्टेंस का होने पर भी दोबारा बनाता है। |
| --random | bool | false | set-password में: मज़बूत पासवर्ड बनाकर उसे एक ही बार दिखाता है। |
| --cidr | string | — | open-port में: नियम को उसी स्रोत तक सीमित करता है। इसके बिना कोई भी स्रोत अनुमत है। |
| --json | bool | false | परिणाम को संरचित JSON के रूप में stdout पर देता है। |
फ़ाइलें और पथ #
| पथ | सामग्री |
|---|---|
| /etc/imaxe/memcached.yml | मॉड्यूल की कॉन्फ़िगरेशन: सेवा, पथ, और optimize, TLS तथा SASL के डिफ़ॉल्ट मान। |
| /etc/memcached.conf | memcached की कॉन्फ़िगरेशन। इसे optimize लिखता है: हाथ से न बदलें। |
| /etc/systemd/system/memcached.service.d/ | systemd drop-in, जिसमें मॉड्यूल द्वारा लागू आरंभिक पैरामीटर होते हैं। |
| /etc/memcached/tls/ | इस इंस्टेंस का प्रमाणपत्र और निजी कुंजी, पहले बूट पर बने। |
| /etc/sasl2/memcached-sasldb2 | SASL डेटाबेस, उपयोगकर्ताओं और उनके पासवर्ड के साथ। |
memcached.yml का उदाहरण:
service: memcached
port: 11211
optimize:
memory_pct: 60
memory_min_mb: 64
reserve_mem_mb: 512
threads: 0
max_connections: 0
tls:
enabled: true
days: 3650
plain_local_port: 11212
sasl:
enabled: true
user: memcachedएग्ज़िट कोड और लॉग #
हर चलन एक कोड लौटाता है जिसे आप echo $? से देख सकते हैं — स्क्रिप्ट में जोड़ने के लिए उपयोगी:
काम करते समय सेवा को सीधे देखें:
$ sudo systemctl status memcached
$ sudo journalctl -u memcached -fसमस्या-निवारण #
| लक्षण | संभावित कारण | समाधान |
|---|---|---|
| NOSECRET आता है (कोड 65) | इंस्टेंस ने पहला बूट पूरा नहीं किया, और क्रेडेंशियल तभी बनता है। | sudo systemctl status memcached जाँचें और दोबारा कोशिश करें। |
| NOMEMCACHED आता है (कोड 64) | मॉड्यूल स्थापित है पर होस्ट पर memcached नहीं है। | आप उत्पाद वाली इमेज पर नहीं हैं: memcached स्थापित करें या सही AMI इस्तेमाल करें। |
status में बहुत सारे evictions | जो रखा जा रहा है उसके लिए कैश छोटा है: जगह बनाने को आइटम निकाले जाते हैं। | optimize --memory-pct से प्रतिशत बढ़ाएँ या अधिक RAM वाले इंस्टेंस पर जाएँ। |
| कैश अचानक खाली दिखता है | सेवा पुनः चालू हुई है, और memcached डिस्क पर कुछ नहीं रखता। | optimize के बाद सामान्य है। बिना पुनः चालू किए लागू करने को --no-restart लगाएँ। |
| क्लाइंट प्रमाणपत्र अस्वीकार करता है | यह स्व-हस्ताक्षरित है और हर इंस्टेंस का अपना। | अपने क्लाइंट में उस पर भरोसा करें या tls show से फ़िंगरप्रिंट जाँचें। |
Memcached मॉड्यूल में अटक गए?
हमें «imaxe <module> status --json» का आउटपुट भेजें और हम आपको जल्दी जवाब देंगे।