更多技术博客,请关注微信公众号:运维之美

一、 准备工作

• 开发环境资源:8C32G
• 安装包:GBase8sV8.8.5_S5.0.0B29_centos7.6_aarch64.tar.gz
• 操作系统:Kylin10
• 数据库版本: V8.8

二、 前置工作

关闭防火墙

# systemctl stop firewalld.service
并禁止开机自启动
# systemctl disable firewalld.service
检查防火墙状态,处于 inactive 状态即可。
# systemctl status firewalld.service

关闭 SELINUX
SELINUX 提供了强制访问控制功能。为了 GBase 8s 的正常运行,需要关闭所有节点服务器的 SELINUX 服务。
GBase 8s 安装部署手册南大通用数据技术股份有限公司 8执行以下命令,编辑 SELINUX 配置文件。

# vim /etc/selinux/config
设置 SELINUX 为”disabled”:
……
SELINUX=disabled

设置字符集

# vim /etc/profile ……
export LANG=LANG="en_US.UTF-8"

关闭 THP 服务

# echo never > /sys/kernel/mm/transparent_hugepage/enabled
# echo never > /sys/kernel/mm/transparent_hugepage/defrag

查看 THP 服务,如下显示即可。

# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never

创建用户和组
手动创建 gbase 用户组及用户

(1) 在待部署的服务器上创建 gbase 用户组和用户。命令如下:
# groupadd gbase
# useradd -m -d /home/gbase gbase -g gbase
设置密码,请牢记密码。
# passwd gbase

(2) 添加普通用户至 sudoer 列表
默认情况下,普通用户不在 sudoer 列表中。需要通过 root 用户手动将账户添加到sudoer
列表中,普通用户才能执行 sudo 命令。

# visudo
在打开文件如下位置,增加 gbase 用户及权限:

## Allow root to run any commands anywhere
root ALL=(ALL) ALL
gbase ALL=(ALL) NOPASSWD:ALL

三、 部署过程

(1) 将 GBase 8s 数据库安装包上传到服务器中(例如路径在/home/gbase/下),并以gbase
用户解压安装包。
$ tar -xvf GBase8sV8.8.5_S5.0.0BXX_centos7.8_x86_64.tar.gz
(2) 对得到的.bz2 安装包再次解压。
$ tar -jxf GBase8sV8.8.5_S5.0.0BXX_CentOS_x86_64.tar.bz2
(3) 进入解压后的 simpleInstall 子目录。
$ cd simpleInstall/
并执行 install.sh 脚本进行安装。

$ sh install.sh -w "password"  && source ~/.bashrc 

注:不指定端口情况下默认为5432

检查服务是否正常

$ ps ux | grep gaussdb
gbase 10638 2.5 6.7 6233272 541712 Ssl 15:05 0:17
/home/gbase/bin/gaussdb -D /home/gbase/data/single_node
gbase 27707 0.0 0.0 116940 1100 pts/0 S+ 15:17 0:00 grep
--color=auto gaussdb
执行 gs_ctl 命令,显示类似如下信息:
$ gs_ctl query -D /home/gbase/data/single_node
[2023-9-15 15:28:41.068][5848][][gs_ctl]: gs_ctl query ,datadir is
/home/gbase/data/single_node
HA state:
local_role : Normal
static_connections : 0
db_state : Normal
detail_information : Normal
Senders info:
No information
Receiver info:
No information

四、 测试连接
服务端配置
(1) 以 gbase 登录数据库主节点。
(2) 配置 listen_addresses 参数,即指定远程客户端连接使用的数据库主节点IP 或主机名。查看数据库主节点目前的 listen_addresses 配置。
$ gs_guc check -I all -c "listen_addresses" 例如:查询到如下信息:
The gs_guc run with the following arguments: [gs_guc -I all -c listen_addresses check ].
GBase 8s 安装部署手册南大通用数据技术股份有限公司 27expected guc information: gbase8s: listen_addresses=NULL:
[/opt/database/install/data/dn/postgresql.conf]
gs_guc check: plat1: listen_addresses='localhost,192.168.0.1':
[/opt/database/install/data/dn/postgresql.conf]
Total GUC values: 1. Failed GUC values: 0. The value of parameter listen_addresses is same on all instances. listen_addresses='localhost,192.168.0.1' 把要添加的 IP 追加到 listen_addresses 后面,多个配置项之间用英文逗号分隔。例如,追加 IP 地址 10.11.12.34。
$ gs_guc set -I all -c "listen_addresses='localhost,192.168.0.1,10.11.12.34'"


(3) 配置 pg_hba.conf,添加数据库主节点 IP 和客户端 IP。
添加数据库主节点 IP 到 pg_hba.conf 配置文件中。
$ gs_guc reload [-Z datanode] -N all -I all -h "host all gbase 192.168.0.1/32 trust"
 其中-Z datanode 参数可选,gbase 为数据库初始用户,192.168.0.1 为数据库主机IP。添加客户端 IP 到 pg_hba.conf。假设客户端 ip 为 10.11.12.34,认证方式为sha256。
$ gs_guc reload [-Z datanode] -N all -I all -h "host all all 10.11.12.34/32 sha256" 其中-Z datanode 参数可选,10.11.12.34 为客户端主机 IP。


(4) 重启数据库。
$ gs_ctl restart -D $GAUSSHOME/data/single_node -Z single_node重启命令
gs_ctl start|stop|restart -D $GAUSSHOME/data/single_node -Z single_node命令登录测试
gsql -d postgres登录进入数据库
#创建子账号
create user test  password "xxxx";
#测试子账号登录
gsql -d postgres -p 5432 -h 10.13.92.xx -U test

五、 脚本部署

#!/bin/bash

# === 变量设置 ===
GBASE_USER="gbase"
GBASE_GROUP="gbase"
GBASE_HOME="/home/gbase"
GBASE_INSTALL_DIR="$GBASE_HOME"
GBASE_TAR="/data/GBase8sV8.8.5_S5.0.0B29_centos7.6_aarch64.tar.gz"
LOG_FILE="$GBASE_INSTALL_DIR/.install.log"

# === 函数定义 ===
log() {
    echo "$(date '+%F %T') $1"  >>  "$LOG_FILE"
}

generate_passwd() {  # 修正函数名拼写
    tr -dc 'A-Za-z0-9#?$*' < /dev/urandom | fold -w 16 | head -n1
    echo "$RANDOM_PASSWORD" > $GBASE_INSTALL_DIR/gbase_user_password.txt
    chmod 600 $GBASE_INSTALL_DIR/gbase_user_password.txt
    log "用户 $GBASE_USER 创建完成,密码保存在 $GBASE_INSTALL_DIR/gbase_user_password.txt"
}

disable_firewalld() {
    status=$(systemctl is-active firewalld)
    if [ "$status" == "active" ]; then
        log "停止并禁用 firewalld..."
        systemctl stop firewalld.service
        systemctl disable firewalld.service
    else
        log "firewalld已关闭,无需处理"
    fi 
}

disable_selinux() {
    if [ -f /etc/selinux/config ]; then
        log "关闭 SELinux..."
        sudo sed -ri '/^[^#]*SELINUX=/s#=.+$#=disabled#' /etc/selinux/config
    fi
}

set_charset() {
    if ! grep -q 'LANG="en_US.UTF-8"' /etc/profile; then
        echo 'export LANG="en_US.UTF-8"' >> /etc/profile
        source /etc/profile
        log "字符集设置为 en_US.UTF-8"
    else
        log "字符集已设置,无需修改"
    fi
}

disable_thp() {
    log "关闭透明大页 THP..."
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
    echo never > /sys/kernel/mm/transparent_hugepage/defrag
}

set_kernel_params() {
    log "设置内核参数..."
    sysctl -w kernel.sem="250 85000 250 330"
    # 永久生效
    echo "kernel.sem=250 85000 250 330" >> /etc/sysctl.conf
    sysctl -p
}

create_user_group() {
    if ! id gbase &>/dev/null; then
       # RANDOM_PASSWORD=$(generate_passwd)  # 正确调用函数生成密码
        
        groupadd $GBASE_GROUP
        useradd -m -d "$GBASE_HOME" $GBASE_USER -g $GBASE_GROUP
        echo "$RANDOM_PASSWORD" | passwd --stdin $GBASE_USER
    else
        log "用户 $GBASE_USER 已存在"
    fi

    if ! grep -q "^$GBASE_USER" /etc/sudoers; then
        echo "$GBASE_USER ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
        log "用户 $GBASE_USER 已添加至 sudoer 列表"
    else
        log "用户 $GBASE_USER 已在 sudoer 列表中"
    fi
}

install_gbase() {
    # 确保安装包存在
    if [ ! -f "$GBASE_TAR" ]; then
        log "错误:安装包不存在 $GBASE_TAR"
        exit 1
    fi
    
    log "开始安装 GBase..."
    su - $GBASE_USER -c "
        cd \$HOME
        echo '解压安装包...'
        tar -xvf '$GBASE_TAR'  # 移除sudo
        
        echo '安装GBase...'
        tar -jxf GBase8sV8.8.5_S5.0.0B29_CentOS_aarch64.tar.bz2 &&
        cd simpleInstall
        sh install.sh -w '$RANDOM_PASSWORD'
        source ~/.bashrc
    "
    
    # 检查安装结果
    if [ $? -eq 0 ]; then
        log "GBase 安装完成"
    else
        log "GBase 安装失败"
        exit 1
    fi
}

check_gbase_status() {
    log "检查 gbase 服务状态..."
    if pgrep -f gaussdb > /dev/null 2>&1; then
        log "GBase 服务已运行"
        return 0
    else
        log "警告:GBase 服务未运行"
        return 1
    fi
}

# === 主流程调用 ===
main() {
    log "===== GBase 安装初始化开始 ====="
    disable_firewalld
    disable_selinux
    set_charset
    disable_thp
    set_kernel_params
    RANDOM_PASSWORD=$(generate_passwd)
    create_user_group
    install_gbase
    check_gbase_status
    log "===== GBase 安装初始化完成 ====="
    echo "安装日志: $LOG_FILE"
    echo "用户密码: $GBASE_INSTALL_DIR/gbase_user_password.txt"
}

main
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐