本文适用于通过互联网联网的方式进行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'




