由于之前的数据库使用年限过久,机器性能无法满足日常计算需要,因此公司最近新购入了若干服务器,并准备将数据迁移至新库中。在正式迁移之前,通过查阅相关资料,进行一次模拟迁移。

1.准备

① VMware Workstation软件

② CentOS 7.3 镜像 ( 与老服务器相同 )

③ Greenplum 4.3.7.3 安装包 ( https://network.pivotal.io/products/pivotal-gpdb/ )

2.安装虚拟机

修改时区,最小安装:

添加root用户密码:

安装完成后,修改IP地址:

vi /etc/sysconfig/netword-scripts/ifcfg-eno***
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
UUID=5bed79bf-0f21-40fe-a92c-63aa29d0dbdd
DEVICE=eno16777736
ONBOOT=yes
IPADDR=192.168.216.128
NETMASK=255.255.255.0
GATEWAY=192.168.216.2
DNS1=114.114.114.114
DNS2=8.8.8.8

重启network服务,并使用ping测试是否可以连接到外网:

service network restart

安装一些需要的工具:

yum -y install vim net-tools ntp ed unzip

设置开机时间同步脚本:

vim /etc/rc.d/init.d/timelock.sh
#!/bin/bash
#
#Startup script for timelock
#
#chkconfig:345 85 15
#description:timelock server
#processname:timelock
 
#Source function library.
/usr/sbin/ntpdate -u ntp1.aliyun.com

增加脚本的可执行权限并添加到开机启动项目中:

chmod a+x  /etc/rc.d/init.d/autostart.sh
cd /etc/rc.d/init.d
chkconfig --add autostart.sh
chkconfig autostart.sh on

修改系统内核 ( Greenplum需要 ):

vim /etc.sysctl.conf
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
net.core.rmem_max = 2097152
net.core.wmem_max = 209715

打开文件限制 : ( 在最后添加 )

vim  /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072

创建gpadmin用户和用户组 ( 每台都需要配置 ) :

groupadd -g 530 gpadmin
useradd -g 530 -u530 -m -d /home/gpadmin -s /bin/bash gpadmin
passwd gpadmin 

关闭防火墙:

systemctl stop firewalld.service
systemctl disable firewalld.service

3.拷贝两份虚拟机

分别修改IP、hostname,配置hosts

192.168.216.128 Master master
192.168.216.129 sdw1
192.168.216.130 sdw2
 
192.168.216.138 Master_standby master_standby gp_master_standby
192.168.216.139 sdw1_standby segment_standby segment
192.168.216.140 sdw2_standby mirror_standby mirror

重启,准备安装数据库。

4.安装数据库

首先在Master节点上操作:

​ 切换用户gpadmin,解压下载的数据库文件并运行greenplum-db-*.bin安装文件 ( 安装过程中注意数据库安装位置 )

创建配置文件:

mkdir ./conf
vim ./conf/hostlist
Master_standby
sdw1_standby
sdw2_standby
vim ./conf/set_host
sdw1_standby
sdw2_standby

引入Greenplum的环境变量:

source ./greenplum-db-4.3.7.3/greenplum_path.sh

交换钥匙:

gpssh-exkeys -f ./conf/hostlist

PS:

一个小问题 socket.gaierror: [Errno -2] Name or service not known

原因 hosts 里没有配置 hostname 中的 IP

开始安装数据库:

gpseginstall -f hostlist -u gpadmin -p 123456 

在不同节点上创建数据目录:

#gp_master_standby:
mkdir -p /home/gpadmin/gpdata/gpmaster
#sdw1_standby:
mkdir -p /home/gpadmin/gpdata/gpdata1
mkdir -p /home/gpadmin/gpdata/gpdatap1
mkdir -p /home/gpadmin/gpdata/gpdatap2
mkdir -p /home/gpadmin/gpdata/gpdatam1
mkdir -p /home/gpadmin/gpdata/gpdatam2
#sdw2_standby
mkdir -p /home/gpadmin/gpdata/gpmaster
mkdir -p /home/gpadmin/gpdata/gpdatap1
mkdir -p /home/gpadmin/gpdata/gpdatap2
mkdir -p /home/gpadmin/gpdata/gpdatam1
mkdir -p /home/gpadmin/gpdata/gpdatam2

检查系统环境:

#错误暂且不管 ( 好像并没有影响 )
gpcheck -f ./conf/hostlist -m Master_standby -s sdw2_standby

编写初始化文件:

#数据库代号
ARRAY_NAME="EMC Greenplum DW"
MACHINE_LIST_FILE=/home/gpadmin/conf/seg_hosts
#Segment 的名称前缀
SEG_PREFIX=gpseg
#primary segment 起始端口号
PORT_BASE=40000
#指定 primary segment 的数据目录
declare -a DATA_DIRECTORY=(/home/gpadmin/gpdata/gpdatap1 /home/gpadmin/gpdata/gpdatap2)
MASTER_HOSTNAME=gp_master_standby
MASTER_DIRECTORY=/home/gpadmin/gpdata/gpmaster
MASTER_DATA_DIRECTORY=/home/gpadmin/gpdata/gpmaster
MASTER_PORT=5432
#指定 bash 的版本
TRUSTED_SHELL=ssh
#mirror segment 起始端口号
MIRROR_PORT_BASE=50000
#primary segment 主备同步的起始端口号
REPLICATION_PORT_BASE=41000
#mirror segment 主备同步的起始端口号
MIRROR_REPLICATION_PORT_BASE=51000
#mirror segment 的数据目录
declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/gpdata/gpdatam1 /home/gpadmin/gpdata/gpdatam2)

初始化数据库:

gpinitsystem -c ./conf/gp_init_config -s sdw2_standby

启动数据库 :

gpstart -a

至此,数据库安装完毕,准备迁移数据。

5.迁移数据库

Greenplum数据库迁移可以使用官方自带工具gptransfer进行迁移,具体使用方法参照官网 ( https://gp-docs-cn.github.io/docs/best_practices/gptransfer.html)

修改源数据库中配置文件:

vim /home/gpadmin/gpdata/gpmaster/gpseg-1/pg_hba.conf

添加如下 ( IP范围为192.168.216.1 - 192.168.216.254 ) :

host     all     all     192.168.216.1/24    md5

在源数据库中重新加载配置文件:

select pg_reload_conf()

准备打通目标数据库与源数据库之间的通道,创建映射文件:

vim ./conf/transferlist
sdw1,192.168.216.129
sdw2,192.168.216.130
vim ./conf/transhost
sdw2_standby
sdw1_standby
master
sdw1
sdw2

交换钥匙:

gpssh-exkeys -f /home/gpadmin/conf/transhost

开始迁移数据:

/home/gpadmin/greenplum-db-4.3.7.3/bin//gptransfer --source-map-file=/home/gpadmin/conf/transferlist --dest-host=192.168.216.128 --full

迁移完毕:

将源数据库中的配置文件postgresql.conf和pg_hba.conf发送至目标数据库中,重启目标数据库。

至此数据库迁移完毕。

参考网址

https://gp-docs-cn.github.io/docs/best_practices/gptransfer.html

https://www.cnblogs.com/liuyungao/p/5689588.html


时至今日,你依旧是我的光芒。