4.1.1.1.2-PostgreSQL-安装
1.1 环境准备
准备3台主机,添加pgxl用户并设置用户密码,下载源码(下载链接),编译安装,配置pgxl用户在三台物理节点之间免密。以下操作1)~5)在所有机器上运行。
1.1.1 机器与服务对应关系
IP | 主机名 | 安装服务 |
---|---|---|
192.168.129.100 | Master | gtm |
192.168.129.102 | Slave01 | datanode,coordinator,gtm_proxy |
192.168.129.103 | Slave02 | datanode,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;
参考资料
- PostgreSQL 下载链接
- Postgres_XL下载链接
- Postgres-XL9.5集群安装与配置
- Postgres-XL集群部署与管理
- Postgres-XL 添加删除Datanode\coord节点测试
- PostgreSQL 数据库集群和PL/Proxy配置安装指南
- pgpool-II 入门教程
- Linux环境PostgreSQL源码编译安装
- 使用yum 安装自定义安装postgresql和postgis扩展已及phpPgAdmin
- PostgreSQL PLProxy 原理与实践
- PostgreSQL分库分表解决方案之citus
- PostGIS安装
- centos 安装postgis
- CentOS 7 源码安装PostGIS