# pg-master-standby **Repository Path**: dog/pg-master-standby ## Basic Information - **Project Name**: pg-master-standby - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2017-06-25 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # postgresql 高可用性方案 ``` postgresql高可用方案基于pgpool-ii 和 postgres 流复制方式。 pgpool-ii可以将查询负载均衡到多个节点,写操作只在master上操作,同时pgpool-ii能够在主数据库down掉后自动将从数据库切为主数据库. postgresql主从复制,基于postgresql9.x后内置的流复制完成,高效且能有效防止数据丢失。 我们以两台机器为例,介绍使用pgpool-2搭建主从模式 host1: 192.168.0.9 master host2: 192.168.0.10 standby ``` ### 搭建主数据库 host1 ``` ssh root@host1 apt-get install postgresql-9.5 #修改/etc/postgresql/9.5/main/postgresql.conf wal_level = hot_standby max_wal_senders = 5 listen_addresses = 'localhost,192.168.0.9' #修改 /etc/postgresql/9.5/main/pg_hba.conf #允许内网用户使用密码登录 host all all 192.168.0.0/24 md5 #允许192.168.0.10 postgres用户复制操作 host replication postgres 192.168.0.10/32 trust service postgresql restart #创建一个超级管理员账号 su postgres psql #进入数据库 create role test with login password 'test123456' supertest; ``` ### 搭建从数据库 host2 ``` ssh root@host2 apt-get instal postgresql-9.5 rm -Rf /var/lib/postgresql/9.5/main #删除数据目录,(请谨慎操作,如果数据库已经存在,删除后无法恢复) # 同步主数据库数据 pg_basebackup -D /var/lib/postgresql/9.5/main -h 192.168.0.7 -U postgres -P -x -R chown -R postgres.postgres /var/lib/postgresql/9.5/main # 修改trigger_file='' trigger_file = '/tmp/trigger_file0' #如果此文件存在,此从数据库将变为允许读写,否则standby只读 # 修改/etc/postgresql/9.5/main/pg_hba.conf,并追加 host all all 192.168.0.0/24 md5 # 修改 /etc/postgres/9.5/main/postgresql.conf listen_addresses = 'localhost,192.168.0.10' #监听地址 hot_standby = on # standby模式 # 重启postgresql service postgresql restart ``` ### 测试主从备份是否生效 ``` # host1操作 psql -h 192.168.0.9 -U test -d postgres -W 回车输入密码 create database test1; \c test1; create table test1( id bigint); insert into test1 (id) values(1); # host2操作 psql -h 192.168.0.10 -U test -d postgres -W 回车输入密码 \c test1; \d; #显示数据表,应该能看到test1 select * from test1; # 此处应该能看到主数据库插入的数据 ``` ### pgpool-ii - 安装pgpool-ii ``` apt-get install pgpool-ii ``` - 配置pgpool-ii ``` pgpool-ii配置文件位于 /etc/pgpool2 - pcp.conf 用于节点管理 - pgpool.conf 各个节点配置 - pool_hba.conf 客户端连接规则配置 - pool_passwd (可能不存在) 客户端连接时进行MD5认证文件 1. 在pgpool.conf 配置节点信息 # 节点1配置 backend_hostname0 = '192.168.0.9' backend_port0 = 5432 backend_weight0 = 1 backend_data_directory0 = '/var/lib/postgresql/9.5/main/' backend_flag0 = 'ALLOW_TO_FAILOVER' #节点2配置 backend_hostname0 = '192.168.0.10' backend_port0 = 5432 backend_weight0 = 1 backend_data_directory0 = '/var/lib/postgresql/9.5/main/' backend_flag0 = 'ALLOW_TO_FAILOVER' 2. 在pgpool.conf 配置为主从模式 master_slave_mode = on //默认为off 改为on master_slave_sub_mode = 'stream' //默认为slony 改为stream 基于流复制 sr_check_period = 10 //10s检查一次 sr_check_user = 'test' //此处为数据库用户 sr_check_password = 'test123456' 3. 配置pool_hba.conf 客户端访问规则 # 这只对外部使用md5认证ip不限制(请根据实际配置) host all all 0.0.0.0/0 md5 4. 使用pg_md5 生成密码,此处用户名密码应该与postgresql中用户密码一致 pg_md5 -m --username test test123456 #生成的密码会自动写入pool_passwd文件中 5. 启动pgpool ``` ### 测试 pgpool ``` psql -h 192.168.0.9 -p 5433 -U test -d test -W 回车输入密码 #如果能正确登录数据库,证明pgpool配置没有问题 # 查看所有节点 show pool_nodes; # 此处可以看到所有节点 ``` ### 主节点down后处理 - 待续 ### down掉的节点重新加入到节点 - 待续