暂无图片
暂无图片
6
暂无图片
暂无图片
暂无图片

PG高可用之Etcd+Patroni的安装部署

原创 惊涛骇浪 2023-11-25
2384


本文适用于通过互联网联网的方式进行patroni的安装部署,前提是机器可以访问互联网。由于本人水平有限,错误之处在所难免,敬请读者指正!

一、基础环境准备

集群拓扑

Node

IP

Hostname

操作系统

数据库版本

node1

192.168.1.61

pg61.test.cn

Centos7.6

PG12.1

node2

192.168.1.62

pg62test.cn

Centos7.6

PG12.1

node3

192.168.1.63

pg63.test.cn

Centos7.6

PG12.1

1、禁用防火墙

systemctl status firewalld.service

systemctl stop firewalld.service

systemctl status firewalld.service

systemctl disable firewalld.service

firewall-cmd --state

2、关闭selinux

vim /etc/selinux/conf

SELINUX=disabled

setenforce 0

检查

Getenforce

3、修改主机名

[root@test22 ~]# hostnamectl set-hostname pg61.test.cn

[root@test23 ~]# hostnamectl set-hostname pg62.test.cn

[root@test24 ~]# hostnamectl set-hostname pg63.test.cn

4、编辑/etc/hosts

[root@test22 ~]# vim /etc/hosts

192.168.1.61 pg61.test.cn pg61

192.168.1.62 pg62.test.cn pg62

192.168.1.63 pg63.test.cn pg63

5、修改IP

nmcli conn modify ens33 ipv4.addresses '192.168.1.61/24' ipv4.gateway '192.168.1.2' ipv4.dns '114.114.114.114' ipv4.method manual connection.autoconnect yes

nmcli conn modify ens33 ipv4.addresses '192.168.1.62/24' ipv4.gateway '192.168.1.2' ipv4.dns '114.114.114.114' ipv4.method manual connection.autoconnect yes

nmcli conn modify ens33 ipv4.addresses '192.168.1.63/24' ipv4.gateway '192.168.1.2' ipv4.dns '114.114.114.114' ipv4.method manual connection.autoconnect yes

nmcli conn reload

nmcli conn up ens33

6、配置本地yum源

mkdir /mnt/linux

mount /dev/cdrom /mnt/linux

cd /etc/yum.repos.d

mkdir bk

mv *.repo bk/

编辑yum.repo配置文件

echo "[EL]" >> /etc/yum.repos.d/yum.repo

echo "name =Linux 7.x DVD" >> /etc/yum.repos.d/yum.repo

echo "baseurl=file:///mnt/linux" >> /etc/yum.repos.d/yum.repo

echo "gpgcheck=0" >> /etc/yum.repos.d/yum.repo

echo "enabled=1" >> /etc/yum.repos.d/yum.repo

vim /etc/fstab 文件追加:

/dev/cdrom /mnt/linux iso9660 ro 0 0

#刷新仓库配置

yum clean all

#报告yum仓库的状态

yum repolist

7、配置时间同步

•所有节点设置时钟同步

•yum install -y ntpdate

•ntpdate time.windows.com && hwclock –w

二、编译安装PG

1、安装依赖包

yum -y install readline readline-devel zlib zlib-devel gettext gettext-devel openssl openssl-devel pam pam-devel libxml2 libxml2-devel libxslt libxslt-devel perl perl-devel tcl-devel uuid-devel gcc gcc-c++ make flex bison perl-ExtUtils*

2、Linux系统内核调整

vi /etc/sysctl.conf

fs.file-max = 76724200

kernel.sem = 10000 10240000 10000 1024

kernel.shmmni = 4096

kernel.shmall = 253702

kernel.shmmax = 1039163392

net.ipv4.ip_local_port_range = 9000 65500

net.core.rmem_default = 262144

net.core.wmem_default = 262144

net.core.rmem_max = 4194304

net.core.wmem_max = 1048576

fs.aio-max-nr = 40960000

vm.dirty_ratio=20

vm.dirty_background_ratio=3

vm.dirty_writeback_centisecs=100

vm.dirty_expire_centisecs=500

vm.swappiness=10

vm.min_free_kbytes=524288

vm.swappiness=0

vm.overcommit_memory=2

vm.overcommit_ratio=75

net.ipv4.ip_local_port_range = 10000 65535

sysctl -p

3、Linux资源限制调整

vim /etc/security/limits.conf

postgres soft nofile 1048576

postgres hard nofile 1048576

postgres soft nproc 131072

postgres hard nproc 131072

postgres soft stack 10240

postgres hard stack 32768

postgres soft core 6291456

postgres hard core 6291456

4、创建用户和组

如果存在postgre用户,先删除

#userdel -r postgres

#groupdel dba

建议指定uig和gid

groupadd dba -g 2000

useradd postgres -g 2000 -u 2000

id postgres

修改密码

echo "postgres"|passwd --stdin postgres

5、创建相应目录

mkdir /soft

mkdir -p /opt/pg12

mkdir -p /opt/pgdata

mkdir -p /opt/pgwal

mkdir -p /opt/pgarchive

chown -R postgres:dba /soft /opt

chmod 0700 /opt/pgdata /opt/pgwal /opt/pgarchive

6、拷贝安装介质

cp /mnt/hgfs/share/PG/postgresql-12.1.tar.gz /soft

7、编译安装PG

su - postgres

cd /soft

解压

tar -zxvf postgresql-12.1.tar.gz

编译安装

cd postgresql-12.1

./configure --prefix=/opt/pg12 --with-pgport=5432

使用 gmake 或者 gmake world

gmake world

使用 gmake install 或者 gmake install-world 进行安装

gmake install-world #包含扩展包和文档

查看版本

/opt/pg12/bin/postgres --version

设置软链接

cd /opt

ln -s /opt/pg12 /opt/pgsql

8、环境变量配置

vi ~/.bash_profile

export PGPORT=5432

export PGUSER=postgres

export PGHOME=/opt/pgsql

export PGDATA=/opt/pgdata

export PATH=$PGHOME/bin:$PATH

source ~/.bash_profile

三、安装etcd

1、配置网络yum源

su -

cd /etc/yum.repos.d

wget http://mirrors.163.com/.help/CentOS7-Base-163.repo

cd

2、安装etcd

yum install -y gcc python-devel epel-release

yum install -y etcd

3、修改etcd配置文件

vi /etc/etcd/etcd.conf

node1配置

ETCD_DATA_DIR="/var/lib/etcd/default.etcd"

ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380

ETCD_LISTEN_CLIENT_URLS=http://localhost:2379,http://192.168.1.61:2379

ETCD_NAME="etcd0"

ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.1.61:2380"

ETCD_ADVERTISE_CLIENT_URLS=http://192.168.1.61:2379

ETCD_INITIAL_CLUSTER="etcd0=http://192.168.1.61:2380,etcd1=http://192.168.1.62:2380,etcd2=http://192.168.1.63:2380"

ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"

ETCD_INITIAL_CLUSTER_STATE="new"

node2配置

ETCD_DATA_DIR="/var/lib/etcd/default.etcd"

ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380

ETCD_LISTEN_CLIENT_URLS=http://localhost:2379,http://192.168.1.62:2379

ETCD_NAME="etcd1"

ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.1.62:2380"

ETCD_ADVERTISE_CLIENT_URLS=http://192.168.1.62:2379

ETCD_INITIAL_CLUSTER="etcd0=http://192.168.1.61:2380,etcd1=http://192.168.1.62:2380,etcd2=http://192.168.1.63:2380"

ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"

ETCD_INITIAL_CLUSTER_STATE="new"

node3配置

ETCD_DATA_DIR="/var/lib/etcd/default.etcd"

ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380

ETCD_LISTEN_CLIENT_URLS=http://localhost:2379,http://192.168.1.63:2379

ETCD_NAME="etcd2"

ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.1.63:2380"

ETCD_ADVERTISE_CLIENT_URLS=http://192.168.1.63:2379

ETCD_INITIAL_CLUSTER="etcd0=http://192.168.1.61:2380,etcd1=http://192.168.1.62:2380,etcd2=http://192.168.1.63:2380"

ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"

ETCD_INITIAL_CLUSTER_STATE="new"

4、启动ectd

启动ectd

systemctl start etcd

设置ectd自启动

systemctl enable etcd

查看ectd状态信息

systemctl status etcd

5、验证

etcdctl --endpoints=http://192.168.1.61:2379,http://192.168.1.62:2379,http://192.168.1.63:2379 member list

etcdctl --endpoints=http://192.168.1.61:2379,http://192.168.1.62:2379,http://192.168.1.63:2379 cluster-health

四、安装python3

1、安装依赖包

yum install -y openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel libffi-devel

2、拷贝安装介质

cp /mnt/hgfs/share/python/3.9.2/Python-3.9.2.tgz ./

3、编译安装python3.9.2

tar -zxvf Python-3.9.2.tgz

mv Python-3.9.2 /usr/local

cd /usr/local/Python-3.9.2/

./configure

make

make install

ln -s /usr/local/bin/python3.9 /usr/bin/python3

which python3

五、安装Partoni

1、安装依赖包

yum install -y gcc epel-release

yum install -y python-pip python-psycopg2 python-devel

pip3 install --upgrade pip

pip3 install --upgrade setuptools

pip3 install psycopg2-binary

pip3 install patroni[etcd]

pip3 install urllib3==1.26.15

pip3 list

2、配置patroni服务

创建Partoni service配置文件

vi /etc/systemd/system/patroni.service

[Unit]

Description=Runners to orchestrate a high-availability PostgreSQL

After=syslog.target network.target

[Service]

Type=simple

User=postgres

Group=dba

#StandardOutput=syslog

ExecStart=/usr/local/bin/patroni /etc/patroni.yml

ExecReload=/usr/bin/kill -s HUP $MAINPID

KillMode=process

TimeoutSec=30

Restart=no

[Install]

WantedBy=multi-user.target

3、编辑patroni.yml文件

创建node1的Patroni配置文件/etc/patroni.yml

vi /etc/patroni.yml

scope: pgsql

namespace: /service/

name: pg1

restapi:

listen: 0.0.0.0:8008

connect_address: 192.168.1.61:8008

etcd:

host: 192.168.1.61:2379

bootstrap:

dcs:

ttl: 30

loop_wait: 10

retry_timeout: 10

maximum_lag_on_failover: 1048576

master_start_timeout: 300

synchronous_mode: false

postgresql:

use_pg_rewind: true

use_slots: true

parameters:

listen_addresses: "0.0.0.0"

port: 5432

wal_level: logical

hot_standby: "on"

wal_keep_segments: 100

max_wal_senders: 10

max_replication_slots: 10

wal_log_hints: "on"

initdb:

- encoding: UTF8

- locale: C

- lc-ctype: zh_CN.UTF-8

- data-checksums

pg_hba:

- host replication repl 0.0.0.0/0 md5

- host all all 0.0.0.0/0 md5

postgresql:

listen: 192.168.1.61:5432

connect_address: 192.168.1.61:5432

data_dir: /opt/pgdata

bin_dir: /opt/pgsql/bin

authentication:

replication:

username: repl

password: "123456"

superuser:

username: postgres

password: "123456"

basebackup:

max-rate: 100M

checkpoint: fast

tags:

nofailover: false

noloadbalance: false

clonefrom: false

nosync: false

拷贝

scp /etc/patroni.yml 192.168.1.62:/etc/

scp /etc/patroni.yml 192.168.1.63:/etc/

注意事项:

1、yml配置文件个格式,图中使用空格缩进标识层次关系,注意不要使用tab,否则服务可能无法启动:

2、在node2和node3修改

vi /etc/patroni.yml

• 其他PG节点的patroni.yml需要相应修改下面4个参数

• name

node1~node3分别设置pg1~pg3

• restapi.connect_address

根据各自节点IP设置

• postgresql.listen:

根据各自节点IP设置

• postgresql.connect_address

根据各自节点IP设置

4、postgres用户sudo权限配置

# postgres拥有免密的sudoer权限

echo 'postgres ALL=(ALL) NOPASSWD: ALL'> /etc/sudoers.d/postgres

5、启动Patroni

初次启动Patroni时,Patroni会初始创建PostgreSQL实例和用户

systemctl start patroni

systemctl status patroni

6、集群信息查看

patronictl -c /etc/patroni.yml list

监听信息查看

检查postgres和repl用户是否自动成功创建

su – postgres

psql

\du

\l

7、Patroni 常用命令

• patronictl -c /etc/patroni.yml list

• patronictl -c /etc/patroni.yml show-config

• patronictl -c /etc/patroni.yml switchover

• patronictl -c /etc/patroni.yml failover

• patronictl edit-config -p 'max_connections=300'

最后修改时间:2023-11-27 10:19:36
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论