WIUNIX ACADEMY
آموزش نصب Redis Sentinel در اوبونتو و دبیان
صفحهٔ 6 از 7؛ مراحل قبلی و پیشنیازها را پیش از ادامه مرور کن.
آموزش متناسب با محیط تو
کجا اجرا میکنی؟
سیستمعامل و نسخه را انتخاب کن تا مراحل، دستورها و راهحلها برای همان محیط نمایش داده شوند.
آموزش متناسب با مقادیر تو
تنظیمات این آموزش
مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر میکنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری میشوند و به سرور یا لینک اشتراکگذاری فرستاده نمیشوند. پیش از اجرا، DNS، گواهیها و سیاست شبکهٔ واقعی را بررسی کن.
آیپی، دامنه یا پورت مثالها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای بهروزشده را کپی کن.
تنظیم مقادیر برای محیط من5 مقدار قابلتغییر
قدم بعدی
خروجی RDB و کنترل خوانایی بکاپ
در Bash ریشهٔ نویسندهٔ فعلی اجرا شود. رمز ADMIN فقط در ورودی مخفی داده شود. خطا زیرشل را متوقف میکند و پوشهٔ ناقصِ محافظتشده برای بررسی میماند؛ در این حالت بازنشستگی یا بازیابی ادامه نیابد. هنگام تمام مراحل نوشتن متوقف باشد. ساختار مسیرها در آرشیو حفظ میشود.
(
set -euo pipefail
umask 077
install -d -m 0700 /root/academy-backups
backup=$(mktemp -d /root/academy-backups/redis-data-XXXXXXXX)
redis-cli --tls --cacert /etc/redis/tls/ca.pem --cert /etc/redis/tls/node.pem --key /etc/redis/tls/node.key -h 127.0.0.1 --user admin --askpass --raw GET academy:probe > "$backup/probe.txt"
case "$(cat "$backup/probe.txt")" in
before-failover|after-failover) ;;
*) echo "Unexpected lab marker: STOP" >&2; exit 1 ;;
esac
redis-cli --tls --cacert /etc/redis/tls/ca.pem --cert /etc/redis/tls/node.pem --key /etc/redis/tls/node.key -h 127.0.0.1 --user admin --askpass --rdb "$backup/dump.rdb"
test -s "$backup/dump.rdb"
redis-check-rdb "$backup/dump.rdb"
tar -C / -cpf "$backup/config.tar" etc/redis
tar -tf "$backup/config.tar" >/dev/null
tar -C / -df "$backup/config.tar"
cd "$backup"
sha256sum dump.rdb probe.txt config.tar > SHA256SUMS
sha256sum -c SHA256SUMS
printf 'Protected backup: %s\n' "$backup"
)
exit
RDB از بررسی ساختار و checksum میگذرد، آرشیو با منبع برابر است و هش فایلها کنترل شده است.
قدم بعدی
بازیابی جداشده پیش از اتکا به بکاپ
پیش از تمرین جابهجایی، روی میزبان بازیابی جدا با همان نسخهٔ Redis و نسخهٔ محافظتشدهٔ بکاپ اجرا شود. مقدار backup باید مسیر واقعی باشد. پوشهٔ تازه و فضای نام شبکهٔ بدون پورت TCP به کار میرود و مسیر دادهٔ اصلی هرگز مقصد نیست. unshare به دسترسی ریشه نیاز دارد. تنظیمات قدیمی و اسرار را روی سامانهٔ روشن استخراج نکنید. برابری نشانگر فقط یک کنترل آزمایش است؛ بازیابی واقعی به بررسی کلیدهای نماینده، انقضا و قواعد اپلیکیشن نیاز دارد. AOF عمداً خاموش است تا RDB بازیابیشده بار شود.
sudo unshare --net --fork bash -eu <<'RESTORE'
umask 077
backup=/root/academy-backups/REPLACE_WITH_VERIFIED_BACKUP_DIRECTORY
cd "$backup"
sha256sum -c SHA256SUMS
redis-check-rdb dump.rdb
restore=$(mktemp -d /root/redis-restore-XXXXXXXX)
install -m 0600 dump.rdb "$restore/dump.rdb"
redis-server --bind 127.0.0.1 --port 0 --unixsocket "$restore/redis.sock" --unixsocketperm 600 --dir "$restore" --dbfilename dump.rdb --appendonly no --save '' --daemonize yes --pidfile "$restore/redis.pid" --logfile "$restore/redis.log"
trap 'redis-cli -s "$restore/redis.sock" SHUTDOWN NOSAVE >/dev/null || true' EXIT
for attempt in $(seq 1 30); do
if test -S "$restore/redis.sock"; then break; fi
sleep 1
done
actual=$(redis-cli -s "$restore/redis.sock" --raw GET academy:probe)
expected=$(cat "$backup/probe.txt")
test -n "$expected"
test "$actual" = "$expected"
redis-cli -s "$restore/redis.sock" DBSIZE
redis-cli -s "$restore/redis.sock" INFO persistence
printf 'Isolated marker restore passed; retained at %s\n' "$restore"
RESTORE
هش، بارگذاری RDB و برابری دقیق نشانگر موفق است؛ پردازش موقت خاموش و داده حفظ میشود. هر خطا اتکا به بکاپ را متوقف میکند.
تمرین خرابی فقط با قطع مسیر نویسندهٔ آزمایشی
پنل توقف و شروع فقط برای همین نمونههای اختصاصی و دورریختنی است، نه سرویس عملیاتی. نوشتن آزمایشی را متوقف و با کنترل شبکهٔ موجود آزمایشگاه، دسترسی همهٔ کلاینتها به پورت دادهٔ A را قطع کنید؛ مسیر مدیر و Sentinel باقی بماند. خاموشکردن پردازش بهتنهایی طرح حصارگذاری یک نویسندهٔ جداافتاده در محیط زنده نیست. ابتدا بکاپ و داده بررسی شوند. اگر A دیگر نویسندهٔ اعلامشده نیست، اینجا توقف کنید و بر اساس نقش واقعی تصمیم بگیرید. ارتقای دستی دو سرور یا راهاندازی با فایل قدیمی اولیه مجاز نیست.
قدم بعدی
شبیهسازی توقف نویسندهٔ آزمایشی
فقط در A و پس از تأیید نقش فعلی، رسیدن نشانگر به B و C و قطع مسیر کلاینت به A اجرا شود. Sentinel میزبان A روشن میماند. این آزمون توقف سرویس است و خرابی فیزیکی میزبان یا استقلال دامنههای خرابی را ثابت نمیکند.
sudo systemctl stop redis-server
sudo systemctl is-active redis-server
سرویس دادهٔ آزمایش خاموش است؛ خروج غیرصفر is-active در این مرحله انتظار میرود و Sentinel فعال میماند.
قدم بعدی
مشاهدهٔ انتخابات و مقصد جدید
در B و C با پنل ورود مدیریتی Sentinel وصل شوید. حداکثر۱۸۰ ثانیه وضعیت را مشاهده کنید: نشانی باید از A تغییر کند، CKQUORUM موفق باشد و رأیدهندهها بر مقصد تازه توافق کنند. نبود ارتقا نیاز به عیبیابی دارد؛ کمکردن حد نصاب یا درخواست مکرر جابهجایی مناسب نیست. زمان به وضعیت واقعی اتصال و انتخابات بستگی دارد.
SENTINEL GET-MASTER-ADDR-BY-NAME academy
SENTINEL CKQUORUM academy
SENTINEL MASTER academy
QUIT
نقش، مقدار دقیق و پاسخ مشخصشده در توضیح همین مرحله بررسی شود؛ نتیجهٔ غیرمنتظره ادامهٔ کار را متوقف میکند.
قدم بعدی
اتصال به نویسندهٔ اعلامشده
در میزبان کلاینت، DISCOVERED_PRIMARY_IP با نشانی B یا C که همین حالا برگشته جایگزین شود. رمز APP در ورودی مخفی داده شود. پیش از اجازهٔ نوشتن با سیاست حداقل یک نسخه، سرور دادهٔ باقیمانده باید دریافتکنندهٔ نویسندهٔ تازه شده باشد. پنل بعد در همین اتصال اجرا شود.
redis-cli --tls --cacert /etc/academy-client/ca.pem --cert /etc/academy-client/client.pem --key /etc/academy-client/client.key -h DISCOVERED_PRIMARY_IP -p 6379 --user app --askpass
کلاینت مجاز از طریق TLS دوطرفه به مقصد کشفشده وصل است.