---
title: "Uwchraddio heb amser segur"
description: "Uwchraddio Quire hunangynhaliol heb amser segur."
image: "https://docs.quirelms.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.quirelms.com/cy/llms.txt
> Use this file to discover all available pages before exploring further.

# Uwchraddio heb amser segur

<span id="upgrading-without-downtime"></span>

Mae'r rheolau yn adran 7 o `docs/architecture/23-ops.md` ac
adran 4.1 o `docs/architecture/07-data.md`. Dyma'r drefn.

## Y warant sy'n gwneud hyn yn ddiogel <!--quire:the-guarantee-that-makes-it-safe-->

**Mae datganiad R yn rhedeg yn gywir yn erbyn sgema R a sgema R llai un.** Rhennir pob
newid sgema yn ehangu, trawsnewid a chontractio:

1. **Ehangu**: ychwanegu'r golofn, tabl neu fynegai newydd. Mae'r hen god yn ei anwybyddu.
2. **Trawsnewid**, am o leiaf un datganiad: mae cod newydd yn ysgrifennu'r ddwy ffurf ac
   yn darllen yr un newydd; mae swydd y gellir ei hailddechrau yn ôl-lenwi rhesi hen.
3. **Contractio**: gollwng yr hen ffurf, mewn datganiad diweddarach, ar ei phen ei hun.

Felly, ar unrhyw adeg yn ystod uwchraddiad treigl, gall prosesau hen a newydd rannu un
 gronfa ddata. Nid oes mudo i lawr: ni all mudo a ollyngodd golofn awr yn ôl adfer y rhesi a ysgrifennwyd yn yr awr honno.

Mae'r swydd CI `schema-compat` yn gwirio'r warant ar bob datganiad drwy redeg profion y datganiad blaenorol yn erbyn y sgema newydd.

## Cyn dechrau <!--quire:before-you-start-->

1. Darllenwch nodiadau'r datganiad. Mae datganiad sydd angen ffenestr cynnal a chadw yn dweud hynny,
   ynghyd â'r amcangyfrif; un ar y mwyaf fesul datganiad.
2. Rhedwch y prawf adfer, neu cadarnhewch ei fod wedi pasio'n wyrdd ar gyfer y datganiad hwn
   ([backup-restore.md](/cy/ops/backup-restore/)). Mae prawf a fethodd yn rhwystro'r
   uwchraddiad.
3. Gwnewch gopi wrth gefn sylfaenol: `docker compose -f docker/compose.yaml --profile backup
   run --rm backup`.

## Docker Compose, un host <!--quire:docker-compose-one-host-->

```sh
export QUIRE_RELEASE=2026.10.0            # or set it in docker/.env
docker compose -f docker/compose.yaml pull   # or build
docker compose -f docker/compose.yaml run --rm migrate
docker compose -f docker/compose.yaml up -d --no-deps web content collab
docker compose -f docker/compose.yaml up -d --no-deps worker scheduler
```

Mae'r drefn yn fwriadol:

1. **Mudo yn gyntaf**, tra bo'r datganiad hen yn gwasanaethu traffig. Nid yw mudo ehangu
   yn weladwy iddo.
2. **Y haen we nesaf.** Ar SIGTERM, mae pob proses we yn newid `/readyz` i
   `draining`, yn gorffen ceisiadau sydd ar y gweill o fewn 30 eiliad, yn cau ffrydiau
   gyda gwybodaeth ailgysylltu, ac yn gadael. Mae `stop_grace_period` yn 40 eiliad, felly
   nid yw Compose byth yn torri draen iach.
3. **Gweithwyr olaf**, fel bod y siâp digwyddiad diweddaraf yn cael ei gynhyrchu cyn i'r
   defnyddiwr diweddaraf ei ddisgwyl. Mae gweithwyr yn stopio nôl gwaith ar unwaith ac yn cael 120 eiliad;
   caiff swydd na ellir ei gorffen ei nôl eto rywle arall, sy'n ddiogel oherwydd
   bod pob swydd yn idempotent. Mae'r scheduler yn trosglwyddo arweinyddiaeth ar ei tic nesaf.

Ar un host, mae Compose yn disodli pob cynhwysydd yn ei dro, felly ceir bwlch byr
fesul gwasanaeth. I osgoi unrhyw fwlch, rhedwch y haen we fel dau gynhwysydd y tu ôl i'ch
proxy eich hun (ffeil override sy'n ychwanegu ail wasanaeth web heb borth wedi'i gyhoeddi),
a'u hail-greu un ar y tro, gan aros i bob un adrodd ei fod yn iach cyn yr un nesaf.

## Sawl host neu drefnydd <!--quire:several-hosts-or-an-orchestrator-->

Defnyddiwch yr un drefn: mudo unwaith o un swydd, yna treiglo'r haen we
gydag un yn ymchwyddo a dim un yn anweithredol, yna'r gweithwyr. Pwyntiwch brobau parodrwydd
at `/readyz` a bywiogrwydd at `/healthz`.

Gyda chronfeydd data tenantiaid penodedig, mae'r cam `migrate` yn gwneud y ddau beth: mae'n mudo
cronfa ddata reoli yn gyntaf, yna pob cronfa a restrir yn
`ops.tenant_database`, un ar y tro, pob un o dan ei glo ei hun. Nid yw methiant mewn
un gronfa ddata tenant yn atal y lleill. Pan fydd pob cronfa wedi'i chwblhau, mae'n
cymharu'r cofnodion mudo ac yn gadael gyda chod nad yw'n sero oni bai bod pob cronfa wedi
cymhwyso'n union yr un mudo â chronfa ddata reoli, gan enwi pob un sydd ar ei hôl hi neu o'i blaen. Mae'r un gorchymyn yn gosod tablau ciw ym mhob
cronfa ddata, oherwydd mae'r worker yn defnyddio swyddi tenant wedi'u pinio lle cawsant eu
hysgrifennu.

```sh
bun apps/worker/src/migrate.ts   # what the Compose step runs
bun run db:migrate:all                            # the same, from a checkout
```
Mae'r mudo arferol a'r gosodiad cychwynnol hefyd yn gosod dogfennau cyfreithiol Saesneg canonaidd gweithredwr Quire yn `ops.platform_policy_version`. Mae'r gosodwr yn idempotent: dim ond y testunau Saesneg coll a'r union destunau dros dro a blannwyd gan y mudo sy'n cael eu disodli. Mae'r hadau'n cael eu harchifo ac mae fersiwn newydd wedi'i chyhoeddi yn cael ei mewnosod; cedwir cyfeiriadau derbyn hanesyddol a'r testunau. Cedwir unrhyw fersiwn ddilys a ysgrifennwyd gan y gweithredwr, gan gynnwys drafft, a rhaid ei rheoli trwy gonsol Polisïau'r platfform. Nid yw dogfennau polisi tenant, fersiynau na chydsyniad byth yn newid yn y trosglwyddiad hwn. Cyhoeddi testun y gweithredwr yw hyn, nid ardystiad cyfreithiol na chyflawniad awtomatig o'i addewidion.


Cyrhaeddir pob cronfa ddata benodedig drwy'r enw y'i cofrestrwyd oddi tano.
Mae angen y canlynol ar gronfa ddata a gofrestrwyd fel `env:QUIRE_DB_NORTHWIND_URL`:

| Newidyn | Defnydd |
| --- | --- |
| `QUIRE_DB_NORTHWIND_URL` | Rôl y rhaglen, ar gyfer yr haen we a'r worker |
| `QUIRE_DB_NORTHWIND_URL_MIGRATOR` | Rôl y mudo, ar gyfer y gorchymyn hwn a symudiadau |
| `QUIRE_DB_NORTHWIND_URL_SUPERUSER` | Dewisol: ailgymhwyso'r cychwyn (rolau, sgemâu, cynorthwywyr) cyn mudo |

Mae cronfa ddata gofrestredig heb gysylltiad `_MIGRATOR` yn cael ei hadrodd fel methiant,
byth yn cael ei hepgor. Gall yr haen we dreiglo unwaith y bydd y gronfa reoli wedi'i chwblhau. Mae cronfa
 tenant sydd awr ar ei hôl hi'n rhybuddio; ar ôl diwrnod mae'n anfon larwm.

## pgvector <!--quire:pgvector-->

O fudo 0264 ymlaen, mae'r corpws sylfaenu'n defnyddio mynegai HNSW pgvector lle mae gan
y gweinydd yr estyniad; mae gwasanaeth Compose `postgres` wedi'i adeiladu ag ef
(`docker/postgres.Dockerfile`). Mae'r `migrate` cyntaf ar ôl newid
delweddau'n creu'r estyniad drwy gychwyn superuser, ac yna mae 0264 yn ychwanegu colofn fector
wedi'i chynhyrchu ac yn adeiladu'r mynegai. Mae ychwanegu'r golofn yn ailysgrifennu
`app.ai_chunk` unwaith o dan glo unigryw, felly mae ceisiadau sylfaenu'n aros; nid yw dim arall yn cyffwrdd â'r tabl hwnnw.

Ar weinydd heb pgvector, mae 0264 yn cofnodi hysbysiad ac nid yw'n newid dim, ac mae
adfer yn parhau'n union. Gyda fersiwn pgvector hŷn na 0.8, caiff y golofn a'r mynegai eu hadeiladu ond mae adfer yn parhau'n union nes uwchraddio'r estyniad
(`alter extension vector update`), oherwydd mae angen sganiau ailadroddol 0.8 ar sganiau HNSW wedi'u hidlo. I'w alluogi'n ddiweddarach ar weinydd hebddo, gosodwch yr
estyniad, rhedwch y cychwyn eto (neu `create extension vector` fel
superuser), yna fel `quire_migrator`:

```sql
set maintenance_work_mem = '1GB';  -- the HNSW build is much faster in memory
select ops.ai_chunk_enable_vector_index();
```

Mae'n idempotent ac yn dychwelyd `enabled` neu `unavailable`. Rhedwch ef ar bob
cronfa ddata tenant benodedig hefyd.

## Dychwelyd yn ôl <!--quire:rolling-back-->

Mae dychwelyd **cod** bob amser ar gael: gosodwch `QUIRE_RELEASE` i'r
tag blaenorol a rhedwch `up -d` eto. Mae hynny'n gweithio oherwydd bod y sgema'n gydnaws
yn y ddau gyfeiriad o fewn datganiad.

Ni chynigir dychwelyd **sgema**. Yr hyn na ellir ei ddadwneud, a sut i
adfer ohono:

| Methu â gwrthdroi | Adferiad |
| --- | --- |
| Mudo contractio a ollyngodd golofn | Adfer i bwynt amser cyn y gollwng i gronfa ddata newydd, echdynnu, cyfuno |
| Newid data yn ei le | Yr un peth, yna cysoni ysgrifennu ers hynny |
| Webhooks a digwyddiadau a anfonwyd | Digwyddiadau digolledu, byth dileu |
| E-bost a anfonwyd | Person yn ysgrifennu'r dilyniant |
| Cadwyn hash archwilio | Peidio byth ag ailysgrifennu; atodi cofnod cywiro |

Dyna pam mae mudo contractio'n cael ei ryddhau ar ei ben ei hun: mae gan adferiad ffin glir bryd hynny.

## Gwirio'r uwchraddiad <!--quire:checking-the-upgrade-->

```sh
docker compose -f docker/compose.yaml ps           # every service healthy
curl -fsS http://localhost:8080/readyz             # ready, and what is configured
docker compose -f docker/compose.yaml logs migrate # the migrations applied
```

Source: https://docs.quirelms.com/cy/ops/upgrade/index.mdx
