配置主从PostgreSQL数据库
背景
数据库的数据量开始增多,负载开始变高,需要做一个数据库主从配置。
数据量,单表超过了100万条数据,应用程序做读写分离,写到主数据库,读从从数据库。
步骤
- 生成操作用的用户
- 配置主数据库,激活备份模式
- 关停从数据库,复制数据
- 配置从数据库,从主数据库同步数据
生成操作用的用户
1 | sudo apt-get install postgresql |
配置主数据库,激活备份模式
切换到配置目录
1 | cd /etc/postgresql/9.1/main |
主从模式
1 | cat >> postgresql.conf <<EOF |
wal_keep_segments 1个16MB 32 就是512M,这个参数用来配置保存wal日志的大小。如果备份期间有很多数据库操作导致旧日志失效时,就需要配置更大的数字才能保证同步数据文件。
允许从数据库连接到主数据库
1 | cat >> pg_hba.conf <<EOF |
重启数据库
1 | service postgresql restart |
配置从数据库,从主数据库同步数据
在从数据库机器执行
1 | service postgresql stop |
1 | cd /var/lib/postgresql/9.1/main |
复制数据
在主数据库机器执行
1 | psql -c "select pg_start_backup('initial_backup');" |
20G 的数据文件大概复制了3个多小时,要看网络状况好不好。
启动从数据库
1 | service postgresql start |
参看log文件,看是否有报错
1 | tail -f /var/log/postgresql/postgresql-9.1-main.log |
测试
在主数据库执行
1 | CREATE TABLE rep_test (test varchar(40)); |
在从数据库执行
1 | SELECT * FROM rep_test; |
查看数据有无同步
验证从数据库的只读属性
1 | INSERT INTO rep_test VALUES ('oops'); |
1 | ERROR: cannot execute INSERT in a read-only transaction |
查看同步状态
在主数据库中执行
1 | select * from pg_stat_replication; |