عالق في حلقة تحديث بعد تحديث PostgreSQL 13

لقد قرأت الوثائق هنا، لكنها لا تغطي حالتي: PostgreSQL 13 update

أنا عالق في حالة “كل إعادة بناء تقوم بالترقية مرة أخرى، أي حلقة الترقية”:

-------------------------------------------------------------------------------------
تمت ترقية Postgres بنجاح

يوجد قاعدة البيانات القديمة (الإصدار 10) في /shared/postgres_data_old

لإكمال الترقية، أعد البناء مرة أخرى باستخدام الأمر:

./launcher rebuild app
-------------------------------------------------------------------------------------

تقول الوثائق إن هذا يحدث لأن لا تزال هناك ملفات من آخر ترقية عالقة. انقلها إلى مكان آخر قبل المتابعة.

لكنني لا أملك أي ملفات قديمة:

root@connect:/var/discourse# ls /mnt/volume_ams3_01/shared/standalone/
backups  letsencrypt  log  postgres_backup  postgres_data  postgres_data_new  postgres_run  redis_data  ssl  state  tmp  uploads

ملاحظتان إضافيتان:

  • مجلد postgres_data فارغ.
  • لدي مجلد مشترك منفصل يستخدم مساحات DigitalOcean.

ما الذي يمكنني تجربته لحل هذه المشكلة؟

مرحبًا أليكس،

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

إعجابَين (2)

نعم، يحتوي postgres_data_new على قاعدة بياناتي، ويؤكد ملف PG_VERSION الموجود بداخله أن الإصدار هو 13.

لست متأكدًا من أي سجلات ستكون مفيدة لمشاركتها معك (أو أين يمكن العثور عليها).

في هذه الحالة، يجب أن تتمكن من نسخ postgres_data_new إلى مجلد postgres_data، ثم إعادة البناء. سيعرف launcher أن قاعدة البيانات محدّثة بالفعل على PG13، وسيتابع من هناك.

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

مرحبًا مايكل! نسيت أن أذكر أنني جربت ذلك (مرتين) منذ نشري الأصلي هنا. لا زلت عالقًا في الحلقة.

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

لست متأكدًا من كيفية التقاط مخرجات ./launcher rebuild app، لكن هذا ما لدي.

يبدأ كالتالي:

root@connect:/var/discourse# ./launcher rebuild app
Ensuring launcher is up to date
Fetching origin
Launcher is up-to-date
Stopping old container
+ /usr/bin/docker stop -t 60 app
app
cd /pups && git pull && git checkout v1.0.3 && /pups/bin/pups --stdin
From https://github.com/discourse/pups
   17f04ec..e0ff889  master     -> origin/master
 * [new tag]         v1.1.1     -> v1.1.1
 * [new tag]         v1.1.0     -> v1.1.0
Updating 17f04ec..e0ff889
Fast-forward
 .github/workflows/ci.yml     |  29 ++++++
 .github/workflows/lint.yml   |  27 +++++
 .rubocop.yml                 |   3 +
 Gemfile                      |   2 +
 Guardfile                    |   4 +-
 README.md                    |  21 ++++
 Rakefile                     |  14 +--
 bin/pups                     |   8 +-
 lib/pups.rb                  |  32 ++++--
 lib/pups/cli.rb              |  92 ++++++++++-------
 lib/pups/command.rb          |  25 +++--
 lib/pups/config.rb           | 240 +++++++++++++++++++++++--------------------
 lib/pups/docker.rb           |  69 +++++++++++++
 lib/pups/exec_command.rb     | 182 ++++++++++++++++----------------
 lib/pups/file_command.rb     |  60 +++++------
 lib/pups/merge_command.rb    |  94 ++++++++---------
 lib/pups/replace_command.rb  |  70 +++++++------
 lib/pups/runit.rb            |  47 +++++----
 lib/pups/version.rb          |   4 +-
 pups.gemspec                 |  37 ++++---
 test/cli_test.rb             | 102 +++++++++++++++---
 test/config_test.rb          | 215 ++++++++++++++++++++++++++++----------
 test/docker_test.rb          | 157 ++++++++++++++++++++++++++++
 test/exec_command_test.rb    |  62 ++++++-----
 test/file_command_test.rb    |  17 ++-
 test/merge_command_test.rb   |  64 ++++++------
 test/replace_command_test.rb |  86 ++++++++--------
 test/test_helper.rb          |   2 +
 28 files changed, 1158 insertions(+), 607 deletions(-)
 create mode 100644 .github/workflows/ci.yml
 create mode 100644 .github/workflows/lint.yml
 create mode 100644 .rubocop.yml
 create mode 100644 lib/pups/docker.rb
 create mode 100644 test/docker_test.rb
Note: checking out 'v1.0.3'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at d1db030 cut a new version
I, [2021-10-19T05:37:44.995716 #1]  INFO -- : Loading --stdin
I, [2021-10-19T05:37:45.001857 #1]  INFO -- : > locale-gen $LANG && update-locale
I, [2021-10-19T05:37:45.031533 #1]  INFO -- : Generating locales (this might take a while)...
Generation complete.

I, [2021-10-19T05:37:45.032260 #1]  INFO -- : > mkdir -p /shared/postgres_run
I, [2021-10-19T05:37:45.037403 #1]  INFO -- :
I, [2021-10-19T05:37:45.038002 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run
I, [2021-10-19T05:37:45.041480 #1]  INFO -- :
I, [2021-10-19T05:37:45.041974 #1]  INFO -- : > chmod 775 /shared/postgres_run
I, [2021-10-19T05:37:45.044313 #1]  INFO -- :
I, [2021-10-19T05:37:45.044759 #1]  INFO -- : > rm -fr /var/run/postgresql
I, [2021-10-19T05:37:45.047047 #1]  INFO -- :
I, [2021-10-19T05:37:45.047605 #1]  INFO -- : > ln -s /shared/postgres_run /var/run/postgresql
I, [2021-10-19T05:37:45.051062 #1]  INFO -- :
I, [2021-10-19T05:37:45.051463 #1]  INFO -- : > socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1
2021/10/19 05:37:45 socat[33] E connect(6, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): No such file or directory
I, [2021-10-19T05:37:45.058669 #1]  INFO -- :
I, [2021-10-19T05:37:45.058976 #1]  INFO -- : > rm -fr /shared/postgres_run/.s*
I, [2021-10-19T05:37:45.061427 #1]  INFO -- :
I, [2021-10-19T05:37:45.061743 #1]  INFO -- : > rm -fr /shared/postgres_run/*.pid
I, [2021-10-19T05:37:45.063969 #1]  INFO -- :
I, [2021-10-19T05:37:45.064258 #1]  INFO -- : > mkdir -p /shared/postgres_run/13-main.pg_stat_tmp
I, [2021-10-19T05:37:45.068148 #1]  INFO -- :
I, [2021-10-19T05:37:45.068570 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run/13-main.pg_stat_tmp
I, [2021-10-19T05:37:45.070400 #1]  INFO -- :
I, [2021-10-19T05:37:45.074243 #1]  INFO -- : File > /etc/service/postgres/run  chmod: +x  chown:
I, [2021-10-19T05:37:45.077577 #1]  INFO -- : File > /etc/service/postgres/log/run  chmod: +x  chown:
I, [2021-10-19T05:37:45.081084 #1]  INFO -- : File > /etc/runit/3.d/99-postgres  chmod: +x  chown:
I, [2021-10-19T05:37:45.084463 #1]  INFO -- : File > /root/upgrade_postgres  chmod: +x  chown:
I, [2021-10-19T05:37:45.084841 #1]  INFO -- : > chown -R root /var/lib/postgresql/13/main
I, [2021-10-19T05:37:45.766251 #1]  INFO -- :
I, [2021-10-19T05:37:45.766560 #1]  INFO -- : > [ ! -e /shared/postgres_data ] && install -d -m 0755 -o postgres -g postgres /shared/postgres_data && sudo -E -u postgres /usr/lib/postgresql/13/bin/initdb -D /shared/postgres_data || exit 0
I, [2021-10-19T05:37:45.769955 #1]  INFO -- :
I, [2021-10-19T05:37:45.770597 #1]  INFO -- : > chown -R postgres:postgres /shared/postgres_data
I, [2021-10-19T05:37:45.841916 #1]  INFO -- :
I, [2021-10-19T05:37:45.842605 #1]  INFO -- : > chown -R postgres:postgres /var/run/postgresql
I, [2021-10-19T05:37:45.845109 #1]  INFO -- :
I, [2021-10-19T05:37:45.845574 #1]  INFO -- : > /root/upgrade_postgres
initdb: warning: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
debconf: delaying package configuration, since apt-utils is not installed

ثم يمر بسرعة كبيرة (مع وجود العديد من الأسطر في /shared/postgres_data/base/whatever) وينتهي كالتالي:

  /shared/postgres_data/base/16400/203028
  /shared/postgres_data/base/16400/203045
  /shared/postgres_data/base/16400/203047
  /shared/postgres_data/base/16400/203049
  /shared/postgres_data/base/16400/203050
  /shared/postgres_data/base/13014/2613
  /shared/postgres_data/base/13014/2683
  /shared/postgres_data/base/1/2613
  /shared/postgres_data/base/1/2683
                                                            ok
Setting next OID for new cluster                            ok
Sync data directory to disk                                 ok
Creating script to analyze new cluster                      ok
Creating script to delete old cluster                       ok

Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade so,
once you start the new server, consider running:
    ./analyze_new_cluster.sh

Running this script will delete the old cluster's data files:
    ./delete_old_cluster.sh
-------------------------------------------------------------------------------------
UPGRADE OF POSTGRES COMPLETE

Old 10 database is stored at /shared/postgres_data_old

To complete the upgrade, rebuild again using:

./launcher rebuild app
-------------------------------------------------------------------------------------

a68ed0b1b54e4a0e2dae2543dc27d87be02ca1f81738e0d2e43511a46524a980

هل تمانع مشاركة القوالب التي تتضمنها في containers/app.yml؟

بالتأكيد:

templates:
  # - "templates/postgres.10.template.yml"
  - "templates/postgres.13.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"
  - "templates/web.ratelimited.template.yml"
  - "templates/web.replygif.template.yml" # لإضافة ReplyGIF: https://github.com/cpradio/discourse-plugin-replygif

(سأقوم بتعليق سطر إضافة ReplyGIF، لأنني لا أستخدمها على أي حال.)

ماذا يعني هذا؟ أعتقد أن هذا قد يكون ذا صلة.

لماذا لا يكون هذا مجرد قالب postgres بدون الرقم 13؟

قد يكون هذا هو المشكلة.

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

مرحبًا جاي!

أنت محق، هذا خطأ ويبدو أنه السبب المرجح. قمت بتغييره إلى templates/postgres.template.yml، وأعدت البناء مرتين، لكنني لا أزال عالقًا في الحلقة.

اتبعت هذا الدليل (عندما كان متاحًا) لاستخدام مساحات DigitalOcean للنسخ الاحتياطي وتحميل الصور.

يبدو أن بيانات postgres الخاصة بي موجودة في مكانين:

  • /var/postgres_data_discourse (PG_VERSION = 10)
  • /mnt/volume_ams3_01/shared/standalone/postgres_data_new (PG_VERSION = 13)
  • /mnt/volume_ams3_01/shared/standalone/postgres_data (PG_VERSION = 13) – قمت بنسخ هذه الملفات يدويًا من postgres_data_new كما تم اقتراحه سابقًا

تخميني الحالي هو أن هذا يتعلق بربط المجلدات (volume mapping) الخاص بك.
.

لكن ما ورد أعلاه يوحي بأن لديك نسخة PostgreSQL منفصلة عن نسخة PostgreSQL التي تقوم Discourse بتحديثها. لا علاقة لـ Discourse بنسخة PostgreSQL الموجودة في /var/postgres_data_discourse. ربما حاولت استخدام نسخة PostgreSQL خاصة بك بدلاً من تلك التي توفرها Discourse؟ هذا لا يبدو وكأنه تثبيت قياسي.

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

هذا تثبيت قياسي من عام 2016، وقد قمت بتحديثه منذ ذلك الحين، لذا ربما حدث تغيير ما في هذه الأثناء؟

بالنسبة لربط الأحجام (volume mapping)، اتبعت الخطوات الواردة في الدليل الذي أشرت إليه أعلاه.

لا أعتقد أنني حاولت تثبيت postgres الخاص بي — فأنا لست على درجة كافية من الخبرة التقنية لأعرف لماذا قد أريد حتى القيام بذلك :smiley:

يمكنني القول إنني واجهت “مشكلة الحلقة” (loop problem) عندما حاولت التحديث من postgres 10 إلى 12، لذا تركتها جانبًا لأعمل عليها لاحقًا. قبل أيام قليلة توقفت عن القدرة على إعادة البناء تمامًا، ومن رسائل الخطأ استنتجت أن المشكلة تتعلق بـ postgres، لذا حاولت التحديث ظنًا مني أنه قد يحل المشكلة.

هل من الممكن التراجع إلى قالب postgres 10 لمعرفة الأخطاء التي يثيرها؟

تعديل: أي اقتراح آخر مرحب به! لست متأكدًا من كيفية المضي قدمًا في هذه المرحلة.

كان من الجيد ذكر ذلك في منشورك الأول.

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

إعجابَين (2)

يبدو ذلك كثيرًا من المتاعب لحل مشكلة واحدة، لكن على الأقل هو مسار ملموس للمضي قدمًا. شكرًا لك على مساعدتي في تجاوز هذا الأمر، جايز! :folded_hands:

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

إذا كان هذا النظام قد تم إعداده في عام 2016 وما زال يحتوي على نظام التشغيل ذلك، فإن ترقية نظام التشغيل ليست مبكرة جدًا أيضًا، وباعتباري رأيي الشخصي، فإن إعداد خادم جديد أسهل بكثير من إجراء ترقية لنظام التشغيل (قد يكون هذا أقل صحة الآن مما كان عليه قبل 15 عامًا عندما تكونت هذا الرأي!).

إعجابَين (2)

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.