2020-06-14 19:40:55
由于某个项目前期资源紧张,使用的Postgresql单节点数据库;为解决项目数据库安全性问题,小蜗牛应要求整理Postgresql数据库主从高可用方案,以下操作为部署主从流复制测试过程,后续整理pgpool高可用、负载均衡方案。。
yum install -y gcc-c++ zlib-devel vim openssh-clients
tar zxvf postgresql-9.3.4.tar.gz
mkdir /opt/pgsql-9.3
cd postgresql-9.3.4
./configure --prefix=/opt/pgsql-9.3/ --without-readline
make -j 2
make install
vim /etc/profile
export PGHOME=/opt/pgsql-9.3
export PGDATA=/var/lib/pgsql/9.3/data/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PGHOME/lib/
export PATH=$PGHOME/bin:$PATH:$HOME/bin
source /etc/profile
useradd postgres -d /var/lib/pgsql
su - postgres
initdb
pg_ctl -D /var/lib/pgsql/9.3/data/ -l logfile start
psql
postgres# CREATE ROLE replica login replication encrypted password 'replica';
vi /var/lib/pgsql/9.3/data/pg_hba.conf
host replication replica 192.168.52.0/24 trust
vi /var/lib/pgsql/9.3/data/postgresql.conf
listen_addresses = '*'
wal_level = hot_standby # 这个是设置主为wal的主机
max_wal_senders = 2 # 这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个
wal_keep_segments = 7 # 设置流复制保留的最多的xlog数目
wal_sender_timeout = 60s # 设置流复制主机发送数据的超时时间
max_connections = 100 # 这个设置要注意下,从库的max_connections必须要大于主库的
pg_ctl -D /var/lib/pgsql/9.3/data/ -l logfile restart
su - postgres
pg_basebackup -F p --progress -D $PGDATA -h 192.168.52.101 -p 5432 -U replica --password
vim $PGDATA/recovery.conf
standby_mode = on # 这个说明这台机器为从库
primary_conninfo = 'host=192.168.52.101 port=5432 user=replica password=replica' # 这个说明这台机器对应主库的信息
trigger_file = '/var/lib/pgsql/9.3/data/postgresql.trigger.192.168.52.101'
recovery_target_timeline = 'latest' # 这个说明这个流复制同步到最新的数据
vi $PGDATA/postgresql.conf
max_connections = 1000 # 一般查多于写的应用从库的最大连接数要比较大
hot_standby = on # 说明这台机器不仅仅是用于数据归档,也用于数据查询
max_standby_streaming_delay = 30s # 数据流备份的最大延迟时间
wal_receiver_status_interval = 1s # 多久向主报告一次从的状态,当然从每次数据复制都会向主报告状态,这里只是设置最长的间隔时间
hot_standby_feedback = on # 如果有错误的数据复制,是否向主进行反馈
$ psql
psql (9.3.4)
Type "help" for help.
postgres=# select client_addr,sync_state from pg_stat_replication;
client_addr | sync_state
----------------+------------
192.168.52.102 | async
(1 row)
postgres=#
ps aux | grep postgres
主节点有如下进程
postgres 74442 0.0 0.2 258652 2424 ? Ss 15:02 0:00 postgres: wal sender process replica 192.168.52.102(58199) streaming 0/30101D0
从节点有如下进程
postgres 1676 0.0 0.0 113328 748 ? Ss 15:01 0:00 postgres: stats collector process
postgres@master ~]$ psql
psql (9.3.4)
Type "help" for help.
postgres=# create table t_user(id int primary key,name varchar(30));
CREATE TABLE
postgres=# dt
List of relations
Schema | Name | Type | Owner
--------+--------+-------+----------
public | t_user | table | postgres
(1 row)
postgres=# insert into t_user values(1,'kbson');
INSERT 0 1
postgres=# insert into t_user values(2,'kbsonlong');
INSERT 0 1
postgres=# select * from t_user;
id | name
----+-----------
1 | kbson
2 | kbsonlong
(2 rows)
postgres=#
从库查看是否同步
[postgres@slave ~]$ psql
psql (9.3.4)
Type "help" for help.
postgres=# dt
No relations found. ##最开始从库并没有表
postgres=# dt
List of relations
Schema | Name | Type | Owner
--------+--------+-------+----------
public | t_user | table | postgres
(1 row)
postgres=# select * from t_user;
id | name
----+-----------
1 | kbson
2 | kbsonlong
(2 rows)
postgres=#
[postgres@master data]$ pg_ctl stop
此时查看从库会提示连接不上主库
LOG: replication terminated by primary server
DETAIL: End of WAL reached on timeline 1 at 0/3000518.
FATAL: could not send end-of-streaming message to primary: no COPY in progress
LOG: record with zero length at 0/3000518
FATAL: could not connect to the primary server: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
FATAL: could not connect to the primary server: could not connect to server: Connection refused
Is the server running on host "192.168.52.101" and accepting
TCP/IP connections on port 5432?
FATAL: could not connect to the primary server: could not connect to server: Connection refused
Is the server running on host "192.168.52.101" and accepting
TCP/IP connections on port 5432?
在从库生成一个触发文件,就是在配置从库中recovery.conf中配置的trigger_file
[postgres@kbsonlong data]$ touch /var/lib/pgsql/9.3/data/postgresql.trigger.5432
[postgres@kbsonlong data]$ ll /var/lib/pgsql/9.3/data/postgresql.trigger.5432
-rw-rw-r-- 1 postgres postgres 0 Jul 30 17:49 /var/lib/pgsql/9.3/data/postgresql.trigger.5432
此时日志会提示找到触发文件,自动切换为新的主库
LOG: trigger file found: /var/lib/pgsql/9.3/data/postgresql.trigger.5432
LOG: redo done at 0/30004B0
LOG: last completed transaction was at log time 2017-07-30 17:38:43.592351+08
LOG: selected new timeline ID: 2
LOG: archive recovery complete
LOG: database system is ready to accept connections
LOG: autovacuum launcher started
在新的主库写入测试数据,方便后面旧的主库恢复为从库是查看是否同步数据
postgres=# select * from t_user;
id | name
----+-----------
1 | kbson
2 | kbsonlong
(2 rows)
postgres=# insert into t_user values(3,'kbsonlong3');
insert into t_user values(4,'kbsonlong4');
insert into t_user values(5,'kbsonlong5'); INSERT 0 1
postgres=# INSERT 0 1
postgres=#
INSERT 0 1
postgres=# select * from t_user;
id | name
----+------------
1 | kbson
2 | kbsonlong
3 | kbsonlong3
4 | kbsonlong4
5 | kbsonlong5
(5 rows)
postgres=#
[postgres@master data]$ cat recovery.conf |grep -v '^#'
standby_mode = on
primary_conninfo = 'host=192.168.52.102 port=5432 user=replica password=replica' ##注意host指向新的主库
trigger_file = '/var/lib/pgsql/9.3/data/postgresql.trigger.5432'
recovery_target_timeline = 'latest'
[postgres@master data]$
pg_ctl start
[postgres@master data]$ psql
psql (9.3.4)
Type "help" for help.
postgres=# select * from t_user;
id | name
----+------------
1 | kbson
2 | kbsonlong
3 | kbsonlong3
4 | kbsonlong4
5 | kbsonlong5
(5 rows)
postgres=# insert into t_user values(6,'kbsonlong6');
ERROR: cannot execute INSERT in a read-only transaction
STATEMENT: insert into t_user values(6,'kbsonlong6');
ERROR: cannot execute INSERT in a read-only transaction
postgres=#
可以看到刚才在新的主库写入的测试数据已经同步,并且无法再次新的从库写入数据
PostgreSQL的开机自启动脚本位于PostgreSQL源码目录的contrib/start-scripts路径下
Linux文件即为linux系统上的启动脚本
#chmod a+x linux
#cp linux /etc/init.d/postgresql
prefix设置为postgresql的安装路径:/opt/pgsql-9.3
PGDATA设置为postgresql的数据目录路径:/var/libg/pgsql/9.3/data
#service postgresql start
#chkconfig --add postgresql
Postgresql数据库修改表增加主键
07-12
CentOS7安装配置Postgresql数据库服务器
06-20
Percona Xtrabackup备份mysql大数据库(完整备份与增量备份)
03-15
Ubuntu下迁移通过apt安装的MySQL数据库文件目录
07-18
memcached数据库简单配置介绍
05-25
oracle数据库迁移到MySQL的三种方法
04-27
ubuntu安装mongodb数据库服务器
05-29
使用shell脚本结合innobackupex自动备份mysql innodb数据库
04-06
安全快速更改MySQL数据库名称
04-27
没有开启Oracle日志归档,紧急情况下如何进行Oracle数据库的冷备份
04-26
记录一次Zabbix-server由于磁盘空间不足迁移数据库的过程
07-19
通过mariadb二进制日志实现数据库增量备份
06-05
设置电脑的U盘或移动硬盘的禁用功能以防止数据被复制
03-11
Wireshark如何捕获网络流量数据包
06-02
ActiveMQ基于zookeeper的主从(levelDB Master/Slave)搭建
07-11
ET960如何把通话记录中的电话复制到SIM卡中?
06-07
Excel复制单元格后粘贴时Excel报错并重启
04-23
MySQL笔记之数据备份与还原的使用详解
07-07
rsync本地复制、比对文件、增量同步示例
03-24
使用shell脚本自动配置mysql主从
03-14
mdb文本导出工具(数据库导出软件) 1.1023绿色最新版
23KB
下载mongodb(开源数据库软件)下载 v4.0.3官方免费版
219M
下载oracle11g(数据库管理系统)v11.2.0.1.0 精简版
4.17GB
下载powerdesigner(数据库设计工具)v16.5 最新版
615.07MB
下载EasyRecovery 13 (mac数据恢复工具)专业破解版
12.99MB
下载Fastcopy (文件急速复制工具) v3.61.0.0
1.64 MB
下载HeidiSQL(MySQL服务器数据管理工具) v11.0.0.6055 免费版
10.1M
下载activesync(电脑数据同步工具)v6.1 中文版
22.72MB
下载后羿采集器(网页数据采集软件) v3.5.3 免费版
45.0M
下载奇奇剪贴复制工具下载
2.69M
下载顶尖数据恢复软件(电脑数据恢复工具) 6.30 破解版
7.5M
下载流星游戏加速器下载
15.81 MB
下载流量宝官方下载
44.2M
下载Autodesk CFD(流体三维仿真软件) v2021 免费版
553KB
下载Emby Server(流媒体服务软件,)v4.0.2.0 破解版
101M
下载爱莫流程图下载
1.8M
下载迅捷流程图制作软件下载
1.9M
下载FreeMind思维导图 1.0.1
27.35 MB
下载12306抢票软件
3.6MB
下载QT语音
58.56 MB
下载