云部署(1)keepalived+postgresql主从

本文介绍了使用keepalived和postgresql实现云环境中的主从故障切换方案。在正常情况下,客户端通过VIP访问主服务器的postgresql服务,从服务器仅用于备份。当主服务器的postgresql服务停止时,keepalived会将VIP切换到从服务器,确保服务的连续性和数据一致性。文章还涵盖了服务器配置、客户端设置以及测试过程,强调了主从切换后的只读问题,并预告了解决方案将在后续篇幅中讨论。

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

一、需求架构图

主从数据一致,用vip进行故障切换,挂了任何一台对客户的访问没有影响,从机只提供读和备份服务。

分析:正常情况cs通过vip访问ms的postgresql服务,ss这时只备份

          当mspostgresql服务停止,keepalived检测到后,也stop 自己的服务,让vip浮动到ss上

         当ms 服务正常,vip自动浮动到ms上


二、服务器配置

cs客户端

[root@cs ~]# cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core) 
[root@cs ~]# ls
anaconda-ks.cfg   postgresql-9.6.5.tar.gz

解压postgresql并切换到相应的目录,

检测:要联网,检测缺少依赖包yum一下就好了

编译:这个过程太长了,我通常编译一会就ctrl c终止了,后来使用也没发现有什么不同

安装:一定要看到complete才ok,数据目录在/usr/local/pgsql下

[root@cs postgresql-9.6.5]# ./configure 
[root@cs postgresql-9.6.5]# make
[root@cs postgresql-9.6.5]# make install
[root@cs pgsql]# ls
bin  include  lib  share

没有数据目录是因为数据库还没有初始化,我还是自己创建一个数据目录pgdata吧

再指定postgresql的命令路径

[root@cs pgsql]# mkdir pgdata
[root@cs pgsql]# vim /etc/bashrc
#添加
export PATH=$PATH:/usr/local/pgsql/bin
export PGDATA=/usr/local/pgsql/pgdata
只有特定用户postgres才可以使用postgresql数据库
[root@cs pgsql]# useradd postgres
[root@cs pgsql]# cd ..
[root@cs local]# chown postgres:postgres pgsql -R

数据库初始化
[root@cs local]# which initdb
/usr/local/pgsql/bin/initdb
[root@cs local]# su postgres
[postgres@cs local]$ initdb -D $PGDATA

启动数据库
[postgres@cs local]$ cd pgsql/pgdata
[postgres@cs pgdata]$ pwd
/usr/local/pgsql/pgdata
[postgres@cs pgdata]$ pg_ctl start -D $PGDATA -l logfile
进入数据库

[postgres@cs pgdata]$ psql
psql (9.6.5)
Type "help" for help.

postgres=# 

退出数据库
postgres=# \q
[postgres@cs pgdata]$ 

客户端OK了

另外两台服务器的数据库和客户端的安装分式一样,能启动并能正常进入和退出。
再修改配置文件重启就ok了

主服务器master 按照cs安装,启动postgresql ok后

创建一个数据库角色,赋予登陆和复制的权限
[postgres@ms pgdata]$ psql
postgres# CREATE ROLE replica login replication encrypted password 'replica'
postgres=# \du
                        &n
<think>好的,用户想在CentOS 7上部署一套PostgreSQL主从集群并配置Pgpool-II。首先,我需要回忆相关的步骤和注意事项。用户可能对PostgreSQL和Pgpool-II有一定了解,但需要具体的操作指南。我需要确保步骤清晰,避免遗漏关键环节,比如安装、配置、主从复制设置以及Pgpool-II的集成。 首先,安装PostgreSQL。CentOS 7默认的仓库可能版本较旧,所以需要添加PostgreSQL的官方仓库,确保安装的是较新版本,比如12。然后初始化数据库,启动服务,并设置开机启动。这里需要注意数据目录的位置,通常是在/var/lib/pgsql/12/data。 接下来是主库配置。修改postgresql.conf中的监听地址和端口,允许远程连接,调整wal_level为replica,设置足够的wal_keep_segments,以及启用归档。pg_hba.conf需要配置允许从库的复制连接。创建复制账号也是关键步骤,用户可能需要记得密码,这里用示例密码,实际中应更安全。 然后是备库配置。使用pg_basebackup从主库拉取基础备份,生成恢复配置文件recovery.conf,指定主库的连接信息。同样需要调整postgresql.conf的监听地址,避免端口冲突。这部分需要确保网络连通性,主备之间的防火墙设置是否正确,比如开放5432端口。 主从复制验证,通过psql执行查询查看复制状态,比如pg_stat_replication视图是否有记录,备库上是否处于恢复模式。这一步用户可能会遇到主从不同步的问题,需要检查日志文件,确认是否有连接错误或权限问题。 接下来是安装Pgpool-II。同样需要添加Pgpool-II的仓库,安装后配置主要的参数文件:pgpool.conf。这里需要指定后端数据库的主备信息,配置负载均衡、故障转移等策略。还有pcp.conf用于管理命令的认证,pool_hba.conf用于客户端连接的认证。启动Pgpool-II后,测试连接是否正常,通过psql连接到Pgpool的端口,执行查询是否分发到主备节点。 测试故障转移,模拟主库宕机,观察Pgpool是否能自动切换到备库。这部分需要注意Pgpool的故障检测配置,比如health_check_period和health_check_timeout,确保及时检测到故障。同时,主库恢复后可能需要重新配置为备库,或者重新同步数据,用户可能需要了解如何重新建立复制。 安全性方面,用户可能需要配置防火墙规则,限制访问IP,以及SSL加密传输。此外,定期备份和监控集群状态也是维护的重要部分,可能需要使用pgpoolAdmin或其他监控工具。 用户可能遇到的问题包括:主从复制失败,Pgpool无法连接后端,故障转移不触发等。需要提醒用户检查日志文件,如PostgreSQL的log和Pgpool的log,查看具体错误信息。例如,pg_hba.conf配置错误导致复制连接被拒绝,或者Pgpool配置中的后端IP、端口不正确。 最后,总结步骤,确保用户能按部就班完成部署,并理解每个步骤的作用。同时,建议用户在生产环境中进行充分测试,确保高可用性和数据一致性。</think>以下是在CentOS 7系统部署PostgreSQL主从集群并配置Pgpool-II的分步指南: --- ### 一、基础环境准备 ```bash # 所有节点执行 sudo yum install -y epel-release sudo yum update -y sudo systemctl stop firewalld sudo systemctl disable firewalld sudo setenforce 0 sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config ``` --- ### 二、PostgreSQL主从部署 #### 1. 安装PostgreSQL(主备节点) ```bash # 添加PostgreSQL官方源 sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum install -y postgresql12-server postgresql12-contrib # 初始化数据库(仅主节点执行) sudo /usr/pgsql-12/bin/postgresql-12-setup initdb sudo systemctl start postgresql-12 sudo systemctl enable postgresql-12 ``` #### 2. 主库配置 ```bash # 修改 /var/lib/pgsql/12/data/postgresql.conf listen_addresses = '*' wal_level = replica max_wal_senders = 3 wal_keep_segments = 32 archive_mode = on archive_command = 'test ! -f /var/lib/pgsql/12/archive/%f && cp %p /var/lib/pgsql/12/archive/%f' # 修改 /var/lib/pgsql/12/data/pg_hba.conf host replication replica 从节点IP/32 md5 # 创建复制用户 sudo -u postgres psql CREATE ROLE replica WITH LOGIN REPLICATION PASSWORD 'replica_password'; \q # 重启服务 sudo systemctl restart postgresql-12 ``` #### 3. 从库配置 ```bash # 停止服务并清理目录 sudo systemctl stop postgresql-12 sudo rm -rf /var/lib/pgsql/12/data/* # 拉取主库备份 sudo -u postgres pg_basebackup -h 主节点IP -U replica -D /var/lib/pgsql/12/data -P --wal-method=stream # 创建恢复配置 sudo -u postgres vi /var/lib/pgsql/12/data/recovery.conf standby_mode = 'on' primary_conninfo = 'host=主节点IP port=5432 user=replica password=replica_password' trigger_file = '/tmp/postgresql.trigger' # 启动服务 sudo systemctl start postgresql-12 ``` --- ### 三、Pgpool-II安装配置 #### 1. 安装Pgpool-II(所有节点) ```bash sudo yum install -y http://www.pgpool.net/yum/rpms/4.4/redhat/rhel-7-x86_64/pgpool-II-release-4.4-1.noarch.rpm sudo yum install -y pgpool-II-pg12 ``` #### 2. 配置pgpool.conf ```bash # 修改/etc/pgpool-II/pgpool.conf listen_addresses = '*' backend_hostname0 = '主节点IP' backend_port0 = 5432 backend_weight0 = 1 backend_hostname1 = '从节点IP' backend_port1 = 5432 backend_weight1 = 1 load_balance_mode = on master_slave_mode = on master_slave_sub_mode = 'stream' sr_check_user = 'pgpool_check' health_check_period = 10 failover_command = '/etc/pgpool-II/failover.sh %h %H' ``` #### 3. 配置认证文件 ```bash # 生成pcp.conf echo "pgpool:$(pg_md5 pgpool_password)" >> /etc/pgpool-II/pcp.conf # 配置pool_hba.conf host all all 0.0.0.0/0 md5 ``` #### 4. 启动服务 ```bash sudo systemctl start pgpool-II sudo systemctl enable pgpool-II ``` --- ### 四、验证测试 #### 1. 主从复制验证 ```sql -- 主节点执行 SELECT client_addr, state FROM pg_stat_replication; -- 从节点执行 SELECT pg_is_in_recovery(); ``` #### 2. Pgpool连接测试 ```bash psql -U postgres -h Pgpool节点IP -p 9999 ``` #### 3. 故障转移测试 ```bash # 关闭主库PostgreSQL服务 sudo systemctl stop postgresql-12 # 观察Pgpool日志 tail -f /var/log/messages ``` --- ### 五、关键注意事项 1. 所有节点时间必须同步(建议安装ntpd) 2. 建议配置SSH密钥互信用于自动故障转移 3. 生产环境需配置SSL加密传输 4. 归档目录需定期清理 5. 建议使用Keepalived实现Pgpool高可用 通过以上步骤,您将获得一个具备读写分离、负载均衡和自动故障转移能力的PostgreSQL集群。实际生产部署时,请根据业务需求调整配置参数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值