అందరికి వందనాలు! నా కోర్సు పనిలో భాగంగా, నేను దేశీయ క్లౌడ్ ప్లాట్ఫారమ్ యొక్క సామర్థ్యాలను పరిశోధించాను . ప్లాట్ఫారమ్ ఆచరణాత్మక సమస్యలను పరిష్కరించడానికి వివిధ సేవలను అందిస్తుంది. అయితే, కొన్నిసార్లు మీరు ఈ సేవల ఆధారంగా చాలా విస్తృతమైన మౌలిక సదుపాయాలతో మీ స్వంత క్లౌడ్ అప్లికేషన్ను సెటప్ చేయాలి. ఈ వ్యాసంలో నేను అటువంటి అప్లికేషన్ని అమలు చేయడంలో నా అనుభవాన్ని పంచుకోవాలనుకుంటున్నాను.

మీరు ఏమి స్వీకరించాలనుకుంటున్నారు?
— ఏదైనా సిస్టమ్ల యొక్క విశ్లేషణాత్మక సమస్యలను లేదా పర్యవేక్షణ సమస్యలను పరిష్కరించడానికి శక్తివంతమైన సాధనం. దాని ప్రాథమిక కాన్ఫిగరేషన్లో, ఇది గ్రాఫానా వెబ్ సర్వర్తో కూడిన వర్చువల్ మెషీన్, అలాగే డేటాబేస్ (క్లిక్హౌస్, ఇన్ఫ్లక్స్డిబి, మొదలైనవి) డేటాసెట్పై ఆధారపడి ఉంటుంది.
వెబ్ సర్వర్తో వర్చువల్ మెషీన్ను ప్రారంభించిన తర్వాత, మీరు దాని హోస్ట్కి వెళ్లి అందమైన UIని పొందవచ్చు, తదుపరి పని కోసం డేటాబేస్లను మూలాధారాలుగా పేర్కొనండి, డాష్బోర్డ్లు మరియు గ్రాఫ్లను సృష్టించండి.

ప్రాథమిక సంస్కరణలో ఒక ముఖ్యమైన లోపం ఉంది - ఇది తప్పు-తట్టుకోలేనిది కాదు. అంటే, అప్లికేషన్ యొక్క మొత్తం కార్యాచరణ ఒక వర్చువల్ మిషన్ యొక్క సాధ్యతపై ఆధారపడి ఉంటుంది. ఇది నిరాకరించినట్లయితే లేదా 10 మంది వ్యక్తులు ఒకే సమయంలో UIని తెరిస్తే, అప్పుడు సమస్యలు తలెత్తుతాయి.
వాటిని సులభంగా పరిష్కరించవచ్చు: మీరు కేవలం... వెబ్ సర్వర్తో అనేక సారూప్య వర్చువల్ మిషన్లను అమలు చేసి, వాటిని L3 బ్యాలెన్సర్ కింద ఉంచాలి. కానీ ఇక్కడ ప్రతిదీ అంత స్పష్టంగా లేదు. గ్రాఫానా వినియోగదారు సెట్టింగ్లను (డేటాబేస్లు, డాష్బోర్డ్లు, గ్రాఫ్లు మొదలైనవి) నేరుగా దాని వర్చువల్ మెషీన్ యొక్క డిస్క్లో నిల్వ చేస్తుంది. ఈ విధంగా, మేము UIలో కొన్ని సెట్టింగ్లను మార్చినట్లయితే, ఈ మార్పులు బ్యాలెన్సర్ మాకు పంపిన వర్చువల్ మెషీన్లో మాత్రమే ప్రతిబింబిస్తాయి. ఇది మా అప్లికేషన్ కోసం అస్థిరమైన సెట్టింగ్లకు దారి తీస్తుంది, ఇది లాంచ్ మరియు ఉపయోగంలో సమస్యలను కలిగిస్తుంది.
ఇక్కడ మరొక డేటాబేస్ రెస్క్యూకి వస్తుంది, ఉదాహరణకు, MySQL లేదా దాని సమానమైనది. ఈ "స్పేర్" డేటాబేస్లో యూజర్ సెట్టింగ్లను స్టోర్ చేయాలని మేము గ్రాఫానాకు చెబుతాము. ఆ తర్వాత, ప్రతి మెషీన్లో ఒకసారి ఈ డేటాబేస్కు మార్గాన్ని పేర్కొనడం సరిపోతుంది మరియు అన్ని ఇతర వినియోగదారు సెట్టింగ్లను ఏదైనా వర్చువల్ మిషన్లలో సవరించండి; అవి ఇతరులకు విస్తరించబడతాయి.
తుది అప్లికేషన్ అవస్థాపన యొక్క రేఖాచిత్రం ఇక్కడ ఉంది:

మన చేతులతో ఎత్తడం నేర్చుకుందాం
MySQL మరియు క్లిక్హౌస్
ఒక బటన్ క్లిక్తో అటువంటి అప్లికేషన్ను అమలు చేయడానికి ముందు, దానిలోని ప్రతి భాగాలను ఎలా నిర్వహించాలో మరియు వాటిని ఒకదానితో ఒకటి ఎలా అనుసంధానించాలో నేర్చుకోవడం అవసరం.
ఇక్కడ Yandex.Cloud మాకు సహాయం చేస్తుంది, ఇది L3 balancers, ClickHouse మరియు MySQLని నిర్వహించే సేవలుగా అందిస్తుంది. వినియోగదారు పారామితులను మాత్రమే పేర్కొనాలి మరియు ప్లాట్ఫారమ్ ప్రతిదీ పని క్రమంలోకి తీసుకువచ్చే వరకు వేచి ఉండాలి.
నేను నమోదు చేసుకున్నాను, క్లౌడ్ మరియు చెల్లింపు ఖాతాను సృష్టించాను. ఆ తర్వాత, నేను క్లౌడ్కి వెళ్లి, కనీస సెట్టింగ్లతో MySQL మరియు ClickHouse క్లస్టర్లను సెటప్ చేసాను. వాళ్ళు యాక్టివ్ అయ్యే వరకు నేను వెయిట్ చేసాను.


మీరు ప్రతి క్లస్టర్లో ఒక డేటాబేస్ని సృష్టించాలని మరియు లాగిన్ మరియు పాస్వర్డ్ని ఉపయోగించి దానికి యాక్సెస్ను కాన్ఫిగర్ చేయాలని కూడా గుర్తుంచుకోవాలి. నేను ఇక్కడ వివరాల్లోకి వెళ్లను - ఇంటర్ఫేస్లో ప్రతిదీ చాలా స్పష్టంగా ఉంది.
ఈ డేటాబేస్లలో చాలా హోస్ట్లు ఉన్నాయి, ఇవి వాటి తప్పు సహనాన్ని నిర్ధారిస్తాయి. అయినప్పటికీ, గ్రాఫానాకు అది పనిచేసే ప్రతి డేటాబేస్కు ఖచ్చితంగా ఒక హోస్ట్ అవసరం. సుదీర్ఘ పఠనం మేఘాలు నన్ను ఒక నిర్ణయానికి తీసుకొచ్చాయి. ఇది జాతుల హోస్ట్ అని మారుతుంది c-<cluster_id>.rw.mdb.yandexcloud.net సంబంధిత IDతో క్లస్టర్ యొక్క ప్రస్తుత క్రియాశీల మాస్టర్ హోస్ట్కు మ్యాప్ చేయబడింది. గ్రాఫానికి ఇస్తాం.
వెబ్ సర్వర్
ఇప్పుడు వెబ్ సర్వర్ వంతు వచ్చింది. ఒక సాధారణ వర్చువల్ మెషీన్ను ఏర్పాటు చేద్దాం. Linux మరియు మేము దానిపై గ్రాఫానాను మా చేతులతో ఏర్పాటు చేస్తాము.


ssh ద్వారా కనెక్ట్ చేసి, అవసరమైన ప్యాకేజీలను ఇన్స్టాల్ చేద్దాం.
sudo apt-get install -y apt-transport-https software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/enterprise/deb stable main"
sudo apt-get update
sudo apt-get install -y grafana-enterprise
ఆ తర్వాత, systemctl క్రింద Grafanaని రన్ చేద్దాం మరియు ClickHouseతో పని చేయడానికి ప్లగ్ఇన్ను ఇన్స్టాల్ చేద్దాం (అవును, ఇది ప్రాథమిక ప్యాకేజీలో సరఫరా చేయబడదు).
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasourceఅంతే, ఆ తర్వాత ఒక సాధారణ ఆదేశంతో
sudo service grafana-server startమేము వెబ్ సర్వర్ను ప్రారంభిస్తాము. ఇప్పుడు మీరు బ్రౌజర్లో వర్చువల్ మెషీన్ యొక్క బాహ్య IP చిరునామాను నమోదు చేయవచ్చు, పోర్ట్ 3000ని పేర్కొనండి మరియు అందమైన గ్రాఫానా UIని చూడవచ్చు.

కానీ తొందరపడకండి, గ్రాఫానాను సెటప్ చేయడానికి ముందు, మీరు తప్పనిసరిగా MySQLకి సెట్టింగ్లను నిల్వ చేయడానికి మార్గం చెప్పాలని గుర్తుంచుకోవాలి.
గ్రాఫానా వెబ్ సర్వర్ యొక్క మొత్తం కాన్ఫిగరేషన్ ఫైల్లో ఉంది /etc/grafana/grafana.ini. అవసరమైన లైన్ ఇలా కనిపిస్తుంది:
;url =మేము హోస్ట్ని MySQL క్లస్టర్కి సెట్ చేసాము. అదే ఫైల్ పైన ఉన్న చిత్రంలో గ్రాఫానాను యాక్సెస్ చేయడానికి లాగిన్ మరియు పాస్వర్డ్ను కలిగి ఉంది, ఇవి డిఫాల్ట్గా రెండూ సమానంగా ఉంటాయి admin.
మీరు sed ఆదేశాలను ఉపయోగించవచ్చు:
sudo sed -i "s#.*;url =.*#url = mysql://${MYSQL_USERNAME}:${MYSQL_PASSWORD}@${MYSQL_CLUSTER_URI}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_user =.*#admin_user = ${GRAFANA_USERNAME}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_password =.*#admin_password = ${GRAFANA_PASSWORD}#" /etc/grafana/grafana.ini
ఇది వెబ్ సర్వర్ను పునఃప్రారంభించే సమయం!
sudo service grafana-server restartఇప్పుడు గ్రాఫానా UIలో మనం క్లిక్హౌస్ని డేటాసోర్స్గా పేర్కొంటాము.
నేను కింది సెట్టింగ్లతో వర్కింగ్ కాన్ఫిగరేషన్ను సాధించగలిగాను:

నేను URLగా పేర్కొన్నాను https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443
అన్నీ! మేము CH మరియు MySQLకి కనెక్ట్ చేయబడిన వెబ్ సర్వర్తో పనిచేసే ఒక వర్చువల్ మెషీన్ని కలిగి ఉన్నాము. మీరు ఇప్పటికే డేటాసెట్ని ClickHouseకి అప్లోడ్ చేయవచ్చు మరియు డాష్బోర్డ్లను రూపొందించవచ్చు. అయినప్పటికీ, మేము ఇంకా మా లక్ష్యాన్ని చేరుకోలేదు మరియు పూర్తి స్థాయి మౌలిక సదుపాయాలను అమలు చేయలేదు.
ప్యాకర్
Yandex.Cloud ఇప్పటికే ఉన్న వర్చువల్ మెషీన్ యొక్క డిస్క్ ఇమేజ్ని సృష్టించడానికి మిమ్మల్ని అనుమతిస్తుంది మరియు దాని ఆధారంగా - ఒకదానికొకటి ఒకేలా ఉండే యంత్రాల సంఖ్య. ఇది ఖచ్చితంగా మేము ఉపయోగిస్తాము. చిత్రాన్ని సౌకర్యవంతంగా సమీకరించటానికి, సాధనాన్ని తీసుకోండి HashiCorp నుండి. ఇది ఇమేజ్ని అసెంబ్లింగ్ చేయడానికి సూచనలతో కూడిన json ఫైల్ను ఇన్పుట్గా తీసుకుంటుంది.
మా json ఫైల్ రెండు బ్లాక్లను కలిగి ఉంటుంది: బిల్డర్లు మరియు ప్రొవిజనర్లు. మొదటి బ్లాక్ చిత్రం యొక్క పారామితులను ఒక ఎంటిటీగా వివరిస్తుంది మరియు రెండవ బ్లాక్ అవసరమైన కంటెంట్తో నింపడానికి సూచనలను వివరిస్తుంది.
బిల్డర్ల
{
"builders": [
{
"type": "yandex",
"endpoint": "{{user `endpoint`}}",
"folder_id": "<folder_id>",
"subnet_id": "{{user `subnet_id`}}",
"zone": "{{user `zone`}}",
"labels": {},
"use_ipv4_nat": true,
"use_internal_ip": false,
"service_account_key_file": "<service_account_key_file>",
"image_name": "grafana-{{timestamp}}",
"image_family": "grafana",
"image_labels": {},
"image_description": "GRAFANA",
"source_image_family": "ubuntu-1804-lts",
"disk_size_gb": 3,
"disk_type": "network-hdd",
"ssh_username": "ubuntu"
}
],
...
}ఈ టెంప్లేట్లో, మీరు చిత్రాన్ని సృష్టించాలనుకునే క్లౌడ్లోని విభాగం యొక్క ఐడెంటిఫైయర్ను సెట్ చేయాలి, అలాగే ఈ విభాగంలో గతంలో సృష్టించిన సేవా ఖాతా నుండి కీలతో ఫైల్కు మార్గం. మీరు సంబంధిత విభాగంలో ఫైల్ రూపంలో సేవా ఖాతాలు మరియు కీలను సృష్టించడం గురించి మరింత చదవవచ్చు .
ప్లాట్ఫారమ్ ఆధారంగా డిస్క్ ఇమేజ్ నిర్మించబడుతుందని ఈ కాన్ఫిగరేషన్ చెబుతోంది ubuntu-1804-lts, చిత్ర కుటుంబంలో తగిన వినియోగదారు విభాగంలో ఉంచబడింది GRAFANA పేరుతో grafana-{{timestamp}}.
ప్రొవిజనర్లు
ఇప్పుడు కాన్ఫిగరేషన్ యొక్క మరింత ఆసక్తికరమైన భాగం వస్తుంది. ఇది వర్చువల్ మెషీన్లో దాని స్థితిని డిస్క్ ఇమేజ్గా స్తంభింపజేయడానికి ముందు నిర్వహించాల్సిన చర్యల క్రమాన్ని వివరిస్తుంది.
{
...,
"provisioners": [
{
"type": "shell",
"pause_before": "5s",
"scripts": [
"prepare-ctg.sh"
]
},
{
"type": "file",
"source": "setup.sh",
"destination": "/opt/grafana/setup.sh"
},
{
"type": "shell",
"execute_command": "sudo {{ .Vars }} bash '{{ .Path }}'",
"pause_before": "5s",
"scripts": [
"install-packages.sh",
"grafana-setup.sh",
"run-setup-at-reboot.sh"
]
}
]
}ఇక్కడ అన్ని చర్యలు 3 దశలుగా విభజించబడ్డాయి. మొదటి దశలో, సహాయక డైరెక్టరీని సృష్టించే సాధారణ స్క్రిప్ట్ అమలు చేయబడుతుంది.
సిద్ధం-ctg.sh:
#!/bin/bash
sudo mkdir -p /opt/grafana
sudo chown -R ubuntu:ubuntu /opt/grafanaతదుపరి దశలో, మేము ఈ డైరెక్టరీలో స్క్రిప్ట్ను ఉంచుతాము, ఇది వర్చువల్ మెషీన్ను ప్రారంభించిన వెంటనే ప్రారంభించాల్సిన అవసరం ఉంది. ఈ స్క్రిప్ట్ గ్రాఫానా కాన్ఫిగరేషన్లో నమోదు చేయవలసిన వినియోగదారు వేరియబుల్లను ఉంచుతుంది మరియు వెబ్ సర్వర్ను పునఃప్రారంభిస్తుంది.
setup.sh:
#!/bin/bash
CLUSTER_ID="<cluster_id>"
USERNAME="<username>"
PASSWORD="<password>"
sudo sed -i "s#.*;url =.*#url = mysql://${USERNAME}:${PASSWORD}@c-${CLUSTER_ID}.rw.mdb.yandexcloud.net#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_user =.*#admin_user = ${USERNAME}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_password =.*#admin_password = ${PASSWORD}#" /etc/grafana/grafana.ini
sudo service grafana-server restartదీని తర్వాత చేయడానికి 3 విషయాలు మిగిలి ఉన్నాయి:
1) ప్యాకేజీలను ఇన్స్టాల్ చేయండి
2) systemctl క్రింద Grafanaని అమలు చేయండి మరియు ClickHouse ప్లగ్ఇన్ను ఇన్స్టాల్ చేయండి
3) వర్చువల్ మెషీన్ని ఆన్ చేసిన వెంటనే setup.sh స్క్రిప్ట్ను లాంచ్ క్యూలో ఉంచండి.
install-packages.sh:
#!/bin/bash
sudo systemd-run --property='After=apt-daily.service apt-daily-upgrade.service' --wait /bin/true
sudo apt-get install -y apt-transport-https
sudo apt-get install -y software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/enterprise/deb stable main"
sudo apt-get update
sudo apt-get install -y grafana-enterprise grafana-setup.sh:
#!/bin/bash
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasourcerun-setup-at-reboot.sh:
#!/bin/bash
chmod +x /opt/grafana/setup.sh
cat > /etc/cron.d/first-boot <<EOF
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
@reboot root /bin/bash /opt/grafana/setup.sh > /var/log/yc-setup.log 2>&1
EOF
chmod +x /etc/cron.d/first-boot;ఇప్పుడు మిగిలి ఉన్నది ప్యాకర్ని అమలు చేయడం మరియు పేర్కొన్న విభాగంలో ఉంచబడిన అవుట్పుట్ చిత్రాన్ని పొందడం. వర్చువల్ మిషన్ను సృష్టించేటప్పుడు, మీరు దానిని బూట్ డిస్క్గా ఎంచుకోవచ్చు మరియు ప్రారంభించిన తర్వాత మీరు రెడీమేడ్ గ్రాఫానా వెబ్ సర్వర్ని అందుకుంటారు.


ఉదాహరణ సమూహం మరియు బ్యాలెన్సర్
ఒకేలాంటి అనేక గ్రాఫానా వెబ్ సర్వర్లను సృష్టించడానికి అనుమతించే డిస్క్ ఇమేజ్ని కలిగి ఉన్న తర్వాత, మనం ఒక ఉదాహరణ సమూహాన్ని సృష్టించవచ్చు. Yandex.Cloud ప్లాట్ఫారమ్లో, ఈ పదం అదే లక్షణాలను కలిగి ఉన్న వర్చువల్ మిషన్ల యూనియన్ను సూచిస్తుంది. ఉదాహరణ సమూహాన్ని సృష్టించేటప్పుడు, ఈ సమూహంలోని అన్ని యంత్రాల నమూనా కాన్ఫిగర్ చేయబడుతుంది, ఆపై సమూహం యొక్క లక్షణాలు (ఉదాహరణకు, సక్రియ యంత్రాల కనీస మరియు గరిష్ట సంఖ్య). ప్రస్తుత సంఖ్య ఈ ప్రమాణాలకు అనుగుణంగా లేకుంటే, ఉదాహరణ సమూహం కూడా అనవసరమైన మెషీన్లను తీసివేస్తుంది లేదా దాని స్వంత చిత్రంలో కొత్త వాటిని సృష్టిస్తుంది.
మా పనిలో భాగంగా, మేము గతంలో సృష్టించిన డిస్క్ ఇమేజ్ నుండి రూపొందించబడే వెబ్ సర్వర్ల ఉదాహరణ సమూహాన్ని సృష్టిస్తాము.


నిజంగా విశేషమైనది ఏమిటంటే చివరి ఉదాహరణ సమూహ సెటప్. లోడ్ బ్యాలెన్సర్తో ఏకీకరణలో ఉన్న లక్ష్య సమూహం రెండు బటన్లను క్లిక్ చేయడం ద్వారా ఈ సమూహం యొక్క వర్చువల్ మెషీన్ల పైన L3 బ్యాలెన్సర్ను కాన్ఫిగర్ చేయడానికి మీకు సహాయం చేస్తుంది.

బాలన్సర్ను సెటప్ చేసినప్పుడు, నేను రెండు ముఖ్యమైన అంశాలను అమలు చేసాను:
- నేను బ్యాలెన్సర్ని పోర్ట్ 80లో యూజర్ ట్రాఫిక్ని అంగీకరించేలా చేసాను మరియు దానిని గ్రాఫానా నివసించే చోటే వర్చువల్ మెషీన్లలోని పోర్ట్ 3000కి దారి మళ్లించాను.
- నేను పోర్ట్ 3000కి పింగ్ చేయడం ద్వారా యంత్రాల సాధ్యతను తనిఖీ చేయడాన్ని సెటప్ చేసాను.

చిన్న సారాంశం
చివరగా, మేము కోరుకున్న అప్లికేషన్ ఇన్ఫ్రాస్ట్రక్చర్ను మాన్యువల్గా అమలు చేయగలిగాము మరియు ఇప్పుడు మేము అత్యంత స్థితిస్థాపకంగా ఉండే గ్రాఫానా సేవను కలిగి ఉన్నాము. మీరు అప్లికేషన్కు ఎంట్రీ పాయింట్గా బ్యాలెన్సర్ యొక్క IP చిరునామా మరియు డేటాసెట్ను లోడ్ చేయడానికి క్లిక్హౌస్ క్లస్టర్ యొక్క హోస్ట్ని మాత్రమే తెలుసుకోవాలి.
ఇది విజయంలా అనిపిస్తుందా? అవును, విజయం. కానీ ఏదో ఇప్పటికీ నన్ను కలవరపెడుతోంది. పైన పేర్కొన్న మొత్తం ప్రక్రియకు చాలా మాన్యువల్ దశలు అవసరం మరియు స్కేలబుల్ కాదు; వీలైతే నేను దీన్ని ఆటోమేట్ చేయాలనుకుంటున్నాను. ఇది తదుపరి విభాగం అంకితం చేయబడుతుంది.
టెర్రాఫార్మ్ ఇంటిగ్రేషన్
మేము మళ్లీ HashiCorp నుండి అనే సాధనాన్ని ఉపయోగిస్తాము . వినియోగదారు ఆమోదించిన అనేక వేరియబుల్స్ ఆధారంగా ఒక బటన్ను క్లిక్ చేయడం ద్వారా మొత్తం అప్లికేషన్ ఇన్ఫ్రాస్ట్రక్చర్ని అమలు చేయడంలో ఇది మీకు సహాయం చేస్తుంది. వివిధ వినియోగదారుల యొక్క వివిధ విభాగాలలో అనేక సార్లు అమలు చేయగల రెసిపీని వ్రాస్దాం.
టెర్రాఫార్మ్తో అన్ని పనులు కాన్ఫిగరేషన్ ఫైల్ను వ్రాయడానికి వస్తాయి (*.tf) మరియు దాని ఆధారంగా మౌలిక సదుపాయాల కల్పన.
వేరియబుల్స్
ఫైల్ ప్రారంభంలోనే, భవిష్యత్ ఇన్ఫ్రాస్ట్రక్చర్ ఎక్కడ మరియు ఎలా అమలు చేయబడుతుందో నిర్ణయించే వేరియబుల్లను మేము చేర్చుతాము.
variable "oauth_token" {
type = string
default = "<oauth-token>"
}
variable "cloud_id" {
type = string
default = "<cloud-id>"
}
variable "folder_id" {
type = string
default = "<folder_id>"
}
variable "service_account_id" {
type = string
default = "<service_account_id>"
}
variable "image_id" {
type = string
default = "<image_id>"
}
variable "username" {
type = string
default = "<username>"
}
variable "password" {
type = string
default = "<password>"
}
variable "dbname" {
type = string
default = "<dbname>"
}
variable "public_key_path" {
type = string
default = "<path to ssh public key>"
}మొత్తం అప్లికేషన్ విస్తరణ ప్రక్రియ డిస్క్ ఇమేజ్ని రూపొందించడానికి మరియు ఈ వేరియబుల్లను సెట్ చేయడానికి వస్తుంది. వారు దేనికి బాధ్యత వహిస్తారో నేను వివరిస్తాను:
ప్రమాణం_టోకెన్ — క్లౌడ్ను యాక్సెస్ చేయడానికి ఒక టోకెన్. ద్వారా పొందవచ్చు .
cloud_id — క్లౌడ్ ఐడెంటిఫైయర్ మేము అప్లికేషన్ను ఎక్కడ అమలు చేస్తాము
ఫోల్డర్_ఐడి - సెక్షన్ ఐడెంటిఫైయర్ మేము అప్లికేషన్ను అమలు చేసే చోట
సర్వీస్_ఖాతా_ఐడి — క్లౌడ్ యొక్క సంబంధిత విభాగంలో సేవా ఖాతా ఐడెంటిఫైయర్.
image_id — ప్యాకర్ ఉపయోగించి పొందిన డిస్క్ ఇమేజ్ ఐడెంటిఫైయర్
<span style="font-family: Mandali; "> యూజర్ పేరు </span> и <span style="font-family: Mandali; "> పాస్వర్డ్</span> — డేటాబేస్ మరియు గ్రాఫానా వెబ్ సర్వర్ రెండింటినీ యాక్సెస్ చేయడానికి వినియోగదారు పేరు మరియు పాస్వర్డ్
db పేరు — CH మరియు MySQL క్లస్టర్ల లోపల డేటాబేస్ పేరు
పబ్లిక్_కీ_పాత్ — మీ పబ్లిక్ ssh కీతో ఫైల్కి మార్గం, మీరు పేరుతో కనెక్ట్ చేయడానికి ఉపయోగించవచ్చు ubuntu వెబ్ సర్వర్లతో వర్చువల్ మిషన్లకు
ప్రొవైడర్ సెటప్
ఇప్పుడు మీరు Terraform ప్రొవైడర్ను కాన్ఫిగర్ చేయాలి - మా విషయంలో, Yandex:
provider "yandex" {
token = var.oauth_token
cloud_id = var.cloud_id
folder_id = var.folder_id
zone = "ru-central1-a"
}
ఇక్కడ మేము పైన నిర్వచించిన వేరియబుల్స్ని ఉపయోగిస్తున్నామని మీరు గమనించవచ్చు.
నెట్వర్క్ మరియు క్లస్టర్లు
ఇప్పుడు మేము నెట్వర్క్ను సృష్టిస్తాము, దీనిలో మా మౌలిక సదుపాయాల మూలకాలు మూడు సబ్నెట్లు (ప్రతి ప్రాంతంలో ఒకటి) మరియు CH మరియు MySQL క్లస్టర్లను పెంచుతాయి.
resource "yandex_vpc_network" "grafana_network" {}
resource "yandex_vpc_subnet" "subnet_a" {
zone = "ru-central1-a"
network_id = yandex_vpc_network.grafana_network.id
v4_cidr_blocks = ["10.1.0.0/24"]
}
resource "yandex_vpc_subnet" "subnet_b" {
zone = "ru-central1-b"
network_id = yandex_vpc_network.grafana_network.id
v4_cidr_blocks = ["10.2.0.0/24"]
}
resource "yandex_vpc_subnet" "subnet_c" {
zone = "ru-central1-c"
network_id = yandex_vpc_network.grafana_network.id
v4_cidr_blocks = ["10.3.0.0/24"]
}
resource "yandex_mdb_clickhouse_cluster" "ch_cluster" {
name = "grafana-clickhouse"
environment = "PRODUCTION"
network_id = yandex_vpc_network.grafana_network.id
clickhouse {
resources {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 16
}
}
zookeeper {
resources {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 10
}
}
database {
name = var.dbname
}
user {
name = var.username
password = var.password
permission {
database_name = var.dbname
}
}
host {
type = "CLICKHOUSE"
zone = "ru-central1-a"
subnet_id = yandex_vpc_subnet.subnet_a.id
}
host {
type = "CLICKHOUSE"
zone = "ru-central1-b"
subnet_id = yandex_vpc_subnet.subnet_b.id
}
host {
type = "CLICKHOUSE"
zone = "ru-central1-c"
subnet_id = yandex_vpc_subnet.subnet_c.id
}
host {
type = "ZOOKEEPER"
zone = "ru-central1-a"
subnet_id = yandex_vpc_subnet.subnet_a.id
}
host {
type = "ZOOKEEPER"
zone = "ru-central1-b"
subnet_id = yandex_vpc_subnet.subnet_b.id
}
host {
type = "ZOOKEEPER"
zone = "ru-central1-c"
subnet_id = yandex_vpc_subnet.subnet_c.id
}
}
resource "yandex_mdb_mysql_cluster" "mysql_cluster" {
name = "grafana_mysql"
environment = "PRODUCTION"
network_id = yandex_vpc_network.grafana_network.id
version = "8.0"
resources {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 16
}
database {
name = var.dbname
}
user {
name = var.username
password = var.password
permission {
database_name = var.dbname
roles = ["ALL"]
}
}
host {
zone = "ru-central1-a"
subnet_id = yandex_vpc_subnet.subnet_a.id
}
host {
zone = "ru-central1-b"
subnet_id = yandex_vpc_subnet.subnet_b.id
}
host {
zone = "ru-central1-c"
subnet_id = yandex_vpc_subnet.subnet_c.id
}
}మీరు చూడగలిగినట్లుగా, రెండు సమూహాలలో ప్రతి ఒక్కటి మూడు లభ్యత జోన్లలో ఉండటం ద్వారా చాలా తప్పులను తట్టుకునేలా సృష్టించబడుతుంది.
వెబ్ సర్వర్లు
అదే స్పూర్తితో మనం కొనసాగగలమని అనిపిస్తుంది, కానీ నేను కష్టాల్లో పడ్డాను. దీనికి ముందు, నేను మొదట MySQL క్లస్టర్ని పెంచాను మరియు దాని IDని తెలుసుకున్న తర్వాత, నేను అవసరమైన కాన్ఫిగరేషన్తో డిస్క్ ఇమేజ్ని సేకరించాను, అక్కడ నేను క్లస్టర్కు హోస్ట్ను పేర్కొన్నాను. కానీ ఇప్పుడు మనకు టెర్రాఫార్మ్ను ప్రారంభించే ముందు క్లస్టర్ ID తెలియదు, అలాగే ఇమేజ్ని నిర్మించే సమయంతో సహా. అందువల్ల, నేను ఈ క్రింది వాటిని ఆశ్రయించవలసి వచ్చింది .
Amazon మెటాడేటా సేవను ఉపయోగించి, మేము కొన్ని పారామితులను వర్చువల్ మెషీన్కు పంపుతాము, అది అంగీకరించి ప్రాసెస్ చేస్తుంది. టెర్రాఫార్మ్ ఫైల్లో వినియోగదారు పేర్కొన్న MySQL క్లస్టర్ హోస్ట్ మరియు యూజర్నేమ్-పాస్వర్డ్ వెనుక ఉన్న మెటాడేటాకు వెళ్లడానికి మాకు మెషీన్ అవసరం. ఫైల్ యొక్క కంటెంట్లను కొద్దిగా మారుద్దాం setup.sh, ఇది వర్చువల్ మెషీన్ ఆన్ చేసినప్పుడు నడుస్తుంది.
setup.sh:
#!/bin/bash
CLUSTER_URI="$(curl -H 'Metadata-Flavor:Google' http://169.254.169.254/computeMetadata/v1/instance/attributes/mysql_cluster_uri)"
USERNAME="$(curl -H 'Metadata-Flavor:Google' http://169.254.169.254/computeMetadata/v1/instance/attributes/username)"
PASSWORD="$(curl -H 'Metadata-Flavor:Google' http://169.254.169.254/computeMetadata/v1/instance/attributes/password)"
sudo sed -i "s#.*;url =.*#url = mysql://${USERNAME}:${PASSWORD}@${CLUSTER_URI}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_user =.*#admin_user = ${USERNAME}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_password =.*#admin_password = ${PASSWORD}#" /etc/grafana/grafana.ini
sudo service grafana-server restartఇంటెన్స్ గ్రూప్ మరియు బ్యాలెన్సర్
ఒక కొత్త డిస్క్ ఇమేజ్ని పునర్నిర్మించిన తర్వాత, చివరకు టెర్రాఫార్మ్ కోసం మన ఫైల్ని జోడించవచ్చు.
మేము ఇప్పటికే ఉన్న డిస్క్ ఇమేజ్ని ఉపయోగించాలనుకుంటున్నామని సూచిస్తాము:
data "yandex_compute_image" "grafana_image" {
image_id = var.image_id
}ఇప్పుడు ఒక ఉదాహరణ సమూహాన్ని క్రియేట్ చేద్దాం:
resource "yandex_compute_instance_group" "grafana_group" {
name = "grafana-group"
folder_id = var.folder_id
service_account_id = var.service_account_id
instance_template {
platform_id = "standard-v1"
resources {
memory = 1
cores = 1
}
boot_disk {
mode = "READ_WRITE"
initialize_params {
image_id = data.yandex_compute_image.grafana_image.id
size = 4
}
}
network_interface {
network_id = yandex_vpc_network.grafana_network.id
subnet_ids = [yandex_vpc_subnet.subnet_a.id, yandex_vpc_subnet.subnet_b.id, yandex_vpc_subnet.subnet_c.id]
nat = "true"
}
metadata = {
mysql_cluster_uri = "c-${yandex_mdb_mysql_cluster.mysql_cluster.id}.rw.mdb.yandexcloud.net:3306/${var.dbname}"
username = var.username
password = var.password
ssh-keys = "ubuntu:${file("${var.public_key_path}")}"
}
network_settings {
type = "STANDARD"
}
}
scale_policy {
fixed_scale {
size = 6
}
}
allocation_policy {
zones = ["ru-central1-a", "ru-central1-b", "ru-central1-c"]
}
deploy_policy {
max_unavailable = 2
max_creating = 2
max_expansion = 2
max_deleting = 2
}
load_balancer {
target_group_name = "grafana-target-group"
}
}మేము దానిని మెటాడేటాలోకి ఎలా పంపాము అనే దానిపై శ్రద్ధ పెట్టడం విలువ cluster_uri, username и password. స్టార్టప్లో వర్చువల్ మిషన్ తీసివేసి గ్రాఫానా కాన్ఫిగర్లో ఉంచుతుంది.
ఇది బ్యాలెన్సర్కి సంబంధించినది.
resource "yandex_lb_network_load_balancer" "grafana_balancer" {
name = "grafana-balancer"
listener {
name = "grafana-listener"
port = 80
target_port = 3000
external_address_spec {
ip_version = "ipv4"
}
}
attached_target_group {
target_group_id = yandex_compute_instance_group.grafana_group.load_balancer.0.target_group_id
healthcheck {
name = "healthcheck"
tcp_options {
port = 3000
}
}
}
}కొద్దిగా చక్కెర
కొంచెం మాత్రమే మిగిలి ఉంది. ఇన్ఫ్రాస్ట్రక్చర్ని ఏర్పాటు చేసిన తర్వాత, మీరు గ్రాఫానా UIకి వెళ్లి, డేటా సోర్స్గా CH క్లస్టర్ను (దీని IDని ఇంకా పొందవలసి ఉంది) మాన్యువల్గా జోడించాలి. కానీ Terraform క్లస్టర్ ID తెలుసు. విషయం కార్యరూపం దాల్చేలా అతనికి అప్పగిద్దాం.
కొత్త ప్రొవైడర్ని - గ్రాఫానాని యాడ్ చేద్దాం మరియు ఆమెకు హోస్ట్గా బ్యాలెన్సర్ యొక్క IP చిరునామాను అందించండి. టెర్రాఫార్మ్ మెషీన్లో చేసే అన్ని మార్పులు దాని బ్యాలెన్సర్ నిర్ణయించే చోట MySQLలో పెరుగుతాయని మరియు అందువల్ల అన్ని ఇతర మెషీన్లలో పెరుగుతాయి.
provider "grafana" {
url = "http://${[for s in yandex_lb_network_load_balancer.grafana_balancer.listener: s.external_address_spec.0.address].0}"
auth = "${var.username}:${var.password}"
}
resource "grafana_data_source" "ch_data_source" {
type = "vertamedia-clickhouse-datasource"
name = "grafana"
url = "https://c-${yandex_mdb_clickhouse_cluster.ch_cluster.id}.rw.mdb.yandexcloud.net:8443"
basic_auth_enabled = "true"
basic_auth_username = var.username
basic_auth_password = var.password
is_default = "true"
access_mode = "proxy"
}జుట్టు దువ్వుకుందాం
బాలన్సర్ IP చిరునామా మరియు క్లిక్హౌస్ క్లస్టర్ హోస్ట్ని ప్రదర్శిస్తాము
output "grafana_balancer_ip_address" {
value = [for s in yandex_lb_network_load_balancer.grafana_balancer.listener: s.external_address_spec.0.address].0
}
output "clickhouse_cluster_host" {
value = "https://c-${yandex_mdb_clickhouse_cluster.ch_cluster.id}.rw.mdb.yandexcloud.net:8443"
}పరుగెత్తగలను
అన్నీ! మా కాన్ఫిగరేషన్ ఫైల్ సిద్ధంగా ఉంది మరియు వేరియబుల్లను సెట్ చేయడం ద్వారా, మేము పైన వివరించిన ప్రతిదాన్ని పెంచమని టెర్రాఫార్మ్కి చెప్పవచ్చు. మొత్తం ప్రక్రియ నాకు 15 నిమిషాలు పట్టింది.
ముగింపులో మీరు ఒక అందమైన సందేశాన్ని చూడవచ్చు:
Apply complete! Resources: 9 added, 0 changed, 0 destroyed.
Outputs:
clickhouse_cluster_host = https://c-c9q14ipa2ngadqsbp2iq.rw.mdb.yandexcloud.net:8443
grafana_balancer_ip_address = 130.193.50.25మరియు క్లౌడ్లో, పెరిగిన మౌలిక సదుపాయాల అంశాలు కనిపిస్తాయి:

లెట్ యొక్క ఫలితాలను సంగ్రహించండి
ఇప్పుడు, గ్రాఫానాను ఉదాహరణగా ఉపయోగించి, మీలో ప్రతి ఒక్కరూ Yandex.Cloud ప్లాట్ఫారమ్లో విస్తృతమైన క్లౌడ్ ఆర్కిటెక్చర్తో అప్లికేషన్లను అమలు చేయవచ్చు. HashiCorp నుండి Packer మరియు Terraform వంటి సహాయక సాధనాలు మీకు ఇందులో సహాయపడతాయి. ఎవరైనా ఈ వ్యాసం ఉపయోగకరంగా ఉంటుందని నేను ఆశిస్తున్నాను :)
PS క్రింద నేను రిపోజిటరీకి లింక్ను జతచేస్తాను, ఇక్కడ మీరు ప్యాకర్ మరియు టెర్రాఫార్మ్ కోసం రెడీమేడ్ వంటకాలను కనుగొనవచ్చు, ఈ వ్యాసంలో నేను అందించిన శకలాలు.
మూలం: www.habr.com
