前言
系统连接postgresql的数据量不大,单节点就能满足需求,但是单节点出现故障时,就会很悲催。故用docker swarm搭建一个高可用postgresql数据库,用两个主机节点来组,当一个节点故障自动迁移到另外一个节点,数据和配置文件都存放在glusterfs共享存储中。docker swarm集群的搭建就不细说了。
节点 | ip |
---|---|
node1 | 192.168.1.60 |
node2 | 192.168.1.62 |
前期配置
在共享存储中创建相应的文件夹来存放数据和配置文件,具体可参考下面的stack文件,值得注意的地方是,需在挂载目录下设置适当的权限
sudo chown 1001:1001 /gfs-share/postgresql/data/
sudo chown 1001:1001 /gfs-share/postgresql/conf/
编写stack,并deploy运行服务
该操作是在portainer上执行的
version: '3.7'
services:
postgresql:
image: 'bitnami/postgresql:latest'
hostname: postgresql
user: root
ports:
- '5432:5432'
volumes:
- '/gfs-share/postgresql/data:/bitnami/postgresql/data'
- '/gfs-share/postgresql/conf/:/opt/bitnami/postgresql/conf/'
- "/etc/timezone:/etc/timezone:ro"
- "/etc/localtime:/etc/localtime:ro"
environment:
- POSTGRESQL_POSTGRES_PASSWORD=demo001@2021! #超级用户postgres密码
- POSTGRESQL_USERNAME=demo001
- POSTGRESQL_PASSWORD=demo001@2021#
- POSTGRESQL_DATABASE=demo
- POSTGRESQL_LOG_TIMEZONE=Asia/Shanghai
- POSTGRESQL_TIMEZONE=Asia/Shanghai
deploy:
mode: replicated
replicas: 1
placement:
constraints: # 添加条件约束
- node.labels.role==pgsql
编写后,deploy该stack,把服务运行起来。
后期配置
服务正常运行后,会在/gfs-share/postgresql/conf/目录下看到一个postgresql.conf配置文件,现在要修改最大连接数,默认是100,一下子就爆满了,后面的就连不上了,现在改为10000。
打开postgresql.conf
在文件最底部加上
max_connections = 10000
保存退出,在portainer上停止stack,再启动stack,待服务正常运行,进入容器中,psql命令进入数据库,查看最大连接数已经修改成功。
demo=> show max_connections;
max_connections
-----------------
10000
(1 row)
连接
192.168.1.60、192.168.1.60都能连接到数据库