一、服务器环境配置
1、环境依赖包安装
X86架构:
yum install -y libaio-devel flex bison ncurses-devel glibc-devel patch readline-devel libnsl bzip2 expect net-tools
ARM 架构:
yum install -y libaio-devel flex bison ncurses-devel glibc-devel patch readline-devel libnsl expect net-tools
2、关闭操作系统防火墙
### 关闭
systemctl stop firewalld
### 设置开机不启动
systemctl disable firewalld
### 检查状态
systemctl status firewalld
3、关闭 SELINUX
sed -i 's/SELINUX=enforcing/SELINUX =disabled/' /etc/selinux/config
4、设置字符集参数(可选)
修改环境变量 vim /etc/profile
# 添加(自定义)
export LANG="en_US.UTF-8"
# 或使用sed 命令输入
sed -i '$a\export LANG="en_US.UTF-8"\' /etc/profile
5、关闭 THP服务
内存大页机制(Transport Huge Pages,THP),是 linux2.6.38 后支持的功能。该功能支持 2MB 的大页内存分配,默认开启。
查看 THP 服务
[root@node1 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
[root@node1 ~]# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
关闭 THP 服务
[root@node1 ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled && echo never > /sys/kernel/mm/transparent_hugepage/defrag
[root@node1 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
[root@node1 ~]# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
6、root用户免密(安装结束可删除)
[root@node1 ~]# ssh-copy-id c1
[root@node1 ~]# ssh-copy-id c2
[root@node2 ~]# ssh-copy-id c1
[root@node2 ~]# ssh-copy-id c2
二、预安装
目录规划建议分开文件夹放置:
(1)、解压的安装包单独放一个目录下:/dbdata/gbase/install_package
(2)、数据库安装目录 (gaussdbAppPath):/dbdata/gbase/install/app
(3)、日志目录 (gaussdbLogPath):/dbdata/gbase/log/om
(4)、临时文件目录 (tmpMppdbPath):/dbdata/gbase/tmp
(5)、数据库工具目录 (gaussdbToolPath):/dbdata/gbase/install/tool
(6)、数据库core文件目录(corePath):/dbdata/gbase/corefile
(7)、Data数据节点目录:/dbdata/gbase/install/data/dn
1、创建目录并依次解压
[root@node1 ~]# mkdir -p /dbdata/gbase/install_package
[root@node1 ~]# mv GBase8cV5_S5.0.0B04_centos7.8_x86_64.tar.gz /dbdata/gbase/install_package/
[root@node1 install_package]# tar -zxvf GBase8cV5_S5.0.0B04_centos7.8_x86_64.tar.gz
[root@node1 install_package]# tar -zxvf GBase8cV5_S5.0.0B04_CentOS_x86_64_om.tar.gz
2、配置安装环境变量
[root@node1 ~]# vim /root/.bashrc
# 8c PACKAGE_PATH需改成解压包地址
export PACKAGE_PATH=/dbdata/gbase/install_package
export PATH=$PACKAGE_PATH/venv/bin:$PATH
export LD_LIBRARY_PATH=$PACKAGE_PATH/lib:$LD_LIBRARY_PATH
3、创建XML 配置文件
复制解压包 cluster_config_template.xml 文件,改写cluster_config_template.xml 文件
[root@node1 install_package]# cp /dbdata/install_package/script/gspylib/etc/conf/cluster_config_template.xml /dbdata/install_package
[root@node1 install_package]# vim /dbdata/install_package/cluster_config.xml
主备安装 xml 配置文件参考及说明:
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<!-- 整体信息 -->
<CLUSTER>
<!-- 数据库名称 -->
<PARAM name="clusterName" value="GBase_8c" />
<!-- 数据库节点主机名(hostname) -->
<PARAM name="nodeNames" value="node1,node2" />
<!-- 数据库安装目录-->
<PARAM name="gaussdbAppPath" value="/dbdata/gbase/install/app" />
<!-- 日志目录-->
<PARAM name="gaussdbLogPath" value="/dbdata/gbase/log/om" />
<!-- 临时文件目录-->
<PARAM name="tmpMppdbPath" value="/dbdata/gbase/tmp"/>
<!--数据库工具目录-->
<PARAM name="gaussdbToolPath" value="/dbdata/gbase/install/tool" />
<!--数据库core文件目录-->
<PARAM name="corePath" value="/dbdata/gbase/corefile"/>
<!-- 节点IP,与nodeNames一一对应 -->
<PARAM name="backIp1s" value="192.168.140.86,192.168.140.87"/>
</CLUSTER>
<!-- 每台服务器上的节点部署信息 -->
<DEVICELIST>
<!-- 节点1上的节点部署信息,sn:主机名 -->
<DEVICE sn="node1">
<!-- 节点1 的主机名-->
<PARAM name="name" value="node1"/>
<!-- 节点1 所在的AZ 及AZ优先级-->
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
<PARAM name="backIp1" value="192.168.140.86"/>
<PARAM name="sshIp1" value="192.168.140.86"/>
<!-- cm主 -->
<PARAM name="cmsNum" value="1"/>
<!-- cm主: CM 安装目录 -->
<PARAM name="cmDir" value="/dbdata/gbase/install/cm"/>
<PARAM name="cmServerPortBase" value="15300"/>
<PARAM name="cmServerListenIp1" value="192.168.140.86,192.168.140.87"/>
<PARAM name="cmServerHaIp1" value="192.168.140.86,192.168.140.87"/>
<!-- cmServerlevel目前只支持1 -->
<PARAM name="cmServerlevel" value="1"/>
<!-- cms主及所有备的hostname -->
<PARAM name="cmServerRelation" value="node1,node2"/>
<!--dn-->
<PARAM name="dataNum" value="1"/>
<PARAM name="dataPortBase" value="15400"/>
<PARAM name="dataNode1" value="/dbdata/gbase/install/data/dn,node2,/dbdata/gbase/install/data/dn"/>
<PARAM name="dataNode1_syncNum" value="0"/>
</DEVICE>
<!-- node2上的节点部署信息,其中“name”的值配置为主机名 -->
<DEVICE sn="node2">
<!-- 节点 2 的主机名-->
<PARAM name="name" value="node2"/>
<!-- 节点2 所在的AZ 及AZ优先级-->
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
<PARAM name="backIp1" value="192.168.140.87"/>
<PARAM name="sshIp1" value="192.168.140.87"/>
<!-- cm目录 -->
<PARAM name="cmServerPortStandby" value="15300"/>
<PARAM name="cmDir" value="/dbdata/gbase/install/cm"/>
</DEVICE>
</DEVICELIST>
</ROOT>
4、执行预安装
### -U 安装用户 -G 安装用户组
### 密码设置 Database@123
[root@node1 install_package]# script/gs_preinstall -G gbase -U gbase -X ./cluster_config.xml
Parsing the configuration file.
Successfully parsed the configuration file.
Installing the tools on the local node.
Successfully installed the tools on the local node.
Are you sure you want to create trust for root (yes/no)?yes
Please enter password for root
Password:
Successfully created SSH trust for the root permission user.
Setting host ip env
Successfully set host ip env.
Distributing package.
Begin to distribute package to tool path.
Successfully distribute package to tool path.
Begin to distribute package to package path.
Successfully distribute package to package path.
Successfully distributed package.
Are you sure you want to create the user[gbase] and create trust for it (yes/no)? yes
Please enter password for cluster user.
Password:
Please enter password for cluster user again.
Password:
Generate cluster user password files successfully.
Successfully created [gbase] user on all nodes.
Preparing SSH service.
Successfully prepared SSH service.
Installing the tools in the cluster.
Successfully installed the tools in the cluster.
Checking hostname mapping.
Successfully checked hostname mapping.
Creating SSH trust for [gbase] user.
Please enter password for current user[gbase].
Password:
Checking network information.
All nodes in the network are Normal.
Successfully checked network information.
Creating SSH trust.
Creating the local key file.
Successfully created the local key files.
Appending local ID to authorized_keys.
Successfully appended local ID to authorized_keys.
Updating the known_hosts file.
Successfully updated the known_hosts file.
Appending authorized_key on the remote node.
Successfully appended authorized_key on all remote node.
Checking common authentication file content.
Successfully checked common authentication content.
Distributing SSH trust file to all node.
Distributing trust keys file to all node successfully.
Successfully distributed SSH trust file to all node.
Verifying SSH trust on all hosts.
Successfully verified SSH trust on all hosts.
Successfully created SSH trust.
Successfully created SSH trust for [gbase8c] user.
Checking OS software.
Successfully check os software.
Creating cluster's path.
Successfully created cluster's path.
Set and check OS parameter.
Setting OS parameters.
Successfully set OS parameters.
Set and check OS parameter completed.
Preparing CRON service.
Successfully prepared CRON service.
Setting user environmental variables.
Successfully set user environmental variables.
Setting the dynamic link library.
Successfully set the dynamic link library.
Setting Core file
Successfully set core path.
Setting pssh path
Successfully set pssh path.
Setting Cgroup.
Successfully set Cgroup.
Set ARM Optimization.
No need to set ARM Optimization.
Fixing server package owner.
Setting finish flag.
Successfully set finish flag.
Preinstallation succeeded.
三、正式安装
[root@node1 install_package]$ su - gbase
[gbase8c@c1 ~]$ gs_install -X /dbdata/gbase/install_package/cluster_config.xml
Parsing the configuration file.
Check preinstall on every node.
Successfully checked preinstall on every node.
Creating the backup directory.
Successfully created the backup directory.
begin deploy..
Installing the cluster.
begin prepare Install Cluster..
Checking the installation environment on all nodes.
begin install Cluster..
Installing applications on all nodes.
Successfully installed APP.
begin init Instance..
encrypt cipher and rand files for database.
### 说明,此时密码输入与操作系统密码一样即可 Database@123
Please enter password for database:
### 说明,此时密码输入与操作系统密码一样即可 Database@123
Please repeat for database:
begin to create CA cert files
The sslcert will be generated in /dbdata/gbase/install/app/share/sslcert/om
Create CA files for cm beginning.
Create CA files on directory [/dbdata/gbase/install/app_5054ff66/share/sslcert/cm]. file list: ['cacert.pem', 'server.key', 'server.crt', 'client.key', 'client.crt', 'server.key.cipher', 'server.key.rand', 'client.key.cipher', 'client.key.rand']
Non-dss_ssl_enable, no need to create CA for DSS
Cluster installation is completed.
Configuring.
Deleting instances from all nodes.
Successfully deleted instances from all nodes.
Checking node configuration on all nodes.
Initializing instances on all nodes.
Updating instance configuration on all nodes.
Check consistence of memCheck and coresCheck on database nodes.
Successful check consistence of memCheck and coresCheck on all nodes.
Configuring pg_hba on all nodes.
Configuration is completed.
Starting cluster.
======================================================================
Successfully started primary instance. Wait for standby instance.
======================================================================
.
Successfully started cluster.
======================================================================
cluster_state : Normal
redistributing : No
node_count : 2
Datanode State
primary : 1
standby : 1
secondary : 0
cascade_standby : 0
building : 0
abnormal : 0
down : 0
Successfully installed application.
end deploy..
四、基本使用配置
1、配置服务端远程连接
gs_guc reload -N all -I all -h "host all all 0.0.0.0/0 sha256"
gs_guc set -N all -I all -c "listen_addresses = '*' "
gs_guc set -N all -I all -c "password_encryption_type=1"
gs_om -t restart
2、主备可选配置:虚拟IP (VIP)
前提条件:需要一个同网段内可用的IP 设置为虚拟IP,配置虚拟IP可以实现主机宕机后自动切换备机连接
(1)、给gbase 安装用户添加sudo权限
需在每个节点上执行:
[root@node1 ~ ]# visudo
## 添加以下行
gbase ALL=(ALL) NOPASSWD:ALL
[root@node2 ~]# visudo
gbase ALL=(ALL) NOPASSWD:ALL
(2)、手动生成 VIP 配置文件步骤,在每个节点上都要生成该 VIP 配置文件,且每个节点要 求一致,需要重启集群才能生效(不建议手动操作)。
生成配置文件 (主备节点均需执行):
## 设置虚拟IP地址
## 192.168.140.88 为设置的虚拟ip
## 生成的配置文件存在 /dbdata/gbase/install/cm/cm_agent/cm_resource.json
[gbase@node1 ~]$ cm_ctl res --add --res_name="CM_VIP" --res_attr="resources_type=VIP,float_ip=192.168.140.88"
## 设置当前主备地址
## 192.168.140.86 主节点IP
[gbase@node1 ~]$ cm_ctl res --edit --res_name="CM_VIP" --add_inst="res_instance_id=6001,node_id=1" --inst_attr="base_ip=192.168.140.86"
## 192.168.140.87 备节点IP
[gbase@node1 ~]$ cm_ctl res --edit --res_name="CM_VIP" --add_inst="res_instance_id=6002,node_id=2" --inst_attr="base_ip=192.168.140.87"
若需要删除某个地址:
cm_ctl res --del --res_name="CM_VIP" --del_inst="res_instance_id=6002,node_id=2"
(3)、修改主备各机器的配置文件 pg_hba.conf
[gbase@node1 ~]$ gs_guc reload -N all -I all -h "host all all 192.168.140.88/32 sha256"
**(4)、设置主备自动切换参数,并重启集群 **
### 均在主节点IP执行
[gbase@node1 ~]$ cm_ctl set --param --server -k "cms_enable_failover_on2nodes=1"
[gbase@node1 ~]$ cm_ctl set --param --server -k "cms_network_isolation_timeout=10"
[gbase@node1 ~]$ cm_ctl set --param --server -k "cms_enable_db_crash_recovery=1"
## 192.168.140.2 gateway地址
## 如果没有gateway的情况,可以使用一个一直活跃的ip作为仲裁IP
[gbase@node1 ~]$ cm_ctl set --param --server -k "third_party_gateway_ip=192.168.140.2"
[gbase@node1 ~]$ cm_ctl stop
[gbase@node1 ~]$ cm_ctl start
(5)、主备切换
# 检查cm状态
[gbase@node1 ~]$ cm_ctl query -Cv
# 主备自动切换
[gbase@node1 ~]$ cm_ctl switchover -A
# 主备切换目标节点
[gbase@node1 ~]$ cm_ctl switchover -n 2 -D /dbdata/database/install/data/dn/
# 检查浮动VIP是否生效
[gbase@node1 ~]$ cm_ctl show
3、生产环境参数调整 (可根据实际情况调整)
max_process_memory 取内存75%(向下取整)、shared_buffers 取内存45%(向下取整)、checkpoint_completion_target 取0.9即可,effective_cache_size取内存40%(向下取整),synchronous_commit 开启,full_page_writes 开启、 fsync 开启。
[gbase@node1 ~]$ gs_guc reload -I all -N all -c 'max_process_memory= 25GB'
[gbase@node1 ~]$ gs_guc reload -I all -N all -c 'shared_buffers=12GB'
[gbase@node1 ~]$ gs_guc reload -I all -N all -c 'checkpoint_completion_target= 0.9'
[gbase@node1 ~]$ gs_guc reload -I all -N all -c 'synchronous_commit= on'
[gbase@node1 ~]$ gs_guc reload -I all -N all -c 'full_page_writes= on'
[gbase@node1 ~]$ gs_guc reload -I all -N all -c 'fsync= on'
[gbase@node1 ~]$ gs_guc reload -I all -N all -c 'wal_level = logical'
[gbase@node1 ~]$ gs_om -t restart
4、设置备机可读(可选)
备机可读特性为可选特性,需要修改配置参数并重启主备机器后才能使用。在开启备机可读之后,备机将支持读操作,并满足数据一致性要求。
[gbase@node1 ~]$ gs_guc set -I all -N all -c 'wal_level=hot_standby'
[gbase@node1 ~]$ gs_guc set -I all -N all -c 'hot_standby = on'
[gbase@node1 ~]$ gs_guc set -I all -N all -c 'hot_standby_feedback = on'
[gbase@node1 ~]$ gs_om -t restart
5、创建业务用户
**(1)、初始用户:**数据库安装过程中自动生成的帐户称为初始用户。初始用户拥有系统的最高权限,能够执行所有的操作。如果安装时不指定初始用户名称则该帐户与进行数据库安装的操作系统用户同名。如果在安装时不指定初始用户的密码,安装完成后密码为空,在执行其他操作前需要通过gsql客户端修改初始用户的密码。如果初始用户密码为空,则除修改密码外无法执行其他SQL操作以及升级、扩容、节点替换等操作。初始用户会绕过所有权限检查。建议仅将此初始用户作为DBA管理用途,而非业务应用。
postgres=# \du
List of roles
Role name | Attributes | Member of
------+-------------------------------------------------------------------------------------------------
gbase|Sysadmin, Create role,Create DB,Replication,Administer audit,Monitoradmin,Operatoradmin,Policyadmin,UseFT | {}
(2)、系统管理员(DBA)
系统管理员是指具有SYSADMIN属性的帐户,默认安装情况下具有与对象所有者相同的权限,但不包括dbe_perf模式的对象权限。要创建新的系统管理员,请以初始用户或者系统管理员用户身份连接数据库,并使用带SYSADMIN选项的CREATE USER语句或 ALTER USER语句进行设置。
create user gbase8c with sysadmin login password 'Database@123';
(3)、安全管理员(DBA)
安全管理员是指具有CREATEROLE属性的账户,具有创建、修改、删除用户或角色的权限。 要创建新的安全管理员,三权分立关闭时,请以系统管理员或者安全管理员身份连接数据库,三权分立打开时,请以安全管理员身份连接数据库,并使用带CREATEROLE选项的CREATE USER语句或 ALTER USER语句进行设置。
CREATE USER createrole WITH CREATEROLE password "xxxxxxxxxxx";
或 # ALTER USER时,要求用户已存在。
ALTER USER joe CREATEROLE;
(4)、审计管理员
审计管理员是指具有AUDITADMIN属性的账户,具有查看和删除审计日志的权限。 要创建新的审计管理员,三权分立关闭时,请以系统管理员或者安全管理员身份连接数据库,三权分立打开时,请以安全管理员身份连接数据库,并使用带AUDITADMIN选项的CREATE USER语句或 ALTER USER语句进行设置。
CREATE USER auditadmin WITH AUDITADMIN password "xxxxxxxxxxx";
或 # ALTER USER时,要求用户已存在。
ALTER USER joe AUDITADMIN;
(5)、监控管理员
监控管理员是指具有MONADMIN属性的帐户,具有查看dbe_perf模式下视图和函数的权限,亦可以对dbe_perf模式的对象权限进行授予或收回。
要创建新的监控管理员,请以系统管理员身份连接数据库,并使用带MONADMIN选项的CREATE USER语句或ALTER USER语句进行设置。
CREATE USER monadmin WITH MONADMIN password "xxxxxxxxx";
或 # ALTER USER时,要求用户已存在。
ALTER USER joe MONADMIN;
(6)、运维管理员
运维管理员是指具有OPRADMIN属性的帐户。
要创建新的运维管理员,请以初始用户身份连接数据库,并使用带OPRADMIN选项的CREATE USER语句或ALTER USER语句进行设置。
CREATE USER opradmin WITH OPRADMIN password "xxxxxxxxx";
或 # ALTER USER时,要求用户已存在。
ALTER USER joe OPRADMIN;
(7)、安全策略管理员
安全策略管理员是指具有POLADMIN属性的帐户,具有创建资源标签、脱敏策略和统一审计策略的权限。
要创建新的安全策略管理员,请以系统管理员用户身份连接数据库,并使用带POLADMIN选项的CREATE USER语句或ALTER USER语句进行设置。
CREATE USER poladmin WITH POLADMIN password "xxxxxxxxx";
或 # ALTER USER时,要求用户已存在。
ALTER USER joe POLADMIN;
创建用户案例:
# 创建gbase8c 用户,包含全部DBA权限及各种管理员权限
create user gbase8c with sysadmin createrole createdb poladmin monadmin opradmin auditadmin login password 'Database@123';
6、创建业务库
(1)、兼容性选择 DBCOMPATIBILITY
DBCOMPATIBILITY [ = ] compatibility_type
指定兼容的数据库的类型,默认兼容O。
取值范围:A、B、C、PG。分别表示兼容O、MY、TD和POSTGRES。
(2)、字符编码 ENCODING
ENCODING [ = ] encoding
指定数据库使用的字符编码,可以是字符串(如’SQL_ASCII’)、整数编号。
(3)、字符集 LC_COLLATE
LC_COLLATE [ = ] lc_collate
指定新数据库使用的字符集。例如,通过lc_collate = 'zh_CN.gbk’设定该参数。
该参数的使用会影响到对字符串的排序顺序(如使用ORDER BY执行,以及在文本列上使用索引的顺序)。默认是使用模板数据库的排序顺序。
取值范围:操作系统支持的字符集。
(4)、字符分类LC_CTYPE
LC_CTYPE [ = ] lc_ctype
指定新数据库使用的字符分类。例如,通过lc_ctype = 'zh_CN.gbk’设定该参数。该参数的使用会影响到字符的分类,如大写、小写和数字。默认是使用模板数据库的字符分类。
取值范围:操作系统支持的字符分类。
建库案例:
# 创建 gbase 库,兼容性为ORACLE,字符编码使用UTF8 字符集使用en_US.UTF-8
create database gbase owner gbase8c DBCOMPATIBILITY= 'A' ENCODING 'UTF8' LC_COLLATE'en_US.UTF-8' LC_CTYPE'en_US.UTF-8';
# 创建 gbase 库,兼容性为MySQL,字符编码使用UTF8 字符集使用en_US.UTF-8
create database gbase owner gbase8c DBCOMPATIBILITY= 'B' ENCODING 'UTF8' LC_COLLATE'en_US.UTF-8' LC_CTYPE'en_US.UTF-8';
五、卸载
安装OS 用户执行
[gbase@node1 ~]$ gs_uninstall --delete-data
root 用户到安装包scrip 脚本目录下执行
[gbase@node1 ~]$ ./gs_postuninstall -U gbase -X /dbdata/gbase/pck_install/cluster_config.xml --delete-user --delete-group
六、问题
1、配置VIP后不生效
检查$GAUSSLOG/cm/cm_agent日志发现,服务器没有ifconfig命令启动虚拟网卡失败。
解决方法:安装net-tools组件
2、