赞
踩
IP | name | 节点 |
---|---|---|
192.168.98.150 | master | master |
192.168.98.151 | node1 | node1 |
192.168.98.152 | node2 | node2 |
192.168.98.153 | node3 | node3 |
# 修改150~153的hosts配置文件
- vim /etc/hosts
- 192.168.98.150 master
- 192.168.98.151 node1
- 192.168.98.152 node2
- 192.168.98.153 node3
- # 150~153都需要配置
- # 基于root
- ssh-keygen
- ssh-copy-id 192.168.98.150
- ssh-copy-id 192.168.98.151
- ssh-copy-id 192.168.98.152
- ssh-copy-id 192.168.98.153
-
- # 基于postgres
- passwd postgres
- su - postgres
- ssh-copy-id 192.168.98.150
- ssh-copy-id 192.168.98.151
- ssh-copy-id 192.168.98.152
- ssh-copy-id 192.168.98.153
- #自定义安装配置
- #自定义目录
- #创建数据存放目录
- mkdir -p /data/pg/14/data
- #指定postgres用户的权限
- chown -R postgres:postgres /data/pgsql/14/data
-
- # 配置环境变量
- vim /etc/profile
- # 软件安装目录
- export PGHOME=/usr/pgsql-14/
- # PG数据目录
- export PGDATA=/app/pgsql/14/data/
- export PATH=$PGHOME/bin:$PATH
- # 更新环境配置
- source /etc/profile
-
- #修改启动文件的启动目录
- sudo vim /usr/lib/systemd/system/postgresql-14.service
- #Enviroment=PGDATA=/var/lib/pgsql/14/data/
- Enviroment=PGDATA=/data/pgsql/14/data/
- #重新加载配置文件
- systemctl daemon-reload
- systemctl start postgresql-14.service
- #修改密码
- sudo -u postgres psql
- \passwd postgres
- #登录postgres用户
- su - postgres
- #初始化数据库,并指定存放数据目录
- /usr/pgsql-14/bin/initdb -D /app/pgsql/14/data
- exit
- 此处针对master进行安装,所有的node1、node2、node3配置一致
- yum install flex
- yum list | grep repmgr
- yum install -y repmgr_14
- vim /app/pgsql/14/data/postgresql.conf
- listen_addresses = '*'
- port = 5432
- max_wal_senders = 10
- max_replication_slots = 10
- wal_level = 'hot_standby'
- hot_standby = on
- archive_mode = on
- archive_command = '/bin/true'
-
- vim /app/pgsql/14/data/pg_hba.conf
- local replication repmgr trust
- host replication repmgr 127.0.0.1/32 trust
- host replication repmgr node1 trust
- host replication repmgr node2 trust
- host replication repmgr master trust
-
- local repmgr repmgr trust
- host repmgr repmgr 127.0.0.1/32 trust
- host repmgr repmgr node1 trust
- host repmgr repmgr node2 trust
- host repmgr repmgr master trust
- # 第一种方式
- su - postgres
- createuser -s repmgr
- createdb repmgr -O repmgr
- psql -U repmgr -d repmgr
- repmgr=# alter user repmgr with password '123456';
- repmgr=# exit
- ALTER USER repmgr PASSWORD NULL;
-
- # 第二种方式
- psql | sudo -u postgres psql
- create user repmgr with password '123456' superuser replication;
- create database repmgr owner repmgr;
- \q
- su - postgres
- vim .pgpass
- # ip:port:repmgr:repmgr:repmgr
- *:*:repmgr:repmgr:123456
-
- chmod 600 .pgpass
-
- #注意该配置必须有,否则在执行 switchover 的时候,standby 可以正常提升为 primary,但旧 primary 无法自动
- #跟随新主,每台主机上都要进行配置,node2 和 node3 也要进行配置。
-
- # 重启生效
- systemctl restart postgresql-14.service
- mkdir -p /etc/repmgr/log
- chown -R postgres:postgres /etc/repmgr
- vim /etc/repmgr/14/repmgr.conf
- # 基本信息
- # node_id、node_name、conninfo需要与从库不同
- # 节点ID,高可用集群各节点标识
- node_id=1
- # 节点名称,高可用集群各节点名称
- # 对应集群中select * from pg_stat_replication;中查到的application_name
- node_name='master'
- # 本节点数据库连接信息
- # 集群中的所有服务器都必须能够使用此字符串连接到本地节点
- conninfo='host=master user=repmgr dbname=repmgr password=123456 connect_timeout=2'
- # pg数据目录
- data_directory='/app/pgsql/14/data'
- # 流复制数据库用户,默认使用repmgr
- replication_user='repmgr'
- # repmgr软件目录
- repmgr_bindir='/usr/pgsql-14/bin'
- # pg软件目录
- pg_bindir='/usr/pgsql-14/bin'
-
- # 日志管理
- log_level=INFO
- # log文件需要提前创建
- log_file='/etc/repmgr/log/repmgrd.log'
- # 此设置导致repmgrd以指定的时间间隔(以秒为单位,默认为300)发出状态日志行,描述repmgrd的当前状态
- log_status_interval=10
-
- # pg、repmgr服务管理命令
- service_start_command='pg_ctl -D /app/pgsql/14/data/ start -o \'-c config_file=/app/pgsql/14/data/postgresql.conf\' -l /app/pgsql/14/data/logs/start.log'
- service_stop_command='pg_ctl -D /app/pgsql/14/data/ stop -o \'-c config_file=/app/pgsql/14/data/postgresql.conf\' -l /app/pgsql/14/data/logs/start.log'
- service_restart_command='pg_ctl -D /app/pgsql/14/data/ restart -o \'-c config_file=/app/pgsql/14/data/postgresql.conf\' -l /app/pgsql/14/data/logs/start.log'
- service_reload_command='pg_ctl reload'
- # repmgrd运行时的pid文件
- repmgrd_pid_file='/etc/repmgr/log/repmgrd.pid'
- repmgrd_service_start_command='repmgrd start'
- repmgrd_service_stop_command='kill -9 `cat /etc/repmgr/log/repmgrd.pid`'
-
- # failover设置
- failover='automatic'
- # 当repmgrd确定当前节点将成为新的主节点时,将在故障转移情况下执行promote_command中定义的程序或脚本
- promote_command='repmgr standby promote --log-to-file'
- # %n将被替换repmgrd与新的主节点的ID,如果没有提供,repmgr standby follow将尝试自行确定新的主repmgr standby follow节点,但如果在新主节点提升后原主节点重新上线,则存在导致节点继续跟随原主节点的风险
- follow_command='repmgr standby follow --log-to-file --upstream-node-id=%n'
-
- # 高可用参数设置
- # 定义节点位置的任意字符串,在故障转移期间用于检查当前主节点的可见性
- location='location1'
- # 节点优先级,选主时可能使用到(lsn > priority > node_id),0代表该节点不会被提升为主节点
- priority=100
- # 是否将监控数据写入monitoring_history表
- monitoring_history=yes
- # 故障转移之前,尝试重新连接的间隔(以秒为单位)
- reconnect_interval=5
- # 故障转移之前,尝试重新连接的次数
- reconnect_attempts=3
- # ping: repmg使用PQPing()方法测试连接
- # connection: 尝试与节点建立新的连接
- # query:通过现有连接在节点上执行SQL语句
- connection_check_type=ping
- # 写入监控数据的间隔
- monitor_interval_secs=5
- use_replication_slots=true
- su - postgres
- repmgr primary register
- # 第一种方式
- repmgr cluster show
- # 第二种方式
- psql -U repmgr -d repmgr
- repmgr=# \x 1
- Expanded display is on.
- repmgr=# select * from repmgr.nodes;
- # 配置文件发生改变,需要在每个节点执行
- $ repmgr primary register --force
- $ repmgr standby register --force
- $ repmgr witness register --force -h primary_host
- cd /app/pgsql/14/data
- vim postgresql.conf
- shared_preload_libraries = 'repmgr'
-
- systemctl restart postgresql-14
- # 创建日志文件,repmgrd的日志文件需要手动创建
- # /etc/repmgr/log/repmgrd.log和/app/repmgr/conf/repmgr.conf配置文件中的log_file匹配
- touch /etc/repmgr/log/repmgrd.log
- # 启动repmgrd服务
- su - postgres
- repmgrd start
为确保当前的 repmgrd 日志文件( repmgr.conf
配置文件中用参数 log_file
指定的文件)不会无限增长
- /etc/repmgr/log/repmgrd.log {
- missingok
- compress
- rotate 52
- maxsize 100M
- weekly
- create 0600 postgres postgres
- postrotate
- /usr/bin/killall -HUP repmgrd
- endscript
- }
- # 1、kill 旧进程
- kill -9 `cat /etc/repmgr/log/repmgrd.pid`
-
- # 2、start
- repmgrd start
- su - postgres
- vim .pgpass
- # ip:port:repmgr:repmgr:repmgr
- *:*:repmgr:repmgr:123456
yum install -y repmgr_14
- mkdir -p /etc/repmgr/log
- chown -R postgres:postgres /etc/repmgr/
- vim /etc/repmgr/14/repmgr.conf
- # 基本信息
- # node_id、node_name、conninfo需要与从库不同
- # 节点ID,高可用集群各节点标识
- node_id=2
- # 节点名称,高可用集群各节点名称
- # 对应集群中select * from pg_stat_replication;中查到的application_name
- node_name='node1'
- # 本节点数据库连接信息
- # 集群中的所有服务器都必须能够使用此字符串连接到本地节点
- conninfo='host=node1 user=repmgr dbname=repmgr password=123456 connect_timeout=2'
- # pg数据目录
- data_directory='/app/pgsql/14/data'
- # 流复制数据库用户,默认使用repmgr
- replication_user='repmgr'
- # repmgr软件目录
- repmgr_bindir='/usr/pgsql-14/bin'
- # pg软件目录
- pg_bindir='/usr/pgsql-14/bin'
-
- # 日志管理
- log_level=INFO
- # log文件需要提前创建
- log_file='/etc/repmgr/log/repmgrd.log'
- # 此设置导致repmgrd以指定的时间间隔(以秒为单位,默认为300)发出状态日志行,描述repmgrd的当前状态
- log_status_interval=10
-
- # pg、repmgr服务管理命令
- service_start_command='pg_ctl -D /app/pgsql/14/data/ start -o \'-c config_file=/app/pgsql/14/data/postgresql.conf\' -l /app/pgsql/14/data/logs/start.log'
- service_stop_command='pg_ctl -D /app/pgsql/14/data/ stop -o \'-c config_file=/app/pgsql/14/data/postgresql.conf\' -l /app/pgsql/14/data/logs/start.log'
- service_restart_command='pg_ctl -D /app/pgsql/14/data/ restart -o \'-c config_file=/app/pgsql/14/data/postgresql.conf\' -l /app/pgsql/14/data/logs/start.log'
- service_reload_command='pg_ctl reload'
- # repmgrd运行时的pid文件
- repmgrd_pid_file='/etc/repmgr/log/repmgrd.pid'
- repmgrd_service_start_command='repmgrd start'
- repmgrd_service_stop_command='kill -9 `cat /etc/repmgr/log/repmgrd.pid`'
-
- # failover设置
- failover='automatic'
- # 当repmgrd确定当前节点将成为新的主节点时,将在故障转移情况下执行promote_command中定义的程序或脚本
- promote_command='repmgr standby promote --log-to-file'
- # %n将被替换repmgrd与新的主节点的ID,如果没有提供,repmgr standby follow将尝试自行确定新的主repmgr standby follow节点,但如果在新主节点提升后原主节点重新上线,则存在导致节点继续跟随原主节点的风险
- follow_command='repmgr standby follow --log-to-file --upstream-node-id=%n'
-
- # 高可用参数设置
- # 定义节点位置的任意字符串,在故障转移期间用于检查当前主节点的可见性
- location='location1'
- # 节点优先级,选主时可能使用到(lsn > priority > node_id),0代表该节点不会被提升为主节点
- priority=100
- # 是否将监控数据写入monitoring_history表
- monitoring_history=yes
- # 故障转移之前,尝试重新连接的间隔(以秒为单位)
- reconnect_interval=5
- # 故障转移之前,尝试重新连接的次数
- reconnect_attempts=3
- # ping: repmg使用PQPing()方法测试连接
- # connection: 尝试与节点建立新的连接
- # query:通过现有连接在节点上执行SQL语句
- connection_check_type=ping
- # 写入监控数据的间隔
- monitor_interval_secs=5
- use_replication_slots=true
- # --dry-run表示命令测试,并不会实际执行,可用于验证是否会出现一些基本错误
- su - postgres
- repmgr -h ${主服务器ip} -U repmgr -d repmgr standby clone --dry-run
-
- # 实际执行pg的克隆操作
- repmgr -h ${主服务器ip} -U repmgr -d repmgr standby clone
systemctl restart postgresql
- su - postgres
- repmgr --upstream-node-id=1 standby register
repmgr cluster show
repmgrd start
- vim /etc/logrotate.d/repmgr
- /etc/repmgr/log/repmgrd.log {
- missingok
- compress
- rotate 52
- maxsize 100M
- weekly
- create 0600 postgres postgres
- postrotate
- /usr/bin/killall -HUP repmgrd
- endscript
- }
- su - postgres
- # 1、kill 旧进程
- kill -9 `cat /etc/repmgr/log/repmgrd.pid`
-
- # 2、start
- repmgrd start
- su - postgres
- vim .pgpass
- # ip:port:repmgr:repmgr:repmgr
- *:*:repmgr:repmgr:123456
- su - postgres
- initdb -D /app/pgsql/14/data/
- systemctl restart postgresql-14
- systemctl enable postgresql-14
- mkdir -p /etc/repmgr/log
- chown -R postgres:postgres /etc/repmgr/
- # 基本信息
- # node_id、node_name、conninfo需要与从库不同
- # 节点ID,高可用集群各节点标识
- node_id=4
- # 节点名称,高可用集群各节点名称
- # 对应集群中select * from pg_stat_replication;中查到的application_name
- node_name='node3'
- # 本节点数据库连接信息
- # 集群中的所有服务器都必须能够使用此字符串连接到本地节点
- conninfo='host=node3 user=repmgr dbname=repmgr password=123456 connect_timeout=2'
- # pg数据目录
- data_directory='/app/pgsql/14/data'
- # 流复制数据库用户,默认使用repmgr
- replication_user='repmgr'
- # repmgr软件目录
- repmgr_bindir='/usr/pgsql-14/bin'
- # pg软件目录
- pg_bindir='/usr/pgsql-14/bin'
-
- # 日志管理
- log_level=INFO
- # log文件需要提前创建
- log_file='/etc/repmgr/log/repmgrd.log'
- # 此设置导致repmgrd以指定的时间间隔(以秒为单位,默认为300)发出状态日志行,描述repmgrd的当前状态
- log_status_interval=10
-
- # pg、repmgr服务管理命令
- service_start_command='pg_ctl -D /app/pgsql/14/data/ start -o \'-c config_file=/app/pgsql/14/data/postgresql.conf\' -l /app/pgsql/14/data/logs/start.log'
- service_stop_command='pg_ctl -D /app/pgsql/14/data/ stop -o \'-c config_file=/app/pgsql/14/data/postgresql.conf\' -l /app/pgsql/14/data/logs/start.log'
- service_restart_command='pg_ctl -D /app/pgsql/14/data/ restart -o \'-c config_file=/app/pgsql/14/data/postgresql.conf\' -l /app/pgsql/14/data/logs/start.log'
- service_reload_command='pg_ctl reload'
- # repmgrd运行时的pid文件
- repmgrd_pid_file='/etc/repmgr/log/repmgrd.pid'
- repmgrd_service_start_command='repmgrd start'
- repmgrd_service_stop_command='kill -9 `cat /etc/repmgr/log/repmgrd.pid`'
-
- # failover设置
- failover='automatic'
- # 当repmgrd确定当前节点将成为新的主节点时,将在故障转移情况下执行promote_command中定义的程序或脚本
- promote_command='repmgr standby promote --log-to-file'
- # %n将被替换repmgrd与新的主节点的ID,如果没有提供,repmgr standby follow将尝试自行确定新的主repmgr standby follow节点,但如果在新主节点提升后原主节点重新上线,则存在导致节点继续跟随原主节点的风险
- follow_command='repmgr standby follow --log-to-file --upstream-node-id=%n'
-
- # 高可用参数设置
- # 定义节点位置的任意字符串,在故障转移期间用于检查当前主节点的可见性
- location='location1'
- # 节点优先级,选主时可能使用到(lsn > priority > node_id),0代表该节点不会被提升为主节点
- priority=100
- # 是否将监控数据写入monitoring_history表
- monitoring_history=yes
- # 故障转移之前,尝试重新连接的间隔(以秒为单位)
- reconnect_interval=5
- # 故障转移之前,尝试重新连接的次数
- reconnect_attempts=3
- # ping: repmg使用PQPing()方法测试连接
- # connection: 尝试与节点建立新的连接
- # query:通过现有连接在节点上执行SQL语句
- connection_check_type=ping
- # 写入监控数据的间隔
- monitor_interval_secs=5
- use_replication_slots=true
-
- # 1、配置postgresql配置文件
- vim /app/pgsql/14/data/postgresql.conf
-
- # 添加如下内容
- listen_addresses = '*'
- port = 5432
- shared_preload_libraries = 'repmgr'
-
- # 2、修改pg_hba.conf
- host repmgr repmgr 0.0.0.0/0 trust
-
- # 3、重启postgresql
- systemctl restart postgresql-14
- systemctl enable postgresql-14
-
- # 4、创建repmgr数据库和用户
- su - postgres
- psql
- postgres=# create user repmgr with password '123456' superuser
-
- postgres=# create user repmgr with password '123456' superuser replication;
- CREATE ROLE
- postgres=#
- postgres=#
- postgres=# create database repmgr owner repmgr;
- CREATE DATABASE
-
- # 5、启动repmgrd
- repmgrd start
- vim /etc/logrotate.d/repmgr
- /etc/repmgr/log/repmgrd.log {
- missingok
- compress
- rotate 52
- maxsize 100M
- weekly
- create 0600 postgres postgres
- postrotate
- /usr/bin/killall -HUP repmgrd
- endscript
- }
- # 1、kill 旧进程
- kill -9 `cat /etc/repmgr/log/repmgrd.pid`
-
- # 2、start
- repmgrd start
- su - postgres
-
- repmgr witness register -h 192.168.98.150 -U repmgr -d repmgr
repmgr cluster show
- # 6.1、关于脑裂问题
- systemctl stop postgresql-14.service
- repmgr node rejoin -d 'host=node1 dbname=repmgr user=repmgr' --force-rewind --config-files=postgresql.conf --verbose --dry-run
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。