pg集群配置 http://keyvalue.net/linux%E5%B9%B3%E5%8F%B0%E6%8A%80%E6%9C%AF/%E8%BD%ACpg%E9%9B%86%E7%BE%A4%E9%85%8D%E7%BD%AE.html

本文详细介绍如何在PL/Proxy、Node1及Node2节点上安装配置PostgreSQL集群,并完成数据库初始化、配置、安装扩展插件等步骤,最终实现跨节点数据库查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

== 1. Machine ==

PL/Proxy
hostname:h08-vm08.corp.cnb.yahoo.com
inet addr:10.62.245.152
Bcast:10.62.245.255
Mask:255.255.254.0
OS: Linux 2.6.9-42.ELsmp
CPU:Intel(R) Xeon(R) CPU L5320 @ 1.86GHz
MemTotal: 254772 kB
Pg_Dir: /home/y/pgsql/data/
port = 5432

Node1:
hostname:h08-vm08.corp.cnb.yahoo.com
inet addr:10.62.245.152
Bcast:10.62.245.255
Mask:255.255.254.0
OS: Linux 2.6.9-42.ELsmp
CPU:Intel(R) Xeon(R) CPU L5320 @ 1.86GHz
MemTotal: 254772 kB
Pg_Dir: /usr/local/pgsql/data/
port = 5433

Node2:
hostname:h07-vm08.corp.cnb.yahoo.com
inet addr:10.62.245.136
Bcast:10.62.245.255
Mask:255.255.254.0
OS: Linux 2.6.9-42.ELsmp
CPU:Intel(R) Xeon(R) CPU L5320 @ 1.86GHz
MemTotal: 514440 kB
Pg_Dir: /usr/local/pgsql/data/
port = 5433

== 2. Install ==

#在PL/Proxy、Node1、Node2节点上执行以下命令:

sudo rpm -ivh postgres_4e_alone-8.3.1.0.rpm
sudo rpm -ivh postgres_4e_contrib-8.3.0.1.rpm
sudo rpm -ivh pgbouncer_4e-1.0.0.0.rpm

== 3. Init ==

#在PL/Proxy、Node1、Node2节点上执行以下命令:

## Add Unix User
sudo adduser postgres
sudo mkdir /usr/local/pgsql/data
sudo chown postgres /usr/local/pgsql/data
sudo visudo
**Add "DEVEL ALL=(postgres) ALL" in the last line
**Apend "hebing" to "User_Alias DEVEL"

## Init DB and Start service
sudo -u postgres /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
sudo -u postgres /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &

## Create DB and Use Local Connection
sudo -u postgres /usr/local/pgsql/bin/createdb URT

##检查数据库是否已经创建
sudo -u postgres /usr/local/pgsql/bin/psql -d URT
sudo -u postgres /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data stop

#继续在PL/Proxy节点上执行以下命令(安装plproxy节点):
sudo mkdir /home/y/pgsql/data
sudo chown postgres /home/y/pgsql/data
sudo -u postgres /usr/local/pgsql/bin/initdb -D /home/y/pgsql/data
sudo -u postgres /usr/local/pgsql/bin/postgres -D /home/y/pgsql/data >logfile_1 2>&1 &
sudo -u postgres /usr/local/pgsql/bin/createdb URT
sudo -u postgres /usr/local/pgsql/bin/psql -d URT
sudo -u postgres /usr/local/pgsql/bin/pg_ctl -D /home/y/pgsql/data stop

== 4. config ==

#在PL/Proxy、Node1、Node2节点上执行以下命令:

## 检查tcp连接端口是否已经配置,默认安装已经配置好
sudo vim /usr/local/pgsql/data/postgresql.conf
listen_addresses = '*'
port = 5433

## PgSQL是基于主机的认证(HBA:"host-based authentication")
sudo vim /usr/local/pgsql/data/pg_hba.conf
## 根据需要添加IP地址、数据库和角色名。IP一般是前端机IP和本地IP,角色在上一步骤中已经添加
host URT postgres 10.62.0.1/16 trust

## 启动服务器
sudo -u postgres /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &
sudo -u postgres /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data reload

#在PL/Proxy、Node1、Node2节点上执行以下命令:
sudo vim /home/y/pgsql/data/postgresql.conf
listen_addresses = '*'
port = 5432

sudo vim /home/y/pgsql/data/pg_hba.conf
## 根据需要添加IP地址、数据库和角色名。IP一般是前端机IP和本地IP,角色在上一步骤中已经添加
host URT postgres 10.62.0.1/16 trust

sudo -u postgres /usr/local/pgsql/bin/postgres -D /home/y/pgsql/data >logfile_1 2>&1 &
sudo -u postgres /usr/local/pgsql/bin/pg_ctl -D /home/y/pgsql/data reload

## 检查PL/Proxy节点是否可以访问Node1和Node2节点上的数据库,检查是否可以访问PL/Proxy节点
[hebing@h08-vm08 ~]$sudo -u postgres /usr/local/pgsql/bin/psql -d URT -h h08-vm08.corp.cnb.yahoo.com -p 5433
[hebing@h08-vm08 ~]$sudo -u postgres /usr/local/pgsql/bin/psql -d URT -h h07-vm08.corp.cnb.yahoo.com -p 5433
[hebing@h08-vm08 ~]$sudo -u postgres /usr/local/pgsql/bin/psql -d URT -h h08-vm08.corp.cnb.yahoo.com -p 5432

== 5. Install plpgsql and plproxy ==

#在plproxy、Node1、Node2节点上安装plpgsql,包里面已经安装了。
#如果没有安装plpgsql,可以参考以下步骤:
sudo -u postgres /usr/local/pgsql/bin/createlang plpgsql URT -p 5433

#在plproxy、Node1、Node2节点上安装plproxy,包里面已经安装了。
#如果没有安装plporxy,可以参考以下步骤:
#检查是否有/usr/local/pgsql/bin目录,如果没有,修改你的.bash_profile文件,添加/usr/local/pgsql/bin到path里。
echo $PATH

gunzip plproxy-2.0.4.tar.gz
tar xf plproxy-2.0.4.tar
cd plproxy-2.0.4
gmake
sudo gmake install
sudo -u postgres /usr/local/pgsql/bin/psql -f /usr/local/pgsql/share/contrib/plproxy.sql URT

== 6. Config cluster in plproxy ==

#创建一个plproxy schema,在plproxy里配置集群,注意要连接pgbouncer;放在一个sql脚本里;
sudo -u postgres /usr/local/pgsql/bin/psql -d URT -p 5432 -f cluster.init.sql

== 7. Config DB Node ==

#在Node1、Node2节点上添加操作函数(这里只写了几个简单的函数,需要添加URT的业务逻辑函数)
sudo -u postgres /usr/local/pgsql/bin/psql -d URT -p 5433 -f node.sql

== 8. Config plproxy ==

#在plproxy节点上添加操作函数(这里只写了几个简单的函数,需要添加URT的业务逻辑函数)
sudo -u postgres /usr/local/pgsql/bin/psql -d URT -p 5432 -f plproxy.sql

== 9. Config pgbouncer ==

#在plproxy节点上执行以下操作

#在plproxy节点上安装pgbouncer,包里面已经安装了。
#如果没有安装pgbouncer,可以参考以下步骤:
./configure --prefix=/usr/local --with-libevent=/prefix
make
sudo make install

#修改pgbouncer.ini文件
sudo vim /usr/local/pgsql/share/doc/pgbouncer/pgbouncer.ini
#添加一下内容
#######################
Node1 = host=10.62.245.152 port=5433 user=postgres dbname=URT
Node2 = host=10.62.245.136 port=5433 user=postgres dbname=URT
listen_addr = 127.0.0.1
listen_port = 6543
auth_file = /usr/local/pgsql/share/doc/pgbouncer/users.txt
logfile = /usr/local/pgsql/share/doc/pgbouncer/pgbouncer.log
pidfile = /usr/local/pgsql/share/doc/pgbouncer/pgbouncer.pid
admin_users = user2, someadmin, otheradmin,postgres
stats_users = stats, root,postgres
#########################

#创建users.txt文件
sudo vim /usr/local/pgsql/share/doc/pgbouncer/users.txt
#添加 "postgres" ""

#start pgbouncer
sudo /usr/local/pgsql/bin/pgbouncer -d /usr/local/pgsql/share/doc/pgbouncer/pgbouncer.ini

#测试
sudo -u postgres /usr/local/pgsql/bin/psql -p 6543 -d pgbouncer -U postgres
pgbouncer=# show databases;

sudo -u postgres /usr/local/pgsql/bin/psql -h 127.0.0.1 -p 6543 -d Node1 -U postgres
sudo -u postgres /usr/local/pgsql/bin/psql -h 127.0.0.1 -p 6543 -d Node2 -U postgres

== 10. 导入ltree测试数据 ==

#在plproxy、Node1、Node2节点上安装ltree类型,包里面已经安装了。
#如果没有,可以参考一下步骤
#先安装 postgresql-8.3.0, 安装目录会保存在配置文件里。然后ltree模块:
cd postgresql-8.3.0/contrib/ltree/
make
sudo make install
#安装ltree类型
sudo -u postgres /home/y/pgsql/bin/psql -d URTCluster -f /home/y/pgsql/sha
re/contrib/ltree.sql
#重新载入配置
sudo -u postgres /home/y/pgsql/bin/pg_ctl -D /home/y/pgsql/data reload

#在Node1、Node2节点上执行数据导入操作
wget http://www.sai.msu.su/~megera/postgres/gist/ltree/dmozltree-eng.sql.gz
gunzip dmozltree-eng.sql.gz
sudo -u postgres /usr/local/pgsql/bin/psql -d URT -f dmozltree-eng.sql -p 5433

== 11. 测试 ==

#在plproxy节点上执行
sudo -u postgres /usr/local/pgsql/bin/psql -d URT -p 5432

URT=# SELECT * from public.xquery('select * from dmoz limit 1 offset 10;') as dmoz(id int4, name text, path ltree);

URT=# SELECT * from public.xquery('select path from dmoz where path ~ ''Top.Adult.Arts.Animation.*{1}'';') as dmoz(id int4, name text, path ltree);
<think>首先,用户的问题是关于Spring Boot启动时无法加载application.yml配置文件的问题。具体错误是:"Failed to load property source from application.yml file"。我需要根据系统指令来构建回答。 系统指令的关键点: - 所有行内数学表达式必须使用$...$格式,但在这个问题中,可能没有数学表达式,所以我可以忽略。 - 独立公式必须使用$$...$$格式,但同样,这里可能不需要。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 - 回答结构清晰,帮助用户逐步解决问题。 - 参考提供的引用内容,但用户的问题是关于Spring Boot的application.yml加载失败,所以引用中的内容相关。 用户提供的引用: - [^1]: 提到在Spring Cloud中,@pom.artifactId@应写在application.yml而不是bootstrap.yml,以避免错误。 - [^2]: 建议添加snakeyaml依赖来解决中文注释问题。 - [^3]: 提到YAMLException可能由于字符编码问题。 用户的问题:"我想解决Spring Boot启动时无法加载application.yml配置文件的问题 请问Spring Boot Failed to load property source from application.yml file" 所以,我需要提供解决方案。常见原因包括: 1. YAML文件格式错误(如缩进问题)。 2. 字符编码问题(特别是中文注释)。 3. 依赖缺失(如snakeyaml)。 4. 文件位置错误(application.yml应在src/main/resources)。 5. 其他配置问题,如引用中提到的@符号解析。 结构我的回答: 1. **介绍问题**:简要解释错误。 2. **逐步解决**:列出常见原因和解决方案。 3. **引用相关部分**:自然地融入引用内容。 4. **生成相关问题**:在最后添加相关问题。 确保使用中文回答。 步骤: 1. **确认文件位置和格式**:检查application.yml是否在正确位置,且缩进正确。 2. **检查字符编码**:如果文件包含中文,确保使用UTF-8编码。 3. **添加依赖**:如果snakeyaml缺失,添加它。 4. **处理特殊符号**:如@符号,确保在application.yml中使用。 5. **其他建议**:如清理项目、重启IDE等。 生成相关问题:基于主题,如其他配置错误、YAML语法、Spring Boot启动问题。 最终回答结构: - 开头:解释错误。 - 解决方案步骤。 - 结尾:相关问题。</think>### Spring Boot启动时无法加载application.yml配置文件的解决方案 当Spring Boot启动时出现“Failed to load property source from application.yml file”错误时,通常是由于配置文件格式错误、字符编码问题或依赖缺失引起的。这个错误会导致应用无法读取配置,从而启动失败。以下我将逐步解释常见原因并提供解决方案,帮助您快速修复问题。解决过程需确保`application.yml`文件位于`src/main/resources`目录下(这是默认位置),并使用正确语法。 #### 步骤1: 检查YAML文件格式和位置 YAML文件对缩进和语法非常敏感。一个错误的空格或制表符(tab)可能导致解析失败。 - **验证文件位置**:确认`application.yml`文件在`src/main/resources`目录中。如果误放在`src/main/resources/config`或其他位置,Spring Boot可能无法自动加载。 - **检查缩进格式**:使用文本编辑器(如VS Code或IntelliJ IDEA)打开文件,确保使用空格而非制表符进行缩进。例如: ```yaml # 正确示例:使用两个空格缩进 spring: application: name: my-app server: port: 8080 ``` 如果缩进不一致,IDE通常会显示错误提示。修复后,清理项目并重启Spring Boot。 - **避免在bootstrap.yml中写入服务名**:如果您的项目同时使用了Spring Cloud,确保服务名称配置(如`@pom.artifactId@`)写在`application.yml`而非`bootstrap.yml`中,否则可能导致解析错误[^1]。 #### 步骤2: 处理字符编码问题 如果`application.yml`包含中文注释或特殊字符,字符编码不匹配会引发`MalformedInputException`错误。 - **设置文件编码为UTF-8**: - 在IDE中,右键点击`application.yml`文件 → 选择"File Encoding" → 设置为UTF-8。 - 在Maven项目中,添加`snakeyaml`依赖以支持UTF-8编码。在`pom.xml`中添加以下依赖: ```xml <dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>1.33</version> <!-- 推荐较新版本,兼容Spring Boot 2.x/3.x --> </dependency> ``` 这能解决因中文注释导致的YAML解析异常[^2][^3]。 - **检查文件编码一致性**:确保整个项目使用UTF-8。在`pom.xml`中添加全局编码配置: ```xml <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> ``` #### 步骤3: 验证依赖和项目配置 依赖缺失或构建问题也可能导致加载失败。 - **更新依赖并清理项目**: - 运行Maven命令清理和重新构建:`mvn clean install`。 - 确保`spring-boot-starter`依赖在`pom.xml`中正确声明: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> ``` - **处理特殊符号如`@`**:如果使用Maven属性(如`@pom.artifactId@`),确保在`application.yml`中正确引用,并运行`mvn resources:resources`以解析占位符。 #### 步骤4: 其他常见修复 - **检查YAML语法错误**:使用在线工具(如YAML Lint)验证文件语法。 - **IDE缓存问题**:重启IDE并清理缓存(在IntelliJ IDEA中:File → Invalidate Caches)。 - **查看完整错误日志**:运行Spring Boot时添加`--debug`参数(如`mvn spring-boot:run --debug`),查看堆栈跟踪以定位具体错误行。 如果以上步骤无效,建议提供错误日志的完整内容,以便进一步分析。通常,这些问题解决后,应用应能正常启动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值