测试环境:
系统Redhat7.3
数据库Postgresql-10
1、环境配置:
配置主机名
hostnamectl set-hostname node1
关闭selinux
[root@node1 ~]# cat /etc/selinux/config |grep -v ^#
SELINUX=disabled
SELINUXTYPE=targeted
关闭防火墙
[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# systemctl disable firewalld
[root@node1 ~]# iptables -F
[root@node1 ~]# iptables -L
配置域名解析
[root@node1 ~]# cat /etc/hosts
192.168.21.66 node1
192.168.21.67 node2
安装软件
[root@node1 ~]#yum install -y pacemaker corosync pcs ipvsadm
2、启用pcsd服务
在所有节点执行:
[root@node1 ~]# systemctl start pcsd.service
[root@node1 ~]# systemctl enable pcsd.service
3、设置hacluster用户密码
在所有节点执行:
[root@node1 ~]# echo hacluster | passwd hacluster --stdin
4、集群认证
在任何一个节点上执行:
[root@node1 ~]# pcs cluster auth -u hacluster -p hacluster node1 node2
5、同步配置
在任何一个节点上执行:
[root@node1 ~]# pcs cluster setup --last_man_standing=1 --name pgcluster node1 node2
6、启动集群
在任何一个节点上执行:
[root@node1 ~]# pcs cluster start --all
7、安装配置postgresql
所有节点
[root@node1 ~]# useradd postgres
[root@node1 ~]# passwd postgres
[root@node1 ~]# vim /home/postgres/.bash_profile
添加:
export PGDATA=/app/data
export PATH=/app/pgsql/bin:$PATH
[root@node1 ~]# mkdir /app/
[root@node1 ~]# mkdir /app/data
[root@node1 ~]# chown postgres.postgres /app/data/
[root@node1 ~]# tar -zxvf postgresql-10.1.tar.gz
[root@node1 postgresql-10.1]# ./configure --prefix=/app/pgsql
[root@node1 postgresql-10.1]# gmake
[root@node1 postgresql-10.1]# gmake install
[root@node1 ~]# mkdir /app/xlog_archive
[root@node1 ~]# chown postgres.postgres /app/xlog_archive/
主节点
[postgres@node1 ~]$ initdb
修改配置文件
[root@node1 ~]# vim /app/data/postgresql.conf
[root@node1 ~]# cat /app/data/postgresql.conf |grep -v '^#'|grep -v '^$'|grep -v ^$'\t'
listen_addresses = '*'
port = 5432
max_connections = 100
shared_buffers = 128MB
dynamic_shared_memory_type = posix
wal_level = hot_standby
synchronous_commit = on
wal_log_hints = on
archive_mode = on
archive_command = 'cp %p /app/xlog_archive/%f'
max_wal_senders = 5
wal_keep_segments = 32
wal_sender_timeout = 5000
hot_standby = on
wal_receiver_status_interval = 2
hot_standby_feedback = on
wal_receiver_timeout = 60s
logging_collector = on
log_timezone = 'PRC'
datestyle = 'iso, mdy'
timezone = 'PRC'
lc_messages = 'en_US.utf8'
lc_monetary = 'en_US.utf8'
lc_numeric = 'en_US.utf8'
lc_time = 'en_US.utf8'
default_text_search_config = 'pg_catalog.english'
restart_after_crash = on
[root@node1 ~]# vim /data/postgresql/data/pg_hba.conf
添加
host all all 192.168.21.0/24 md5
host replication all 192.168.21.0/24 md5
启动数据库,创建用户。
postgres=# alter user postgres with password 'postgres';
postgres=# create user replicator with login replication password 'replicator';
备节点
[root@node2 ~]# chmod 700 /app/data/
[postgres@node2 ~]$ pg_basebackup -h node3 -U postgres -D /app/data/ -X s
停掉主节点
7、配置自动切换
[root@node1 ~]# cat /app/cluster_setup.sh
pcs cluster cib pgsql_cfg
pcs -f pgsql_cfg property set no-quorum-policy="ignore"
pcs -f pgsql_cfg property set stonith-enabled="false"
pcs -f pgsql_cfg resource defaults resource-stickiness="INFINITY"
pcs -f pgsql_cfg resource defaults migration-threshold="3"
pcs -f pgsql_cfg resource create vip-master IPaddr2 ip="192.168.21.70" cidr_netmask="24" \
op start timeout="60s" interval="0s" on-fail="restart" \
op monitor timeout="60s" interval="10s" on-fail="restart" \
op stop timeout="60s" interval="0s" on-fail="block"
pcs -f pgsql_cfg resource create vip-slave IPaddr2 ip="192.168.21.71" cidr_netmask="24" \
op start timeout="60s" interval="0s" on-fail="restart" \
op monitor timeout="60s" interval="10s" on-fail="restart" \
op stop timeout="60s" interval="0s" on-fail="block"
pcs -f pgsql_cfg resource create pgsql pgsql \
pgctl="/app/pgsql/bin/pg_ctl" \
psql="/app/pgsql/bin/psql" \
pgdata="/app/pgdata/" \
config="/app/pgdata/postgresql.conf" \
rep_mode="sync" node_list="node1 node2" master_ip="192.168.21.70" \
repuser="replicator" \
primary_conninfo_opt="password=replicator \
keepalives_idle=60 keepalives_interval=5 keepalives_count=5" \
restart_on_promote='true' \
op start timeout="60s" interval="0s" on-fail="restart" \
op monitor timeout="60s" interval="4s" on-fail="restart" \
op monitor timeout="60s" interval="3s" on-fail="restart" role="Master" \
op promote timeout="60s" interval="0s" on-fail="restart" \
op demote timeout="60s" interval="0s" on-fail="stop" \
op stop timeout="60s" interval="0s" on-fail="block"
pcs -f pgsql_cfg resource master pgsql-cluster pgsql master-max=1 master-node-max=1 clone-max=3 clone-node-max=1 notify=true
pcs -f pgsql_cfg resource group add master-group vip-master
pcs -f pgsql_cfg resource group add slave-group vip-slave
pcs -f pgsql_cfg constraint colocation add master-group with master pgsql-cluster INFINITY
pcs -f pgsql_cfg constraint order promote pgsql-cluster then start master-group symmetrical=false score=INFINITY
pcs -f pgsql_cfg constraint order demote pgsql-cluster then stop master-group symmetrical=false score=0
pcs -f pgsql_cfg constraint colocation add slave-group with slave pgsql-cluster INFINITY
pcs -f pgsql_cfg constraint order promote pgsql-cluster then start slave-group symmetrical=false score=INFINITY
pcs -f pgsql_cfg constraint order demote pgsql-cluster then stop slave-group symmetrical=false score=0
pcs cluster cib-push pgsql_cfg
执行操作文件
[root@node1 app]# sh cluster_setup.sh
查看集群状态
[root@node1 app]# pcs status