安装

大部分开源软件,通过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.

参考资料:

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐