مشاكل Redis؟ (المنتدى معطل بعد الترقية)

تم مطالبتي بالترقية اليوم، ثم طُلب مني إجراء البناء عبر المشغل. منذ ذلك الحين، أصبح Discourse معطلاً بشكل أساسي. يمكن للمستخدمين المسجلين بالفعل رؤية الصفحة الرئيسية واختيار الرسائل منها للعرض، ولكن جميع الوظائف تقريبًا للمستخدم والمسؤول تتوقف مع دوران المؤشر. سجل الإنتاج فارغ. لقد حاولت الإيقاف وإعادة التشغيل بالطبع. لست متأكدًا حتى من أين أبدأ البحث. أفكار؟ شكرًا!

تحديث: كما هو موضح في ردودي المختلفة أدناه، يبدو أن جذر المشكلة هو أن rdis لا يقبل الاتصالات، ويظهر مستخرج سجل rdis أدناه أن rdis يعلق في حلقة، ويبدأ في كل مرة بـ:

100 تغيير في 300 ثانية. جاري الحفظ…

ولا يصل أبدًا إلى حالة “في انتظار الاتصال”. أي اقتراحات حول كيفية إصلاح هذه المشكلة ستكون موضع تقدير كبير. شكرًا لك.

إعجاب واحد (1)

يُظهر سجل سابق مجموعة متنوعة من الكتل، على سبيل المثال:

/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.8/lib/message_bus/backends/redis.rb:274:in `block in global_subscribe'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.8/lib/message_bus.rb:734:in `block in new_subscriber_thread'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.5.1/lib/redis/client.rb:117:in `block in connect'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.5.1/lib/redis/client.rb:269:in `block in process'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.3/lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.5.1/lib/redis.rb:967:in `block in get'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.5.1/lib/redis.rb:72:in `block in synchronize'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.8/lib/message_bus/backends/redis.rb:274:in `block in global_subscribe'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.8/lib/message_bus.rb:734:in `block in new_subscriber_thread'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.5.1/lib/redis/client.rb:117:in `block in connect'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.5.1/lib/redis/client.rb:269:in `block in process'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.3/lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.5.1/lib/redis.rb:967:in `block in get'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.5.1/lib/redis.rb:72:in `block in synchronize'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.8/lib/message_bus/backends/redis.rb:274:in `block in global_subscribe'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.8/lib/message_bus.rb:734:in `block in new_subscriber_thread'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.5.1/lib/redis/client.rb:117:in `block in connect'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.5.1/lib/redis/client.rb:269:in `block in process'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.3/lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.5.1/lib/redis.rb:967:in `block in get'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.5.1/lib/redis.rb:72:in `block in synchronize'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.8/lib/message_bus/backends/redis.rb:274:in `block in global_subscribe'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.8/lib/message_bus.rb:734:in `block in new_subscriber_thread'
إعجاب واحد (1)

لم يؤدِ إعادة تشغيل النظام بالكامل إلى حل المشكلة. الوضع كما هو تمامًا بعد إعادة التشغيل الكامل.

إعجاب واحد (1)

يعرض unicorn.stderr.log العديد من الأخطاء المتعلقة بالاتصال بـ Redis، على سبيل المثال:

فشل في الإبلاغ عن خطأ: خطأ في الاتصال بـ Redis على localhost:6379 (Errno::EADDRNOTAVAIL)

إعجاب واحد (1)

هذا هو سجل redis الحالي:

3112:C 23 Dec 2021 01:56:54.912 # oO0OoO0OoO0Oo يبدأ Redis oO0OoO0OoO0Oo
3112:C 23 Dec 2021 01:56:54.912 # إصدار Redis=6.2.6، بتات=64، التزام=00000000، معدل=0، pid=3112، بدأ للتو
3112:C 23 Dec 2021 01:56:54.912 # تم تحميل التكوين
3112:M 23 Dec 2021 01:56:54.914 * ساعة أحادية: POSIX clock_gettime
3112:M 23 Dec 2021 01:56:55.105 * وضع التشغيل=standalone، المنفذ=6379.
3112:M 23 Dec 2021 01:56:55.105 # تحذير: لا يمكن فرض إعداد قائمة انتظار TCP البالغ 511 لأن /proc/sys/net/core/somaxconn تم تعيينه إلى القيمة الأقل 128.
3112:M 23 Dec 2021 01:56:55.105 # تم تهيئة الخادم
3112:M 23 Dec 2021 01:56:55.105 # تحذير overcommit_memory مضبوط على 0! قد تفشل عملية الحفظ في الخلفية في ظل ظروف الذاكرة المنخفضة. لإصلاح هذه المشكلة، أضف 'vm.overcommit_memory = 1' إلى /etc/sysctl.conf ثم أعد التشغيل أو قم بتشغيل الأمر 'sysctl vm.overcommit_memory=1' ليصبح ساري المفعول.
3112:M 23 Dec 2021 01:56:55.401 * تحميل RDB أنتجته الإصدار 6.2.6
3112:M 23 Dec 2021 01:56:55.401 * عمر RDB 296 ثانية
3112:M 23 Dec 2021 01:56:55.401 * استخدام ذاكرة RDB عند الإنشاء 4.86 ميجابايت
3112:M 23 Dec 2021 01:56:55.634 # تم الانتهاء من تحميل RDB، تم تحميل المفاتيح: 2751، انتهت صلاحية المفاتيح: 2.
3112:M 23 Dec 2021 01:56:55.634 * تم تحميل قاعدة البيانات من القرص: 0.528 ثانية
3112:M 23 Dec 2021 01:56:55.634 * جاهز لقبول الاتصالات
3112:M 23 Dec 2021 02:01:55.037 * 100 تغيير في 300 ثانية. جاري الحفظ...
3112:M 23 Dec 2021 02:01:55.038 * بدأ الحفظ في الخلفية بواسطة pid 3523
3523:C 23 Dec 2021 02:01:55.140 * تم حفظ قاعدة البيانات على القرص
3523:C 23 Dec 2021 02:01:55.142 * RDB: 0 ميجابايت من الذاكرة المستخدمة بواسطة النسخ عند الكتابة
3112:M 23 Dec 2021 02:01:55.239 * انتهى الحفظ في الخلفية بنجاح
3112:M 23 Dec 2021 02:06:56.065 * 100 تغيير في 300 ثانية. جاري الحفظ...
3112:M 23 Dec 2021 02:06:56.065 * بدأ الحفظ في الخلفية بواسطة pid 3831
3831:C 23 Dec 2021 02:06:56.134 * تم حفظ قاعدة البيانات على القرص
3831:C 23 Dec 2021 02:06:56.136 * RDB: 0 ميجابايت من الذاكرة المستخدمة بواسطة النسخ عند الكتابة
3112:M 23 Dec 2021 02:06:56.166 * انتهى الحفظ في الخلفية بنجاح
3112:M 23 Dec 2021 02:11:57.071 * 100 تغيير في 300 ثانية. جاري الحفظ...
3112:M 23 Dec 2021 02:11:57.071 * بدأ الحفظ في الخلفية بواسطة pid 4138
4138:C 23 Dec 2021 02:11:57.135 * تم حفظ قاعدة البيانات على القرص
4138:C 23 Dec 2021 02:11:57.137 * RDB: 0 ميجابايت من الذاكرة المستخدمة بواسطة النسخ عند الكتابة
3112:M 23 Dec 2021 02:11:57.172 * انتهى الحفظ في الخلفية بنجاح
3112:M 23 Dec 2021 02:16:58.000 * 100 تغيير في 300 ثانية. جاري الحفظ...
3112:M 23 Dec 2021 02:16:58.001 * بدأ الحفظ في الخلفية بواسطة pid 4448
4448:C 23 Dec 2021 02:16:58.064 * تم حفظ قاعدة البيانات على القرص
4448:C 23 Dec 2021 02:16:58.066 * RDB: 0 ميجابايت من الذاكرة المستخدمة بواسطة النسخ عند الكتابة
3112:M 23 Dec 2021 02:16:58.101 * انتهى الحفظ في الخلفية بنجاح
إعجاب واحد (1)

يبدو أن Rdis يتكرر بشكل متكرر مع هذا ولا يصل أبدًا إلى حالة انتظار الاتصالات:

3112:M 23 Dec 2021 03:02:07.032 * 100 changes in 300 seconds. Saving...
3112:M 23 Dec 2021 03:02:07.033 * Background saving started by pid 7243
7243:C 23 Dec 2021 03:02:07.104 * DB saved on disk
7243:C 23 Dec 2021 03:02:07.105 * RDB: 0 MB of memory used by copy-on-write
3112:M 23 Dec 2021 03:02:07.134 * Background saving terminated with success
إعجابَين (2)

قد يكون من المفيد التحقق من الذاكرة:

free
vmstat 5 5 
uptime

وبينما نحن على ذلك، ربما تحقق أيضًا من مساحة القرص
df -h /

وإذا لم تحصل على أي نصيحة محددة، فقد يكون إعادة البناء مرة أخرى جديرًا بالمحاولة. تأكد من وجود نسخة احتياطية، وأنها تم تنزيلها أيضًا، فقط في حالة.

ولكن حقًا يبدو أنك بحاجة إلى نصيحة أكثر تحديدًا.

إعجابَين (2)

مرحباً. لدي نسخة احتياطية من Discourse لمدة أسبوع تقريباً محلياً، على الرغم من أنني في هذه المرحلة لا أعرف كيفية استخدامها. لدي الكثير من الذاكرة الحرة (1.5 جيجابايت على الأقل) ومساحة قرص حرة. سأحاول إعادة بناء أخرى الآن. شكراً.

إعجاب واحد (1)

تم إعادة بنائه. خلاصة القول هي أنه لا يزال معطلاً بنفس الطريقة، على الرغم من وجود بعض التغييرات التي رأيتها على طول الطريق، أثناء البناء لاحظت:

139:C 23 Dec 2021 16:40:32.625 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
139:C 23 Dec 2021 16:40:32.625 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=139, just started
139:C 23 Dec 2021 16:40:32.626 # Configuration loaded
139:M 23 Dec 2021 16:40:32.627 * monotonic clock: POSIX clock_gettime
139:M 23 Dec 2021 16:40:32.627 # Warning: Could not create server TCP listening socket *:6379: bind: Address already in use
139:M 23 Dec 2021 16:40:32.628 # Failed listening on port 6379 (TCP), aborting.

لاحقًا رأيت هذا، والذي كان مشابهًا للحلقة التي رأيتها سابقًا. ومع ذلك، فقد ذكر أنه استخدم 1 ميجابايت من الذاكرة للنسخ عند الكتابة، وذكر سجل redis الحلقي 0 ميجابايت.

112:M 23 Dec 2021 16:46:08.703 * Background saving started by pid 715
715:C 23 Dec 2021 16:46:08.822 * DB saved on disk
715:C 23 Dec 2021 16:46:08.824 * RDB: 1 MB of memory used by copy-on-write
112:M 23 Dec 2021 16:46:08.905 * Background saving terminated with success

سجل redis الحالي:

4161:M 23 Dec 2021 16:55:11.867 * Loading RDB produced by version 6.2.6
4161:M 23 Dec 2021 16:55:11.867 * RDB age 281 seconds
4161:M 23 Dec 2021 16:55:11.867 * RDB memory usage when created 4.61 Mb
4161:M 23 Dec 2021 16:55:12.086 # Done loading RDB, keys loaded: 2743, keys expired: 0.
4161:M 23 Dec 2021 16:55:12.086 * DB loaded from disk: 0.265 seconds
4161:M 23 Dec 2021 16:55:12.086 * Ready to accept connections
4161:M 23 Dec 2021 17:00:12.088 * 100 changes in 300 seconds. Saving...
4161:M 23 Dec 2021 17:00:12.098 * Background saving started by pid 4612
4612:C 23 Dec 2021 17:00:12.189 * DB saved on disk
4612:C 23 Dec 2021 17:00:12.191 * RDB: 0 MB of memory used by copy-on-write
4161:M 23 Dec 2021 17:00:12.199 * Background saving terminated with success

أرى إشعار النسخ عند الكتابة 0 ميجابايت مرة أخرى ولكني لا أعرف ما إذا كان هذا طبيعيًا أم لا. لا يمكنني فتح اتصال telnet على هذا الجهاز إلى localhost 6379، أحصل على الخطأ:
Unable to connect to remote host: Cannot assign requested address

يُظهر سجل الإنتاج الكثير من الكتل كما كان من قبل:

/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.5.1/lib/redis/client.rb:344:in `with_reconnect'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.5.1/lib/redis/client.rb:116:in `connect'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.5.1/lib/redis/client.rb:417:in `ensure_connected'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.5.1/lib/redis/client.rb:269:in `block in process'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.5.1/lib/redis/client.rb:356:in `logging'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.5.1/lib/redis/client.rb:268:in `process'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.5.1/lib/redis/client.rb:162:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.3/lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.5.1/lib/redis.rb:967:in `block in get'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.5.1/lib/redis.rb:72:in `block in synchronize'
/usr/local/lib/ruby/2.7.0/monitor.rb:202:in `synchronize'
/usr/local/lib/ruby/2.7.0/monitor.rb:202:in `mon_synchronize'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.5.1/lib/redis.rb:72:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.5.1/lib/redis.rb:966:in `get'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.8/lib/message_bus/backends/redis.rb:366:in `process_global_backlog'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.8/lib/message_bus/backends/redis.rb:274:in `block in global_subscribe'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.8/lib/message_bus/backends/redis.rb:287:in `global_subscribe'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.8/lib/message_bus.rb:786:in `global_subscribe_thread'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.8/lib/message_bus.rb:734:in `block in new_subscriber_thread'
Job exception: no address for meta.discourse.org (Resolv::ResolvError)
إعجاب واحد (1)

هذا الإخراج الخاص بـ Redis طبيعي ولا يشير بالضرورة إلى أن Redis لا يستمع. إنه حفظ في الخلفية يحدث دائمًا كل بضع دقائق. هذا لا يعني أنه “يعمل في حلقة” بدلاً من العمل. أعتقد أنه في الواقع علامة جيدة على أنه يُظهر هذا الإخراج. لذلك يجب أن يكون هناك خطأ آخر. ربما يكون على منفذ مختلف، ربما لا يمكن الوصول إليه لسبب آخر.

إعجابَين (2)

شكراً جزيلاً على ذلك. ما هي الاحتمالات الأخرى لكل هذه الكتل التي يتم تسجيلها والأوامر التي تتعطل؟

إعجاب واحد (1)

يبدو أن شيئًا آخر يستمع بالفعل على هذا المنفذ. فكر في إعادة التشغيل.

إعجاب واحد (1)

لمعرفة العملية التي تستمع على منفذ، جرب
sudo lsof -n -i -P | egrep LISTEN

إعجاب واحد (1)

أستطيع أن أرى من ps أن redis قيد التشغيل ويريد الاستماع إلى 6379

/usr/bin/redis-server *:6379

لكن lsof لا يُظهر أي شيء يستمع بالفعل على هذا المنفذ.

إعجاب واحد (1)

للإشارة، هذا هو بدء تشغيل redis في منتصف إعادة البناء الأخيرة الخاصة بي:

111:C 22 Dec 2021 20:36:16.773 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
111:C 22 Dec 2021 20:36:16.773 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=111, just started
111:C 22 Dec 2021 20:36:16.773 # Configuration loaded
111:M 22 Dec 2021 20:36:16.774 * monotonic clock: POSIX clock_gettime
111:M 22 Dec 2021 20:36:16.775 * Running mode=standalone, port=6379.
111:M 22 Dec 2021 20:36:16.776 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
111:M 22 Dec 2021 20:36:16.776 # Server initialized
111:M 22 Dec 2021 20:36:16.777 * Loading RDB produced by version 6.2.1
111:M 22 Dec 2021 20:36:16.777 * RDB age 22 seconds
111:M 22 Dec 2021 20:36:16.777 * RDB memory usage when created 19.89 Mb
111:M 22 Dec 2021 20:36:16.823 # Done loading RDB, keys loaded: 4451, keys expired: 9.
111:M 22 Dec 2021 20:36:16.823 * DB loaded from disk: 0.047 seconds
111:M 22 Dec 2021 20:36:16.823 * Ready to accept connections

بعد ذلك بقليل أرى

I, [2021-12-22T20:36:27.079511 #1]  INFO -- : cd /var/www/discourse & git reset --hard
139:C 22 Dec 2021 20:36:27.084 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
139:C 22 Dec 2021 20:36:27.086 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=139, just started
139:C 22 Dec 2021 20:36:27.086 # Configuration loaded
139:M 22 Dec 2021 20:36:27.087 * monotonic clock: POSIX clock_gettime
139:M 22 Dec 2021 20:36:27.087 # Warning: Could not create server TCP listening socket *:6379: bind: Address already in use
139:M 22 Dec 2021 20:36:27.087 # Failed listening on port 6379 (TCP), aborting.
Checking out files: 100% (26188/26188), done.
I, [2021-12-22T20:36:30.153161 #1]  INFO -- : HEAD is now at eb82849c FIX: none and all categories filter (#14999)
إعجاب واحد (1)

نعم، هذا يبدو مشابهًا لما أراه من بناء هذا الصباح. لكن لا شيء يستمع بالفعل على هذا المنفذ. إنه غريب.

إعجاب واحد (1)

غرابةً، إعداداتي تعمل بشكل جيد، لدي

root     26269  0.0  0.0   2160     0 ?        Ss   Dec22   0:00 runsv redis
root     26277  0.0  0.0   2304    24 ?        S    Dec22   0:00 svlogd /var/log/redis
uuidd    26278  0.2  0.4  83816  4088 ?        Sl   Dec22   3:31 /usr/bin/redis-server *:6379

ومع ذلك، أنا أيضًا لا أرى (من lsof، داخل الحاوية أو خارجها) أي شيء يستمع على هذا المنفذ.

إعجاب واحد (1)

هذا مشجع إلى حد ما. وإلى حد ما ليس كذلك…

إعجاب واحد (1)

قد يُظهر السجل الخاص بي مجموعة من الإدخالات كل 5 دقائق. ربما يكون هذا طبيعيًا، ولا تتعلق مشكلات المنتدى لديك بـ redis؟؟

$ less /var/discourse/shared/standalone/log/var-log/redis/current
23478:C 23 Dec 2021 18:47:35.233 * تم حفظ قاعدة البيانات على القرص
23478:C 23 Dec 2021 18:47:35.234 * RDB: تم استخدام 1 ميغابايت من الذاكرة بواسطة النسخ عند الكتابة
52:M 23 Dec 2021 18:47:35.290 * انتهت عملية الحفظ في الخلفية بنجاح
52:M 23 Dec 2021 18:52:36.033 * 100 تغيير في 300 ثانية. جاري الحفظ...
52:M 23 Dec 2021 18:52:36.034 * بدأت عملية الحفظ في الخلفية بواسطة المعرف 23804
23804:C 23 Dec 2021 18:52:36.177 * تم حفظ قاعدة البيانات على القرص
23804:C 23 Dec 2021 18:52:36.178 * RDB: تم استخدام 1 ميغابايت من الذاكرة بواسطة النسخ عند الكتابة
52:M 23 Dec 2021 18:52:36.235 * انتهت عملية الحفظ في الخلفية بنجاح
52:M 23 Dec 2021 18:57:37.085 * 100 تغيير في 300 ثانية. جاري الحفظ...
52:M 23 Dec 2021 18:57:37.086 * بدأت عملية الحفظ في الخلفية بواسطة المعرف 24137
24137:C 23 Dec 2021 18:57:37.221 * تم حفظ قاعدة البيانات على القرص
24137:C 23 Dec 2021 18:57:37.222 * RDB: تم استخدام 1 ميغابايت من الذاكرة بواسطة النسخ عند الكتابة
52:M 23 Dec 2021 18:57:37.287 * انتهت عملية الحفظ في الخلفية بنجاح
52:M 23 Dec 2021 19:02:38.033 * 100 تغيير في 300 ثانية. جاري الحفظ...
52:M 23 Dec 2021 19:02:38.034 * بدأت عملية الحفظ في الخلفية بواسطة المعرف 24466
إعجاب واحد (1)

شكراً لك. على الرغم من أن هذا يشير إلى أنني عدت إلى نقطة البداية مع منتدى معطل… أوتش.

إعجاب واحد (1)