由于Redhat或CentOS等发行版本自带postgresql数据库版本为9.2,由于gitlab 9+版本以上需要 postgresq 9.6版本,因此本文档安装(postgresql-10.1)。PostgreSQL是一个功能强大,开源对象关系型数据库系统。
配置一主二从(master 192.168.117.129,slave 192.168.117.130,192.168.117.131)
在这三台机器上分别安装Postgresql
按照Postgresql部署文档在这三台机器上安装Postgresql
配置PostgreSQL Master节点
i)设置replication用户
1 2 3 4 5 6
| su - postgres cd /usr/local/pgsql/bin ./psql CREATE ROLE repluser WITH REPLICATION PASSWORD 'postgres' LOGIN; \q exit
|
ii)停止postgresql服务
1
| systemctl stop postgresql
|
iii)修改postgresql配置,内容如下
1 2 3 4 5 6
| vim /usr/local/pgsql/data/postgresql.conf wal_level = hot_standby max_wal_senders = 5 wal_keep_segments = 32 archive_mode = on archive_command = 'cp %p /usr/local/pgsql/archive/%f'
|
iv)创建归档目录
1 2
| mkdir /usr/local/pgsql/archive chown -R postgres:postgres /usr/local/pgsql/archive
|
v)允许replication连接数据库
1
| vim /usr/local/pgsql/data/pg_hba.conf
|
添加如下内容:
1 2 3
| host replication repluser 192.168.117.0/24 md5 host all repluser 192.168.117.0/24 trust host all all 0.0.0.0/0 md5
|
vi)启动postgresql数据库服务
1
| systemctl start postgresql
|
配置PostgreSQL Slave节点
i)停止postgresql数据库
1
| systemctl stop postgresql
|
ii)清空数据目录
1
| rm -rf /usr/local/pgsql/data/*
|
iii)初始化备分数据库
1
| /usr/local/pgsql/bin/pg_basebackup -h 192.168.117.129 -D /usr/local/pgsql/data -P -U repluser -X stream
|
iv)修改配置
1
| vim /usr/local/pgsql/data/postgresql.conf
|
修改项为:hot_standby = on
v)创建恢复配置
1 2 3 4 5 6
| cp /usr/local/pgsql/share/recovery.conf.sample /usr/local/pgsql/data/recovery.conf vim /usr/local/pgsql/data/recovery.conf standby_mode = 'on' primary_conninfo = 'host=92.168.117.129 port=5432 user=repluser password=postgres' trigger_file = '/usr/local/pgsql/trigger' restore_command = 'cp /usr/local/pgsql/archive/%f %p'
|
vi)启动数据库
1
| systemctl restart postgresql
|
若果用上述命令,不报错,但查不到postgresql的进程,则试着使用下述命令
1
| service postgresql start
|
若出现下述问题
1
| chown -R postgres:postgres /usr/local/pgsql/data/
|
重新执行即可查看到postgresql进程(ps:不知道为什么systemctl start postgresql和service postgresql start不能起到相同的效果)
测试
–主库查看
1 2 3 4
| su - postgres cd /usr/local/pgsql/bin ./psql select client_addr,sync_state from pg_stat_replication;
|
–主库创建一个数据库
1 2 3
| postgres= CREATE DATABASE postgres=
|
–查看从库中是否已经同步
1 2 3 4
| su - postgres cd /usr/local/pgsql/bin ./psql postgres=
|
Linux 服务管理两种方式service和systemctl比较
i)service命令
service命令其实是去/etc/init.d目录下,去执行相关程序。其中脚本需要我们自己编写。
ii)systemctl命令
systemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动。
systemd对应的进程管理命令是systemctl
1)systemctl命令兼容了service
即systemctl也会去/etc/init.d目录下,查看,执行相关程序
2)systemctl命令管理systemd的资源Unit
systemd的Unit放在目录/usr/lib/systemd/system(Centos)或/etc/systemd/system(Ubuntu)