4.1.1.1.2-PostgreSQL-安装

优质
小牛编辑
137浏览
2023-12-01

1.1 环境准备

准备3台主机,添加pgxl用户并设置用户密码,下载源码(下载链接),编译安装,配置pgxl用户在三台物理节点之间免密。以下操作1)~5)在所有机器上运行。

1.1.1 机器与服务对应关系

IP主机名安装服务
192.168.129.100Mastergtm
192.168.129.102Slave01datanode,coordinator,gtm_proxy
192.168.129.103Slave02datanode,coordinator,gtm_proxy

1.1.2 添加pgxl用户

[root@mdw ~]# useradd pgxl
[root@mdw ~]# passwd pgxl

1.1.3 上传postgres-xl-9.5r1.5.tar.gz到pgxl用户家目录

[root@mdw pgxl]# ll
总用量 24496
-rw-r--r-- 1 root root 25083877 8月  14 10:22 postgres-xl-9.5r1.5.tar.gz
[root@mdw pgxl]# tar -zxvf postgres-xl-9.5r1.5.tar.gz
[root@mdw pgxl]# mv postgres-xl-9.5r1.5 postgres

1.1.4 编译安装,遇到错误安装相应软件,再重头编译

[root@mdw pgxl]# cd postgres/
[root@mdw postgres]# ./configure
configure: error: readline library not found
[root@mdw postgres]# rpm -qa|grep readline
readline-6.2-9.el7.x86_64
[root@mdw postgres]# yum install readline-devel
[root@mdw postgres]# ./configure
[root@mdw postgres]# make
ERROR: `flex' is missing on your system.
[root@mdw postgres]#rpm -qa|grep flex
[root@mdw postgres]# yum install flex
[root@mdw postgres]# ./configure
[root@mdw postgres]# make
All of Postgres-XL successfully made. Ready to install.
[root@mdw postgres]# make install
Postgres-XL installation complete.

1.1.5 配置环境变量

vim /etc/profile
export PGXL_HOME=/home/pgxl/postgres
export PATH=$PATH:$PGXL_HOME/bin
source /etc/profile

1.1.6 免密

1.2 初始化、配置、启动相应组件

1.2.1 初始化gtm、coordinator、datanode、gtm_proxy,根据机器与服务对应关系,在对应节点上运行。

[pgxl@master ~]$ initgtm -Z gtm -D /home/pgxl/postgres/data/gtm
[pgxl@master ~]$ initgtm -Z gtm -D /home/pgxl/postgres/data/gtm_standby
[pgxl@slave01 ~]$ initgtm -Z gtm_proxy -D /home/pgxl/postgres/data/gtm_proxy
[pgxl@slave01 ~]$ initdb -D /home/pgxl/postgres/data/coord --nodename coord1 -E UTF8 --locale=C -U pgxl -W
[pgxl@slave01 ~]$ initdb -D /home/pgxl/postgres/data/dn --nodename dn1 -E UTF8 --locale=C -U pgxl -W

注:此处slave02与slave01操作基本相同,唯一区别将’—nodename’从’coord1’改为’coord2’,’dn1’改为’dn2’。

1.1.2 配置gtm、gtm_standby、coordinator、datanode、gtm_proxy

[root@master ~]# vim /home/pgxl/postgres/data/gtm/gtm.conf
nodename = 'gtm'
listen_addresses = '*'
port = 6666                
startup = ACT
[root@master ~]# vim /home/pgxl/postgres/data/gtm_standby/gtm.conf
nodename = 'gtm'
listen_addresses = '*'
port = 6666                
startup = STANDBY
active_host = '192.168.1.147'
active_port =6666
[root@slave01 ~]# vim /home/pgxl/postgres/data/coord/postgresql.conf
# - Connection Settings -
listen_addresses = '*'
port = 11921
max_connections = 100
# DATA NODES AND CONNECTION POOLING
#----------------------------------
pooler_port = 6667 #coord2这个端口改为6668
max_pool_size = 100 
# GTM CONNECTION
#--------------------------
gtm_host = '192.168.1.149'    #等于proxy的ip。
gtm_port = 16667            #等于proxy的port。
pgxc_node_name = 'coord1'
[pgxl@slave01 root]$ vim /home/pgxl/postgres/data/coord/pg_hba.conf
host   all      all         127.0.0.1/24            trust
host   all      all          192.168.129.0/24       trust
host   all      all         0.0.0.0/0               md5
[pgxl@slave01 root]$ vim /home/pgxl/postgres/data/dn/postgresql.conf
CONNECTIONS AND AUTHENTICATION
#------------------------------------
listen_addresses = '*' 
port = 11922 #其他几个配置文件分别改为11922、11923、11924
max_connections = 100 
# DATA NODES AND CONNECTION POOLING
#----------------------------------------------
pooler_port = 6668 #其他几个配置文件分别改为6668、6667、(同一台机器要使用不同的端口)
max_pool_size = 100 
# GTM CONNECTION
#-----------------------------
gtm_host = '192.168.1.149'    #等于proxy的ip。
gtm_port = 16667            #等于proxy的port。
pgxc_node_name = 'dn1'
[pgxl@slave01 root]$  vim /home/pgxl/postgres/data/dn/pg_hba.conf
host   all      all         127.0.0.1/24            trust
host   all      all          192.168.129.0/24       trust
host   all      all         0.0.0.0/0               md5
[pgxl@slave01 root]$ vim /home/pgxl/postgres/data/gtm_proxy/gtm_proxy.conf
nodename = 'gtm_proxy1'
port = 16666
gtm_host = '192.168.1.147'
gtm_port = 6666

注:此处slave02与slave01操作基本相同,唯一区别,coord/postgresql.conf文件内port、pooler_port设置成不同值,且未被占用。pgxc_node_name设置为 ’--namenode’值。dn/postgresql.conf文件内port设置成不同值,且未被占用。pgxc_node_name设置为 ’--namenode’值。gtm_proxy/gtm_proxy.conf的nodename、port设置成不同值。

1.2.3 启动gtm、gtm_proxy、coordinator、datanode

[pgxl@master root]$ gtm_ctl start -Z gtm -D /home/pgxl/postgres/data/gtm
[pgxl@slave01 dn]$ gtm_ctl start -Z gtm_proxy -D /home/pgxl/postgres/data/gtm_proxy
[pgxl@master contrib]$ gtm_ctl -Z gtm start -D /home/pgxl/postgres/data/gtm_standby
[pgxl@slave01 dn]$ pg_ctl restart -Z datanode -D /home/pgxl/postgres/data/dn
[pgxl@slave01 dn]$pg_ctl restart -Z coordinator -D /home/pgxl/postgres/data/coord

注:slave02与slave01操作完全相同。

1.3 集群配置

[pgxl@mdw bin]$ psql -h 192.168.1.149 -p 11921 -U pgxl postgres
postgres=# select * from pgxc_node;
postgres=# create node coord1 with (type=coordinator,host='192.168.1.149', port=11921);
postgres=# create node coord2 with (type=coordinator,host='192.168.1.167', port=11923);
postgres=# create node dn1 with (type=datanode,host='192.168.1.149', port=11922 ,primary,preferred);
postgres=# create node dn2 with (type=datanode,host='192.168.1.167', port=11924);
postgres=# select pgxc_pool_reload();
postgres=# select * from pgxc_node;
注:分别登录192.168.1.149的11921、11922端口和192.168.1.149的11923、11924端口,执行以上操作,唯一区别是当对应node存在时,将create改成alter。
[pgxl@master root]$ gtm_ctl start -Z gtm -D /home/pgxl/postgres/data/gtm
[pgxl@master ~]$ gtm_ctl promote -Z gtm -D /home/pgxl/postgres/data/gtm
[pgxl@master~]$ gtm_ctl reconnect -Z gtm_proxy -D /home/pgxl/postgres/data/gtm_proxy  -o "-s 192.168.1.147 -t 6666"

1.4 测试

[pgxl@mdw bin]$ psql -h 192.168.1.149 -p 11921 -U pgxl postgres
postgres=# create table test1(id integer,name varchar(20));
postgres=# insert into test1(id,name) values(1,'xk');

2 Postgresql主从流复制部署

2.1 安装PostgreSQL

点击软件下载链接,选择要安装的系统,这里是安装在Centos7上,PostgreSQL版本是9.5。

2.1.1 安装软件源

yum install https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-x86_64/pgdg-centos95-9.5-2.noarch.rpm

2.1.2 安装PostgreSQL客户端

yum install postgresql95

2.1.3 安装PostgreSQL服务端

yum install postgresql95-server

2.1.4 初始化PostgreSQL

/usr/pgsql-9.5/bin/postgresql95-setup initdb

2.1.5 建立数据库用户

userdel postgres
useradd postgres
passwd postgres

2.1.6 修改postgresql.conf文件,listen_address=’*’;

2.1.7 修改pg_hba.conf文件,添加以下一行配置。

host     all             all          192.168.1.0/24          trust

2.1.8启动服务

pg_ctl start –D /var/lib/pgsql/9.5/data

2.1.9 测试连接,切换到postgres用户下。

psql –h 主机ip –p 端口号 –U 用户名 2.2 主从流复制部署 本次配置主服务器ip:192.168.1.167,备份服务器ip:192.167.1.147

2.2.1 在主服务器新建用户用来进行主从同步,创建replica用户并赋予登录和复制的权限。

postgres# CREATE ROLE replica login replication encrypted password 'replica'

2.2.2 修改pg_hba.conf,允许用户同步。

#允许94连接到主服务器
host     all             all          192.168.1.0/32          trust   
#允许94使用replica用户来复制
host   replication      replica       192.168.1.0/32          md5

2.2.3 修改postgresql.conf

listen_addresses = '*'   # 监听所有IP
wal_level = hot_standby 
max_wal_senders = 32 # 这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个wal_keep_segments = 256
wal_sender_timeout = 60s # 设置流复制主机发送数据的超时时间
max_connections = 100 # 这个设置要注意下,从库的max_connections必须要大于主库的

2.2.4 重启服务器,并测试从备份服务器是否能够连接到主服务器。

pg_ctl restart –D /var/lib/pgsql/9.5/data #主服务器上执行
psql -h 192.168.1.167 -U postgres #备份服务器执行

2.2.5 将主节点备份到备份节点

# 从67拷贝数据到47(基础备份)
pg_basebackup -h 192.168.1.167  -U replica -D /var/lib/pgsql/9.5/data -X stream -P

2.2.6 修改备份节点配置文件

2.2.6.1 配置recovery.conf

cp /usr/pgsql-9.5/share/recovery.conf.sample /var/lib/pgsql/9.5/data/recovery.conf

2.2.6.2 配置postgresql.conf

wal_level = hot_standby
max_connections = 1000 # 一般查多于写的应用从库的最大连接数要比较大
hot_standby = on # 说明这台机器不仅仅是用于数据归档,也用于数据查询
max_standby_streaming_delay = 30s # 数据流备份的最大延迟时间
wal_receiver_status_interval = 10s # 多久向主报告一次从的状态,当然从每次数据复制都会向主报告状态,这里只是设置最长的间隔时间
hot_standby_feedback = on # 如果有错误的数据复制,是否向主进行反馈

2.2.7 重启备份服务器

pg_ctl restart –D /var/lib/pgsql/9.5/data

2.3 验证是否部署成功

2.3.1在主节点上执行

postgres=# select client_addr,sync_state from pg_stat_replication;
  client_addr  | sync_state 
---------------+------------
 192.168.1.147 | async
(1 行记录)

2.3.2 ps aux | grep postgres查看wal进行,主服务器上描述是sender,备份服务器上描述是reciver,说明备份复制部署成功。

3. PGPool-ii安装和配置

3.1 安装

3.1.1 下载源代码

首先去官网下载最新的源码,本次安装的系统是centos7.0,软件版本是3.6.5。

3.1.2 解压源码

tar –zxvf pgpool-ii-3.6.5.tar.gz

3.1.3 编译安装

./configure –prefix=/usr/lib/pgpool
make & make install
# 在执行过程中遇到提示缺少libpq,安装postgresql-devel即可解决。

3.1.4 配置HOME路径

在/etc/profile中添加环境变量

3.2 配置

3.2.1 复制配置文件

cd /usr/lib/pgpool/etc
cp pcp.conf.example pcp.conf
cp pgpool.conf-stream.example pgpool.conf
cp pool_hba.conf.example pool_hba.conf

3.2.2 修改pool_hba.conf

# "local" is for Unix domain socket connections only
local   all         all                            trust
# IPv4 local connections:
host    all         all         0.0.0.0/0          trust
host    all         all         0/0               trust

3.2.3 使用pg_md5生成配置的用户名密码

[postgres@etc~]$ pg_md5 nariadmin
6b07583ba8af8e03043a1163147faf6a

3.2.4 修改pcp.conf

[postgres@master ~]$ cd /opt/pgpool/etc
[postgres@etc~]$ cp pcp.conf.sample pcp.conf
[postgres@etc~]$ vim pcp.conf
postgres:6b07583ba8af8e03043a1163147faf6a

3.2.5 在pgpool中添加pg数据库的用户名和密码

[postgres@etc~]$ pg_md5 -p -m -u postgres pool_passwd
#数据库登录用户是postgres,这里输入登录密码.
#输入密码后,在pgpool/etc目录下会生成一个pool_passwd文件

3.2.6 修改pgpool.conf

# CONNECTIONS
listen_addresses = '*'
port = 9999
pcp_listen_addresses = '*'
pcp_port = 9898
# - Backend Connection Settings -

backend_hostname0 = 'master'
backend_port0 = 5432
backend_weight0 = 1
backend_data_directory0 = '/home/postgres/data'
backend_flag0 = 'ALLOW_TO_FAILOVER'

backend_hostname1 = 'slave'
backend_port1 = 5432
backend_weight1 = 1
backend_data_directory1 = '/home/postgres/data'
backend_flag1 = 'ALLOW_TO_FAILOVER'

# - Authentication -
enable_pool_hba = on
pool_passwd = 'pool_passwd'

# FILE LOCATIONS
pid_file_name = '/opt/pgpool/pgpool.pid'

replication_mode = off
load_balance_mode = on
master_slave_mode = on
master_slave_sub_mode = 'stream'

3.2.7 新建pid文件夹

mkdir /var/run/pgpool
chown postgres /var/run/pgpool

3.3 启动和测试

3.3.1 启动和停止服务

一般直接输入pgpool就可启动,但是看不到日志所在,所以手动指定日志文件 pgpool -n -d >/tmp/pgpool.log 2>&1 & 启动后可以在/tmp/pgpool.log中查看日志,检查是否正常运行。 停止命令:pgpool stop

3.3.2 测试

pgpool的默认端口号是9999,通过psql –p 9999可以进行访问,进入后输入命令可以通过‘show pool_nodes;’命令查看集群状况,两个节点都为up状态并且选举出primary节点。试着插入数据,可以同步到两个节点,说明搭建成功。

4. PL/Proxy安装

4.1 在P1, D1,D2上使用yum安装postgresql,并创建URTCluster数据库

4.2 在P1上使用yum安装plproxy

4.3 创建plproxy

psql –f /home/y/pgsql/share/contrib/plproxy.sql URTCluster

4.4 在P1, D1,D2上安装plpgsql

4.5 在P1上初始化设置

psql -f URTClusterInit.sql -d URTCluster -h 192.168.1.147

4.6 在D1,D2节点上创建一张表users

CREATE TABLE users (
username text,
email text
);

4.7 在D1,D2节点上创建一个插入函数,把函数保存在 URTClusterNodesInit_1.sql文件里,并执行

psql -f URTClusterNodesInit_1.sql -h 192.168.1.149 -d URTCluster
psql -f URTClusterNodesInit_1.sql -h 192.168.1.167 -d URTCluster

4.8 在plproxy 节点上创建一个同名的插入函数和一个查询函数,用于进行集群检索,把函数保存在 URTClusterProxyExec_1.sql文件里,并执行

psql -f URTClusterProxyExec_1.sql -h 192.168.1.147 -d URTCluster

4.9 在P1上测试结果

sudo -u postgres /home/y/pgsql/bin/psql -d URTCluster
SELECT insert_user(’Sven’,’sven@somewhere.com’);
#被保存到D2, 可以用select hashtext(’Sven’) & 1验证,被hash到 partition 1
SELECT insert_user(’Marko’, ‘marko@somewhere.com’);
#被保存到D2, 可以用select hashtext(’Marko’) & 1验证,被hash到 partition 1
SELECT insert_user(’Steve’,’steve@somewhere.cm’);
#被保存到D1, 可以用select hashtext(’Steve’) & 1验证,,被hash到 partition 0
SELECT get_user_email(’Sven’);
SELECT get_user_email(’Marko’);
SELECT get_user_email(’Steve’);

5. PostGIS安装

PostGIS有两种安装方式,yum方式和源码编译。其中pgpool两种方式皆可,PostgreSQL_XL集群使用源码安装。

5.1 yum方式安装,

5.1.1 使用yum安装postgresql 源

rpm -ivh  http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e//epel-release-7-11.noarch.rpm

5.1.2 安装PostGIS

yum install postgis
yum install postgis2_95

5.2 源码编译安装

5.2.1 依赖安装

本次安装系统版本为centos7,Postgresql版本为9.5.7,postgis版本为2.2.5。 |依赖|版本| |------|------| |Proj4|>=4.6| |GEOS|>=3.3| |LibXML2|>=2.5.x| |JSON-C|>=0.9| |GDAL|>=1.8|

安装步骤如下:

5.2.1.1 安装LibXML2、JSON-C等

yum install –y gcc gcc-g++ libtool libxml2 libxml2-devel libxslt libxslt-devel json-c json-c-devel cmake gmp gmp-devel mpfr mpfr-devel boost-devel pcre-devel readline-devel zlib-devel

5.2.1.2 安装geos

解压源码
./configure –prefix=/usr/lib/geos
make
make install

5.2.1.3 安装proj4

解压源码
./configure –prefix=/usr/lib/proj4
make
make install

5.2.1.4 安装GDAL

解压源码
./configure –prefix=/usr/lib/gdal
make
make install

5.2.2 PostGIS安装

5.2.2.1 配置依赖库软连接

vim /etc/ld.so.conf
/usr/local/lib/libbson-1.0.so.0
/usr/local/pgsql/lib
/usr/lib/postgis/lib
/usr/lib/proj/lib
/usr/local/lib
/usr/lib/gdal/lib
ldconfig

5.2.2.2 配置环境变量

vim /etc/profile
export LD_LIBRARY_PATH=/usr/local/lib
source /etc/profile

5.2.2.3 安装PostGIS

./configure --with-pgconfig=/usr/local/pgsql/bin/pg_config --with-projdir=/usr/lib/proj4 --with-gdalconfig=/usr/lib/gdal/bin/gdal-config --prefix=/usr/lib/postgis --with-geosconfig=/usr/lib/geos/bin/geos-config
make –j 32
make install

5.2.2.4 使用PostGIS

psql –h 192.168.1.167 –U postgres 
Create database test;
\c test
Create extension postgis;

参考资料