CentOS安装Greenplum5集群教程
LiuSw Lv6

安装Greenplum5集群教程

greenplum的数据库是一个大规模并行处理(MPP)数据库服务器架构,该架构是专为管理大规模的数据仓库和商业智能设计的。

Greenplum数据存储和处理大数据量,是通过跨多个服务器和主机分配数据和负载。Greenplum数据库是基于PostgreSQL8.2单个数据库的阵列,这些数据库像单个数据库一样共同工作。master主机是Greenplum数据库系统的入口点,它是客户端连接并提交SQL语句的接口数据库实例。Master协调系统中其他数据库实例(称为Segment)的工作负载,处理数据和存储。分段通过互连,Greenplum数据库的网络层互相通信和主控

一.greenplum组件

Greenplum数据库系统的主要组件以及与每个组件关联的硬件注意事项和概念:Greenplum Master,Segments和Interconnect。此外,系统可能具有用于数据加载的可选ETL主机和用于监视查询工作负载和性能的Greenplum性能监视器。

1、基于postgresql

greenplum的数据库基于postgresql的开源技术,它本质上是几个postgresql数据库实例一起协作当做一个有凝聚力数据库管理系统(dbms)使用。postgresql的内部一杯修改和补充,以支持Greenplum数据库的并行架构。例如,该系统目录,优化器,查询执行器,和事务管理器组件以被修改和改进,以支持能够在所有并行的postgresql数据库实例同事执行查询。

2、Interconnnect

Greenplum Interconnect可使不同的Postgresql实例之间进行通信,并且是系统表现为一个逻辑数据库

3、greenplum master

3.1. master功能作用

  • master是greenplu数据库系统的入口,数据库服务器进程接收客户端连接并处理系统用户发出的sql命令。
  • master维护系统目录(一组包含有关greenplum数据库系统本身的元数据的系统表,但是master不包含任何用户数据。数据只保存在segment主机上。
  • master验证客户端连接,处理传入的sql命令,在每个segment主机之间分配工作负载,协调每个segment返回的结果。并将结果返回客户端。

3.2. standby

  • standby通过事务日志复制进程保持最新状态,该进程在standby上运行,并同步master和standby主机之间的数据。如果master主机失败,日志复制关闭;当standby处于活动状态时,日志复制重建上次成功提交事务时的master的状态。
  • 由于Master不包含任何用户数据,因此只需要在Master和Standby之间同步系统目录表。当这些表被更新时,更改会自动复制到Standby,以便始终与主站同步

4、greenplum segment

4.1、segment主要作用

  • segment主要是存储数据及数据查询处理。
  • 用户自定义的表(非系统表,master存储系统表)及索引分布在可用的segment;每个segment包含数据的不同。用户不能直接与grenplum数据系统的segment交互,而是通过master进行交互。
  • 在参考Greenplum数据库硬件配置中,每个segment主机的segment实例数由有效的CPU或CPU内核的数量决定。 例如,如果你的segment主机有两个双核处理器,则每个主机可能有两个或四个主要segment。 如果你的segment主机有三个四核处理器,则每个主机可能有三个,六个或十二个segment。性能测试将有助于确定所选硬件平台的最佳segment。

4.2、segment冗余 (mirror)镜像

  • 配置mirror,当你的primary segment不可用时则mirror segment允许数据查询故障切换到镜像segment。
  • mirror segment必须始终位于与primary 不同的主机上

4.3、性能

  • Segment主机执行大部分数据库处理,因此配置好Segment主机服务器,以便从你的Greenplum数据库系统获得最佳性能。Greenplum数据库的性能将与数组中最慢的Segment服务器一样快,也就是性能以最慢的Segment为准

4.4、网络

  • 网络互连是greenplum 数据系统的网络层,当用户连接到数据库并发查询时,会在每个segment上创建进程处理该查询的工作。网络互连是指的segment 之间的进程通信所依赖的网络基础设施。
    默认情况下,greenplum数据库互连具有流量控制的UDP(用户数据报协议)协议发送消息。greenplum做了附加分组和检查不由UDP协议执行,性能和可扩展行超过TCP。

5、 ETL主机加载数据

  • greenplum支持使用其外部表功能可以快速并行的数据加载。通过使用外部表与greenplum数据库的并行文件服务器(gpfdist)结合使用,管理员可以从其greenplum数据库系统实现最大的并行度和负载带宽。
  • 使用gpfdist文件服务器程序的一个优点是,它可以确保在从外部表数据文件读取时,您的Greenplum数据库系统中的所有Segment都被充分利用。

6、Greenplum性能监视器

  • Greenplum还提供可选的监控和管理工具,管理员可以安装并启用Greenplum数据库。 要使用Greenplum性能监视器,您的Greenplum数据库阵列中的每个主机都必须安装并启用数据收集代理。 当你开始Greenplum性能监视器,代理开始收集关于查询和系统利用率的数据,代理定期将数据发送到Greenplum Master(通常每15秒)。用户可以查询Greenplum Performance Monitor数据库,查看有效查询和历史查询和系统性能数据。 Greenplum Performance Monitor还具有图形化的基于Web的用户界面,用于查看这些性能指标并以其他方式管理其Greenplum

7、postgresql 体系结构

postgresql数据库主要五大部分组成:连接管理系统(系统控制器)、编译执行系统、存储管理系统、事务系统、系统表。
以下模块功能介绍:

  • 1、 连接管理系统:机构外部操作对系统的请求,对操作请求进行预处理和分发,具有系统逻辑控制作用。
  • 2、编译执行系统:由查询编译器、查询执行器、DDL编译器组成,完成操作请求在数据库中的分析处理和转化工作,最终实现屋里存储介质数据的操作;
  • 3、存储管理系统:由索引管理器、内存管理器、外存管理器组成,负责存储和管理物理数据,提供对编译查询系统的支持;
  • 4、事务系统:包含 事务管理器、日志管理器、并发控制、锁管理器组成,日志管理器和事务管理器完成对操作请求处理的事务一致性支持,锁管理器和并发控制提供对并发访问数据的一致性支持;
  • 5、系统表:是postgresql数据库的元信息管理中心,包括数据库对象信息和数据库管理控制信息。系统表管理元数据信息,将postgresql数据库的各个模块有机的连接在一起,形成一个高效的数据管理系统。

二.基础环境

centos7.4 16核32G

ip hostname 角色
192.168.0.44 master master、segment
192.168.0.43 segment1 segment、standby
192.168.0.40 segment2 segment

三. 服务器配置参数更改

  • 1.添加hosts
1
2
3
4
5
cat >> /etc/hosts << EOF
192.168.0.44 master
192.168.0.43 segment1
192.168.0.40 segment2
EOF
  • 2.配置tcp参数

修改/etc/sysctl.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cat >> /etc/sysctl.conf  <<EOF 
kernel.shmmni = 4096
kernel.shmall = 40000000000
kernel.shmmax = 287194767360
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.tcp_tw_recycle = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.conf.defalut.arp_filter = 1
net.ipv4.ip_local_port_range = 1025 65535
net.core.netdev_max_backlog = 10000
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
#vm.overcommit_memory = 2 ###测试环境要取消这个,否则oracle启不来 ### 值为1

注意:kernel.shmmax = 5000000000 单位b(bit),值的大小为实际内存的50%。
kernel.shmmax参数调整系统内存的50%

执行 sysctl -p 使资源文件生效;

  • 3.添加limits.conf
1
2
3
4
5
6
cat >> /etc/security/limits.conf <<EOF
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
EOF
  • 4.修改I/O调度算法
1
2
echo deadline > /sys/block/vdb/queue/scheduler
grubby --update-kernel=ALL --args="transparent_hugepage=never"
  • 5.设置gpadmin用户,密码
1
2
3
4
5
6
7
8
9
10
useradd  gpadmin -d /home/gpadmin
usermod -L gpadmin
#提权
visudo
gpadmin ALL=(ALL) ALL
gpadmin ALL=(ALL) NOPASSWD:ALL
#创建密码
echo "gpadmin" | passwd --stdin gpadmin

注:注意设置密码为了后面gpssh-exkeys -f list 使用

四.下载&安装

  • 1.下载安装

名称 版本

操作系统 CentOS 64bit

greenplum greenplum-db-appliance-5.10.2-rhel6-x86_64.zip

文件系统 ext4

链接:

提取码: 7qzv

首先在master节点上安装,将greenplum-db-appliance-5.10.2-rhel6-x86_64.zip上传到/home/gpadmin目录下

1
2
3
4
5
su - gpadmin
cd /home/gpadmin
unzip greenplum-db-appliance-5.10.2-rhel6-x86_64.zip

./greenplum-db-appliance-5.10.2-rhel6-x86_64.bin
  • 2.安装目录相关文件授权
1
2
3
chown -R gpadmin.gpadmin /usr/local/greenplum-db*
#需要在每个节点执行授权
chown gpadmin.gpadmin /usr/local

以下开始,进入gpadmin用户下操作

1
2
3
4
5
6
#hostlist自定义的,一般为hostname
cat > list <<EOF
master
segment1
segment2
EOF
  • 3.添加环境变量
1
2
3
4
5
6
cat /usr/local/greenplum-db/greenplum_path.sh >>~/.bashrc 
cat >> ~/.bashrc <<EOF
MASTER_DATA_DIRECTORY=/home/gpdata/master/gpseg-1
export MASTER_DATA_DIRECTORY
EOF
source ~/.bashrc
  • 4.配置免密登陆
1
gpssh-exkeys -f list
  • 5.检查环境(可以忽略)
1
gpcheck -f list
  • 6.在segment节点安装greenplum-db-5.10.2-rhel7-x86_64
1
gpseginstall -f list
  • 7.创建数据目录
1
2
3
4
gpssh -f list -e " mkdir -p /home/gpdata/{primary,mirror,master}"
gpssh -f list -e " sudo chown gpadmin.gpadmin /home/gpdata"
# 创建master目录
mkdir -p /opt/data/master
  • 8.创建初始化config文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cat > gpinitsystem_config <<EOF

###需要的参数,目录可以根据需要更改##
ARRAY_NAME="Greenplum Data Platform"
SEG_PREFIX=gpseg
PORT_BASE=40000
declare -a DATA_DIRECTORY=(/home/gpdata/primary /home/gpdata/primary /home/gpdata/primary)
MASTER_HOSTNAME=master #修改为主节点主机名
MASTER_DIRECTORY=/home/gpdata/master
MASTER_PORT=5432
TRUSTED_SHELL=ssh
CHECK_POINT_SEGMENTS=8
ENCODING=UNICODE
declare -a MIRROR_DATA_DIRECTORY=(/home/gpdata/mirror /home/gpdata/mirror /home/gpdata/mirror)
EOF
  • 9.初始化数据库
1
gpinitsystem -a -c gpinitsystem_config -h list
1
2
3
4
5
6
重新加载配置文件
gpstop -u
#启动服务
gpstart -a
#停止服务
gpstop -a

五. 配置修改

简单实用-添加允许连接的网段

注意:根据服务器的具体情况进行配置修改

示例:host 库名 用户名 ip/24 trust

1
2
3
4
5
6
7
cat /home/gpdata/master/gpseg-1/pg_hba.conf

host all gpadmin 192.168.0.43/32 trust
host all all 0.0.0.0/0 trust
local all gpadmin ident
host all gpadmin 127.0.0.1/28 trust
host all gpadmin 192.168.0.44/32 trust

六. 登录测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@slave3 gpadmin]# psql -d postgres
psql: FATAL: no pg_hba.conf entry for host "[local]", user "root", database "postgres", SSL off
[root@slave3 gpadmin]# su - gpadmin
Last login: Mon Jan 25 13:45:50 CST 2021 on pts/0
[gpadmin@slave3 ~]$ psql -d postgres
psql (8.3.23)
Type "help" for help.

postgres=# \l
List of databases
Name | Owner | Encoding | Access privileges
--------------+---------+----------+---------------------
430000_RMDSD | gpadmin | UTF8 |
postgres | gpadmin | UTF8 |
template0 | gpadmin | UTF8 | =c/gpadmin
: gpadmin=CTc/gpadmin
template1 | gpadmin | UTF8 | =c/gpadmin
: gpadmin=CTc/gpadmin
(4 rows)

修改密码

1
alter role gpadmin with password 'gpadmin'; 

七. 授权

根据不同的库创建不同的用户名密码
xnreport 8ql6,report
crm 8ql6,crm
xncc 8ql6,xncc

1
2
3
4
5
6
-- 给database授权
create user superuser xnreport password '8ql6,report';
grant all privileges on databases xn_report to xnreport;

-- 给table授权
grant all privileges on table table_name to xnreport;

八. 添加mirror

1
2
3
4
5
6
7
8
9
# 1、在所有需要添加mirror的主机,创建存放mirror的数据目录(如果已经创建,忽略此操作)
mkdir /opt/data/mirror

# 以下再master操作
# 2、生成配置文件
gpaddmirrors -o addmirror

# 添加mirror
gpaddmirrors -a -i addmirror -v

九. 添加standby

1
2
3
-- 1、在standy节点上创建master目录
-- 2、在master上执行
gpinitstandby -a -s segment1
1
2
3
4
5
6
7
8
9
10
postgres=# select * from pg_stat_replication ;
procpid | usesysid | usename | application_name | client_addr | client_port | backend_start | state | sent_location | write_location | flush_location | replay_location | sync_priority | syn
c_state
---------+----------+---------+------------------+-------------+-------------+-------------------------------+-----------+---------------+----------------+----------------+-----------------+---------------+----
--------
6931 | 10 | gpadmin | walreceiver | 192.168.0.43 | 48800 | 2018-12-24 11:51:05.376815+08 | streaming | 0/14000C18 | 0/14000C18 | 0/14000C18 | 0/14000C18 | 1 | syn
c


postgres=# select a.dbid,a.content,a.role,a.port,a.hostname,b.fsname,c.fselocation from gp_segment_configuration a,pg_filespace b,pg_filespace_entry c where a.dbid=c.fsedbid and b.oid=c.fsefsoid order by content;

END

原文链接

 评论