zoukankan      html  css  js  c++  java
  • Greeplum 系列(二) 安装部署

    Greeplum 系列(二) 安装部署

    本章将介绍如何快速安装部署 Greenplum,以及 Greenplum 的一些常用命令及工具。本章不会涉及硬件选型、操作系统参数讲解、机器性能测试等高级内容,这些会在 “第8章 Greenplum 线上环境部署” 中介绍。

    2.1 软件安装及数据库初始化

    下面先介绍如何搭建一个完整的 Greenplum 环境。在搭建环境之前,我们必须对 Greenplum 的架构有一定的了解,并且准备好安装部署的机器,机器硬件、操作系统的安装配置读者可自行完成。

    2.1.1 Greenplum 架构

    在安装数据库的时候,我们先要对 Greenplum 架构有一定的了解,这样可以对数据库的安装和使用起到一个指导性的作用。同时在搭建 Greenplum 环境的过程中,可以加深对 Grenplum 架构的理解。 Greenplum 总体架构构图如图 2-1 所示。

    图2-1 Greenplum架构

    下面介绍每个部件的主要功能,如表 2-1 所示。

    表 2-1 Master 主机与 Segment 主机对比

    Master 主机 Segment 主机
    建立与客户端的会话连接和管理 业务数据的存储和存取
    SQ L的解析并形成分布式的执行计划 执行由 Master分发的SQL语句
    将生成好的执行计划分发到每个 Segment 上执行 对于 Master来说,每个 Segment都是对等的,负责对应数据的存储和计算
    收集 Segment 的执行结果 每一台机器上可以配置一到多个 Segment
    Master 不存储业务数据,只存储数据字典 由于每个 Segment 都是对等的,建议采用相同的机器配置
    Master主机可以一主一备,分布在两台机器上 Segment 分 primary 和 mirror 两种,一般交错地存放在子节点上
    为了提高性能,Master 最好单独占用一台机器 ...

    通过图 2-2 可以看出 Master 与 Segment 的关系。

    图2-2 Master与Segment的关系

    Master 和 Segment 其实都是一个单独的 PostgreSQL 数据库。每一个都有自己单独的套元数据字典,在这里, Master 节点一般也叫主节点, Segment 也叫做数据节点。

    Segment 节点与 Master 节点的通信,通过千兆(或万兆)网卡组成的内部连接(InterConnect),在同一台数据节点机器上可以放多个 Segment,不同的 Segment 节点会被赋予不同的端口,同时, Segment 之间也不断地进行着交互。为了实现高可用,每个 Segment 都有对应的备节点( Mirror Segment),分别存在于不同的机器上。

    Client 一般只能与 Master 节点进行交互, Client 将 SQL 发给 Master,然后 Master 对 SQL 进行分析后,再将其分配给所有的 Segment 进行操作,并且将汇总结果返回给客户端。

    2.1.2 环境搭建

    1. 安装 Linux

    Greenplun 没有 Windows 版本,只能安装在类 UNIX 的操作系统上。

    2. Greenplum 集群规划

    节点 IP 内存 硬盘
    mdw 192.168.2.101 512M 8G
    sdw1 192.168.2.102 512M 8G
    sdw2 192.168.2.103 512M 8G

    机器对应的 Master 和 Segment 如下分配:192.168.2.101 作为 Master 节点,192.168.2.102~103 作为 Segment 节点,每个机器上配置两个 Primary Segment 和两个 Mirror Segment;同时 192.168.2.103 作为 Master Standy 节点。通过图 2-3 的架构图可以清晰地知道我们所搭建的集群的概况。

    4. 网络(hosts)

    在确定机器配置的时候,要保证所有机器的网络都是通的,并且每台机器的防火墙都是关闭的,避免存在网络不通的问题。

    在配置 /etc/hosts 时,习惯将 Master 机器叫做 mdw,将 Segment 机器叫做做 sdw,配置好后,使用 ping 命令确定所有 hostname 都是通的。

    5. 创建用用户及用户组

    创建 gpadmin 用户及用户组,将其作为安装 Greenplum 的操作系统用户。

    # 删除原有的用户组及用户
    groupdel gpadmin
    userdel gpadmin
    
    # 添加 gpadmin 用户组和 gpadmin 用户
    groupadd -g 530 gpadmin
    useradd -g 530 -u 530 -m -d /home/gpadmin -s /bin/bash gpadmin
    
    # 对文件夹赋予权限,为 gpadmin 创建密码
    chown -R gpadmin:gpadmin /home/gpadmin/
    passwd gpadmin
    

    2.1.3 Greenplum 系统设置

    (1) 修改或添加 /etc/sysctl.conf

    # for greeplumn
    # 共享内存
    xfs_mount_options = rw,noatime,inode64,allocsize=16m
    kernel.shmmax = 500000000
    kernel.shmmni = 4096
    kernel.shmall = 4000000000
    kernel.sem = 250 512000 100 2048
    kernel.sysrq = 1
    kernel.core_uses_pid = 1
    kernel.msgmnb = 65536
    kernel.msgmax = 65536
    kernel.msgmni = 2048
    # 网络
    net.ipv4.tcp_syncookies = 1
    net.ipv4.ip_forward = 0
    net.ipv4.conf.default.accept_source_route = 0
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_max_syn_backlog = 4096
    net.ipv4.conf.all.arp_filter = 1
    net.ipv4.ip_local_port_range = 1025 65535
    net.core.netdev_max_backlog = 10000
    vm.overcommit_memory = 2
    

    (2) 配置 /etc/security/limits.conf 文件

    # number of file 文件的软数量,表示读取文件的最小数
    * soft nofile 65536
    # number of file 文件的硬数量,表示读取文件的最大数
    * hard nofile 65536
    # number of process 线程数量
    * soft nproc 131072
    * hard nproc 131072
    

    (3) 设置磁盘访问 I/O 调度策略

    cat /sys/block/sda/queue/scheduler
    echo deadline > /sys/block/sda/queue/scheduler
    echo deadline > /sys/block/fd0/queue/scheduler
    echo deadline > /sys/block/hdc/queue/scheduler
    

    (4) 设置预读块的值为 16384

    /sbin/blockdev --getra /dev/sda
    /sbin/blockdev --setra 16384 /dev/sda
    /sbin/blockdev --setra 16384 /dev/sda1
    /sbin/blockdev --setra 16384 /dev/sda2
    /sbin/blockdev --setra 16384 /dev/sda3
    

    2.1.4 Greenplum 安装

    Greenplum 下载地址: https://network.pivotal.io/products/pivotal-gpdb,选择 Database Server/Greenplum Data Computing Appliance Database Installer 下载。

    注意:下载 Greenplum 前需要先注册帐号,如果还不能下载可以将国家设置为国外(如Australia),这里以 greenplum-db-appliance-4.3.9.0-build-1-RHEL5-x86_64.zip 为例。

    (1) 解压

    tar -zxvf greenplum-db-appliance-4.3.9.0-build-1-RHEL5-x86_64.zip
    
    # 解压后的文件
    greenplum-db-appliance-4.3.9.0-build-1-RHEL5-x86_64.bin
    

    (2) 配置 hostfile 和 seg_hosts

    配置 hostfile 文件,将所有的服务器名记录在里面。

    vim hostfile
    
    mdw
    sdw1
    sdw2
    

    seg_hosts 只保存 segment 节点的 hostname

    vim seg_hosts
    
    sdw1
    sdw2
    

    (3) 执行 greenplum-db-appliance-4.3.9.0-build-1-RHEL5-x86_64.bin

    ./greenplum-db-appliance-4.3.9.0-build-1-RHEL5-x86_64.bin
    # gpseginstall -f hostlist -u gpadmin -p gpadmin
    
    ======================================================================
                                 Greenplum DB
                        Appliance Automated Installer
    ----------------------------------------------------------------------
    Timestamp ......... : 2018年 05月 27日 星期日 21:17:41 CST
    Product Installer.. : greenplum-db-appliance-4.3.9.0-build-1-RHEL5-x86_64.bin
    Product Version ... : 4.3.9.0
    Build Number ...... : 
    Install Dir ....... : /usr/local/GP-4.3.9.0
    Install Log file .. : /home/gpadmin/install-270518-211741.log
    ======================================================================
    
    Creating /usr/local/GP-4.3.9.0
    ======================================================================
    Executing Post Appliance Installation Steps
    ======================================================================
    
    Executing: source /usr/local/GP-4.3.9.0/greenplum_path.sh
    
    Executing: gpseginstall --file hostfile -c csv 2>&1 | tee -a /home/gpadmin/install-270518-211741.log
    20180527:21:19:23:002348 gpseginstall:mdw:root-[INFO]:-Installation Info:
    link_name greenplum-db
    binary_path /usr/local/GP-4.3.9.0
    binary_dir_location /usr/local
    binary_dir_name GP-4.3.9.0
    20180527:21:19:24:002348 gpseginstall:mdw:root-[INFO]:-check cluster password access
      *** Enter password for mdw: 
    20180527:21:19:43:002348 gpseginstall:mdw:root-[INFO]:-de-duplicate hostnames
    20180527:21:19:43:002348 gpseginstall:mdw:root-[INFO]:-master hostname: mdw
    20180527:21:19:46:002348 gpseginstall:mdw:root-[INFO]:-chown -R gpadmin:gpadmin /usr/local/greenplum-db
    20180527:21:19:46:002348 gpseginstall:mdw:root-[INFO]:-chown -R gpadmin:gpadmin /usr/local/GP-4.3.9.0
    20180527:21:19:46:002348 gpseginstall:mdw:root-[INFO]:-rm -f /usr/local/GP-4.3.9.0.tar; rm -f /usr/local/GP-4.3.9.0.tar.gz
    20180527:21:19:46:002348 gpseginstall:mdw:root-[INFO]:-cd /usr/local; tar cf GP-4.3.9.0.tar GP-4.3.9.0
    20180527:21:20:31:002348 gpseginstall:mdw:root-[INFO]:-gzip /usr/local/GP-4.3.9.0.tar
    20180527:21:21:17:002348 gpseginstall:mdw:root-[INFO]:-remote command: mkdir -p /usr/local
    20180527:21:21:19:002348 gpseginstall:mdw:root-[INFO]:-remote command: rm -rf /usr/local/GP-4.3.9.0
    20180527:21:21:21:002348 gpseginstall:mdw:root-[INFO]:-scp software to remote location
    The authenticity of host 'sdw1 (192.168.2.111)' can't be established.
    ECDSA key fingerprint is SHA256:zAKx3UqfrW3J3ecDEkD63Men1RpLv59ZDJyicvFvlag.
    ECDSA key fingerprint is MD5:bd:66:a8:94:98:d5:0b:f3:bc:e9:5c:41:4c:ca:b3:d4.
    Are you sure you want to continue connecting (yes/no)? The authenticity of host 'sdw2 (192.168.2.112)' can't be established.
    ECDSA key fingerprint is SHA256:zAKx3UqfrW3J3ecDEkD63Men1RpLv59ZDJyicvFvlag.
    ECDSA key fingerprint is MD5:bd:66:a8:94:98:d5:0b:f3:bc:e9:5c:41:4c:ca:b3:d4.
    Are you sure you want to continue connecting (yes/no)? yes
    root@sdw1's password: Please type 'yes' or 'no': 
    Please type 'yes' or 'no': 
    root@sdw2's password: 
    20180527:21:23:30:002348 gpseginstall:mdw:root-[INFO]:-remote command: gzip -f -d /usr/local/GP-4.3.9.0.tar.gz
    20180527:21:27:00:002348 gpseginstall:mdw:root-[INFO]:-md5 check on remote location
    20180527:21:27:26:002348 gpseginstall:mdw:root-[INFO]:-remote command: cd /usr/local; tar xf GP-4.3.9.0.tar
    20180527:21:29:13:002348 gpseginstall:mdw:root-[INFO]:-remote command: rm -f /usr/local/GP-4.3.9.0.tar
    20180527:21:29:25:002348 gpseginstall:mdw:root-[INFO]:-remote command: cd /usr/local; rm -f greenplum-db; ln -fs GP-4.3.9.0 greenplum-db
    20180527:21:29:27:002348 gpseginstall:mdw:root-[INFO]:-remote command: chown -R gpadmin:gpadmin /usr/local/greenplum-db
    20180527:21:29:29:002348 gpseginstall:mdw:root-[INFO]:-remote command: chown -R gpadmin:gpadmin /usr/local/GP-4.3.9.0
    20180527:21:29:31:002348 gpseginstall:mdw:root-[INFO]:-rm -f /usr/local/GP-4.3.9.0.tar.gz
    20180527:21:29:34:002348 gpseginstall:mdw:root-[INFO]:-version string on master: gpssh version 4.3.9.0 build 1
    20180527:21:29:34:002348 gpseginstall:mdw:root-[INFO]:-remote command: . /usr/local/greenplum-db/./greenplum_path.sh; /usr/local/greenplum-db/./bin/gpssh --version
    20180527:21:29:39:002348 gpseginstall:mdw:root-[INFO]:-remote command: . /usr/local/GP-4.3.9.0/greenplum_path.sh; /usr/local/GP-4.3.9.0/bin/gpssh --version
    20180527:21:29:46:002348 gpseginstall:mdw:root-[INFO]:-SUCCESS -- Requested commands completed
    ======================================================================
    Installation complete
    ======================================================================
    

    安装结果 /usr/local/greenplum-db

    greeplum_path.sh: Greenplum 数据库环境变量文件
    GPDB-LICENSE.txt: Greenplum许可协议
    bin: 管理工具、客丿户端程序及服务程序
    demo: 示例程序
    docs: 帮助文档
    etc: Openssl的配置示例
    ext: 一此 GP 工具使用的捆绑程序
    inlcude: C 头文件
    lib: 库文件
    sbin: 支持的或者内部的脚本和程序
    share: 共享文件
    

    2.1.5 Greenplum 初始化配置

    (1) 获取环境变量

    source /usr/local/greenplum-db/greenplum_path.sh
    # 查看环境变量
    env
    

    (2) 验证安装

    a) 切换到 gpadmin 用户并获取环境变量

    su - gpadmin
    source /usr/local/greenplum-db/greenplum_path.sh
    

    b) 使用 gpssh 工具来测试无密码登录所有主机

    gpssh-exkeys -f hostfile
    gpssh -f hostfile -e ls -l $GPHOME   # 在 hostfile 主机上批量执行 ls -l $GPHOME
    

    c) 编辑 /home/gpadmin/.bashrc 文件

    source /usr/local/greenplum-db/greenplum_path.sh
    export MASTER_DATA_DIRECTORY=/data/mirror/gpseg-1
    export PGDATABASE=test
    

    (3) 创建存储区域

    mkdir -p /data/master
    mkdir -p /data/primary
    mkdir -p /data/mirror
    chown gpadmin:gpadmin /data/master
    chown gpadmin:gpadmin /data/primary
    chown gpadmin:gpadmin /data/mirror
    

    a) 创建 Master 数据存储区域

    mkdir -p /data/master
    chown gpadmin:gpadmin /data/master
    

    b) 创建一个包含所有 segment 主机的文件 seg_hosts 文件内容

    sdw1
    sdw2
    

    c) 使用 gpssh 工具在所有 segment 主机上创建主数据和镜像数据目录

    gpssh -f seg_hosts -e 'mkdir -p /data/primary'
    gpssh -f seg_hosts -e 'mkdir -p /data/mirror'
    gpssh -f seg_hosts -e 'chown gpadmin:gpadmin /data/primary'
    gpssh -f seg_hosts -e 'chown gpadmin:gpadmin /data/mirror'
    

    (4) 同步系统时间

    a) 在 Master 主机上编辑 /etc/ntp.conf 来设置如下内容:

    server 127.127.1.0
    

    b) 在 Segment 主机上编辑 /etc/ntp.conf

    server mdw
    

    c) 在 Master 主机上,通过 NTP 守护进程同步系统时钟

    gpssh -f hostfile -v -e 'ntpd'
    

    (5) 验证操作系统设置

    gpcheck -f hostfile -m mdw
    

    (6) 创建 Greenplun 数据库配置文件

    a) 以 gpadmin 用户登录

    su - gpadmin
    

    b) 从模板中拷贝一份 gpinitsystem_config 文件

    cp $GPHOME/docs/cli_help/gpconfigs/gpinitsystem_config /home/gpadmin/
    

    c) 必须配置的参数

    # 数据库的代号
    ARRAY_NAME="EMC Greenplum DW"
    # segment 的名称前缀
    SEG_PREFIX=gpseg
    # Primary Segment 起始的端口号
    PORT_BASE=40000
    # 指定 Primary Segment 的数据目录
    declare -a DATA_DIRECTORY=(/data1/primary /data1/primary /data1/primary /data2/primary /data2/primary /data2/primary)
    # Master 所在机器的 Hostname
    MASTER_HOSTNAME=mdw
    # 指定 Master 的数据目录
    MASTER_DIRECTORY=/data/master
    # Master 的端口
    MASTER_PORT=5432
    # 指定 Bash 的版本
    TRUSTED_SHELL=ssh
    CHECK_POINT_SEGMENTS=8
    # 字符集 
    ENCODING=UNICODE
    

    d) 可选配置的参数,针对镜像的配置

    # Mirror Segment 起始的端口号
    MIRROR_PORT_BASE=50000
    # Mirror Segment 主备同步的起始端口号
    REPLICATION_PORT_BASE=41000
    # Primary Segment 主备同步的起始端口号
    MIRROR_REPLICATION_PORT_BASE=51000
    # Mirror Segment 数据目录
    declare -a MIRROR_DATA_DIRECTORY=(/data1/mirror /data1/mirror /data1/mirror /data2/mirror /data2/mirror /data2/mirror)
    

    (7) 初始化数据库

    a) 运行初始化工具

    cp /tmp/greenplum/seg_hosts 
    gpinitsystem -c gpinitsystem_config -h seg_hosts
    
    # 成功后提示如下
    Greenplum Database instance successfully created
    

    b) 设置环境变量

    添加“export MASTER_DATA_DIRECTORY=/data/master/gpseg-1"到 ~/bashrc 文件尾,并同步到其他节点。

    scp .bashrc sdw1:`pwd`
    scp .bashrc sdw2:`pwd`
    

    (8) 启动和停止数据库

    a) 启动数据库

    gpstart -a
    

    b) 关闭数据库

    gpstop
    

    踩过的坑

    问题1:执行 gpinitsystem 时报错:-Failed Update port number to 40000

    20180528:20:44:58:gpinitsystem:mdw:gpadmin-[FATAL][0]:-Failed Update port number to 40000
    

    解决方案:

    主要原因是它是 Greenplum 用 ed 编辑器(很古老的 linux 编辑器)来操作文件的,需要先在所有节点安装才行

    yum install -y ed
    

    问题2:执行 gpstart -a 时报错:-Failed to retrieve rolname. Script Exiting!

    20180528:20:44:58:gpinitsystem:mdw:gpadmin-[FATAL]:-Failed to retrieve rolname. Script Exiting!
    

    解决方案:

    防火墙没关,关闭防火墙后重启 gpstart -a

    service firewalld stop
    systemctl disable firewalld
    

    问题3:执行 yum 时报错:ImportError: No module named site

    [gpadmin@mdw ~]$ yum 
    ImportError: No module named site
    

    原因:切换到 gpadmin 的环境后,会修改 PYTHONHOME=/usr/local/greenplum-db/./ext/python 的值,在 root 帐户下执行 yum 即可。

    问题4:启动 gpstart -a 时报错:PID file "/data/master/gpseg-1/postmaster.pid" does not exist

    pg_hba.conf 配置错误


    每天用心记录一点点。内容也许不重要,但习惯很重要!

  • 相关阅读:
    Java 分布式系统 实现session共享
    MySQL 大数据量使用limit分页,随着页码的增大,查询效率越低下。
    Linux下安装Zookeeper
    Mysql Window 下安装
    Spring Boot 教程demo
    全文搜索引擎 Elasticsearch (三)logstash-input-jdbc同步数据 到elasticsearch
    全文搜索引擎 Elasticsearch (二) 使用场景
    67.基于nested object实现博客与评论嵌套关系
    66.基于共享锁和排他锁实现悲观锁并发控制
    65.基于document锁实现悲观锁并发控制
  • 原文地址:https://www.cnblogs.com/binarylei/p/9049154.html
Copyright © 2011-2022 走看看