暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

GaussDB(for openGauss) 安装部署

本次安装演示以单AZ3副本集群架构为例,单AZ3副本即一主两备,只有主库可以提供数据读写,两个备库是quorum的同步级别,即any 1(xxx,xxx),保证至少有一个备库的数据与主库保持一致,保证RPO=0;任何一个备库故障,不影响主库数据写入;如果主库故障会自动进行主备切换。
image.png

环境准备

硬件信息

(16GB8C100GB / Kylin v10 on x86) * 3

  • 操作系统要求:
    x86服务器支持Kylin V10 SP1(intel、hygon)
    ARM服务器支持Kylin V10 SP1(kunpeng、phytium)

  • Python3:
    Kylin(X86):仅支持Python 3.7.9
    Kylin(arm):仅支持Python 3.7.4

关闭防火墙和SELinux

systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld

--关闭SELinux
vim /etc/selinux/config

SELINUX=disable

--重启主机
reboot

系统内核参数

--/etc/sysctl.conf
vm.overcommit_memory = 0
vm.overcommit_ratio = 90
kernel.sem = 250 6400000 1000 25600
kernel.shmall = 1152921504606846720
kernel.shmmax = 18446744073709551615

--limits.conf配置文件
echo "* soft nofile 1000000" >>/etc/security/limits.conf 
echo "* hard nofile 1000000" >>/etc/security/limits.conf

其他设置

--字符集
建议设置为LANG=zh_CN.UTF-8

--时区时间
各节点间的时间和时区要保持一致,可以自定义同步时钟策略

--关闭swap
swapoff -a

--设置umask
vim /etc/profile
umask 0077

--设置usr的软连接(必做且不可更改)
mkdir -p /opt/rh/python27/root && ln -s /usr /opt/rh/python27/root/usr

--将python路径添加到/etc/sudoers中的secure_path
Defaults    secure_path = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[root@gaussdb1 usr]# which python
/usr/bin/python

创建用户

groupadd dbgrp
useradd -g dbgrp omm
passwd omm

创建目录

mkdir -p /opt/software/
mkdir -p /home/omm/log/om_agent
mkdir -p /gaussdb/om-agent
mkdir -p /home/omm/CA
mkdir -p /home/omm/sslcrt
mkdir -p /home/omm/demoCA/newcerts
mkdir -p /gaussdb/log /gaussdb/CA /gaussdb/usr/local/package /gaussdb/usr/local/core /gaussdb/usr/local/tool /gaussdb/usr/local/temp /gaussdb/usr/local/cm /gaussdb/usr/local/etcd /gaussdb/usr/local/gtm /gaussdb/usr/local/cn /gaussdb/engine/data1/data

chown -R omm: /opt/software/
chown -R omm: /home/omm
chown -R omm: /gaussdb

安装包处理(所有节点)

解压agent 和 adaptor

注意:对agent压缩包需要进行二次解压

[root@gaussdb1 X86]# ls -l
总用量 513124
-rw-r--r-- 1 root root    193800 12月 13 17:15 'DBS-GaussDBforOpenGauss-Adaptor_1.0.0.1651894270 (1).tar.gz'
-rw-r--r-- 1 root root     13676 12月 13 17:15 'GaussDBInstaller_V1.0.3.2 (1).tar.gz'
-rw-r--r-- 1 root root   5016702 12月 13 17:16  GaussDB_Kernel_V500R002C10SPC510B016_X86_Centralized_AGENT_PACKAGE.tar.gz
-rw-r--r-- 1 root root 520206672 12月 14 09:32  GaussDB_Kernel_V500R002C10SPC510B016_X86_Centralized_SERVER_PACKAGE.tar.gz
[root@gaussdb1 X86]#
[root@gaussdb1 X86]# tar -zxvf 'DBS-GaussDBforOpenGauss-Adaptor_1.0.0.1651894270 (1).tar.gz'
[root@gaussdb1 X86]# tar -zxvf GaussDB_Kernel_V500R002C10SPC510B016_X86_Centralized_AGENT_PACKAGE.tar.gz
GaussDB-Kernel-V500R002C10-KYLIN-64bit-AGENT.tar.gz
[root@gaussdb1 X86]# tar -zxvf GaussDB-Kernel-V500R002C10-KYLIN-64bit-AGENT.tar.gz
[root@gaussdb1 X86]#
[root@gaussdb1 X86]# ll
总用量 518096
drwx------  7 root  root        169  5月  7  2022  adaptor
drwx------ 12 20001 20001       242  9月 24 21:19  agent
-rwx------  1 20001 20001      7024  9月 24 21:19  cluster_default_agent.xml
-rw-r--r--  1 root  root     193800 12月 13 17:15 'DBS-GaussDBforOpenGauss-Adaptor_1.0.0.1651894270 (1).tar.gz'
-rw-r--r--  1 root  root      13676 12月 13 17:15 'GaussDBInstaller_V1.0.3.2 (1).tar.gz'
-rw-r--r--  1 20001 20001   5067771  9月 24 21:19  GaussDB-Kernel-V500R002C10-KYLIN-64bit-AGENT.tar.gz
-rw-r--r--  1 root  root    5016702 12月 13 17:16  GaussDB_Kernel_V500R002C10SPC510B016_X86_Centralized_AGENT_PACKAGE.tar.gz
-rw-r--r--  1 root  root  520206672 12月 14 09:32  GaussDB_Kernel_V500R002C10SPC510B016_X86_Centralized_SERVER_PACKAGE.tar.gz
-rw-------  1 root  root          0  5月  7  2022  __init__.py
drwxr-xr-x 19 20001 20001      4096  9月 24 21:19  lib
-rw-r--r--  1 20001 20001        43  9月 24 21:19  version.cfg
-rw-------  1 root  root        115  5月  7  2022  version.json

对server包进行压缩

这里不是对server包进行解压,相反,是将压缩包放到server目录下,并进行压缩,在后续安装会用到

[root@gaussdb1 X86]# mkdir -p server
[root@gaussdb1 X86]# mv GaussDB_Kernel_V500R002C10SPC510B016_X86_Centralized_SERVER_PACKAGE.tar.gz server/
[root@gaussdb1 X86]# tar -zcvf server.tar.gz server/
[root@gaussdb1 X86]# 

证书准备(所有节点)

依赖准备

vim /etc/pki/tls/openssl.cnf

[ CA_default ]

dir             = /home/omm/demoCA              # Where everything is kept
certs           = $dir/certs            # Where the issued certs are kept
crl_dir         = $dir/crl              # Where the issued crl are kept
database        = $dir/index.txt        # database index file.
new_certs_dir   = $dir/newcerts         # default place for new certs.
certificate     = $dir/cacert.pem       # The CA certificate
serial          = $dir/serial           # The current serial number
crlnumber       = $dir/crlnumber        # the current crl number
crl             = $dir/crl.pem          # The current CRL
private_key     = $dir/private/cakey.pem# The private key

---
su - omm
touch demoCA/index.txt && echo '01' > demoCA/serial

CA证书准备

--生成CA私钥(.key)
# openssl genrsa -aes256 -out ca.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
.......................................+++++
...........................+++++
e is 65537 (0x010001)
Enter pass phrase for ca.key: 输入密码,这里以Omm@omm2为例
Verifying - Enter pass phrase for ca.key: 再次输入密码确认

--生成CA证书请求(.csr)
# openssl req -config /etc/pki/tls/openssl.cnf -new -key ca.key -out ca.csr
Enter pass phrase for ca.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:tianjin
Locality Name (eg, city) []:tianjin
Organization Name (eg, company) [Internet Widgits Pty Ltd]:gc
Organizational Unit Name (eg, section) []:om
Common Name (e.g. server FQDN or YOUR name) []:hn0
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

--自签名得到根证书(.crt)
# openssl ca -config /etc/pki/tls/openssl.cnf -days 365 -out ca.crt -keyfile ca.key -selfsign -infiles ca.csr
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for ca.key:
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Dec 19 15:09:29 2022 GMT
            Not After : Dec 19 15:09:29 2023 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = tianjin
            organizationName          = gc
            organizationalUnitName    = om
            commonName                = hn0
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                80:2A:02:8D:A3:AD:50:0D:11:3B:60:01:23:A4:79:61:2C:52:40:16
            X509v3 Authority Key Identifier:
                keyid:80:2A:02:8D:A3:AD:50:0D:11:3B:60:01:23:A4:79:61:2C:52:40:16

Certificate is to be certified until Dec 19 15:09:29 2023 GMT (365 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

服务端证书准备

--修改/home/omm/demoCA/index.txt.attr文件
unique_subject = no

--生成服务端私钥(.key)
# openssl genrsa -aes256 -out server.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
........+++++
................+++++
e is 65537 (0x010001)
Enter pass phrase for server.key: 输入密码,这里以Omm@omm2为例
Verifying - Enter pass phrase for server.key: 再次输入密码确认

--生成服务端证书请求(csr)
# openssl req -new -key server.key -out server.csr -config /etc/pki/tls/openssl.cnf
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:tianjin
Locality Name (eg, city) []:tianjin
Organization Name (eg, company) [Internet Widgits Pty Ltd]:gc
Organizational Unit Name (eg, section) []:om
Common Name (e.g. server FQDN or YOUR name) []:hn0
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@gaussdb1 software]#

--生成服务端证书(.crt)
# openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config /etc/pki/tls/openssl.cnf -days 365 -md sha256
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for ca.key:
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 2 (0x2)
        Validity
            Not Before: Dec 19 15:18:02 2022 GMT
            Not After : Dec 19 15:18:02 2023 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = tianjin
            organizationName          = gc
            organizationalUnitName    = om
            commonName                = hn0
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                1B:13:88:99:E0:7B:B3:C3:07:45:AE:F2:B1:15:AA:37:E3:57:C4:82
            X509v3 Authority Key Identifier:
                keyid:80:2A:02:8D:A3:AD:50:0D:11:3B:60:01:23:A4:79:61:2C:52:40:16

Certificate is to be certified until Dec 19 15:18:02 2023 GMT (365 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

生成ca.pem 和 server.pem证书

cat ca.crt > ca.pem && cat server.crt > server.pem

copy证书

cp ca.pem server.key server.pem /home/omm/sslcrt/
chmod 700 /home/omm/sslcrt
chmod 600 /home/omm/sslcrt/*
chown -R omm: /home/omm/sslcrt

Agent安装(所有节点)

编辑om_agent.conf文件

agent_log_path = /home/omm/log/om_agent
agent_tool_path = /gaussdb/om-agent
agent_ssl = /home/omm/sslcrt
ssl_close = on
encrypt_path = /home/omm/sslcrt

编辑public_cloud.conf文件

此配置文件在agent/common目录下通过public_cloud.conf.sample 复制而来

cp agent/common/public_cloud.conf.sample agent/common/public_cloud.conf

vim agent/common/public_cloud.conf

[PUBLIC_CLOUD_CONFIGURATION]
mgr.net = ens160
data.net = ens160
virtual.net = ens160
pkgDir = /gaussdb/usr/local/package
logDir = /gaussdb/log
appDir = /gaussdb/usr/local/core/app
toolDir = /gaussdb/usr/local/tool
tmpDir = /gaussdb/usr/local/temp
caDir = /gaussdb/CA
cmDir = /gaussdb/usr/local/cm
etcdDir = /gaussdb/usr/local/etcd
gtmDir = /gaussdb/usr/local/gtm
cooDir = /gaussdb/usr/local/cn
dataDir = /gaussdb/engine/data1/data
adaptorDir = /opt/software/gaussdb/adaptor

修改权限属组

chown -R root:dbgrp /gaussdb/usr/local/package
chmod -R 750 /gaussdb/usr/local/package
chown root:dbgrp /opt/software/gaussdb/adaptor/utils/sudoer/gaussdbv5_api_sudo_exec.py
chmod 750 /opt/software/gaussdb/adaptor/utils/sudoer/gaussdbv5_api_sudo_exec.py

配置/etc/sudoers

将以下内容添加到文件最后,并wq!强制保存退出

Defaults logfile = /var/log/sudo.log
Cmnd_Alias COMMAND_FLAG =/gaussdb/usr/local/package/script/gs_preinstall *, /opt/software/gaussdb/adaptor/utils/sudoer/gaussdbv5_api_sudo_exec.py

omm ALL=(root) NOPASSWD: COMMAND_FLAG

启动agent

su - omm
python3 /opt/software/gaussdb/agent/mgr/install.py  --gen_ca_passwd Omm@omm2
.
.
.
[INFO][<module>][install:597] : Start agent successful.

Server安装

前置操作(所有节点)

准备json配置文件

{"nodeIp": "172.20.22.151", "dbPort": "33700", "clusterMode": "ha", "func_name": "pre_install", "packagePath": "/opt/software/gaussdb", "packageName": "server.tar.gz", "clusterConf": "{\"clusterName\": \"Gauss_XuanYuan\", \"consistencyProtocol\": \"quorum\", \"encoding\": \"utf8\", \"shardingNum\": 1, \"solution\": \"triset\", \"replicaNum\": 3, \"etcd\": {\"nodes\": [{\"ip\": \"172.20.22.151\", \"az\": \"AZ1\", \"virtualIp\": \"172.20.22.151\", \"rack\": \"gaussdb1\", \"dataIp\": \"172.20.22.151\"}, {\"ip\": \"172.20.22.152\", \"az\": \"AZ1\", \"virtualIp\": \"172.20.22.152\", \"rack\": \"gaussdb2\", \"dataIp\": \"172.20.22.152\"}, {\"ip\": \"172.20.22.153\", \"az\": \"AZ1\", \"virtualIp\": \"172.20.22.153\", \"rack\": \"gaussdb3\", \"dataIp\": \"172.20.22.153\"}]}, \"cm\": [{\"ip\": \"172.20.22.151\", \"az\": \"AZ1\", \"virtualIp\": \"172.20.22.151\", \"rack\": \"gaussdb1\", \"dataIp\": \"172.20.22.151\"}, {\"ip\": \"172.20.22.152\", \"az\": \"AZ1\", \"virtualIp\": \"172.20.22.152\", \"rack\": \"gaussdb2\", \"dataIp\": \"172.20.22.152\"}, {\"ip\": \"172.20.22.153\", \"az\": \"AZ1\", \"virtualIp\": \"172.20.22.153\", \"rack\": \"gaussdb3\", \"dataIp\": \"172.20.22.153\"}], \"shards\": [[{\"ip\": \"172.20.22.151\", \"az\": \"AZ1\", \"virtualIp\": \"172.20.22.151\", \"rack\": \"gaussdb1\", \"dataIp\": \"172.20.22.151\"}, {\"ip\": \"172.20.22.152\", \"az\": \"AZ1\", \"virtualIp\": \"172.20.22.152\", \"rack\": \"gaussdb2\", \"dataIp\": \"172.20.22.152\"}, {\"ip\": \"172.20.22.153\", \"az\": \"AZ1\", \"virtualIp\": \"172.20.22.153\", \"rack\": \"gaussdb3\", \"dataIp\": \"172.20.22.153\"}]]}"}

执行前置操作

su - omm 
cat json_file | python3 /opt/software/gaussdb/adaptor/om_controller

返回成功:{"detailmsg": "SUCCESS", "retcode": 0}

安装(任一节点)

echo '{"dbPort": "33700", "nodeIp": "172.20.22.151", "rdsAdminUser": "rdsAdmin", "rdsAdminPasswd": "Omm@omm2", "rdsMetricUser": "rdsMetric", "rdsMetricPasswd": "Omm@omm2", "rdsReplUser": "rdsRepl", "rdsReplPasswd": "Omm@omm2", "rdsBackupUser": "rdsBackup", "rdsBackupPasswd": "Omm@omm2", "dbUser": "root", "dbUserPasswd": "Omm@omm2", "params": {"enable_thread_pool": "off"}, "cnParams": {}, "dnParams": {}, "cmParams": {}, "ca_crt_filename": "ca.pem", "server_crt_filename": "server.pem", "clusterMode": "ha", "server_key_filename": "server.key", "ssl_cert_passwd": "Omm@omm2", "ssl_cert_path": "/home/omm/sslcrt", "enableForceSwitch": null, "replicationAll":"true", "func_name": "install"}' | python3 /opt/software/gaussdb/adaptor/om_controller

返回成功:{"detailmsg": "SUCCESS", "retcode": 0}

集群状态检查

[omm@gaussdb1 ~]$ source /home/omm/gauss_env_file
[omm@gaussdb1 ~]$ cm_ctl query -Cv
[  CMServer State   ]

node             instance state
---------------------------------
1  172.20.22.151 1        Primary
2  172.20.22.152 2        Standby
3  172.20.22.153 3        Standby

[    ETCD State     ]

node             instance state
---------------------------------------
1  172.20.22.151 7001     StateLeader
2  172.20.22.152 7002     StateFollower
3  172.20.22.153 7003     StateFollower

[   Cluster State   ]

cluster_state   : Normal
redistributing  : No
balanced        : Yes
current_az      : AZ_ALL

[  Datanode State   ]

node             instance state            | node             instance state            | node             instance state
---------------------------------------------------------------------------------------------------------------------------------------
1  172.20.22.151 6001     P Primary Normal | 2  172.20.22.152 6002     S Standby Normal | 3  172.20.22.153 6003     S Standby Normal

报错汇总

--报错1
[omm@gaussdb1 ~]$ python3 /opt/software/gaussdb/agent/mgr/install.py  --gen_ca_passwd Omm@omm2
[om_agent_install][2022-12-20 10:01:21,789][INFO][<module>][install:498] :

******************************
[Begin]:Install agent application.

[om_agent_install][2022-12-20 10:01:21,850][INFO][<module>][install:611] : install agent failed.error = Traceback (most recent call last):
  File "/opt/software/gaussdb/agent/mgr/install.py", line 503, in <module>
    raise Exception(Errors.GAUSS_61101.build_msg(" obtain the environment variable host ip."))
Exception: [GAUSS-61101] : Failed to do  obtain the environment variable host ip..

解决方法:
echo "export HOST_IP=172.20.22.151" >> ~/.bashrc 
source ~/.bashrc

--报错2
Exception: [GAUSS-61101] : Failed to do Clear crontabError: Traceback (most recent call last):
  File "/gaussdb/om-agent/agent_92688/mgr/setUserCron.py", line 156, in <module>
    cron.del_cron()
  File "/gaussdb/om-agent/agent_92688/mgr/setUserCron.py", line 74, in del_cron
    crontab_str = self.get_old_cron()
  File "/gaussdb/om-agent/agent_92688/mgr/setUserCron.py", line 64, in get_old_cron
    raise Exception(Errors.GAUSS_61101.build_msg("crontab info."))
Exception: [GAUSS-61101] : Failed to do crontab info..

解决方法:
echo "omm" >> /etc/cron.allow

--报错3
cat json_file | python3 /opt/software/gaussdb/adaptor/om_controller
{"retcode": 1, "detailmsg": "Fail to pre_install, Error: The data does not exist.."}

解决方法:
确认agent/common/public_cloud.conf中dataDir是否存在,如果不存在创建,并重启agent

--报错4
{"retcode": 1, "detailmsg": "Fail to pre_install, Error: Result exception error : The .pre_install_task_result does not exist.Maybe the task is not running or abnormal."}

原因是:ifconfig 172.20.22.151
172.20.22.151: error fetching interface information: Device not found

解决办法:
将agent/common/public_cloud.conf中mgr.net、data.net和virtual.net 全部写成网卡名
最后修改时间:2022-12-26 09:53:52
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论