A major version upgrade refers to a change in the primary version number. For example: upgrading from 4.6.0 to 5.0.0, or from 4.8.1 to 5.0.0.
For upgrades from YMatrix 4.X to 5.X, YMatrix provides two options. Choose one carefully based on your requirements.
Below is a step-by-step guide for both approaches, using an upgrade from YMatrix 4.8.1 to 5.0.0 as an example.
Note!
Choose only one of the two methods. Do not perform both.
This method allows an in-place upgrade from YMatrix 4 to YMatrix 5. Both versions will coexist on the same host. The software for both versions can be installed simultaneously, and both clusters can run independently without interference. However, ensure that the storage capacity on the current machine is at least twice the size of the current cluster.
Example cluster configuration: 4 hosts. One master node (Master), two segment nodes (Segment) (each with mirror instances), and one standby master node (Standby).
Check the current YMatrix 4 software version.
=# select version();
versi
on
---------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 12 (MatrixDB 4.8.1-enterprise) (Greenplum Database 7.0.0+dev.18290.g7184139e3e build commit:7184139e3ebba8b77239ec19db63c04
bd43951b6) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.2.1 20220127 (Red Hat 11.2.1-9), 64-bit compiled on Mar 21 2023 06:51:57
(1 row)
View source cluster configuration.
=# select * from gp_segment_configuration order by content, dbid;
dbid | content | role | preferred_role | mode | status | port | hostname |
address | datadir
------+---------+------+----------------+------+--------+------+-------------------------------------------------+---------------------
----------------------------+----------------------------------------
1 | -1 | p | p | n | u | 5432 | ip-10-0-128-97.cn-northwest-1.compute.internal | ip-10-0-128-97.cn-no
rthwest-1.compute.internal | /mxdata_20230321075750/master/mxseg-1
10 | -1 | m | m | s | u | 5432 | ip-10-0-92-234.cn-northwest-1.compute.internal | ip-10-0-92-234.cn-no
rthwest-1.compute.internal | /mxdata_20230321075750/standby/mxseg-1
4 | 0 | p | p | s | u | 6000 | ip-10-0-101-114.cn-northwest-1.compute.internal | ip-10-0-101-114.cn-n
orthwest-1.compute.internal | /mxdata_20230321075750/primary/mxseg0
8 | 0 | m | m | s | u | 7001 | ip-10-0-137-193.cn-northwest-1.compute.internal | ip-10-0-137-193.cn-n
orthwest-1.compute.internal | /mxdata_20230321075750/mirror/mxseg0
5 | 1 | p | p | s | u | 6001 | ip-10-0-101-114.cn-northwest-1.compute.internal | ip-10-0-101-114.cn-n
orthwest-1.compute.internal | /mxdata_20230321075750/primary/mxseg1
9 | 1 | m | m | s | u | 7000 | ip-10-0-137-193.cn-northwest-1.compute.internal | ip-10-0-137-193.cn-n
orthwest-1.compute.internal | /mxdata_20230321075750/mirror/mxseg1
2 | 2 | p | p | s | u | 6000 | ip-10-0-137-193.cn-northwest-1.compute.internal | ip-10-0-137-193.cn-n
orthwest-1.compute.internal | /mxdata_20230321075750/primary/mxseg2
6 | 2 | m | m | s | u | 7000 | ip-10-0-101-114.cn-northwest-1.compute.internal | ip-10-0-101-114.cn-n
orthwest-1.compute.internal | /mxdata_20230321075750/mirror/mxseg2
3 | 3 | p | p | s | u | 6001 | ip-10-0-137-193.cn-northwest-1.compute.internal | ip-10-0-137-193.cn-n
orthwest-1.compute.internal | /mxdata_20230321075750/primary/mxseg3
7 | 3 | m | m | s | u | 7001 | ip-10-0-101-114.cn-northwest-1.compute.internal | ip-10-0-101-114.cn-n
orthwest-1.compute.internal | /mxdata_20230321075750/mirror/mxseg3
(10 rows)
Retrieve hostnames to identify which machines host the current cluster.
=# select distinct(hostname) from gp_segment_configuration ;
hostname
-------------------------------------------------
ip-10-0-101-114.cn-northwest-1.compute.internal
ip-10-0-92-234.cn-northwest-1.compute.internal
ip-10-0-137-193.cn-northwest-1.compute.internal
ip-10-0-128-97.cn-northwest-1.compute.internal
(4 rows)
Note!
The following commands must be executed on all nodes.
Install YMatrix 5 software.
$ sudo yum install -y matrixdb5-5.0.0+enterprise-1.el7.x86_64.rpm
Verify installation of YMatrix 4.
$ yum info matrixdb
Loaded plugins: fastestmirror
Determining fastest mirrors
* base: download.cf.centos.org
* centos-sclo-rh: download.cf.centos.org
* centos-sclo-sclo: download.cf.centos.org
* epel: mirrors.bfsu.edu.cn
* extras: download.cf.centos.org
* updates: download.cf.centos.org
https://apache.bintray.com/arrow/centos/7/x86_64/repodata/repomd.xml: [Errno 14] curl#51 - "Unable to communicate securely with peer: requested domain name does not match the server's certificate."
Trying other mirror.
Installed Packages
Name : matrixdb
Arch : x86_64
Version : 4.8.1.enterprise
Release : 1.el7
Size : 287 M
Repo : installed
From repo : /matrixdb-4.8.1.enterprise-1.el7.x86_64
Summary : MatrixDB
URL : https://matrixdb.cn
License : MatrixDB License
Description : MatrixDB is a timeseries-optimized database based on Greenplum.
Verify installation of YMatrix 5.
[ec2-user@ip-10-0-128-97 ~]$ yum info matrixdb5
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: download.cf.centos.org
* centos-sclo-rh: download.cf.centos.org
* centos-sclo-sclo: download.cf.centos.org
* epel: mirrors.bfsu.edu.cn
* extras: download.cf.centos.org
* updates: download.cf.centos.org
https://apache.bintray.com/arrow/centos/7/x86_64/repodata/repomd.xml: [Errno 14] curl#51 - "Unable to communicate securely with peer: requested domain name does not match the server's certificate."
Trying other mirror.
Installed Packages
Name : matrixdb5
Arch : x86_64
Version : 5.0.0+enterprise~beta.6
Release : 1.el7
Size : 185 M
Repo : installed
Summary : MatrixDB 5
URL : https://ymatrix.cn
License : MatrixDB License
Description : MatrixDB is a timeseries-optimized database based on Greenplum.
Check the status of the supervisor service for the YMatrix 4 cluster.
[ec2-user@ip-10-0-128-97 ~]$ systemctl status matrixdb.supervisor.service
● matrixdb.supervisor.service - MatrixDB Supervisord Daemon
Loaded: loaded (/usr/lib/systemd/system/matrixdb.supervisor.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2023-03-21 07:45:07 UTC; 23min ago
Main PID: 1866 (supervisord)
CGroup: /system.slice/matrixdb.supervisor.service
├─1866 /usr/local/matrixdb/bin/supervisord -c /etc/matrixdb/supervisor.conf
├─1875 /usr/local/matrixdb/bin/mxui
├─1876 /usr/local/matrixdb/bin/cylinder
├─2349 /usr/local/matrixdb-4.8.1.enterprise/bin/postgres -D /mxdata_20230321075750/master/mxseg-1 -p 5432 -c gp_role=disp...
├─2350 postgres: 5432, master logger process
├─2352 postgres: 5432, checkpointer
├─2353 postgres: 5432, background writer
├─2354 postgres: 5432, walwriter
├─2355 postgres: 5432, stats collector
├─2356 postgres: 5432, dtx recovery process con1
├─2357 postgres: 5432, ftsprobe process
├─2360 postgres: 5432, monitor
├─2361 postgres: 5432, matrixgate warden
├─2363 postgres: 5432, logical replication launcher
├─2364 postgres: 5432, ic proxy process
├─2365 postgres: 5432, sweeper process
├─2366 postgres: 5432, global deadlock detector process
├─2397 postgres: 5432, walsender mxadmin 10.0.92.234(34154) streaming 0/C3BD940
├─2431 /usr/local/matrixdb/bin/mxctl telegraf exec --path /usr/local/matrixdb --gpname ip-10-0-128-97.cn-northwest-1.comp...
├─2436 /usr/local/matrixdb/bin/telegraf --config /tmp/mxui_collector_5432.conf
├─2475 postgres: 5432, mxstat reaper con29 cmd17
├─3392 postgres: 5432, mxadmin matrixmgr [local] con29 seg-1 idle
├─4594 postgres: 5432, mxadmin postgres 10.0.128.97(44034) con251 cmd2 idle
└─4598 /usr/lib64/sa/sadc -S DISK 4 2 /tmp/sysstat-141050081
Mar 21 07:45:07 ip-10-0-128-97.cn-northwest-1.compute.internal bash[1866]: time="2023-03-21T07:45:07Z" level=info msg="loaded pro...i]"
Mar 21 07:55:56 ip-10-0-128-97.cn-northwest-1.compute.internal useradd[1989]: new group: name=mxyNKVPS, GID=1002
Mar 21 07:55:56 ip-10-0-128-97.cn-northwest-1.compute.internal useradd[1989]: new user: name=mxyNKVPS, UID=1002, GID=1002, home=/...ash
Mar 21 07:55:56 ip-10-0-128-97.cn-northwest-1.compute.internal userdel[1996]: delete user 'mxyNKVPS'
Mar 21 07:55:56 ip-10-0-128-97.cn-northwest-1.compute.internal userdel[1996]: removed group 'mxyNKVPS' owned by 'mxyNKVPS'
Mar 21 07:55:56 ip-10-0-128-97.cn-northwest-1.compute.internal userdel[1996]: removed shadow group 'mxyNKVPS' owned by 'mxyNKVPS'
Mar 21 07:58:14 ip-10-0-128-97.cn-northwest-1.compute.internal useradd[2094]: new group: name=mxadmin, GID=1002
Mar 21 07:58:14 ip-10-0-128-97.cn-northwest-1.compute.internal useradd[2094]: new user: name=mxadmin, UID=1002, GID=1002, home=/h...ash
Mar 21 07:58:14 ip-10-0-128-97.cn-northwest-1.compute.internal su[2127]: (to mxadmin) root on none
Mar 21 07:58:14 ip-10-0-128-97.cn-northwest-1.compute.internal su[2141]: (to mxadmin) root on none
Hint: Some lines were ellipsized, use -l to show in full.
Check the status of the supervisor service for the YMatrix 5 cluster.
[ec2-user@ip-10-0-128-97 ~]$ systemctl status matrixdb5.supervisor.service
● matrixdb5.supervisor.service - MatrixDB 5 Supervisord Daemon
Loaded: loaded (/usr/lib/systemd/system/matrixdb5.supervisor.service; enabled; vendor preset: enabled)
Active: activating (auto-restart) (Result: exit-code) since Tue 2023-03-21 08:12:23 UTC; 1s ago
Process: 5229 ExecStart=/bin/bash -c PATH="$MXHOME/bin:$PATH" exec "$MXHOME"/bin/supervisord -c "$MX_SUPERVISOR_CONF" (code=exited, status=2)
Main PID: 5229 (code=exited, status=2)
Mar 21 08:12:23 ip-10-0-128-97.cn-northwest-1.compute.internal systemd[1]: matrixdb5.supervisor.service: main process exited, cod...ENT
Mar 21 08:12:23 ip-10-0-128-97.cn-northwest-1.compute.internal systemd[1]: Unit matrixdb5.supervisor.service entered failed state.
Mar 21 08:12:23 ip-10-0-128-97.cn-northwest-1.compute.internal systemd[1]: matrixdb5.supervisor.service failed.
Hint: Some lines were ellipsized, use -l to show in full.
Note!
At this point, the service cannot start due to default port conflicts.
Modify the port settings in the supervisord and MXUI configuration files (/etc/default/matrixdb5) for the YMatrix 5 cluster to avoid port conflicts with the YMatrix 4 cluster. (Assume ports 4618 and 8241 are not used by other processes.)
$ cat /etc/default/matrixdb5
MXHOME=/opt/ymatrix/matrixdb5
MXLOGDIR=/var/log/matrixdb5
MXCONFDIR=/etc/matrixdb5
MX_SUPERVISOR_PID_FILE=/var/run/matrixdb5.supervisord.pid
MX_SUPERVISOR_CONF=/etc/matrixdb5/supervisor.conf
MX_SUPERVISOR_INET_GRPC_SERVER_PORT=4617
MX_UI_PORT=8240
MX_DEPLOYER_PORT=4627
export MXHOME
export MXLOGDIR
export MXCONFDIR
export MX_SUPERVISOR_INET_GRPC_SERVER_PORT
Change the supervisor port MX_SUPERVISOR_INET_GRPC_SERVER_PORT from 4617 to 4618.
Change the MXUI port MX_UI_PORT from 8240 to 8241.
[ec2-user@ip-10-0-128-97 ~]$ sudo sed -i s/4617/4618/g /etc/default/matrixdb5
[ec2-user@ip-10-0-128-97 ~]$ sudo sed -i s/8240/8241/g /etc/default/matrixdb5
[ec2-user@ip-10-0-128-97 ~]$ cat /etc/default/matrixdb5
MXHOME=/opt/ymatrix/matrixdb5
MXLOGDIR=/var/log/matrixdb5
MXCONFDIR=/etc/matrixdb5
MX_SUPERVISOR_PID_FILE=/var/run/matrixdb5.supervisord.pid
MX_SUPERVISOR_CONF=/etc/matrixdb5/supervisor.conf
MX_SUPERVISOR_INET_GRPC_SERVER_PORT=4618
MX_UI_PORT=8241
MX_DEPLOYER_PORT=4627
export MXHOME
export MXLOGDIR
export MXCONFDIR
export MX_SUPERVISOR_INET_GRPC_SERVER_PORT
Restart the YMatrix 5 supervisor service and verify its status.
$ sudo systemctl restart matrixdb5.supervisor.service
$ sudo systemctl status matrixdb5.supervisor.service
● matrixdb5.supervisor.service - MatrixDB 5 Supervisord Daemon
Loaded: loaded (/usr/lib/systemd/system/matrixdb5.supervisor.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-03-21 08:27:02 UTC; 19s ago
Process: 9483 ExecStop=/bin/bash -c exec "$MXHOME"/bin/supervisorctl shutdown (code=exited, status=0/SUCCESS)
Main PID: 9488 (supervisord)
CGroup: /system.slice/matrixdb5.supervisor.service
├─9488 /opt/ymatrix/matrixdb5/bin/supervisord -c /etc/matrixdb5/supervisor.conf
└─9496 /opt/ymatrix/matrixdb5/bin/mxui
Mar 21 08:27:02 ip-10-0-128-97.cn-northwest-1.compute.internal systemd[1]: Started MatrixDB 5 Supervisord Daemon.
Mar 21 08:27:02 ip-10-0-128-97.cn-northwest-1.compute.internal bash[9488]: time="2023-03-21T08:27:02Z" level=info msg="load confi...onf
Mar 21 08:27:02 ip-10-0-128-97.cn-northwest-1.compute.internal bash[9488]: time="2023-03-21T08:27:02Z" level=info msg="load confi...t "
Mar 21 08:27:02 ip-10-0-128-97.cn-northwest-1.compute.internal bash[9488]: time="2023-03-21T08:27:02Z" level=info msg="load confi...onf
Mar 21 08:27:02 ip-10-0-128-97.cn-northwest-1.compute.internal bash[9488]: time="2023-03-21T08:27:02Z" level=info msg="load confi...ile
Mar 21 08:27:02 ip-10-0-128-97.cn-northwest-1.compute.internal bash[9488]: time="2023-03-21T08:27:02Z" level=info msg="loaded pro...i]"
Hint: Some lines were ellipsized, use -l to show in full.
Verify that the original YMatrix 4 cluster remains functional.
[ec2-user@ip-10-0-128-97 ~]$ sudo su - mxadmin
Last login: Tue Mar 21 08:28:34 UTC 2023
********** MatrixDB Administrator **********
The MatrixDB on 5432 is up for 00:30:56
Connect matrixdb with
psql postgres
********************************************
[mxadmin@ip-10-0-128-97 ~]$ psql postgres
psql (12)
Type "help" for help.
postgres=# select version();
versi
on
---------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 12 (MatrixDB 4.8.1-enterprise) (Greenplum Database 7.0.0+dev.18290.g7184139e3e build commit:7184139e3ebba8b77239ec19db63c04
bd43951b6) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.2.1 20220127 (Red Hat 11.2.1-9), 64-bit compiled on Mar 21 2023 06:51:57
(1 row)
YMatrix 4 remains unaffected and continues to serve on port 5432.
--- SPLIT ---
1.3 Initialize YMatrix 5
Access the following graphical installation wizard URL using a web browser, where <IP> is the IP address of the Master host:
http://<IP>:8241/
Follow the instructions in 5 Database Deployment to complete cluster initialization via the graphical interface.
Note!
On the confirmation page before执行部署, the graphical interface automatically assigns5433as the new Master port. The data directory also avoids conflicts with the existing cluster, allowing the original YMatrix 4 cluster and the new YMatrix 5 cluster to coexist. After verifying the settings, click "Deploy" and wait for deployment to succeed.
Modify the ~/.bash_profile of the mxadmin user to switch between YMatrix 4 and 5 environments. Remove the following content from ~/.bash_profile to prevent conflicts caused by sourcing both files simultaneously.
if [ -f ~/.matrixdb.env ]; then
source ~/.matrixdb.env
fi
if [ -f ~/.matrixdb5.env ]; then
source ~/.matrixdb5.env
fi
Note!
This step must be performed on both the Master and Standby hosts.
Then log in to the mxadmin user with a new login session.
To access the YMatrix 5 database, run source ~/.matrixdb5.env under the mxadmin user.
Check the current status of the YMatrix 5 cluster.
$ sudo su - mxadmin
Last login: Tue Mar 21 11:36:55 UTC 2023 on pts/0
$ source ~/.matrixdb5.env
********** MatrixDB Administrator **********
The MatrixDB on 5433 is up for 03:01:21
Connect matrixdb with
psql postgres
********************************************
$ psql -p 5433 postgres
psql (12)
Type "help" for help.
postgres=# select version();
v
ersion
---------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------
----- PostgreSQL 12 (MatrixDB 5.0.0-beta.6+enterprise) (Greenplum Database 7.0.0+dev.20409.gf30a45b118 build commit:f30a45b118f626c84b580ffa
7a0226a673ccae70) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.2.1 20220127 (Red Hat 11.2.1-9), 64-bit compiled on Mar 21 2023 02:0
5:03
(1 row)
postgres=# select * from gp_segment_configuration order by content, dbid;
dbid | content | role | preferred_role | mode | status | port | hostname |
address | datadir
------+---------+------+----------------+------+--------+------+-------------------------------------------------+---------------------
----------------------------+----------------------------------------
1 | -1 | p | p | s | u | 5433 | ip-10-0-128-97.cn-northwest-1.compute.internal | ip-10-0-128-97.cn-no
rthwest-1.compute.internal | /mxdata_20230321083551/master/mxseg-1
10 | -1 | m | m | s | u | 5433 | ip-10-0-92-234.cn-northwest-1.compute.internal | ip-10-0-92-234.cn-no
rthwest-1.compute.internal | /mxdata_20230321083551/standby/mxseg-1
4 | 0 | p | p | s | u | 6002 | ip-10-0-101-114.cn-northwest-1.compute.internal | ip-10-0-101-114.cn-n
orthwest-1.compute.internal | /mxdata_20230321083551/primary/mxseg0
8 | 0 | m | m | s | u | 7003 | ip-10-0-137-193.cn-northwest-1.compute.internal | ip-10-0-137-193.cn-n
orthwest-1.compute.internal | /mxdata_20230321083551/mirror/mxseg0
5 | 1 | p | p | s | u | 6003 | ip-10-0-101-114.cn-northwest-1.compute.internal | ip-10-0-101-114.cn-n
orthwest-1.compute.internal | /mxdata_20230321083551/primary/mxseg1
9 | 1 | m | m | s | u | 7002 | ip-10-0-137-193.cn-northwest-1.compute.internal | ip-10-0-137-193.cn-n
orthwest-1.compute.internal | /mxdata_20230321083551/mirror/mxseg1
2 | 2 | p | p | s | u | 6002 | ip-10-0-137-193.cn-northwest-1.compute.internal | ip-10-0-137-193.cn-n
orthwest-1.compute.internal | /mxdata_20230321083551/primary/mxseg2
6 | 2 | m | m | s | u | 7002 | ip-10-0-101-114.cn-northwest-1.compute.internal | ip-10-0-101-114.cn-n
orthwest-1.compute.internal | /mxdata_20230321083551/mirror/mxseg2
3 | 3 | p | p | s | u | 6003 | ip-10-0-137-193.cn-northwest-1.compute.internal | ip-10-0-137-193.cn-n
orthwest-1.compute.internal | /mxdata_20230321083551/primary/mxseg3
7 | 3 | m | m | s | u | 7003 | ip-10-0-101-114.cn-northwest-1.compute.internal | ip-10-0-101-114.cn-n
orthwest-1.compute.internal | /mxdata_20230321083551/mirror/mxseg3
(10 rows)
postgres=# select distinct(hostname) from gp_segment_configuration;
hostname
-------------------------------------------------
ip-10-0-101-114.cn-northwest-1.compute.internal
ip-10-0-92-234.cn-northwest-1.compute.internal
ip-10-0-137-193.cn-northwest-1.compute.internal
ip-10-0-128-97.cn-northwest-1.compute.internal
(4 rows)
To access the YMatrix 4 database, run source ~/.matrixdb.env under the mxadmin user.
[ec2-user@ip-10-0-128-97 ~]$ sudo su - mxadmin
Last login: Tue Mar 21 11:37:38 UTC 2023 on pts/0
[mxadmin@ip-10-0-128-97 ~]$ source ~/.matrixdb.env
********** MatrixDB Administrator **********
The MatrixDB on 5432 is up for 03:59:57
Connect matrixdb with
psql postgres
********************************************
[mxadmin@ip-10-0-128-97 ~]$ psql postgres
psql (12)
Type "help" for help.
postgres=# select version();
versi
on
---------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 12 (MatrixDB 4.8.1-enterprise) (Greenplum Database 7.0.0+dev.18290.g7184139e3e build commit:7184139e3ebba8b77239ec19db63c04
bd43951b6) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.2.1 20220127 (Red Hat 11.2.1-9), 64-bit compiled on Mar 21 2023 06:51:57
(1 row)
At this point, YMatrix 5 has been successfully deployed on the same set of machines previously used for YMatrix 4.
Refer to:
This approach requires deploying a new cluster first, then using mxshift to migrate data.
For detailed deployment steps, see:
For detailed migration steps, see: