PostgreSQL cluster_name特性(适用多实例场景)

 

  在一些场景下,需要在一台服务器上运行多个数据库实例,可以通过cluster_name参数设置进程的标示,这样的话在系统中查看多个运行的PG实例的时候,可以通过进程前的cluster_name区分,以便进行分析或者维护操作。

体验一下cluster_name的魅力:

修改参数之前,系统中看到的进程均没有前缀,目前系统中只运行了1个PostgreSQL数据库实例:

[root@dbserver tmp]# ps -ef|grep postgres

postgres  3335     1  0 17:59 ?        00:00:00 /usr/pgsql-9.5/bin/postmaster -D /var/lib/pgsql/9.5/data

postgres  3337  3335  0 17:59 ?        00:00:00 postgres: logger process                                

postgres  3339  3335  0 17:59 ?        00:00:00 postgres: checkpointer process                          

postgres  3340  3335  0 17:59 ?        00:00:00 postgres: writer process                                

postgres  3341  3335  0 17:59 ?        00:00:00 postgres: wal writer process                            

postgres  3342  3335  0 17:59 ?        00:00:00 postgres: autovacuum launcher process                   

postgres  3343  3335  0 17:59 ?        00:00:00 postgres: stats collector process                       

root      3487  3390  0 18:03 pts/0    00:00:00 grep postgres

修改配置文件postgresql.conf中的cluster_name参数:

改成了如下:

cluster_name = 'eric'                   # added to process titles if nonempty

然后保存postgresql.conf,重启数据库查看一下进程名称已经有了cluster name:

[root@dbserver pg_log]# service postgresql-9.5 restart

停止 postgresql-9.5 服务:                                 [确定]

启动 postgresql-9.5 服务:                                 [确定]

[root@dbserver pg_log]# ps -ef|grep postgres

postgres  5246     1  0 18:17 ?        00:00:00 /usr/pgsql-9.5/bin/postmaster -D /var/lib/pgsql/9.5/data

postgres  5248  5246  0 18:17 ?        00:00:00 postgres: eric: logger process                          

postgres  5250  5246  0 18:17 ?        00:00:00 postgres: eric: checkpointer process                    

postgres  5251  5246  0 18:17 ?        00:00:00 postgres: eric: writer process                          

postgres  5252  5246  0 18:17 ?        00:00:00 postgres: eric: wal writer process                      

postgres  5253  5246  0 18:17 ?        00:00:00 postgres: eric: autovacuum launcher process             

postgres  5254  5246  0 18:17 ?        00:00:00 postgres: eric: stats collector process                 

root      5259  4945  0 18:17 pts/0    00:00:00 grep postgres

进程的前面已经有了cluster_name前缀。

多个实例运行的时候,该功能效果比较明显,我们再创建一个实例并且设置一下cluster_name:

创建第2个实例的目录:

[root@dbserver /]# mkdir pgdata2

[root@dbserver /]# chown -R postgres.postgres /pgdata2

创建新的实例:

-bash-3.2$ cd /usr/pgsql-9.5/bin/

-bash-3.2$ ./initdb -D /pgdata2

属于此数据库系统的文件宿主为用户 "postgres".

此用户也必须为服务器进程的宿主.

数据库簇将使用本地化语言 "zh_CN.UTF-8"进行初始化.

默认的数据库编码已经相应的设置为 "UTF8".

initdb: 无法为本地化语言环境"zh_CN.UTF-8"找到合适的文本搜索配置

缺省的文本搜索配置将会被设置到"simple"

禁止为数据页生成校验和.

修复已存在目录 /pgdata2 的权限 ... 成功

正在创建子目录 ... 成功

选择默认最大联接数 (max_connections) ... 100

选择默认共享缓冲区大小 (shared_buffers) ... 128MB

选择动态共享内存实现 ......posix

创建配置文件 ... 成功

在 /pgdata2/base/1 中创建 template1 数据库 ... 成功

初始化 pg_authid ...  成功

初始化dependencies ... 成功

创建系统视图 ... 成功

正在加载系统对象描述 ...成功

创建(字符集)校对规则 ... 成功

创建字符集转换 ... 成功

正在创建字典 ... 成功

对内建对象设置权限 ... 成功

创建信息模式 ... 成功

正在装载PL/pgSQL服务器端编程语言...成功

清理数据库 template1 ... 成功

拷贝 template1 到 template0 ... 成功

拷贝 template1 到 template0 ... 成功

同步数据到磁盘...成功

警告:为本地连接启动了 "trust" 认证.

你可以通过编辑 pg_hba.conf 更改或你下次

行 initdb 时使用 -A或者--auth-local和--auth-host选项.

Success. You can now start the database server using:

    ./pg_ctl -D /pgdata2 -l logfile start

改一下新实例的端口:

-bash-3.2$ cd /pgdata2

-bash-3.2$ ls

base          pg_dynshmem    pg_multixact  pg_snapshots  pg_tblspc    postgresql.auto.conf

global        pg_hba.conf    pg_notify     pg_stat       pg_twophase  postgresql.conf

pg_clog       pg_ident.conf  pg_replslot   pg_stat_tmp   PG_VERSION

pg_commit_ts  pg_logical     pg_serial     pg_subtrans   pg_xlog

-bash-3.2$ vi postgresql.conf

改成:

port = 5433

启动新实例:

-bash-3.2$ ./pg_ctl -D /pgdata2 start

正在启动服务器进程

-bash-3.2$ < 2016-01-01 18:44:24.778 CST >日志:  日志输出重定向到日志收集进程

< 2016-01-01 18:44:24.778 CST >提示:  后续的日志输出将出现在目录 "pg_log"中.

查看一下系统中2个实例的进程标示有什么不同:

-bash-3.2$ ps -ef|grep postgres

postgres  5393     1  0 18:25 pts/0    00:00:00 /usr/pgsql-9.5/bin/postgres -D /var/lib/pgsql/9.5/data

postgres  5394  5393  0 18:25 ?        00:00:00 postgres: eric: logger process                        

postgres  5396  5393  0 18:25 ?        00:00:00 postgres: eric: checkpointer process                  

postgres  5397  5393  0 18:25 ?        00:00:00 postgres: eric: writer process                        

postgres  5398  5393  0 18:25 ?        00:00:00 postgres: eric: wal writer process                    

postgres  5399  5393  0 18:25 ?        00:00:00 postgres: eric: autovacuum launcher process           

postgres  5400  5393  0 18:25 ?        00:00:00 postgres: eric: stats collector process               

root      5601  4945  0 18:39 pts/0    00:00:00 su - postgres

postgres  5602  5601  0 18:39 pts/0    00:00:00 -bash

postgres  5722     1  0 18:44 pts/0    00:00:00 /usr/pgsql-9.5/bin/postgres -D /pgdata2

postgres  5723  5722  0 18:44 ?        00:00:00 postgres: logger process               

postgres  5725  5722  0 18:44 ?        00:00:00 postgres: checkpointer process         

postgres  5726  5722  0 18:44 ?        00:00:00 postgres: writer process               

postgres  5727  5722  0 18:44 ?        00:00:00 postgres: wal writer process           

postgres  5728  5722  0 18:44 ?        00:00:00 postgres: autovacuum launcher process   

postgres  5729  5722  0 18:44 ?        00:00:00 postgres: stats collector process      

postgres  5730  5602  0 18:44 pts/0    00:00:00 ps -ef

postgres  5731  5602  0 18:44 pts/0    00:00:00 grep postgres

新的实例没有前缀cluster_name的标识,目前还是可以比较清楚的分辨2个实例,那如果有更多的实例在同1个OS中,就需要明确的区分了。

设置新实例的cluster_name:

修改postgresql.conf:

cluster_name = 'gao'   

重启新实例:

-bash-3.2$ /usr/pgsql-9.5/bin/pg_c-D /pgdata2 restart -m fast

pg_config       pg_controldata  pg_ctl          

-bash-3.2$ /usr/pgsql-9.5/bin/pg_ctl -D /pgdata2 restart -m fast

等待服务器进程关闭 .... 完成

服务器进程已经关闭

正在启动服务器进程

-bash-3.2$ < 2016-01-01 18:46:27.848 CST >日志:  日志输出重定向到日志收集进程

< 2016-01-01 18:46:27.848 CST >提示:  后续的日志输出将出现在目录 "pg_log"中.

不同的实例已经进行了区分:

-bash-3.2$ ps -ef|grep postgres

postgres  5393     1  0 18:25 pts/0    00:00:00 /usr/pgsql-9.5/bin/postgres -D /var/lib/pgsql/9.5/data

postgres  5394  5393  0 18:25 ?        00:00:00 postgres: eric: logger process                        

postgres  5396  5393  0 18:25 ?        00:00:00 postgres: eric: checkpointer process                  

postgres  5397  5393  0 18:25 ?        00:00:00 postgres: eric: writer process                        

postgres  5398  5393  0 18:25 ?        00:00:00 postgres: eric: wal writer process                    

postgres  5399  5393  0 18:25 ?        00:00:00 postgres: eric: autovacuum launcher process           

postgres  5400  5393  0 18:25 ?        00:00:00 postgres: eric: stats collector process               

root      5601  4945  0 18:39 pts/0    00:00:00 su - postgres

postgres  5602  5601  0 18:39 pts/0    00:00:00 -bash

postgres  5789     1  0 18:46 pts/0    00:00:00 /usr/pgsql-9.5/bin/postgres -D /pgdata2

postgres  5790  5789  0 18:46 ?        00:00:00 postgres: gao: logger process          

postgres  5792  5789  0 18:46 ?        00:00:00 postgres: gao: checkpointer process    

postgres  5793  5789  0 18:46 ?        00:00:00 postgres: gao: writer process          

postgres  5794  5789  0 18:46 ?        00:00:00 postgres: gao: wal writer process      

postgres  5795  5789  0 18:46 ?        00:00:00 postgres: gao: autovacuum launcher process   

postgres  5796  5789  0 18:46 ?        00:00:00 postgres: gao: stats collector process   

postgres  5797  5602  0 18:46 pts/0    00:00:00 ps -ef

postgres  5798  5602  0 18:46 pts/0    00:00:00 grep postgres

-bash-3.2$ /usr/pgsql-9.5/bin/pg_ctl -D /pgdata2 start

正在启动服务器进程

-bash-3.2$ < 2016-01-01 20:55:00.710 CST >日志:  日志输出重定向到日志收集进程

< 2016-01-01 20:55:00.710 CST >提示:  后续的日志输出将出现在目录 "pg_log"中.

分别登录2个实例,验证一下可用性:

-bash-3.2$ psql -p 5433

psql (9.5beta2)

输入 "help" 来获取帮助信息.

postgres=# \l

                                     数据库列表

   名称    |  拥有者  | 字元编码 |  校对规则   |    Ctype    |       存取权限        

-----------+----------+----------+-------------+-------------+-----------------------

 postgres  | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | 

 template0 | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres          +

           |          |          |             |             | postgres=CTc/postgres

 template1 | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres          +

           |          |          |             |             | postgres=CTc/postgres

(3 行记录)

postgres=# \q

-bash-3.2$ psql -p 5432

psql (9.5beta2)

输入 "help" 来获取帮助信息.

postgres=# \l

                                     数据库列表

   名称    |  拥有者  | 字元编码 |  校对规则   |    Ctype    |       存取权限        

-----------+----------+----------+-------------+-------------+-----------------------

 music     | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =Tc/postgres         +

           |          |          |             |             | postgres=CTc/postgres+

           |          |          |             |             | eric=C*T*c*/postgres

 postgres  | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | 

 template0 | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres          +

           |          |          |             |             | postgres=CTc/postgres

 template1 | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres          +

           |          |          |             |             | postgres=CTc/postgres

(4 行记录)

OK~~~

时间: 2024-10-28 15:39:17

PostgreSQL cluster_name特性(适用多实例场景)的相关文章

最受开发者欢迎的HTAP数据库PostgreSQL 10特性

标签 PostgreSQL , 10 , 特性 , 开发者 背景 作为一款HTAP数据库(同时支持 "OLTP高并发在线事务处理" 与 "OLAP在线分析" 业务场景),PostgreSQL 10的哪些特性是开发人员.DBA.架构师都喜欢的呢? 多核并行增强 9.6的版本支持如下并行: Sequential scans Aggregates Hash and loop joins 10 并行增强: 1.通过 max_parallel_workers 控制最大并行度,

[WCF 4.0新特性] 路由服务[实例篇]

在本篇文章中,我们将通过一个具体的实例来演示如何通过路由服务.在这个例子中,我们会创建连个简单的服务HelloServie和GoodbyeService.假设客户端不能直接调用这两个服务,需要使用到路由服务作为两者之间的中介.整个消息路由的场景如下图所示,中间的GreetingService.svc就是代表路由服务,而两个目标服务则通过HelloServie.svc和GoodbyeService.svc表示.路由服务使用的消息筛选器EndpointAddressMessageFilter,即根据

PHP关键特性之命名空间实例详解

命名空间主要是为了解决代码中类和函数可能存在冲突的问题,而这个特性其他语言一早就有,PHP则是姗姗来迟,它的出现催生了 PSR-4 的诞生,从而也催生了 Composer 的兴起,所以是非常重要的特性. 命名空间的定义 命名空间是一个容器,这个容器主要是为了识别其下的类和函数.一旦定义了命名空间,它下面的代码就属于这个命名空间了,所以命名空间的定义要在代码的最开始行. 对于同一个包来说,同一个命名空间或者子命名空间的代码没有必要在一个 PHP 文件中定义,子命名空间下的代码是为了完成特定模块的工

好玩的PostgreSQL企业特性

11月7日,由DBA+社群主办的数据库技术沙龙在上海成功举办.本次沙龙特邀PostgreSQL中国社区发起人之一的周正中(德哥),从流式数据处理.空间数据处理.并行计算.全文检索.共享存储一主多读架构.秒杀.高并发场景.数据挖掘.服务端编程等方面介绍PostgreSQL的企业特性.  分享概览   实时流式数据处理 数据挖掘(AGGFunc,PLR,PLPython,MADlib,UDF) 范围类型 NoSQL特性(JSON,hstore类型) BRIN索引 部分索引 中文分词 UDF 近似度查

Codeigniter的一些优秀特性总结_php实例

最近准备接手改进一个别人用Codeigniter写的项目,虽然之前也有用过CI,但是是完全按着自己的意思写的,没按CI的一些套路.用在公众的项目,最好还是按框架规范来,所以还是总结一下,免得以后别人再接手的时候贻笑大方. 1. 首先是 MVC 如果你还不知道 MVC ,应该尽快的学习,你会很快的体会到在 Model 中数据访问,在 Controller 中进行业务逻辑,在 Views 中编写 HTML 代码的价值.如果你之前没有使用过这种模式写过程序,你也许会皱起额头,不过你应该给自己尝试这样做

Netbeans 8.2与PHP相关的新特性介绍_php实例

Netbeans 8.2在这个国庆期间终于发布了,其与PHP相关的新特性主要有: 支持PHP 7 详见前面翻译的一篇文章:Netbeans 8.2将支持PHP 7 编辑器功能增强 文档好像没有明确说明,我也还没有发现. PHP项目支持自定义注解 操作如下图: 然后,当你在编写代码注解时,就可以得到刚才自定义的注解提示支持. 支持Symfony 3 没什么人Care吧. 支持PHPUnit 5 PHPUnit 5系列版本已经是基于PHP命名空间化重构的版本了. 支持 phpcs.xml 配置文件

HTAP数据库 PostgreSQL 场景与性能测试之 23 - (OLAP) 并行计算

标签 PostgreSQL , HTAP , OLTP , OLAP , 场景与性能测试 背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能.性能.架构以及稳定性. PostgreSQL社区的贡献者众多,来自全球各个行业,历经数年,PostgreSQL 每年发布一个大版本,以持久的生命力和稳定性著称. 2017年10月,Pos

HTAP数据库 PostgreSQL 场景与性能测试之 30 - (OLTP) 秒杀 - 高并发单点更新

标签 PostgreSQL , HTAP , OLTP , OLAP , 场景与性能测试 背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能.性能.架构以及稳定性. PostgreSQL社区的贡献者众多,来自全球各个行业,历经数年,PostgreSQL 每年发布一个大版本,以持久的生命力和稳定性著称. 2017年10月,Pos

HTAP数据库 PostgreSQL 场景与性能测试之 1 - (OLTP) 点查

标签 PostgreSQL , HTAP , OLTP , OLAP , 场景与性能测试 背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能.性能.架构以及稳定性. PostgreSQL社区的贡献者众多,来自全球各个行业,历经数年,PostgreSQL 每年发布一个大版本,以持久的生命力和稳定性著称. 2017年10月,Pos