初识Postgresql,配置HA、备份恢复
安装大部分开源软件,通过yum等工具安装很方便,但作为运维,这并不是真正安装。若要组件可运维,Linux软件安装至少需满足:非root更新配置第一次启动1,环境变量配置在官网下载Postgresql之后,编译、安装(这里省略此过程,安装版本为9.3)参考命名:export PATH=$PATH:/home/hadoop/postgresql/bin/注:文中部署路...
安装
大部分开源软件,通过yum等工具安装很方便,但作为运维,这并不是真正安装。若要组件可运维,Linux软件安装至少需满足:
- 非root
- 更新配置
第一次启动
1,环境变量配置
在官网下载Postgresql之后,编译、安装(这里省略此过程,安装版本为9.3)
参考命名:
export PATH=$PATH:/home/hadoop/postgresql/bin/
注:文中部署路径为/home/hadoop/postgresql,数据目录为/export/Data/Postgresql,启动用户为hadoop
2,数据库初始化
initdb /export/Data/Postgres
创建第一个数据库
createdb my_dbtest
3,启动
nohup postgres -D /export/Data/Postgres 1>postgresql.log 2>&1 &
注:可以封装一个control脚本
4,验证
使用命令pstree hadoop执行结果
postgres(32342)─┬─postgres(32347)
├─postgres(32348)
├─postgres(32349)
├─postgres(32350)
└─postgres(32351)
使用命令ps aux | grep postgresql | grep -v grep执行结果
hadoop 32342 0.1 0.0 263196 12496 pts/0 S 11:40 0:00 postgres -D /export/Data/Postgres
hadoop 32347 0.0 0.0 263196 928 ? Ss 11:40 0:00 postgres: checkpointer process
hadoop 32348 0.0 0.0 263196 932 ? Ss 11:40 0:00 postgres: writer process
hadoop 32349 0.0 0.0 263196 712 ? Ss 11:40 0:00 postgres: wal writer process
hadoop 32350 0.0 0.0 263916 1988 ? Ss 11:40 0:00 postgres: autovacuum launcher process
hadoop 32351 0.0 0.0 118872 828 ? Ss 11:40 0:00 postgres: stats collector process
5,第一次使用
导入客户端环境变量,参考如下:
export PATH=$PATH:/home/hadoop/postgresql/bin/
export PGPORT=5432
export PGHOST=127.0.0.1
export PGUSER=hadoop
export PGDATABASE=my_dbtest
部分sql命令:
- show databases sql:select datname from pg_database;
- show tables:SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';
- describe table_name:SELECT column_name FROM information_schema.columns WHERE table_name ='test';
HA配置(手册第25章)
在线服务,上线前,需确认HA配置,并验证是否生效。存储型组件(或有状态组件)HA最大难点是“写”,Postgresql也是如此。Postgresql HA有多种方案:
共享存储
数据目录使用NFS等网络文件系统。主故障后,启用备,这样数据不会有任何丢失。这样,共享存储就变成了最大的核心依赖,不能出任何问题,否则不仅更新操作,读操作也会异常。另外还有一个问题,同一时间,只能有一个主去操作共享数据。
- 文件系统复制:利用共享存储,将主节点上的数据镜像到其他节点,必须确保镜像数据与原数据一致。DRBD是使用较广泛的方案。
- 事务日志传输:实时传输事务日志(WAL)到热备节点,有2种方式可以实现(1,基于文件;2,流复制),当主故障后,备节点数据与主是一致的。后文样例,也是基于此来实现。
- 基于触发器的主从复制:所有更新操作请求主节点,主将数据同步到备节点,备节点提供读。
- 基于语句的复制中间件:在数据库上册有一个类似于Proxy的组件,每次将Sql同时分发到多个节点。
- 异步多主复制
- 同步多主复制
- 商业解决方案
一个例子:基于日志的主从同步配置实现HA
主节点配置变更
在数据目录/export/Data/Postgresql下,修改配置文件postgresql.conf,参考内容如下:
listen_addresses = '0.0.0.0'
wal_level = hot_standby
archive_mode = on
archive_command = '/bin/date'
max_wal_senders = 6
hot_standby = on
在数据目录/export/Data/Postgresql下,新增recovery.done(主从切换的文件标志,在主节点上不起作用),参考内容为:
recovery_target_timeline = 'latest'
standby_mode = on
primary_conninfo = 'host=10.229.11.69 port=5432 user=replica' # e.g. 'host=localhost port=5432'
trigger_file = '/export/Data/Postgres/trigger_file'
注:host IP为从节点IP
重启主节点之后生效,生效之后增加复制的角色,参考命令:
create role replica login replication encrypted password 'replica';
从节点配置
将主节点程序打包,复制到从节点,导入环境变量后,同步数据,参考命令:
pg_basebackup -D /export/Data/Postgres -Fp -Xs -v -P -h 10.229.11.69 -U replica
重命名文件recovery.done为recovery.conf(只有*.conf才会识别),并修改其中的host IP为主节点,参考命令:
mv recovery.done recovery.conf
启动从节点
启动之后,执行ps aux | grep postgresql命令,输出结果中会出现“startup process recovering ”
hadoop 7790 0.0 0.0 263236 12532 pts/0 S 17:38 0:00 postgres -D /export/Data/Postgres
hadoop 7794 1.0 0.0 263348 8780 ? Ss 17:38 0:01 postgres: startup process recovering 00000001000000000000001B
hadoop 7810 0.0 0.0 263236 948 ? Ss 17:38 0:00 postgres: checkpointer process
hadoop 7811 0.0 0.0 263236 1744 ? Ss 17:38 0:00 postgres: writer process
hadoop 7812 0.0 0.0 118872 732 ? Ss 17:38 0:00 postgres: stats collector process
hadoop 7813 1.5 0.0 272308 2128 ? Ds 17:38 0:02 postgres: wal receiver process streaming 0/1B9CC2C0
通过sql验证主从是否同步,参考命令:
在主库执行sql:select * from pg_stat_replication;
至此,HA配置完成,可以解决99%的数据灾难。
数据备份与恢复(手册第24章)
为什么需要数据备份?如果已经配置HA,99%甚至以上的时间,备份的数据并不能发挥作用。但作为数据容灾兜底手段,数据备份必不可少。多年运维中,数据备份只发挥过一次作用——某运维工程师误操作清空了线上所有数据。
Postgresql提供了3种方式:
- SQL dump
- 备份:pg_dumpall pg_dump
- 恢复:psql dbname < backup_file
- 文件系统级备份:对数据数据库数据打包备份
- 联机热备份:需要修改配置,进行自动归档(后续补充相关操作内容)
附:
配置文件:
- data_directory(string):Specifies the directory to use for data storage. This parameter can only be set at server start.
- config_file(string):Specifies the main server configuration file (customarily calledpostgresql.conf). This parameter can only be set on thepostgrescommand line.
- hba_file(string):Specifies the configuration file for host-based authentication (customarily calledpg_hba.conf).This parameter can only be set at server start.
- ident_file(string):Specifies the configuration file for user name mapping (customarily calledpg_ident.conf). This parameter can only be set at server start. See alsoSection 19.2.
- external_pid_file(string):Specifies the name of an additional process-ID (PID) file that the server should create for use by server administration programs. This parameter can only be set at server start.
参考资料:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)