美文网首页
vm greenplum7单节点安装+rockylinux8.9

vm greenplum7单节点安装+rockylinux8.9

作者: 豪威Howie | 来源:发表于2023-12-11 12:57 被阅读0次

目标:

a.在redhat8/oraclelinux8/rockylinux8/almalinux8下安装greenplum7;
b.支持python3.9
c.单节点安装 vmware 版的greenplum

安装linux

安装 almalinux8.9 或 rockylinux8.9 (略)

如果用云服务,有的默认给的版本是8.6的,这个不符合greenplum7 的需要,需要升级到8.7及以上
本文假定SELINUX 和 防火墙都已经关闭,相关操作略

#!/bin/bash

echo 'LANG=en_US.UTF-8' | sudo tee -a /etc/profile


# 安装必要的linux包
sudo dnf group install -y "Development Tools"
INSTALL_PKGS="apr-devel bison bzip2-devel cmake3 epel-release flex gcc gcc-c++ krb5-devel libcurl-devel libevent-devel libkadm5 libxml2-devel libzstd-devel openssl-devel python39 python39-devel python39-psutil python3-pip perl-ExtUtils-MakeMaker.noarch perl-ExtUtils-Embed.noarch readline-devel rsync xerces-c-devel zlib-devel python3-psutil python3-pyyaml python3-psycopg2"
sudo yum install -y $INSTALL_PKGS
sudo yum --enablerepo=powertools install -y libyaml-devel

sudo yum install -y postgresql 
sudo yum install -y postgresql-devel

pip3.9 install -r python-dependencies.txt

sudo rm -rf /usr/bin/python3
sudo ln -s /usr/bin/python3.9 /usr/bin/python3
sudo rm -rf /usr/bin/python
sudo ln -s /usr/bin/python3.9 /usr/bin/python
sudo rm -rf /usr/bin/pip3
sudo ln -s /usr/bin/pip3.9 /usr/bin/pip3
sudo rm -rf /usr/bin/pip
sudo ln -s /usr/bin/pip3.9 /usr/bin/pip



setenforce 0
sudo tee -a /etc/selinux/config << EOF
SELINUX=disabled
EOF

sudo tee -a /etc/sssd/sssd.conf << EOF
selinux_provider=none
EOF

sudo systemctl stop firewalld.service

#Configure kernel settings so the system is optimized for Greenplum Database.
sudo tee -a /etc/sysctl.d/10-gpdb.conf << EOF
kernel.msgmax = 65536
kernel.msgmnb = 65536
kernel.msgmni = 2048
kernel.sem = 500 2048000 200 8192
kernel.shmmni = 1024
kernel.core_uses_pid = 1
kernel.core_pattern=/var/core/core.%h.%t
kernel.sysrq = 1
net.core.netdev_max_backlog = 2000
net.core.rmem_max = 4194304
net.core.wmem_max = 4194304
net.core.rmem_default = 4194304
net.core.wmem_default = 4194304
net.ipv4.tcp_rmem = 4096 4224000 16777216
net.ipv4.tcp_wmem = 4096 4224000 16777216
net.core.optmem_max = 4194304
net.core.somaxconn = 10000
net.ipv4.ip_forward = 0
net.ipv4.tcp_congestion_control = cubic
net.ipv4.tcp_tw_recycle = 0
net.core.default_qdisc = fq_codel
net.ipv4.tcp_mtu_probing = 0
net.ipv4.conf.all.arp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.ip_local_port_range = 10000 65535
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_syncookies = 1
net.ipv4.ipfrag_high_thresh = 41943040
net.ipv4.ipfrag_low_thresh = 31457280
net.ipv4.ipfrag_time = 60
net.ipv4.ip_local_reserved_ports=65330
vm.overcommit_memory = 2
vm.overcommit_ratio = 95
vm.swappiness = 10
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
vm.zone_reclaim_mode = 0
EOF

RAM_IN_KB=`cat /proc/meminfo | grep MemTotal | awk '{print $2}'`
RAM_IN_BYTES=$(($RAM_IN_KB*1024))
echo "vm.min_free_kbytes = $(($RAM_IN_BYTES*3/100/1024))" | sudo tee -a /etc/sysctl.d/10-gpdb.conf > /dev/null
echo "kernel.shmall = $(($RAM_IN_BYTES/2/4096))" | sudo tee -a /etc/sysctl.d/10-gpdb.conf > /dev/null
echo "kernel.shmmax = $(($RAM_IN_BYTES/2))" | sudo tee -a /etc/sysctl.d/10-gpdb.conf > /dev/null
if [ $RAM_IN_BYTES -le $((64*1024*1024*1024)) ]; then
    echo "vm.dirty_background_ratio = 3" | sudo tee -a /etc/sysctl.d/10-gpdb.conf > /dev/null
    echo "vm.dirty_ratio = 10" | sudo tee -a /etc/sysctl.d/10-gpdb.conf > /dev/null
else
    echo "vm.dirty_background_ratio = 0" | sudo tee -a /etc/sysctl.d/10-gpdb.conf > /dev/null
    echo "vm.dirty_ratio = 0" | sudo tee -a /etc/sysctl.d/10-gpdb.conf > /dev/null
    echo "vm.dirty_background_bytes = 1610612736 # 1.5GB" | sudo tee -a /etc/sysctl.d/10-gpdb.conf > /dev/null
    echo "vm.dirty_bytes = 4294967296 # 4GB" | sudo tee -a /etc/sysctl.d/10-gpdb.conf > /dev/null
fi

sudo sysctl -p

sudo tee -a /etc/security/limits.d/10-nproc.conf << EOF
* soft nofile 524288
* hard nofile 524288
* soft nproc 131072
* hard nproc 131072
* soft core unlimited
EOF


ulimit -n 65536 65536
改机器名
hostnamectl set-hostname gphost

创建gpadmin用户,设置ssh并配置免密登录

将相关代码存为 gpadmin_setup.sh,改成 777,并 执行

#!/bin/bash



set -euxo pipefail
setup_ssh_for_user() {
  local user="${1}"
  local home_dir
  home_dir=$(eval echo "~${user}")

  mkdir -p "${home_dir}/.ssh"
  touch "${home_dir}/.ssh/authorized_keys" "${home_dir}/.ssh/known_hosts" "${home_dir}/.ssh/config"
  if [ ! -f "${home_dir}/.ssh/id_rsa" ]; then
    ssh-keygen -t rsa -N "" -f "${home_dir}/.ssh/id_rsa"
  fi
  cat "${home_dir}/.ssh/id_rsa.pub" >> "${home_dir}/.ssh/authorized_keys"
  chmod 0600 "${home_dir}/.ssh/authorized_keys"
  cat << 'NOROAMING' >> "${home_dir}/.ssh/config"
Host *
  UseRoaming no
NOROAMING
  chown -R "${user}" "${home_dir}/.ssh"
}

ssh_keyscan_for_user() {
  local user="${1}"
  local home_dir
  home_dir=$(eval echo "~${user}")

  {
    ssh-keyscan localhost
    ssh-keyscan 0.0.0.0
    ssh-keyscan `hostname`
  } >> "${home_dir}/.ssh/known_hosts"
}

transfer_ownership() {
    chmod a+w gpdb_src
    find gpdb_src -type d -exec chmod a+w {} \;
    # Needed for the gpload test
    [ -f gpdb_src/gpMgmt/bin/gpload_test/gpload2/data_file.csv ] && chown gpadmin:gpadmin gpdb_src/gpMgmt/bin/gpload_test/gpload2/data_file.csv
    [ -d /usr/local/gpdb ] && chown -R gpadmin:gpadmin /usr/local/gpdb
    [ -d /usr/local/greenplum-db-devel ] && chown -R gpadmin:gpadmin /usr/local/greenplum-db-devel
    chown -R gpadmin:gpadmin /home/gpadmin
}

set_limits() {
  # Currently same as what's recommended in install guide
  if [ -d /etc/security/limits.d ]; then
    cat > /etc/security/limits.d/gpadmin-limits.conf <<-EOF
        gpadmin soft core unlimited
        gpadmin soft nproc 131072
        gpadmin soft nofile 65536
    EOF
  fi
  # Print now effective limits for gpadmin
  su gpadmin -c 'ulimit -a'
}

create_gpadmin_if_not_existing() {
  gpadmin_exists=`id gpadmin > /dev/null 2>&1;echo $?`
  if [ "0" -eq "$gpadmin_exists" ]; then
      echo "gpadmin user already exists, skipping creating again."
  else
      eval "$*"
      # Add user to sudoers list required for gpinitsystem test
      echo "gpadmin ALL = NOPASSWD : ALL" >> /etc/sudoers
  fi
}

setup_gpadmin_user() {
  groupadd supergroup
  case "$TEST_OS" in
    centos*)
      user_add_cmd="/usr/sbin/useradd -G supergroup,tty gpadmin"
      create_gpadmin_if_not_existing ${user_add_cmd}
      ;;
    ubuntu*)
      user_add_cmd="/usr/sbin/useradd -G supergroup,tty gpadmin -s /bin/bash"
      create_gpadmin_if_not_existing ${user_add_cmd}
      ;;
    *) echo "Unknown OS: $TEST_OS"; exit 1 ;;
  esac
  echo -e "password\npassword" | passwd gpadmin
  setup_ssh_for_user gpadmin
  transfer_ownership
  set_limits
}

setup_sshd() {
  test -e /etc/ssh/ssh_host_rsa_key || ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa
  test -e /etc/ssh/ssh_host_dsa_key || ssh-keygen -f /etc/ssh/ssh_host_dsa_key -N '' -t dsa
  # See https://gist.github.com/gasi/5691565
  sed -ri 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
  # Disable password authentication so builds never hang given bad keys
  sed -ri 's/PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config

  case "$TEST_OS" in
    centos7)
      test -e /etc/ssh/ssh_host_key || ssh-keygen -f /etc/ssh/ssh_host_key -N '' -t rsa1
      # For Centos 7, disable looking for host key types that older Centos versions don't support.
      sed -ri 's@^HostKey /etc/ssh/ssh_host_ecdsa_key$@#&@' /etc/ssh/sshd_config
      sed -ri 's@^HostKey /etc/ssh/ssh_host_ed25519_key$@#&@' /etc/ssh/sshd_config
      ;;
  esac

  setup_ssh_for_user root

  if [[ "$TEST_OS" == *"ubuntu"* ]]; then
    mkdir -p /var/run/sshd
    chmod 0755 /var/run/sshd
  fi

  /usr/sbin/sshd

  ssh_keyscan_for_user root
  ssh_keyscan_for_user gpadmin
}

determine_os() {
  local name version
  if [ -f /etc/redhat-release ]; then
    name="centos"
    version=$(sed </etc/redhat-release 's/.*release *//' | cut -f1 -d.)
  elif [ -f /etc/SuSE-release ]; then
    name="sles"
    version=$(awk -F " *= *" '$1 == "VERSION" { print $2 }' /etc/SuSE-release)
  elif grep -q ubuntu /etc/os-release ; then
    name="ubuntu"
    version=$(awk -F " *= *" '$1 == "VERSION_ID" { print $2 }' /etc/os-release | tr -d \")
  else
    echo "Could not determine operating system type" >/dev/stderr
    exit 1
  fi
  echo "${name}${version}"
}
# Set the "Set-User-ID" bit of ping, or else gpinitsystem will error by following message:
# [FATAL]:-Unknown host d6f9f630-65a3-4c98-4c03-401fbe5dd60b: ping: socket: Operation not permitted
# This is needed in centos7, sles12sp5, but not for ubuntu18.04
workaround_before_concourse_stops_stripping_suid_bits() {
  chmod u+s $(which ping)
}

_main() {
  TEST_OS=$(determine_os)
  setup_gpadmin_user
  setup_sshd
  workaround_before_concourse_stops_stripping_suid_bits
}

[ "${BASH_SOURCE[0]}" = "$0" ] && _main "$@"

创建需要的目录

mkdir -p /gpdata
mkdir -p /gpdata/coordinator
mkdir -p /gpdata/gpslave1
mkdir -p /gpdata/gpslave2

chown -R gpadmin:gpadmin /gpdata/

3. 安装 greenplum7 的包

3.1 直接下载并安装rpm包

https://github.com/greenplum-db/gpdb/releases/download/7.0.0/open-source-greenplum-db-7.0.0-el8-x86_64.rpm

  dnf  install open-source-greenplum-db-7.0.0-el8-x86_64.rpm

默认安装到/usr/local,授权给gpadmin

chown -R gpadmin /usr/local/greenplum*
chgrp -R gpadmin /usr/local/greenplum*

3.2 切换用户gpadmin

su gpadmin

进入$开头的bash环境

vim .bash_profile

添加以下:

source /usr/local/greenplum-db-7.0.0/greenplum_path.sh

export COORDINATOR_DATA_DIRECTORY=/data/coordinator/gpseg-1
export PGPORT=12345
export PGUSER=gpadmin
export PGDATABASE=gpdb
export LOCALE=en_US.UTF-8

配置gpadmin的ssh

ssh-keygen -t rsa -b 4096

将gpadmin 添加到管理员组,免密码sudo

a. 在 /etc/sudoers 添加

gpadmin        ALL=(ALL)       NOPASSWD: ALL

3.3 设置子节点的host

vim all_hosts

gphost

3.4 权限互通

source /usr/local/greenplum-db-7.0.0/greenplum_path.sh
python   /usr/local/greenplum-db-7.0.0/bin/gpssh-exkeys -f all_hosts

3.5编辑gp初始化文件

vim initgp

SEG_PREFIX=gpseg
PORT_BASE=33000
declare -a DATA_DIRECTORY=(/u01/gpdata/gpslave1 /u01/gpdata/gpslave2 )
MASTER_HOSTNAME=gphost
MASTER_PORT=12345
MASTER_DIRECTORY=/u01/gpdata/gpmaster
DATABASE_NAME=gpdb

4.8设置节点服务器

vim seg_hosts_file

gphost

4.9初始化GP

gpinitsystem -c initgp  -h seg_hosts_file   all_hosts_file

执行初始化命令的时候缺少一个libnsl.so.1
此时修改/etc/ld.so.conf文件

vim /etc/ld.so.conf

include ld.so.conf.d/*.conf
/usr/lib64

/sbin/ldconfig -v

所有缺失的lib包我都放在文件夹中,缺少的lib通过穿件软连接实现

5.连接GP
基本使用
https://www.cnblogs.com/kingle-study/p/10550785.html
登录数据库之前得先将程序运行,执行
bin/gpstart

5.1执行bin/psql -l 查询所有数据库

5.2创建数据库createdb 库名
创建表: CREATE TABLE 表名
bin/psql -d 数据库名 进入指定数据库,接下来就可以执行sql操作了

eg:简单实例:
create table test001(id int,name varchar(128)); --id 为分布键
insert into test001 values (100,‘tom’),(101,‘lily’),(102,‘jack’),(103,‘linda’);
select * from test001;

5.3重新加载配置文件

gpstop -u

附录

其他启停命令

gpstate #查看服务状态
gpstart #正常启动
gpstop #正常关闭
gpstop -M fast #快速关闭
gpstop r #重启

服务器重启后需要在 gpadmin用户下用 gpstart启动gp服务

相关文章

网友评论

      本文标题:vm greenplum7单节点安装+rockylinux8.9

      本文链接:https://www.haomeiwen.com/subject/jqnkgdtx.html