集群部署常见问题

本文档介绍集群部署中的常见问题。


1 error: could not access directory \"/data/mxdata_20221104084534/master/mxseg-1\": Permission denied


MXUI 初始化日志:

"error": "execute: do execute: run: initialize_database: 7 errors occurred: * 
error execute \"/usr/local/matrixdb-4.5.0.community/bin/initdb\"\n\n STDOUT:
The files belonging to this database system will be owned by user \"mxadmin\".
This user must also own the server process.

  The database cluster will be initialized with locale \"en_US.utf8\".\n The default text search configuration will be set to \"english\".

  Data page checksums are enabled.

   STDERR:
      initdb: error: could not access directory \"/data/mxdata_20221104084534/master/mxseg-1\": Permission denied\n * error execute \"/usr/local/matrixdb-4.5.0.community/bin/initdb\"
   STDOUT:
      The files belonging to this database system will be owned by user \"mxadmin\".
      This user must also own the server process.\n\n The database cluster will be initialized with locale \"en_US.utf8\".
      The default text search configuration will be set to \"english\".
      Data page checksums are enabled.

问题分析

data 目录只有所有者有 rwx 权限, 所属组和其他用户无访问权限。

[root@mdw ~]# ll /
total 36
lrwxrwxrwx.   1 root    root       7 Jun  1 19:38 bin -> usr/bin
dr-xr-xr-x.   5 root    root    4096 Oct 26 18:28 boot
drwxr-xr-x   20 root    root    3200 Oct 26 14:45 dev
drwxr-xr-x.  80 root    root    8192 Oct 28 13:53 etc
drwxr-xr-x.   5 root    root    8192 Oct 26 18:17 export
drwxr-xr-x.   5 root    root     105 Oct 26 18:28 home
drwx------.   5 root    root     105 Oct 26 18:28 data

解决方案

修改数据目录权限即可。

sudo chmod 755 /data 


2 yum 安装 matrixdb 包后报错 cpio read error


问题分析

用户环境为 Windows,使用 vm15 虚拟机,Windows 下载安装包后文件拖拽到虚拟机,导致文件被截断。

解决方案

使用 vm 共享目录机制传输数据。


3 could not connect to server: No route to host


初始化时报错:

could not connect to server: No route to host
 Is the server running on host "192.168.88.203" and accepting
 TCP/IP connections on port 40000?
 (seg0 192.168.88.203:40000)

问题分析

203 机器关掉了 iptables,但是没有 disable,重启机器后,防火墙又启动了。
端口默认没有放开,导致初始化时机器无法通信,现象就是初始化一直卡住,无法完成。

解决方案

清空 203 机器上的防火墙规则,停掉 iptables 服务并且 disable,防止重启后,网络不通。


4 setuptools 报告不支持参数: unknown distribution option:"long_description_content_type"


问题分析

setuptools 版本比较老。

解决方案

sudo python3 -m pip install --upgrade setuptools


5 ssh 默认端口不是 22


解决方案

.ssh/config 文件中增加主机名、端口号和用户的配置:

Host mdw
   Hostname mdw
   Port 29022
   User mxadmin
Host sdw1
   Hostname sdw1
   Port 29022
   User mxadmin


6 图形化界面初始化报错:ping <主机名1> error:lookup multiple ip:<IP 地址1>,<IP 地址1> ping <主机名2> error:lookup multiple ip:<IP 地址2>,<IP 地址2>


问题分析

/etc/hosts 中存在相同条目,如:

<IP 地址1> <主机名1>
<IP 地址1> <主机名1>
<IP 地址2> <主机名2>
<IP 地址2> <主机名2>

解决方案

删除 /etc/hosts 中的多余的条目:

<IP 地址1> <主机名1>
<IP 地址2> <主机名2>

修改后可以正常初始化。


7 使用图形化界面部署 YMatrix 报错 failed to connect to host=mdw user=mxadmin database=postgres: dial error (dial tcp 192.168.247.132:5432: connect: connection refused)


图形化界面出现如下报错: failed to connect to host=mdw user=mxadmin database=postgres: dial error (dial tcp 192.168.247.132:5432: connect: connection refused)

问题分析

你很可能已经使用浏览器安装过一次 YMatrix。由于某些原因之前的 YMatrix 环境已经被清理掉,如再次加载此图形化界面,默认会在 URL 地址最后增加 /datastream 路径。 例如:http://192.168.247.132:8240/datastream

解决方案

datastream 关键字改为 installer。 例如:http://192.168.247.132:8240/installer 再次使用图形化界面进行下一步安装即可。


8 添加主机失败 collect: do collect: unmarshal remote: json: cannot unmarshal string into Go struct field Disk.hardware.disk.ineligibleDesc of type mxi18n.Message


使用图形化界面安装部署 YMatrix 集群时,添加节点报错:

添加主机失败 collect: do collect: unmarshal remote: json: cannot unmarshal string into Go struct field Disk.hardware.disk.ineligibleDesc of type mxi18n.Message

问题分析

各个服务器节点安装的 YMatrix 版本不一致导致。

检查办法

依次检查每台服务器节点的 YMatrix 版本。

检查主节点 mdw YMatrix 版本。

[root@mdw matrixdb]# ll /usr/local/matrixdb
lrwxrwxrwx 1 root root 25 12月  9 18:02 /usr/local/matrixdb -> matrixdb-4.7.5.enterprise

检查数据节点 sdw1 YMatrix 版本。

[root@sdw1 ~]$ ll /usr/local/matrixdb
lrwxrwxrwx 1 root root 25 12月 22 17:24 /usr/local/matrixdb -> matrixdb-4.6.2.enterprise

检查数据节点 sdw2 YMatrix 版本。

[root@sdw2 ~]# ll /usr/local/matrixdb
lrwxrwxrwx 1 root root 25 12月  9 18:02 /usr/local/matrixdb -> matrixdb-4.7.5.enterprise

检查数据节点 sdw3 YMatrix 版本。

[root@sdw3 ~]# ll /usr/local/matrixdb
lrwxrwxrwx 1 root root 25 12月  9 18:02 /usr/local/matrixdb -> matrixdb-4.7.5.enterprise

检查结果

sdw1 节点的数据库版本是 4.6.2,其他节点的数据库版本是 4.7.5。

解决方案

将 sdw1 节点的数据库版本升级和其他节点相同的版本,命令如下:

停止 Supervisor 服务。

[root@sdw1 ~]$ systemctl stop matrixdb.supervisor.service

卸载 YMatrix 老版本软件。

[root@sdw1 ~]$ yum -y remove matrixdb

安装 YMatrix 新版本软件。

[root@sdw1 ~]$ yum -y install /home/mxadmin/matrixdb-4.7.5.enterprise-1.el7.x86_64.rpm

启动 Supervisor 服务。

[root@sdw1 ~]$ systemctl start matrixdb.supervisor.service


9 集群启动报错


报错信息

20221223:09:55:10:001626 mxstart:mdw:mxadmin-[CRITICAL]:-Error occurred: non-zero rc: 1
 Command was: 'env GPSESSID=0000000000 GPERA=None $GPHOME/bin/pg_ctl -D /mxdata_20221221165810/master/mxseg-1 -l /mxdata_20221221165810/master/mxseg-1/log/startup.log -w -t 600 -o " -p 5432 -c gp_role=utility " start'
rc=1, stdout='waiting for server to start.... stopped waiting
', stderr='pg_ctl: could not start server
Examine the log output.
'

问题分析

查看日志文件。

[mxadmin@mdw ~]$ cd /mxdata_20221221165810/master/mxseg-1/log
[mxadmin@mdw log]$ vi startup.log
"FATAL","42501","could not create lock file ""/tmp/.s.PGSQL.5432.lock"": Permission denied",,,,,,,,"CreateLockFile","miscinit.c",994,1    0xd44e33 postgres errstart (elog.c:498)

查看 /tmp 路径的权限。由于 /tmp 路径的权限必须为 777,因此将其修改回来即可。

[mxadmin@mdw ~]$ ll / | grep tmp
drw-r-xr-x.   7 root    root    8192 12月 23 10:00 tmp

解决方案

在 root 用户下将 /tmp 路径权限修改为 777 权限。

[mxadmin@mdw ~]$ exit
[root@mdw ~]# chmod 777 /tmp

重新启动集群。

[root@mdw ~]# su - mxadmin
[mxadmin@mdw ~]$ mxstart -a


10 图形化部署 YMatrix 报错:优化操作系统配置 ... 已撤销 { "error": "execute: do execute: run: launch_matrixdb: error execute \"/usr/local/matrixdb-4.7.5.enterprise/bin/pg_ctl -w -l /mxdata_20221223100549/master/mxseg-1/log/startup.log -D /mxdata_20221223100549/master/mxseg-1 -o -i -p 5432 -c gp_role=utility -m start\"\n\nSTDOUT:\n waiting for server to start.... stopped waiting\n\nSTDERR:\n pg_ctl: could not start server\nExamine the log output.\n" }


问题分析
查看图形化部署日志文件

[mxadmin@mdw ~]$ cd /var/log/matrixdb/
[mxadmin@mdw matrixdb]$ vi mxui.log 

[20221223:10:08:43][INFO] id=1; start: system_setup
[20221223:10:08:43][INFO] id=1; done
[20221223:10:08:43][INFO] id=2; start: create_user_and_directories
[20221223:10:08:43][INFO] id=2; done
[20221223:10:08:43][INFO] id=3; start: initialize_database
[20221223:10:08:44][INFO] id=3; running: 6%
[20221223:10:08:44][INFO] id=3; running: 6%
[20221223:10:08:44][INFO] id=3; running: 6%
[20221223:10:08:44][INFO] id=3; running: 6%
[20221223:10:08:44][INFO] id=3; running: 6%
[20221223:10:08:45][INFO] id=3; running: 6%
[20221223:10:08:45][INFO] id=3; running: 6%
[20221223:10:08:45][INFO] id=3; done
[20221223:10:08:45][INFO] id=4; start: launch_matrixdb
[20221223:10:08:45][ERROR] id=4; failed: launch_matrixdb: error execute "/usr/local/matrixdb-4.7.5.enterprise/bin/pg_ctl -w -l /mxdata_20221223100549/master/mxseg-1/log/startup.log -D /mxdata_20221223100549/master/mxseg-1 -o -i -p 5432 -c gp_role=utility -m start"
STDOUT:
    waiting for server to start.... stopped waiting
STDERR:
    pg_ctl: could not start server
Examine the log output.
[20221223:10:08:45][INFO] id=4; revert start: launch_matrixdb
[20221223:10:08:45][INFO] id=4; revert done
[20221223:10:08:45][INFO] id=3; revert start: initialize_database
[20221223:10:08:45][INFO] id=3; revert done
[20221223:10:08:45][INFO] id=2; revert start: create_user_and_directories
[20221223:10:08:45][INFO] id=2; revert done
[20221223:10:08:45][INFO] id=1; revert start: system_setup
[20221223:10:08:45][INFO] id=1; revert done
{
  "error": "execute: do execute: run: launch_matrixdb: error execute \"/usr/local/matrixdb-4.7.5.enterprise/bin/pg_ctl -w -l /mxdata_20221223100549/master/mxseg-1/log/startup.log -D /mxdata_20221223100549/master/mxseg-1 -o -i -p 5432 -c gp_role=utility -m start\"\n\nSTDOUT:\n    waiting for server to start.... stopped waiting\n\nSTDERR:\n    pg_ctl: could not start server\nExamine the log output.\n"
}
execute: do execute: run: launch_matrixdb: error execute "/usr/local/matrixdb-4.7.5.enterprise/bin/pg_ctl -w -l /mxdata_20221223100549/master/mxseg-1/log/startup.log -D /mxdata_20221223100549/master/mxseg-1 -o -i -p 5432 -c gp_role=utility -m start"

STDOUT:
    waiting for server to start.... stopped waiting

STDERR:
    pg_ctl: could not start server
Examine the log output.

[GIN] 2022/12/23 - 10:08:45 | 200 |      148.13µs |   192.168.247.2 | GET      "/api/installer/log"

查看图形化界面部署的步骤当前已经运行到 launch_matrixdb
在日志中找到相关操作并且根据上下文分析:发现当前已经运行到 pg_ctl 启动实例这一步。这说明了启动实例失败,导致整个初始化操作失败并且回退。

可能导致启动实例失败的原因有如下几个,你需要根据实际情况逐一排查:

  1. CPU 负载过高。
  2. 内存使用量过大,剩余内存无法支撑实例(Instance)启动。
  3. 网络不稳定。
  4. /tmp 权限不足,无法创建 lock 文件。

解决方案

由于前三个问题形成原因较复杂,需具体场景具体分析,在此不做详述。

在 root 用户下将 /tmp 路径权限修改为 777 权限。

[root@mdw ~]# chmod 777 /tmp


11 安装 YMatrix 安装包报错,缺少依赖


报错信息

[root@sdw4 yum.repos.d]# yum -y install /home/mxadmin/matrixdb5-5.0.0.enterprise-1.el7.x86_64.rpm 
已加载插件:fastestmirror
正在检查 /home/mxadmin/matrixdb5-5.0.0.enterprise-1.el7.x86_64.rpm: matrixdb5-5.0.0.enterprise-1.el7.x86_64
/home/mxadmin/matrixdb5-5.0.0.enterprise-1.el7.x86_64.rpm 将被安装
正在解决依赖关系
--> 正在检查事务
---> 软件包 matrixdb.x86_64.0.5.0.0.enterprise-1.el7 将被 安装
--> 正在处理依赖关系 sysstat,它被软件包 matrixdb5-5.0.0.enterprise-1.el7.x86_64 需要
Loading mirror speeds from cached hostfile
--> 解决依赖关系完成
错误:软件包:matrixdb5-5.0.0.enterprise-1.el7.x86_64 (/matrixdb5-5.0.0.enterprise-1.el7.x86_64)
          需要:sysstat
 您可以尝试添加 --skip-broken 选项来解决该问题
 您可以尝试执行:rpm -Va --nofiles --nodigest

问题分析

缺少 sysstat 软件包。

解决方案

配置 yum 源,使用 yum -y install sysstat 安装 sysstat 工具,然后再安装 YMatrix 软件包。


12 由于服务器内核参数配置异常导致 Supervisor 启动异常 “panic: timeout to start gRPC service”


问题分析

在 YMatrix 部署完成后,Supervisor 进程启动异常,查看 /var/log/messages 后发现如下异常日志

Dec 22 19:08:59 sdw21 systemd: matrixdb.supervisor.service holdoff time over, scheduling restart.
Dec 22 19:08:59 sdw21 systemd: Stopped MatrixDB Supervisord Daemon.
Dec 22 19:08:59 sdw21 systemd: Started MatrixDB Supervisord Daemon.
Dec 22 19:08:59 sdw21 bash: time="2022-12-22T19:08:59+08:00" level=info msg="load configuration from file" file=/etc/matrixdb/supervisor.conf
Dec 22 19:08:59 sdw21 bash: time="2022-12-22T19:08:59+08:00" level=info msg="load config file over, content "
Dec 22 19:09:09 sdw21 bash: panic: timeout to start gRPC service
Dec 22 19:09:09 sdw21 bash: goroutine 1 [running]:
Dec 22 19:09:09 sdw21 bash: main.runServer()
Dec 22 19:09:09 sdw21 bash: /home/runner/work/matrixdb-ci/matrixdb-ci/cmd/supervisor/main.go:151 +0x4f0
Dec 22 19:09:09 sdw21 bash: main.main()
Dec 22 19:09:09 sdw21 bash: /home/runner/work/matrixdb-ci/matrixdb-ci/cmd/supervisor/main.go:216 +0x185
Dec 22 19:09:09 sdw21 systemd: matrixdb.supervisor.service: main process exited, code=exited, status=2/INVALIDARGUMENT
Dec 22 19:09:09 sdw21 systemd: Unit matrixdb.supervisor.service entered failed state.
Dec 22 19:09:09 sdw21 systemd: matrixdb.supervisor.service failed.
Dec 22 19:09:14 sdw21 systemd: matrixdb.supervisor.service holdoff time over, scheduling restart.
Dec 22 19:09:14 sdw21 systemd: Stopped MatrixDB Supervisord Daemon.
Dec 22 19:09:14 sdw21 systemd: Started MatrixDB Supervisord Daemon.

经过排查发现是 /etc/sysctl.conf 文件中变量取值过大,会导致 Supervisor 运行不畅。 改成正常大小值即可,具体如下。

解决方案

  1. 改小 /etc/sysctl.conf 的内核参数配置,防止 Supervisor 运行阻塞

    ######### value too large, supervisor startup fail
    #net.core.rmem_default = 1800262144
    #net.core.wmem_default = 1800262144
    #net.core.rmem_max = 2000777216
    #net.core.wmem_max = 2000777216
    #########
    net.core.rmem_default = 262144
    net.core.wmem_default = 262144
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
  2. Supervisor 启动失败或故障,可以使用 journalctl --no-pager 抓取详细信息,包括崩溃的栈等。


13 安装 YMatrix 收集信息失败


报错信息

收集信息失败 collect: do collect: hardware: GetDisk: createTempUser: error execute useradd: exit status 1 please create "mxadmin" user manually to workaround this issue useradd:无法打开 /etc/passwd

问题分析

根据报错信息分析,是 /etc/passwd 文件权限问题导致创建操作系统用户 mxadmin 失败。

解决方案

  1. 手动创建一个测试用户并查看报错信息

    [root@sdw4 ~]# useradd test1
    useradd:无法打开 /etc/passwd
  2. 查看 /etc/passwd 权限

    [root@sdw4 ~]# ll /etc/passwd
    -rw-r--r-- 1 root root 898 12月 24 01:48 /etc/passwd

    结果显示 644 权限属于正常权限,没有问题

  3. 检查 /etc/passwd 是否有特殊权限

    [root@sdw4 ~]# lsattr /etc/passwd
    ----i----------- /etc/passwd

    结果显示 /etc/passwd 文件存在特殊的权限 "i" (权限说明:任何用户不得更改及删除,包括 root)。

  4. 重复以上步骤检查 /etc/group 文件

    [root@sdw4 ~]# ll /etc/group
    -rw-r--r-- 1 root root 460 12月 24 01:48 /etc/group
    [root@sdw4 ~]# lsattr /etc/group
    ----i----------- /etc/group
  5. /etc/passwd/etc/group 两个文件的特殊权限去掉

    [root@sdw4 ~]# chattr -i /etc/passwd
    [root@sdw4 ~]# chattr -i /etc/group
  6. 再次尝试手动创建一个测试用户

    [root@sdw4 ~]# useradd test1

    结果可以正常创建用户。

  7. 删除测试用户

    [root@sdw4 ~]# userdel -r test1
  8. 使用图形化界面继续安装部署 YMatrix


14 初始化失败,报 failed: initialize_database: error execute "/opt/ymatrix/matrixdb-5.0.0+enterprise/bin/initdb"


使用 MXUI 做初始化时,执行最后一步,报错如下:

[20221101:14:59:02][ERROR] id=3; failed: initialize_database: error execute "/opt/ymatrix/matrixdb-5.0.0+enterprise/bin/initdb"
STDOUT:
    The files belonging to this database system will be owned by user "mxadmin".
This user must also own the server process.
The database cluster will be initialized with locale "en_US.utf8".
The default text search configuration will be set to "english".
{
  "error": "execute: do execute: run: initialize_database: error execute \"/opt/ymatrix/matrixdb-5.0.0+enterprise/bin/initdb\"\n\nSTDOUT:\n    The files belonging to this database system will be owned by user \"mxadmin\".\nThis user must also own the server process.\n\nThe database cluster will be initialized with locale \"en_US.utf8\".\nThe default text search configuration will be set to \"english\".\n\nData page checksums are enabled.\n\nfixing permissions on existing directory /data/mxdata_20221101121858/primary/mxseg0 ... ok\ncreating subdirectories ... ok\nselecting dynamic shared memory implementation ... posix\nselecting default max_connections ... \nSTDERR:\n    initdb: error: initdb: error 256 from: \"/opt/ymatrix/matrixdb-5.0.0+enterprise/bin/postgres\" --boot -x0 -F -c max_connections=1500 -c shared_buffers=262144 -c dynamic_shared_memory_type=posix \u003c \"/dev/null\" \u003e \"/dev/null\" 2\u003e\u00261\ninitdb: removing contents of data directory \"/data/mxdata_20221101121858/primary/mxseg0\"\n"
Data page checksums are enabled.
fixing permissions on existing directory /data/mxdata_20221101121858/primary/mxseg0 ... ok
creating subdirectories ... ok
}
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 
STDERR:
    initdb: error: initdb: error 256 from: "/opt/ymatrix/matrixdb-5.0.0+enterprise/bin/postgres" --boot -x0 -F -c max_connections=1500 -c shared_buffers=262144 -c dynamic_shared_memory_type=posix < "/dev/null" > "/dev/null" 2>&1
initdb: removing contents of data directory "/data/mxdata_20221101121858/primary/mxseg0"

问题分析

  1. 主机名绑定的 IP 不一致。
  2. 内存余量过低。

解决方案

  1. /etc/hosts 中将本地 IP 与主机名(hostname)关联起来。
  2. 使用 free -g 命令检查内存大小。


15 可以使用 Nginx 为图形化界面配置域名吗?


可以的。

图形化客户端 MXUI 默认使用 http://<IP>:8240 对外提供服务,如果需要使其能通过域名 http://hostname 直接访问,可借助 Nginx 配置反向代理。
例如:如需设置 mxui.ymatrix.cn 为对外访问地址,Nginx 配置如下。

 server
        {
                listen  80;
                server_name mxui.ymatrix.cn; # 对外域名


                # WebSocket 转发规则
                location /ws {
                    proxy_pass http://127.0.0.1:8240/ws;
                    proxy_http_version 1.1;
                    proxy_set_header Upgrade $http_upgrade;
                    proxy_set_header Connection "Upgrade";
                    proxy_set_header Host $host;
                }  

                # 网页转发规则
                location / {
                    proxy_pass http://127.0.0.1:8240; 
                }

        }

注意!
MXUI 需要使用 WebSocket API 进行通信,需要单独为其配置转发规则才能正常使用。


16 Interconnect error writing an outgoing packet: operation not permitted


系统日志 /var/log/message 输出如下:

Mar 10 06:26:15 sdw37 kernel: nf_conntrack: table full, dropping packet
Mar 10 06:26:15 sdw37 kernel: nf_conntrack: table full, dropping packet
Mar 10 06:26:15 sdw37 kernel: nf_conntrack: table full, dropping packet
Mar 10 06:26:15 sdw37 kernel: nf_conntrack: table full, dropping packet
Mar 10 06:26:15 sdw37 kernel: nf_conntrack: table full, dropping packet
Mar 10 06:26:15 sdw37 kernel: nf_conntrack: table full, dropping packet
Mar 10 06:26:15 sdw37 kernel: nf_conntrack: table full, dropping packet
Mar 10 06:26:15 sdw37 kernel: nf_conntrack: table full, dropping packet
Mar 10 06:26:15 sdw37 kernel: nf_conntrack: table full, dropping packet
Mar 10 06:26:20 sdw37 kernel: nf_conntrack: table full, dropping packet

问题分析

系统参数 net.netfilter.nf_conntrack_max 默认最大跟踪 65536 个连接,当存在大量连接时出现该错误,可使用如下命令查看当前系统设置最大连接数:

cat /proc/sys/net/netfilter/nf_conntrack_max

解决方案

调大参数 net.netfilter.nf_conntrack_max 即可。

sysctl -w net.netfilter.nf_conntrack_max=655360



17 由于环境限制,我没办法使用图形化部署 YMatrix,可以使用命令行部署的方式吗?


可以的。请参照以下步骤部署。

注意!
请将标准集群部署文档中的图形化界面数据库部署部分替换为以下命令。此部分命令需在 Master 上使用 root 用户执行。

切换到 root 用户。

$ sudo su
  1. 采集信息 首先,生成初始文件(已包含本机(Master)信息)。

    # echo "" | /opt/ymatrix/matrixdb5/bin/mxctl setup collect > /tmp/collect.1

    然后,设置每台主机上的实例数。

    # export MXDEBUG_PRIMARY_PER_HOST=1

    采集各主机信息。需逐个采集,Master 已经采集,无需再次执行。

    # cat /tmp/collect.1 | /opt/ymatrix/matrixdb5/bin/mxctl setup collect --host sxd1 > /tmp/collect.2
    # cat /tmp/collect.2 | /opt/ymatrix/matrixdb5/bin/mxctl setup collect --host sxd2 > /tmp/collect.3
  2. 检查网络互通

    # cat /tmp/collect.3 | /opt/ymatrix/matrixdb5/bin/mxctl setup netcheck > /tmp/collect.3c
  3. 设置主节点备用节点(Standby) 假如我们想把 sxd2 节点设置为 Standby 节点,可以有两种选择,根据需求选择其一执行即可:

a. 将 sxd2 只设置为 Standby(sxd2 只担任 Standby 角色,不存储业务数据)。

# tac /tmp/collect.3c | sed '0,/"isSegment":\ true/{s/"isSegment":\ true/"isSegment":\ false/}' | tac > /tmp/collect.3d
# tac /tmp/collect.3d | sed '0,/"isStandby":\ false/{s/"isStandby":\ false/"isStandby":\ true/}' | tac > /tmp/collect.3e

b. 在 sxd2 上增加 Standby 节点实例(sxd2 担任两个角色:Segment + Standby)。

# tac /tmp/collect.3c | sed '0,/"isStandby":\ false/{s/"isStandby":\ false/"isStandby":\ true/}' | tac > /tmp/collect.3e

示例中我们选择将 sxd2 设置为 Segment + Standby。

  1. 调整磁盘规划(可选)

    # cat /tmp/collect.3e |grep -i disklist
         "diskList": []
         "diskList": []
         "diskList": []

    可以通过编辑 1.3 生成的 collect.3e 文件,修改 diskList(例如: "diskList": ["/data1", "/data2", "/data3"])。
    此文件中 diskList 默认为空数组,如果选择保留默认文件,则会自动将数据存储到空间最大的磁盘。

  2. 启用镜像节点(Mirror) 在 collect.3e 文件中设置镜像节点。

    # cat /tmp/collect.3e

    修改 Mirror 设置相关内容。

    {
     "versionID": "iAioSDT2QJnXAXRzBfYsx6",
     "genDateTime": "2023-04-12 07:26:49",
     "strategy": {
       "hostRole": {
         "isMaster": true,
         "isSegment": false,
         "isStandby": false
       },
       "highAvailability": {
         "useMirror": "auto",  // auto 是默认值,可用 yes/no 强制启用。如果 Segment 主机有 2 个或更多,YMatrix 会自动启用 Mirror 机制,如果只有 1 个则不启用
         "mirrorStrategy": "ring",
         "haProvisioner": ""
       }
  3. 生成最终的部署计划

    # cat /tmp/collect.3e | /opt/ymatrix/matrixdb5/bin/mxbox deployer plan | tee /tmp/p4
  4. 集群部署

    # cat /tmp/p4 | /opt/ymatrix/matrixdb5/bin/mxbox deployer setup --debug


18 /etc/hosts 文件缺少 localhost 配置选项导致 Supervisor 服务启动异常


报错信息

collect: do collect: remote host 172.16.100.144: rpc error: code = Unavailable desc = connection error:desc = "ransport: Error while dialing dial tcp 172.16.100.144:4617: connect: connection refused"

问题现象

安装部署集群始终报错无法连接,检查网络无异常。查看 supervisor 出现周期性的时好时坏。

[root@ljb-sdw2 software]# 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 Mon 2023-06-05 17:46:20 CST; 2s ago
 Main PID: 14587 (supervisord)
    Tasks: 9
   CGroup: /system.slice/matrixdb5.supervisor.service
           └─14587 /opt/ymatrix/matrixdb5/bin/supervisord -c /etc/matrixdb5/supervisor.conf

Jun 05 17:46:20 ljb-sdw2 systemd[1]: Started MatrixDB 5 Supervisord Daemon.
Jun 05 17:46:20 ljb-sdw2 bash[14587]: time="2023-06-05T17:46:20+08:00" level=info msg="load configuration from file" file=/etc/matrixdb5/supervisor.conf
Jun 05 17:46:20 ljb-sdw2 bash[14587]: time="2023-06-05T17:46:20+08:00" level=info msg="load config file over, content "

[root@ljb-sdw2 software]# 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 Mon 2023-06-05 17:46:23 CST; 4s ago
  Process: 14587 ExecStart=/bin/bash -c PATH="$MXHOME/bin:$PATH" exec "$MXHOME"/bin/supervisord -c "$MX_SUPERVISOR_CONF" (code=exited, status=2)
 Main PID: 14587 (code=exited, status=2)

Jun 05 17:46:23 ljb-sdw2 systemd[1]: Unit matrixdb5.supervisor.service entered failed state.
Jun 05 17:46:23 ljb-sdw2 systemd[1]: matrixdb5.supervisor.service failed.

查看集群日志文件,发现没有生成。

[root@ljb-sdw2 software]# cd /var/log/matrixdb5/
[root@ljb-sdw2 matrixdb5]# ls -l
total 0

查看 supervisor 实时动态日志。

[root@ljb-sdw2 software]# journalctl -u matrixdb5.supervisor.service  -f     
-- Logs begin at Sun 2023-05-07 21:33:02 CST. --
Jun 05 17:52:31 ljb-sdw2 bash[15171]: time="2023-06-05T17:52:31+08:00" level=info msg="load configuration from file" file=/etc/matrixdb5/supervisor.conf
Jun 05 17:52:31 ljb-sdw2 bash[15171]: time="2023-06-05T17:52:31+08:00" level=info msg="load config file over, content "
Jun 05 17:52:34 ljb-sdw2 bash[15171]: panic: timeout to start gRPC service
Jun 05 17:52:34 ljb-sdw2 bash[15171]: goroutine 1 [running]:
Jun 05 17:52:34 ljb-sdw2 bash[15171]: main.runServer()
Jun 05 17:52:34 ljb-sdw2 bash[15171]: /home/runner/work/matrixdb-ci/matrixdb-ci/cmd/supervisor/main.go:154 +0x4f0
Jun 05 17:52:34 ljb-sdw2 bash[15171]: main.main()
Jun 05 17:52:34 ljb-sdw2 bash[15171]: /home/runner/work/matrixdb-ci/matrixdb-ci/cmd/supervisor/main.go:219 +0x185
Jun 05 17:52:34 ljb-sdw2 systemd[1]: matrixdb5.supervisor.service: main process exited, code=exited, status=2/INVALIDARGUMENT
Jun 05 17:52:34 ljb-sdw2 systemd[1]: Unit matrixdb5.supervisor.service entered failed state.
Jun 05 17:52:34 ljb-sdw2 systemd[1]: matrixdb5.supervisor.service failed.
Jun 05 17:52:39 ljb-sdw2 systemd[1]: matrixdb5.supervisor.service holdoff time over, scheduling restart.
Jun 05 17:52:39 ljb-sdw2 systemd[1]: Stopped MatrixDB 5 Supervisord Daemon.
Jun 05 17:52:39 ljb-sdw2 systemd[1]: Started MatrixDB 5 Supervisord Daemon.
Jun 05 17:52:40 ljb-sdw2 bash[15186]: time="2023-06-05T17:52:40+08:00" level=info msg="load configuration from file" file=/etc/matrixdb5/supervisor.conf
Jun 05 17:52:40 ljb-sdw2 bash[15186]: time="2023-06-05T17:52:40+08:00" level=info msg="load config file over, content "
Jun 05 17:52:43 ljb-sdw2 bash[15186]: panic: timeout to start gRPC service
Jun 05 17:52:43 ljb-sdw2 bash[15186]: goroutine 1 [running]:
Jun 05 17:52:43 ljb-sdw2 bash[15186]: main.runServer()
Jun 05 17:52:43 ljb-sdw2 bash[15186]: /home/runner/work/matrixdb-ci/matrixdb-ci/cmd/supervisor/main.go:154 +0x4f0
Jun 05 17:52:43 ljb-sdw2 bash[15186]: main.main()
Jun 05 17:52:43 ljb-sdw2 bash[15186]: /home/runner/work/matrixdb-ci/matrixdb-ci/cmd/supervisor/main.go:219 +0x185
Jun 05 17:52:43 ljb-sdw2 systemd[1]: matrixdb5.supervisor.service: main process exited, code=exited, status=2/INVALIDARGUMENT
Jun 05 17:52:43 ljb-sdw2 systemd[1]: Unit matrixdb5.supervisor.service entered failed state.
Jun 05 17:52:43 ljb-sdw2 systemd[1]: matrixdb5.supervisor.service failed.

解决方案

  1. 检查 /etc/hosts 文件,添加 localhost 配置

    # vi /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
  2. 重启 supervisor

    # sudo systemctl restart matrixdb5.supervisor.service


19 YMatrix 至少需要多少服务器才能实现新架构中 etcd 集群的高可用?


解决方案

  1. 如果是 主节点 + 2 个数据节点 的部署方式,会在每个节点都部署 etcd 集群,形成 etcd 集群的高可用,即需要至少 3 台服务器。
  2. 如果是 主节点 + 主节点备用节点 + 1 个数据节点 的部署方式,同样会在每个节点上部署 etcd 集群,形成 etcd 集群的高可用,即需要至少 3 台服务器。
  3. 如果是 主节点 + 主节点备用节点 + 2 个数据节点的部署方式,会在主节点 、主节点备用节点及 1 个数据节点上部署 etcd 集群形成高可用,即需要至少 4 台服务器。


20 安装数据库时 LOG: gp_role forced to 'utility' in single-user mode Y.sh: line 1: 11865 Illegal instruction 错误


报错信息

"LogCheckpointEnd","xlog.c",8916, LOG: gp_role forced to 'utility' in single-user mode Y.sh: line 1:
11865 Illegal instruction (core dumped) "/opt/ymatrix/matrixdb-5.0.0+community/bin/postgres" --single -F -O -j -c
gp_role=utility -c search_path=pg_catalog -c exit_on_error=true template1 > /dev/null child process exited with exit code 132
initdb: data directory "/mxdata_20231018165815/master/mxseg-1" not removed at user's request * rpc error:

问题分析

新版本的数据库支持了向量集用到了 SIMD 指令,在安装时会对 CPU 指令集的检测,如果 CPU 指令集不支持则会出现以上错误提示。

解决方案

  1. 使用以下命令查看是否支持以下指令
    cat /proc/cpuinfo|grep -E "mmx|sse|sse2|ssse3|sse4_1|sse4_2|avx|avx2"
  2. 如果是虚拟机,在 CPU 工作模式处选择直通模式,然后重启虚拟机进行尝试。


21 在防火墙开启的情况下,需要配置哪些防火墙策略可以使得数据库集群正常运行?


# 集群内部IP之间网络需要打开所有端口,对外的端口可以只暴露服务端口
# 数据库防火墙配置,示例中假设 10.129.38.230、10.129.38.231、10.129.38.232 三台服务器构建了一套数据库集群
# 集群中所有主机之间开放所有端口,包括TCP、UDP协议
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.129.38.230" port protocol="tcp" port="0-65535" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.129.38.231" port protocol="tcp" port="0-65535" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.129.38.232" port protocol="tcp" port="0-65535" accept"

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.129.38.230" port protocol="udp" port="0-65535" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.129.38.231" port protocol="udp" port="0-65535" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.129.38.232" port protocol="udp" port="0-65535" accept"

# 开启 ping
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.129.38.230" port protocol="icmp" port="0-65535" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.129.38.231" port protocol="icmp" port="0-65535" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.129.38.232" port protocol="icmp" port="0-65535" accept"

# master 及 standby master 节点限制对外开放 5432 服务端口 8240
firewall-cmd --zone=public --add-port=5432/tcp --permanent
firewall-cmd --zone=public --add-port=8240/tcp --permanent

#  Grafana 
firewall-cmd --zone=public --add-port=3000/tcp --permanent

# 查看防火墙规则
firewall-cmd --list-all

# 重新加载防火墙,使配置生效
firewall-cmd --reload
systemctl restart firewalld.service