大部分开源软件,通过yum等工具安装很方便,但作为运维,这并不是真正安装。若要组件可运维,Linux软件安装至少需满足:
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命令:
在线服务,上线前,需确认HA配置,并验证是否生效。存储型组件(或有状态组件)HA最大难点是“写”,Postgresql也是如此。Postgresql HA有多种方案:
共享存储
数据目录使用NFS等网络文件系统。主故障后,启用备,这样数据不会有任何丢失。这样,共享存储就变成了最大的核心依赖,不能出任何问题,否则不仅更新操作,读操作也会异常。另外还有一个问题,同一时间,只能有一个主去操作共享数据。
主节点配置变更
在数据目录/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%的数据灾难。
为什么需要数据备份?如果已经配置HA,99%甚至以上的时间,备份的数据并不能发挥作用。但作为数据容灾兜底手段,数据备份必不可少。多年运维中,数据备份只发挥过一次作用——某运维工程师误操作清空了线上所有数据。
Postgresql提供了3种方式:
附:
配置文件:
参考资料: