欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Greenplum集群安装

程序员文章站 2024-03-22 10:24:40
...

主机与软件

IP 主机名 角色
192.168.0.106 host106 Master
192.168.0.107 host107 Segment
192.168.0.108 host108 Segment
192.168.0.109 host109 Segment

CentOS 7.5.1804

greenplum-db-5.18.0-rhel7-x86_64.zip

greenplum-cc-web-4.6.1-LINUX-x86_64.zip

环境准备

以下内容需要在所有服务器都执行

禁SELinux和防火墙

$ SELinuxstatus: disabled
或者
$ vi /etc/selinux/config
SELINUX=disabled


$ /sbin/chkconfig --list iptables
$ /sbin/chkconfig iptables off


$ systemctl status firewalld
$ systemctl stop firewalld.service
$ systemctl disable firewalld.service

修改Host

vi /etc/hosts
192.168.0.106 host106
192.168.0.107 host107
192.168.0.108 host108
192.168.0.109 host109

修改内核参数

$ vi /etc/sysctl.conf

kernel.shmmax = 10737418240
kernel.shmmni = 4096
kernel.shmall = 2621440
kernel.sem = 500 2048000 200 40960
kernel.sysrq = 1
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.msgmni = 2048
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.conf.all.arp_filter = 1
net.ipv4.ip_local_port_range = 10000 65535
net.core.netdev_max_backlog = 10000
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
vm.overcommit_memory = 2
vm.swappiness = 10
vm.zone_reclaim_mode = 0
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
vm.dirty_background_ratio = 0
vm.dirty_ratio = 0
vm.dirty_background_bytes = 1610612736
vm.dirty_bytes = 4294967296

# kernel.shmmax
# 配置了最大的内存segment的大小 ------>这个设置的比SGA_MAX_SIZE大比较好。
# 16G 内存,16*1024*1024*1024*90% = 15461882265,
# kernel.shmall
# 全部允许使用的共享内存大小,
# 15461882265/4k(getconf PAGESIZE可得到) = 3774873。

$ sysctl -p

$ vi /etc/security/limits.conf

* soft nofile 524288
* hard nofile 524288
* soft nproc 131072
* hard nproc 131072

加载XFS文件系统

mount -o rw,noatime,inode64,allocsize=16m /dev/mapper/centos-home /home

# 格式化XFS
fdisk /dev/mapper/centos-home
mkfs.xfs /dev/mapper/centos-home

安装依赖

yum install -y net-tools which openssh-clients openssh-server less zip unzip iproute.x86_64

修改读块大小

# 参看
/sbin/blockdev --getra devname
# 修改
/usr/sbin/blockdev --setra 16384 /dev/sda 

设置io的调度算法

# 每个磁盘
echo deadline > /sys/block/devname/queue/scheduler

# 或
grubby --update-kernel=ALL --args="elevator=deadline"

安装ntp服务(可选,该手册未执行这步)

$ yum install ntp -y
$ vi /etc/ntp.conf
serer 127.127.1.0

安装

只需在Master节点进行就可

创建用户

groupadd -g 530 gpadmin
useradd -g 530 -u 530 -m -d /home/gpadmin -s /bin/bash gpadmin
chown -R gpadmin:gpadmin /home/gpadmin
echo "gpadmin" | passwd --stdin gpadmin

ssh免密登录到其他主机

ssh-****** -t rsa -f /etc/ssh/ssh_host_rsa_key
ssh-****** -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
ssh-****** -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
/usr/sbin/sshd
systemctl start sshd.service

安装Greenplum

root用户

# 解压
$ tar -xzf greenplum-db-5.18.0-rhel7-x86_64.zip
$ ./greenplum-db-5.11.3-rhel7-x86_64.bin

# 设置安装路径
/home/gpadmin/greenplum

注:如果运行安装报tar错误,可以vi greenplum-db-5.11.3-rhel7-x86_64.bin进行不影响原意的修改,然后保存。

$ cd /home/gpadmin/greenplum
$ source ./greenplum_path.sh

$ vi all_hosts
host106
host107
host108
host109

$ vi seg_hosts
host107
host108
host109

$ gpssh-exkeys -f all_hosts
$ gpseginstall -f all_hosts -u gpadmin -p gpadmin

$ gpssh -f all_hosts
mkdir -p /home/gpadmin/greenplum/gpdata/gpmaster
mkdir -p /home/gpadmin/greenplum/gpdata/gpdatap1
mkdir -p /home/gpadmin/greenplum/gpdata/gpdatap2
mkdir -p /home/gpadmin/greenplum/gpdata/gpdatam1
mkdir -p /home/gpadmin/greenplum/gpdata/gpdatam2

# 未执行下面一步
$ gpssh -f all_hosts -v -e 'ntpd'

$ gpcheck -f all_hosts -m localhost

chown -R gpadmin:gpadmin /home/gpadmin

gpadmin用户

# 环境变量(su - gpadmin)
$ vi /home/gpadmin/.bashrc
source /home/gpadmin/greenplum/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/home/gpadmin/greenplum/gpdata/gpmaster/gpseg-1
export GPPORT=5432

$ source /home/gpadmin/.bashrc

$ cp docs/cli_help/gpconfigs/gpinitsystem_config gpinitsystem_config
$ vi gpinitsystem_config
declare -a DATA_DIRECTORY=(/home/gpadmin/greenplum/gpdata/gpdatap1 /home/gpadmin/greenplum/gpdata/gpdatap2)
MASTER_DIRECTORY=/home/gpadmin/greenplum/gpdata/gpmaster
declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/greenplum/gpdata/gpdatam1 /home/gpadmin/greenplum/gpdata/gpdatam2)

# 初始化
$ gpinitsystem -c gpinitsystem_config -h seg_hosts

# 启动关闭
gpstart -a
gpstop -a

gpstop -M fast

# 连接数据库
$ psql -d postgres
select * from pg_database;

操作

创建用户

$ psql -d postgres
create user ysr superuser password '123456';

配置远程登录

# $ find / -name pg_hba.conf
$ su - gpadmin
$ vi ~/greenplum/gpdata/gpmaster/gpseg-1/pg_hba.conf
host    bigdataDB   lzsp   192.168.0.1/24   md5
# 更新配置
$ gpstop -u

# 格式如下:
local database user auth-method [auth-options]
host database user CIDR-address auth-method [auth-options]
hostssl database user CIDR-address auth-method [auth-options]
hostnossl database user CIDR-address auth-method [auth-options]
host database user IP-address IP-mask auth-method [auth-options]
hostssl database user IP-address IP-mask auth-method [auth-options]
hostnossl database user IP-address IP-mask auth-method [auth-options]

# [local] - 使用unix-domain socket连接
# [host] - 使用TCP/IP连接,host包含SSL和non-SSL连接
# [hostssl] - 使用TCP/IP连接, 只接受SSL加密连接
# [hostnossl] - 使用TCP/IP连接, 接受non-ssl连接
# [database] - 数据库名称,all表示全部数据库,多个数据库用逗号分隔
# [user] - 数据库用户,all表示全部数据库,多个数据用逗号分隔,+表示role或group的成员,@表示来源于外部文件
# [CIDR-address] - CIDR地址,如:172.20.143.89/32 ,"/"前面是ip地址,后面是子网掩码 (仅用于 host, hostssl, and hostnossl)
# [IP-address]/[IP-mask] - 跟CIDR-address是一样,只是2种表示方式 (仅用于 host, hostssl, and hostnossl)
# [auth-method] - 包含选项有: trust/reject/md5/password/gss/sspi/krb5/ident/ldap/radius/cert/pam
#   使用较多的: trust(不需要任何验证)
#                reject(拒绝任何请求)
#                md5(需要提供MD5加密的密码)
#                password(非加密的密码)
#                ident(OS用户本地连接)

安装监控

$ su - gpadmin
$ vi ~/greenplum/gpdata/gpmaster/gpseg-1/postgresql.conf

# 取消注释
gp_enable_gpperfmon=on
gpperfmon_port=8888
gp_external_enable_exec=on

# 增加
gpperfmon_log_alert_level=warning

# 安装gpperfmon数据库
$ gpperfmon_install --enable --password gpmon --port 5432

# 重启
$ gpstop -r
$ ps -ef | grep gpmmon

# 检查gp监控是否监测到greenplum集群中的每台主机
$ psql -d 'gpperfmon' -c 'select * from system_now;'

$ ./gpccinstall-4.6.1
# 修改安装目录
# /home/gpadmin/greenplum-web

$ vi ~/.bashrc
source /home/gpadmin/greenplum-web/greenplum-cc-web-4.6.1/gpcc_path.sh
$ source ~/.bashrc

$ gpcc start

# http://IP:28080
# 进行访问 用户名/密码 gpmon/gpmon

新增节点

Segment

  • 在新增的每台节点上执行【环境准备】的内容;
  • 在新增的每台节点上执行【创建用户】;
  • 在其中一台进行安装,然后scp到其他节点;
  • 在新增的每台节点上执行【创建目录】,并chown目录;
  • 在新增的每台节点上,配置环境变量;
  • 在已有的主节点,进行免密操作(针对所有节点,修改all_hosts文件);
    gpssh-exkeys -f all_hosts_file
    
  • 初始化新扩展(在master上操作)
vi hosts_expand
host10
host11

gpexpand -f hosts_expand

Would you like to initiate a new System Expansion Yy|Nn (default=N):
> y
How many new primary segments per host do you want to add? (default=0):
> 4

Enter new primary data directory 1:
> /app/data/gp1

Enter new primary data directory 2:
> /app/data/gp2

Enter new primary data directory 3:
> /app/data/gp3

Enter new primary data directory 4:
> /app/data/gp4

Enter new mirror data directory 1:
> /app/data/gpm1

Enter new mirror data directory 2:
> /app/data/gpm2

Enter new mirror data directory 3:
> /app/data/gpm3

Enter new mirror data directory 4:
> /app/data/gpm4

# 会生成gpexpand_inputfile_20171208_005718,需要修改后才能通过配置文件扩展数据库

# trjdb是对应的数据库名
gpexpand -i gpexpand_inputfile_20171208_005718 -D trjdb

# 假如上一步失败了,怎么办?
# 启动限制模式,回滚。
gpstart -R
gpexpand --rollback -D trjdb
gpstart -a
# 然后找问题继续上一步,直到成功。

# 可以采用脚本进行表重分布
gpexpand -d 60:00:00

Standby

# 如果在GP已有集群中的机器中选择一台来搭建standby,
# 了解master节点用了哪些filespace.
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;

# 了解master的即可,可以看到除了pg_system,还有一个filespace叫ssd1。

# 进入初始化standby的步骤
# 根据第三步查到的信息,规划standby master filespace数据目录;
$ mkdir /disk1/digoal/gpdata
$ mkdir /disk1/digoal/new_p

# 如果在不同的主机创建standby master,则建议使用同样的端口和目录结构。
# 如下:
$ gpinitstandby -F pg_system:/data01/gpdata/master_pgdata/gpseg-1 -s digoal_host199092.zmf 

...
Do you want to continue with standby master initialization? Yy|Nn (default=N):
> y
...

digoal=# select * from gp_segment_configuration where content='-1';

# 如果在同一台主机创建standby master,则需要使用不同的端口和目录结构。
# 如下:
# 指定不同的filespace路径,不同的监听端口。
$ gpinitstandby -F pg_system:/disk1/digoal/gpdata/gpseg-2,ssd1:/disk1/digoal/new_p/gp-2 -P 1922 -s digoal_host.sqa.zmf

# 启动standby
$ gpinitstandby -n

# 查看standby延迟,查看pg_stat_replication 视图即可。
digoal=# select pg_switch_xlog();

digoal=# select * from pg_stat_replication ;
digoal=# select * from pg_stat_replication ;

优化

$ su - gpadmin
$ vi /home/gpadmin/greenplum/gpdata/gpmaster/gpseg-1/postgresql.conf

max_connections = 200
shared_buffers = 1600MB
max_prepared_transactions = 300
work_mem = 640MB

# log
log_filename = 'pg-%Y%m%d.log'
log_truncate_on_rotation = on
log_min_messages = panic
log_statement = 'ddl'
相关标签: greenplum