在PostgreSQL 11.x中同时启动多个实例

安装PostgreSQL

安装PostgreSQL 11.6,并启动多个实例。
此外,为每个实例创建启动脚本,使其能够独立启动/停止。

インスタンス①

pgsql-5432
ポート:5432
/data/pgsql-5432

インスタンス②

pgsql-5433
ポート5433
/data/pgsql-5433

添加 Yum 软件源

这次需要安装版本11,所以要进行仓库的添加。

$ yum --disablerepo=\* --enablerepo=centos-media list
$ yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

执行Yum

$ yum -y install postgresql11-server postgresql11-contrib
$ rpm -qa |grep postgres
$ ls -l /usr/pgsql-11/

设置环境变量

为postgres用户添加路径。

$ su - postgres
$ vi ./bashrc
export PATH=$PATH:/usr/pgsql-11/bin
export PGDATA=/data/pgsql-5432
export PATH
export PGDATA

$ source bashrc

实例①(pgsql-5432)

创建一个名为pgsql-5432的实例。

创建实例

使用initdb命令在目录”/data/pgsql-5432″中创建一个实例创建。

$ initdb --pgdata=/data/pgsql-5432
$ cat /data/pgsql-5432/PG_VERSION
11

确认实例启动

执行pg_ctl命令,确认实例的启动。

$ su postgres
$ /usr/pgsql-11/bin/pg_ctl -D /data/pgsql-5432 start
$ /usr/pgsql-11/bin/pg_ctl -D /data/pgsql-5432 stop
$ exit

创建启动脚本

复制在安装时创建的启动脚本,并编辑为instance①使用。
如果不打算使用默认的postgresql.service,可以将其备份到其他目录,或者进行编辑操作。
这样做是因为在执行systemctl等命令时会因为TAB自动补全而发生错误。

$ cd /usr/lib/systemd/system/
$ cp -p postgresql.service postgresql-5432.service
$ vi /usr/lib/systemd/system/postgresql-5432.service
Environment=PGDATA=/data/pgsql-5432/

查看启动脚本

需要在实例1中停止/启动服务,并在需要时进行自动启动设置。
※在创建实例2时,由于端口冲突,需要先停止服务。

$ systemctl daemon-reload
$ systemctl status postgresql-5432.service
$ systemctl start postgresql-5432.service
$ systemctl stop postgresql-5432.service
$ systemctl status postgresql-5432.service

$ systemctl enable postgresql-5432.service
$ systemctl list-unit-files |grep postgres

实例2(pgsql-5433)

创建第一个实例pgsql-5433。
只需更改在“实例①”中执行的步骤的目录路径。

创建实例

使用initdb命令在目录”/data/pgsql-5433″中创建一个实例。

$ initdb --pgdata=/data/pgsql-5433
$ cat /data/pgsql-5433/PG_VERSION
11

确认实例启动

使用pg_ctl命令执行操作以验证实例是否启动。

$ su postgres
$ /usr/pgsql-11/bin/pg_ctl -D /data/pgsql-5432 start
$ /usr/pgsql-11/bin/pg_ctl -D /data/pgsql-5432 stop
$ exit

创建启动脚本

复制安装时创建的启动脚本,并对其进行编辑以适用于实例②。

$ cd /usr/lib/systemd/system/
$ cp -p postgresql.service postgresql-5433.service
$ vi /usr/lib/systemd/system/postgresql-5433.service
Environment=PGDATA=/data/pgsql-5432/

确认启动脚本

将第二个实例停止/启动,并在需要时进行自动启动的设置。
※因为现在第一个实例和端口冲突,所以需要停止服务。

$ systemctl daemon-reload
$ systemctl status postgresql-5433.service
$ systemctl start postgresql-5433.service
$ systemctl stop postgresql-5433.service
$ systemctl status postgresql-5433.service

$ systemctl enable postgresql-5433.service
$ systemctl list-unit-files |grep postgres

端口设置

只需一个选项,将以下内容用中文进行释义:
更改各实例使用的端口。
仅更改实例2的端口。

$ vi /data/pgsql-5433/postgresql.conf
#port = 5432
port = 5433

启动实例

将每个实例单独启动。

$ systemctl start postgresql-5432.service
$ systemctl status postgresql-5432.service

$ systemctl start postgresql-5433.service
$ systemctl status postgresql-5433.service

确认流程

检查每个实例的进程。

$ ps -ef |grep pgsql
postgres 28435     1  0 Feb09 ?        00:00:02 /usr/pgsql-11/bin/postmaster -D /data/pgsql-5432/
postgres 28456     1  0 Feb09 ?        00:00:01 /usr/pgsql-11/bin/postmaster -D /data/pgsql-5433/

确认端口

确保每个实例都在指定的端口上启动。

$ ss -anp |grep 5432
~~~
tcp    LISTEN     0      128       *:5432                  *:*                   users:(("postmaster",pid=28435,fd=3))
~~~

$ ss -anp |grep 5433
~~~
tcp    LISTEN     0      128       *:5433                  *:*                   users:(("postmaster",pid=28456,fd=3))
~~~

只需为每个实例进行设置!

$ ll /data/pgsql-5432
$ ll /data/pgsql-5433

以上。 .)

广告
将在 10 秒后关闭
bannerAds