Apache Cassandra දත්ත සමුදාය සහ එය Kubernetes මත පදනම් වූ යටිතල ව්යුහයක් තුළ ක්රියාත්මක කිරීමේ අවශ්යතාවය අපට නිරන්තරයෙන් මුණගැසෙනවා. මෙම ද්රව්යය තුළ, අපි Cassandra K8s වෙත සංක්රමණය කිරීම සඳහා අවශ්ය පියවර, නිර්ණායක සහ පවතින විසඳුම් (ක්රියාකරුවන්ගේ දළ විශ්ලේෂණයක් ඇතුළුව) පිළිබඳ අපගේ දැක්ම බෙදා ගන්නෙමු.
"කාන්තාවක් පාලනය කළ හැකි තැනැත්තාට රාජ්යය පාලනය කළ හැකිය"
කැසැන්ඩ්රා යනු කවුද? එය එක් අසාර්ථකත්වයකින් තොරව ඉහළ ලබා ගත හැකි බව සහතික කරන අතරම විශාල දත්ත පරිමාවක් කළමනාකරණය කිරීමට නිර්මාණය කර ඇති බෙදා හරින ලද ගබඩා පද්ධතියකි. ව්යාපෘතියට දිගු හැඳින්වීමක් අවශ්ය නොවේ, එබැවින් මම නිශ්චිත ලිපියක සන්දර්භය තුළ අදාළ වන කැසැන්ඩ්රා හි ප්රධාන ලක්ෂණ පමණක් දෙන්නෙමි:
- කැසැන්ඩ්රා ලියා ඇත්තේ ජාවා භාෂාවෙනි.
- Cassandra ස්ථලකය මට්ටම් කිහිපයක් ඇතුළත් වේ:
- නෝඩ් - එක් යෙදවූ කැසැන්ඩ්රා අවස්ථාවක්;
- රැක් යනු එකම දත්ත මධ්යස්ථානයක පිහිටා ඇති යම් ලක්ෂණයකින් එක්සත් වූ කැසැන්ඩ්රා අවස්ථා සමූහයකි;
- Datacenter - එක් දත්ත මධ්යස්ථානයක පිහිටා ඇති කැසැන්ඩ්රා නිදර්ශනවල සියලුම කණ්ඩායම්වල එකතුවකි;
- Cluster යනු සියලුම දත්ත මධ්යස්ථාන වල එකතුවකි.
- නෝඩයක් හඳුනා ගැනීමට කැසැන්ඩ්රා IP ලිපිනයක් භාවිතා කරයි.
- ලිවීමේ සහ කියවීමේ මෙහෙයුම් වේගවත් කිරීම සඳහා, Cassandra RAM හි සමහර දත්ත ගබඩා කරයි.
දැන් - Kubernetes වෙත සැබෑ විභව චලනය වෙත.
මාරු කිරීම සඳහා පිරික්සුම් ලැයිස්තුව
කැසැන්ඩ්රා කුබර්නෙටස් වෙත සංක්රමණය වීම ගැන කතා කරමින්, මෙම පියවර සමඟ එය කළමනාකරණය කිරීමට වඩාත් පහසු වනු ඇතැයි අපි බලාපොරොත්තු වෙමු. මේ සඳහා අවශ්ය වන්නේ කුමක්ද, මේ සඳහා උපකාරවත් වන්නේ කුමක්ද?
1. දත්ත ගබඩා කිරීම
දැනටමත් පැහැදිලි කර ඇති පරිදි, Cassanda දත්ත වලින් කොටසක් RAM - තුළ ගබඩා කරයි මතක තබා ගත හැකි. නමුත් තැටියේ සුරකින ලද දත්තවල තවත් කොටසක් තිබේ - පෝරමයේ SSTable. මෙම දත්ත වලට ආයතනයක් එක් කර ඇත කැපුම් ලොගය - තැටියේ සුරකින ලද සියලුම ගනුදෙනු වල වාර්තා.
Cassandra හි ගනුදෙනු රූප සටහන ලියන්න
Kubernetes හි, අපට දත්ත ගබඩා කිරීමට PersistentVolume භාවිතා කළ හැක. ඔප්පු කරන ලද යාන්ත්රණයන්ට ස්තූතිවන්ත වන අතර, සෑම වසරකම Kubernetes හි දත්ත සමඟ වැඩ කිරීම පහසු වෙමින් පවතී.
අපි එක් එක් කැසැන්ඩ්රා පොඩ් එකකට අපේම Persistent Volume වෙන් කරන්නෙමු
කැසැන්ඩ්රා විසින්ම දත්ත අනුකරණයක් අදහස් කරන බව සැලකිල්ලට ගැනීම වැදගත්ය, මේ සඳහා ගොඩනඟන ලද යාන්ත්රණ ඉදිරිපත් කරයි. එබැවින්, ඔබ විශාල නෝඩ් ගණනකින් Cassandra පොකුරක් ගොඩනඟන්නේ නම්, දත්ත ගබඩා කිරීම සඳහා Ceph හෝ GlusterFS වැනි බෙදාහැරීමේ පද්ධති භාවිතා කිරීම අවශ්ය නොවේ. මෙම අවස්ථාවේදී, භාවිතා කරමින් ධාරක තැටියේ දත්ත ගබඩා කිරීම තාර්කික වනු ඇත hostPath
.
ඔබට එක් එක් විශේෂාංග ශාඛාව සඳහා සංවර්ධකයින් සඳහා වෙනම පරිසරයක් නිර්මාණය කිරීමට අවශ්ය නම් තවත් ප්රශ්නයක්. මෙම අවස්ථාවෙහිදී, නිවැරදි ප්රවේශය වනුයේ එක් කැසැන්ඩ්රා නෝඩයක් ඔසවා බෙදා හරින ලද ගබඩාවක දත්ත ගබඩා කිරීමයි, i.e. සඳහන් Ceph සහ GlusterFS ඔබේ විකල්ප වනු ඇත. එවිට කුබර්න්ටෙස් පොකුරු නෝඩ් එකක් නැති වුවද පරීක්ෂණ දත්ත නැති නොවන බව සංවර්ධකයාට සහතික වනු ඇත.
2. අධීක්ෂණය
Kubernetes හි අධීක්ෂණය ක්රියාත්මක කිරීම සඳහා පාහේ අවිවාදිත තේරීම Prometheus වේ (අපි මේ ගැන විස්තරාත්මකව කතා කළා
කැසැන්ඩ්රා සඳහා ග්රැෆනා හි ප්රස්ථාරවල පෙනුම පිළිබඳ උදාහරණයක්
අපනයනකරුවන් දෙදෙනෙකු පමණි:
අපි පළමු එක අප වෙනුවෙන් තෝරා ගත්තේ:
- JMX Exporter වර්ධනය වෙමින් සහ සංවර්ධනය වෙමින් පවතින අතර, Cassandra Exporter හට ප්රමාණවත් ප්රජා සහයෝගයක් ලබා ගැනීමට නොහැකි වී ඇත. Cassandra Exporter තවමත් Cassandra හි බොහෝ අනුවාද සඳහා සහය නොදක්වයි.
- ධජයක් එකතු කිරීමෙන් ඔබට එය javaagent ලෙස ධාවනය කළ හැකිය
-javaagent:<plugin-dir-name>/cassandra-exporter.jar=--listen=:9180
. - ඔහුට එකක් තිබේ
ප්රමාණවත් උපකරණ පුවරුව , Cassandra Exporter සමඟ නොගැලපෙන.
3. Kubernetes primitives තෝරාගැනීම
කැසැන්ඩ්රා පොකුරේ ඉහත ව්යුහයට අනුව, එහි විස්තර කර ඇති සියල්ල Kubernetes පාරිභාෂිතයට පරිවර්තනය කිරීමට උත්සාහ කරමු:
- Cassandra Node → Pod
- Cassandra Rack → StatefulSet
- Cassandra Datacenter → StatefulSets වෙතින් තටාකය
- Cassandra Cluster → ???
මුළු කැසැන්ඩ්රා පොකුරම එකවර කළමනාකරණය කිරීමට යම් අමතර ආයතනයක් අතුරුදහන් වී ඇති බව පෙනේ. නමුත් යමක් නොපවතී නම්, අපට එය නිර්මාණය කළ හැකිය! මේ සඳහා කුබර්නෙටස් සතුව තමන්ගේම සම්පත් නිර්වචනය කිරීමේ යාන්ත්රණයක් ඇත -
ලඝු-සටහන් සහ ඇඟවීම් සඳහා අමතර සම්පත් ප්රකාශ කිරීම
නමුත් අභිරුචි සම්පත් කිසිවක් අදහස් නොවේ: සියල්ලට පසු, එය අවශ්ය වේ පාලකය. ඔබට උපකාර පැතීමට සිදු විය හැක
4. කරල් හඳුනා ගැනීම
ඉහත ඡේදයේ, එක් කැසැන්ඩ්රා නෝඩයක් කුබර්නෙටේස් හි එක් පොඩ් එකකට සමාන වන බවට අපි එකඟ විය. නමුත් පොඩ්ස් වල IP ලිපින සෑම විටම වෙනස් වේ. තවද කැසැන්ඩ්රා හි නෝඩයක් හඳුනා ගැනීම IP ලිපිනය මත පදනම් වේ ... එය සිදු වන්නේ එක් එක් පොඩ් ඉවත් කිරීමෙන් පසුව, කැසැන්ඩ්රා පොකුර නව නෝඩයක් එක් කරන බවයි.
මගක් ඇත, එකක් පමණක් නොවේ:
- අපට ධාරක හඳුනාගැනීම් (කැසැන්ඩ්රා අවස්ථා අනන්ය ලෙස හඳුනා ගන්නා UUID) හෝ IP ලිපින මගින් වාර්තා තබා ගත හැකි අතර ඒ සියල්ල සමහර ව්යුහයන්/වගුවන්හි ගබඩා කළ හැක. ක්රමය ප්රධාන අවාසි දෙකක් ඇත:
- නෝඩ් දෙකක් එකවර වැටුනහොත් ධාවන තත්වයක් ඇතිවීමේ අවදානම. නැගීමෙන් පසු, කැසැන්ඩ්රා නෝඩ් එකවරම මේසයෙන් IP ලිපිනයක් ඉල්ලා සිටින අතර එම සම්පත සඳහා තරඟ කරයි.
- Cassandra node එකක් එහි දත්ත නැති වී ඇත්නම්, අපට එය තවදුරටත් හඳුනා ගැනීමට නොහැකි වනු ඇත.
- දෙවන විසඳුම කුඩා හැක් එකක් ලෙස පෙනේ, නමුත් කෙසේ වෙතත්: අපට එක් එක් කැසැන්ඩ්රා නෝඩ් සඳහා ClusterIP සමඟ සේවාවක් නිර්මාණය කළ හැකිය. මෙම ක්රියාත්මක කිරීමේ ගැටළු:
- Cassandra cluster එකක nodes ගොඩක් තියෙනවනම් Services ගොඩක් හදන්න වෙනවා.
- ClusterIP විශේෂාංගය iptables හරහා ක්රියාත්මක වේ. Cassandra පොකුරේ බොහෝ (1000... හෝ 100?) නෝඩ් තිබේ නම් මෙය ගැටළුවක් විය හැක. වුවද
IPVS මත පදනම්ව තුලනය මෙම ගැටළුව විසඳා ගත හැකිය.
- තුන්වන විසඳුම වන්නේ සැකසුම සක්රීය කිරීමෙන් කැපවූ කරල් ජාලයක් වෙනුවට කැසැන්ඩ්රා නෝඩ් සඳහා නෝඩ් ජාලයක් භාවිතා කිරීමයි.
hostNetwork: true
. මෙම ක්රමය යම් සීමාවන් පනවා ඇත:- ඒකක ප්රතිස්ථාපනය කිරීමට. නව නෝඩයට පෙර තිබූ IP ලිපිනයම තිබීම අවශ්ය වේ (AWS, GCP වැනි වලාකුළු වල මෙය කළ නොහැකි තරම්ය);
- පොකුරු නෝඩ් ජාලයක් භාවිතා කරමින්, අපි ජාල සම්පත් සඳහා තරඟ කිරීමට පටන් ගනිමු. එබැවින්, එක් පොකුරු නෝඩයක් මත කැසැන්ඩ්රා සමඟ පොඩ් එකකට වඩා තැබීම ගැටළු සහගත වනු ඇත.
5. උපස්ථ
අපට තනි කැසැන්ඩ්රා නෝඩයක සම්පූර්ණ අනුවාදයක් කාලසටහනක් මත සුරැකීමට අවශ්යයි. Kubernetes භාවිතා කිරීමට පහසු විශේෂාංගයක් සපයයි
Cassandra මතකයේ සමහර දත්ත ගබඩා කරන බව මම ඔබට මතක් කරමි. සම්පූර්ණ උපස්ථයක් සෑදීමට, ඔබට මතකයෙන් දත්ත අවශ්ය වේ (මතක සටහන්) තැටිය වෙත ගෙන යන්න (SSTables) මෙම අවස්ථාවේදී, Cassandra නෝඩය සම්බන්ධතා පිළිගැනීම නතර කරයි, පොකුරෙන් සම්පූර්ණයෙන්ම වසා දමයි.
මෙයින් පසු, උපස්ථය ඉවත් කරනු ලැබේ (සැණරුව) සහ යෝජනා ක්රමය සුරැකේ (යතුරු අවකාශය) උපස්ථයක් පමණක් අපට කිසිවක් ලබා නොදෙන බව පෙනේ: කැසැන්ඩ්රා නෝඩය වගකිව යුතු දත්ත හඳුනාගැනීම් අප සුරැකිය යුතුය - මේවා විශේෂ ටෝකන වේ.
Cassandra නෝඩ් වගකිව යුතු දත්ත මොනවාදැයි හඳුනා ගැනීමට ටෝකන බෙදා හැරීම
Kubernetes හි Google වෙතින් Cassandra උපස්ථයක් ලබා ගැනීම සඳහා උදාහරණ පිටපතක් සොයාගත හැකිය
set -eu
if [[ -z "$1" ]]; then
info "Please provide a keyspace"
exit 1
fi
KEYSPACE="$1"
result=$(nodetool snapshot "${KEYSPACE}")
if [[ $? -ne 0 ]]; then
echo "Error while making snapshot"
exit 1
fi
timestamp=$(echo "$result" | awk '/Snapshot directory: / { print $3 }')
mkdir -p /tmp/backup
for path in $(find "/var/lib/cassandra/data/${KEYSPACE}" -name $timestamp); do
table=$(echo "${path}" | awk -F "[/-]" '{print $7}')
mkdir /tmp/backup/$table
mv $path /tmp/backup/$table
done
tar -zcf /tmp/backup.tar.gz -C /tmp/backup .
nodetool clearsnapshot "${KEYSPACE}"
එක් Cassandra node එකකින් උපස්ථයක් ගැනීම සඳහා bash script එකක උදාහරණයක්
Kubernetes හි Cassandra සඳහා සූදානම් විසඳුම්
Kubernetes හි කැසැන්ඩ්රා යෙදවීමට දැනට භාවිතා කරන්නේ කුමක්ද සහ ලබා දී ඇති අවශ්යතාවලට වඩාත් ගැලපෙන ඒවා මොනවාද?
1. StatefulSet හෝ Helm ප්රස්ථාර මත පදනම් වූ විසඳුම්
Cassandra පොකුරක් ධාවනය කිරීම සඳහා මූලික StatefulSets කාර්යයන් භාවිතා කිරීම හොඳ විකල්පයකි. Helm chart සහ Go සැකිලි භාවිතා කරමින්, ඔබට Cassandra යෙදවීම සඳහා නම්යශීලී අතුරු මුහුණතක් පරිශීලකයාට ලබා දිය හැක.
මෙය සාමාන්යයෙන් හොඳින් ක්රියා කරයි... නෝඩය අසමත් වීම වැනි අනපේක්ෂිත දෙයක් සිදු වන තුරු. සම්මත Kubernetes මෙවලම් හුදෙක් ඉහත විස්තර කර ඇති සියලුම අංගයන් සැලකිල්ලට ගත නොහැක. මීට අමතරව, මෙම ප්රවේශය වඩාත් සංකීර්ණ භාවිතයන් සඳහා කොපමණ ප්රමාණයක් දිගු කළ හැකිද යන්නෙහි ඉතා සීමිතය: නෝඩ් ප්රතිස්ථාපනය, උපස්ථය, ප්රතිසාධනය, අධීක්ෂණය, ආදිය.
නියෝජිතයන්:
ප්රස්ථාර දෙකම එක හා සමානව හොඳයි, නමුත් ඉහත විස්තර කර ඇති ගැටළු වලට යටත් වේ.
2. Kubernetes Operator මත පදනම් වූ විසඳුම්
එවැනි විකල්ප වඩාත් සිත්ගන්නා සුළු වන්නේ ඒවා පොකුර කළමනාකරණය කිරීම සඳහා ප්රමාණවත් අවස්ථාවන් ලබා දෙන බැවිනි. Cassandra ක්රියාකරුවෙකු සැලසුම් කිරීම සඳහා, වෙනත් ඕනෑම දත්ත ගබඩාවක් මෙන්, හොඳ රටාවක් Sidecar <-> Controller <-> CRD ලෙස පෙනේ:
හොඳින් සැලසුම් කරන ලද කැසැන්ඩ්රා ක්රියාකරු තුළ නෝඩ් කළමනාකරණ යෝජනා ක්රමය
දැනට පවතින ක්රියාකරුවන් දෙස බලමු.
1. instaclustr වෙතින් Cassandra-operator
-
GitHub - සූදානම: ඇල්ෆා
- බලපත්රය: Apache 2.0
- ක්රියාත්මක වන්නේ: ජාවා
මෙය සැබවින්ම කළමනාකරණය කරන ලද කැසැන්ඩ්රා යෙදවීම් ලබා දෙන සමාගමකින් ඉතා පොරොන්දු වූ සහ ක්රියාකාරීව සංවර්ධනය වන ව්යාපෘතියකි. එය, ඉහත විස්තර කර ඇති පරිදි, HTTP හරහා විධාන පිළිගන්නා සයිඩ්කාර් බහාලුමක් භාවිතා කරයි. ජාවා හි ලියා ඇති එය සමහර විට සේවාලාභියා-ගොස් පුස්තකාලයේ වඩා දියුණු ක්රියාකාරීත්වයක් නොමැත. එසේම, ක්රියාකරු එක් දත්ත මධ්යස්ථානයක් සඳහා විවිධ Racks සඳහා සහය නොදක්වයි.
නමුත් ක්රියාකරුට අධීක්ෂණය සඳහා සහාය, CRD භාවිතයෙන් ඉහළ මට්ටමේ පොකුරු කළමනාකරණය සහ උපස්ථ සෑදීම සඳහා ලේඛනගත කිරීම වැනි වාසි ඇත.
2. Jetstack වෙතින් Navigator
-
GitHub - සූදානම: ඇල්ෆා
- බලපත්රය: Apache 2.0
- ක්රියාත්මක කර ඇත: Golang
DB-as-a-Service යෙදවීමට නිර්මාණය කර ඇති ප්රකාශයක්. දැනට දත්ත සමුදායන් දෙකකට සහය දක්වයි: Elasticsearch සහ Cassandra. එයට RBAC හරහා දත්ත සමුදා ප්රවේශ පාලනය වැනි රසවත් විසඳුම් ඇත (මේ සඳහා එයට තමන්ගේම වෙනම navigator-apiserver ඇත). සමීපව බැලීම වටී සිත්ගන්නා ව්යාපෘතියක්, නමුත් අවසාන කැපවීම වසර එකහමාරකට පෙර සිදු කරන ලද අතර එමඟින් එහි විභවය පැහැදිලිවම අඩු වේ.
3. vgkowski විසින් Cassandra-operator
-
GitHub - සූදානම: ඇල්ෆා
- බලපත්රය: Apache 2.0
- ක්රියාත්මක කර ඇත: Golang
නිධිය සඳහා අවසාන කැපවීම වසරකට වඩා වැඩි කාලයක් ගත වූ බැවින් ඔවුන් එය "බැරෑරුම් ලෙස" සැලකුවේ නැත. ක්රියාකරු සංවර්ධනය අත්හැර ඇත: සහාය දක්වන ලෙස වාර්තා කරන ලද Kubernetes හි නවතම අනුවාදය 1.9 වේ.
4. Rook විසින් Cassandra-ක්රියාකරු
-
GitHub - සූදානම: ඇල්ෆා
- බලපත්රය: Apache 2.0
- ක්රියාත්මක කර ඇත: Golang
අපි කැමති තරම් ඉක්මනින් සංවර්ධනයක් සිදු නොවන ක්රියාකරුවෙක්. එය පොකුරු කළමනාකරණය සඳහා හොඳින් සිතා ගත හැකි CRD ව්යුහයක් ඇත, ClusterIP (එකම "හැක්") සමඟ සේවාව භාවිතා කරමින් නෝඩ් හඳුනාගැනීමේ ගැටලුව විසඳයි ... නමුත් දැනට එපමණයි. කොටුවෙන් පිටත දැනට නිරීක්ෂණ හෝ උපස්ථ නොමැත (මාර්ගය වන විට, අපි අධීක්ෂණය සඳහා ය
සැ.යු: අපි අපගේ එක් ව්යාපෘතියක සුළු වෙනස් කිරීම් සහිතව මෙම ක්රියාකරු භාවිතා කළෙමු. සම්පූර්ණ මෙහෙයුම් කාලය තුළ (මෙහෙයුම් මාස 4 ක්) ක්රියාකරුගේ කාර්යයේ කිසිදු ගැටළුවක් දක්නට නොලැබුණි.
5. ඔරේන්ජ් සිට CassKop
-
GitHub - සූදානම: ඇල්ෆා
- බලපත්රය: Apache 2.0
- ක්රියාත්මක කර ඇත: Golang
ලැයිස්තුවේ ලාබාලතම ක්රියාකරු: පළමු කැපවීම 23 මැයි 2019 දින සිදු කරන ලදී. දැනටමත් එහි අවි ගබඩාවේ අපගේ ලැයිස්තුවෙන් විශේෂාංග විශාල ප්රමාණයක් ඇත, ඒවා පිළිබඳ වැඩි විස්තර ව්යාපෘති ගබඩාවෙන් සොයාගත හැකිය. ක්රියාකරු ජනප්රිය ක්රියාකරු-sdk පදනම මත ගොඩනගා ඇත. කොටුවෙන් පිටත නිරීක්ෂණයට සහය දක්වයි. අනෙකුත් ක්රියාකරුවන්ගෙන් ප්රධාන වෙනස වන්නේ භාවිතයයි
සොයා ගැනීම්
කැසැන්ඩ්රා කුබර්නෙටස් වෙත ගෙනයාම සඳහා ප්රවේශයන් සහ හැකි විකල්ප ගණන තමාටම කථා කරයි: මාතෘකාව ඉල්ලුමේ පවතී.
මෙම අවස්ථාවෙහිදී, ඔබට ඔබේම අනතුරක් සහ අවදානමක් ඇතිව ඉහත සඳහන් ඕනෑම දෙයක් උත්සාහ කළ හැකිය: සංවර්ධකයින් කිසිවෙකු නිෂ්පාදන පරිසරයක් තුළ ඔවුන්ගේ විසඳුම 100% ක් ක්රියාත්මක කිරීම සහතික කරයි. නමුත් දැනටමත්, බොහෝ නිෂ්පාදන සංවර්ධන බංකුවල භාවිතා කිරීමට උත්සාහ කිරීමට පොරොන්දු වේ.
මම හිතන්නේ අනාගතයේදී නැවේ සිටින මෙම කාන්තාව ප්රයෝජනවත් වේවි!
ප්රාදේශීය සභා
අපගේ බ්ලොග් අඩවියේ ද කියවන්න:
- «
MongoDB හි Kubernetes වෙත බාධාවකින් තොරව සංක්රමණය වීම »; - «
RabbitMQ හි Kubernetes වෙත බාධාවකින් තොරව සංක්රමණය වීම »; - «
දත්ත සමුදායන් සහ Kubernetes (සමාලෝචන සහ වීඩියෝ වාර්තාව) »; - «
K8s ඉඟි සහ උපක්රම: විශාල දත්ත සමුදායන් සඳහා බූට්ස්ට්රැප් වේගවත් කිරීම ".
මූලාශ්රය: www.habr.com