CentOS 安裝Postgres集群(pgpool未配置成功,請勿參考)


框架環境

192.168.100.102                        --虛擬ip
172.18.5.23                        --主服務器
172.18.5.41                        -- 從服務器

 

安裝PostgreSQL-主從結構中使用 

下載安裝

  網頁端地址:https://yum.postgresql.org/rpmchart/ 可以查看各個版本的pgsql,點擊12版本進去,查看需要安裝的內容:

  

  點擊:PostgreSQL Database Server 12 PGDG 在此頁面選擇要下載的內容,點擊進入二層菜單,下載特定版本的安裝包,pgsql安裝需要下載的安裝包,如下:  

postgresql12-libs-12.4-1PGDG.rhel7.x86_64.rpm
postgresql12-contrib-12.4-1PGDG.rhel7.x86_64
postgresql12-12.4-1PGDG.rhel7.x86_64.rpm
postgresql12-server-12.4-1PGDG.rhel7.x86_64.rpm

   安裝  

yum install -y postgresql12-libs-12.4-1PGDG.rhel7.x86_64.rpm
yum install -y postgresql12-12.4-1PGDG.rhel7.x86_64.rpm
yum install -y postgresql12-server-12.4-1PGDG.rhel7.x86_64.rpm
yum install -y postgresql12-contrib-12.4-1PGDG.rhel7.x86_64.rpm

   安裝出現下面的問題的時候:

  

      缺少依賴性 ,聯網的情況下可以用:  yum install krb5-server 等進行安裝。未聯網的情況下,請參考下面的文章: 

  具體參考:離線安裝:https://www.cnblogs.com/whitebai/p/12128037.html  在線安裝:https://www.cnblogs.com/whitebai/p/12122240.html  安裝依賴:https://www.cnblogs.com/whitebai/p/12128078.html  

創建目錄

mkdir -p /app/pgsql/data && chown postgres:postgres /app/pgsql/data;                -- 數據目錄
mkdir -p /app/pgsql/pg_archive && chown postgres:postgres /app/pgsql/pg_archive;    --用於歸檔的目錄(主從復制時用)
cd /app/pgsql && chmod 700 data;                                                    --分配擁有者讀寫權限
cd /app/pgsql && chmod 700 pg_archive;                                              --分配擁有者讀寫權限

切換用戶 

su - postgres                                             --切換回postgres 用戶
/usr/pgsql-12/bin/initdb -D /app/pgsql/data/              --初始化數據庫

修改數據庫路徑

   su 切換為root用戶,以root身份 

vim /usr/lib/systemd/system/postgresql-12.service          --修改Service
Environment=PGDATA=/app/pgsql/data/                        --修改數據庫路徑 

自動啟動

   su 切換為root用戶,以root身份 

systemctl enable postgresql-12 
systemctl start postgresql-12 

  登錄postgresql並設置密碼,postgresql在安裝時默認添加用戶postgres 

su - postgres 
psql 
ALTER USER postgres WITH PASSWORD '123456'; 
\q 

允許遠程登錄

修改pg_hba 指定數據庫路徑時:   

vi /app/pgsql/data/pg_hba.conf 
# IPv4 local connections: 下面添加
host all all 0.0.0.0/0 md5  

修改postgresql 指定路徑時:修改時候去掉前面的# 注釋 

vi /app/pgsql/data/postgresql.conf 
listen_addresses = '*'    

重啟服務  

systemctl restart postgresql-12      
netstat -ltpn | grep 5432             --查看狀態 ,可以不用執行

允許通過防火牆

firewall-cmd --zone=public --add-port=5432/tcp --permanent
firewall-cmd --reload

 

主從配置  

主服務器

添加pg用於同步的用戶名

su - postgres
psql
CREATE ROLE replica login replication encrypted password '123456';          -創建具有復制流操作的用戶:replica

修改配置文件:pg_hba.conf,信任從服務器訪問

vi /app/pgsql/data/pg_hba.conf   
#文件尾部添加信任的從服務器
# replica為postgres用戶
# XX.XX.XX.XX為從節點的完整IP,如果為網段配置就不是32了,md5為允許密碼驗證,trust為免密
# TYPE DATABASE USER ADDRESS METHOD
host replication replica 172.18.5.41/32 trust

  

、允許10.1.1.0~10.1.1.255網段登錄數據庫:

1
host    all    all    10.1.1.0/24    md5

 

 

 

2、修改配置文件:postgresql.conf

vi /app/pgsql/data/postgresql.conf

# 新增或修改下列屬性設置(使用命令“/”來查找,否則眼花)

listen_addresses = '*' # (修改)監聽所有IP

max_connections = 100 # (修改)最大連接數,據說從機需要大於或等於該值

 

archive_mode = on # (修改)開啟歸檔

archive_command = 'test ! -f /app/pgsql/pg_archive/%f && cp %p /app/pgsql/pg_archive/%f'

 

# 9.6開始沒有hot_standby(熱備模式)
wal_level = replica
#最多有2個流復制連接
max_wal_senders = 2   
wal_keep_segments = 16  
#流復制超時時間
wal_sender_timeout = 60s
# 最大連接數,據說從機需要大於或等於該值
max_connections = 100  

3、重啟服務

systemctl restart postgresql-12

 

4、在從節點上驗證訪問

psql -h 172.18.5.23 -U postgres

FATAL: no pg_hba.conf entry for host “XXX” user “”xxx“”

# 如果發現不知道密碼或密碼不正確,修改postgres用戶密碼(數據庫)

ALTER USER postgres WITH PASSWORD '你的密碼';

 

三、從服務器

1、停止服務

systemctl stop postgresql-12

 

2、切換用戶(一定要)

su - postgres

 

3、清空數據文件夾(是這樣的,沒錯)

rm -rf /app/pgsql/data/*

cd /app/pgsql/data

 

4、從主節點獲取數據

# 使用replica用戶,從主節點獲取備份數據(這條命令建議照抄,有興趣在深究內部參數)

pg_basebackup -h 172.18.5.23 -p 5432 -U replica -Fp -Xs -Pv -R -D /app/pgsql/data

 

5、編輯standby.signal文件(就在數據文件夾內,以此標識從節點,當從節點提升為主節點后會自動刪除)

# 添加

standby_mode = 'on'

 

6、修改postgresql.conf文件

vi /app/pgsql/data/postgresql.conf

primary_conninfo = 'host=172.18.5.23 port=5432 user=replica password=123456'

recovery_target_timeline = latest # 默認

max_connections = 120 # 大於等於主節點,正式環境應當重新考慮此值的大小

hot_standby = on

max_standby_streaming_delay = 30s

wal_receiver_status_interval = 10s

hot_standby_feedback = on

 

7、重新啟動從節點

systemctl start postgresql-12

 

四、驗證主從

方法一:

登錄主節點數據庫執行如下命令

su postgres

psql

select client_addr,sync_state from pg_stat_replication;

結果如下:

postgres=# select client_addr,sync_state from pg_stat_replication;

client_addr | sync_state

---------------+------------

172.18.5.41 | async

(1 row)

說明104服務器是從節點,在接收流,而且是異步流復制

 

方法二:

在主節點與從節點分別執行如下命令

ps -ef | grep postgres

可以看到主節點有wal receiver進程

postgres 2638 2606 0 17:12 ? 00:00:00 postgres: walsender replica 172.18.5.41(51504) streaming 0/7000660

可以看到從節點有wal receiver進程

postgres 1960 1953 0 17:12 ? 00:00:02 postgres: walreceiver streaming 0/7000660

 

 

五、主備切換(主庫出現故障時)

當主庫出現故障時,我們需要將備庫提升為主庫進行讀寫操作。

0、在pg12之前我們一般使用2種方式:

1)pg_ctl 方式: 在備庫主機執行 pg_ctl promote shell 腳本

2)觸發器文件方式: 備庫配置 recovery.conf 文件的 trigger_file 參數,之后在備庫主機上創建觸發器文件

 

1、pg12開始新增了一個pg_promote()函數,讓我們可以通過SQL命令激活備庫。

pg_promote()語法:

pg_promote(wait boolean DEFAULT true, wait_seconds integer DEFAULT 60)

兩個參數:

wait: 表示是否等待備庫的 promotion 完成或者 wait_seconds 秒之后返回成功,默認值為 true。

wait_seconds: 等待時間,單位秒,默認 60

 

2、切換舉例:

1)主庫操作:關閉主庫,模擬主庫故障:

systemctl stop postgresql-12

2)備庫操作:激活備庫:

su postgres

psql

select pg_promote(true,60);

 

4、驗證:

/usr/pgsql-12/bin/pg_controldata /app/pgsql/data

主備庫英文顯示如下:

Database cluster state: in production

Database cluster state: in archive recovery

主備庫中文顯示如下:

數據庫簇狀態: 在運行中

數據庫簇狀態: 正在歸檔恢復

 

 

六、原主庫修復后降為備庫(其實大部分操作與建立備庫時一樣,只是修改幾個IP地址)

1、新主庫(104):

# vi /app/pgsql/data/pg_hba.conf

host replication replica 172.18.5.23/32 trust

# systemctl restart postgresql-12

 

2、新備庫(103)

# systemctl stop postgresql-12

# su - postgres

# rm -rf /app/pgsql/data/*

# cd /app/pgsql/data

# pg_basebackup -h 172.18.5.41 -p 5432 -U replica -Fp -Xs -Pv -R -D /app/pgsql/data

# vi standby.signal

# 添加

standby_mode = 'on'

 

vi /app/pgsql/data/postgresql.conf

primary_conninfo = 'host=172.18.5.41 port=5432 user=replica password=123456'

 

# systemctl start postgresql-12

 

七、再次將老主庫切回主庫

1、當前備庫:

> 停止服務

> 刪除“/app/pgsql/data/standby.signal”文件

> 啟動服務

2、當前主庫:

> 停止服務

> 以“postgres”用戶創建“/app/pgsql/data/standby.signal”文件,添加內容:standby_mode = 'on'

> 啟動服務

 https://blog.csdn.net/luxingjyp/article/details/104637798     https://www.cnblogs.com/VicLiu/p/12993542.html

pgPool 負載均衡搭建(搭建未完成,請勿參考)

服務器環境

 

172.18.5.23   master    
172.18.5.41   slave 
172.18.5.42   vip        -虛擬ip

 

.host 添加配置

vi  /etc/hosts

/etc/init.d/network restart --修改完成后刷新

 

 

 使用yum下載rpm包安裝pgpool-II,注意下載的安裝包須與PG的版本一致。安裝包目錄詳見https://www.pgpool.net/yum/rpms/4.1/redhat/rhel-8-x86_64/

yum install https://www.pgpool.net/yum/rpms/4.1/redhat/rhel-7-x86_64/pgpool-II-release-4.1-2.noarch.rpm
yum install pgpool-II-pg12
yum install pgpool-II-pg12-debuginfo
yum install pgpool-II-pg12-devel
yum install pgpool-II-pg12-extensions

服務開機啟動  

systemctl enable pgpool.service

 

啟動停止服務

systemctl start pgpool.service 
systemctl stop pgpool.service

 

目錄/相關命令授權

因為pgpool-ii 配置中會以 postgres 用戶執行一些系統權限命令, 需要使用設置普通用戶授權:

 

chmod u+x /usr/sbin/ip
chmod u+s /usr/sbin/arping
chmod u+s /sbin/ip
chmod u+s /sbin/ifconfig

 

配置中相關的日志目錄,pid 目錄權限:

 

chown -R postgres.postgres /etc/pgpool-II       --給postgres 用戶權限
mkdir /var/run/pgpool/                             
chown postgres.postgres /var/run/pgpool/
mkdir -p /var/log/pgpool/
touch /var/log/pgpool/pgpool_status
chown -R postgres.postgres /var/log/pgpool/

  

配置程序運行的用戶和組為 postgres  一般10以上,postgres 就在postgres 組下面,沒有的話,可以搜索如何創建組

 修改pgpool運行用戶和組為postgres

vi /usr/lib/systemd/system/pgpool.service            --10如果采取默認的基本不需要修改 

User=postgres

Group=postgres

 服務器SSH免密設置

# 主機/備機操作
su - postgres
ssh-keygen
# 一直enter

 

 繼續在postgres用戶下執行

ssh-copy-id -i .ssh/id_rsa.pub master
ssh-copy-id -i .ssh/id_rsa.pub slave

如果提示輸入postgres密碼的時候,請輸入postgres  用戶的密碼(非postgres數據庫的密碼),如果沒有設置,可以切換回root用戶 sudo -u postgres passwd設置密碼

 

 

 以上操作主機、備機都要執行

 pgpool-ii 相關配置(/etc/pgpool-II/)

pool_hba.conf (主備相同)

 pool_hba.conf 是配置用戶鏈接時的驗證策略, 和postgresqlpg_hba.conf保持一致,要么都是trust,要么都是md5驗證方式,這里采用了md5驗證方式如下設置

su - postgres
cd /etc/pgpool-II/
vim pool_hba.conf

編輯內容如下(這里和postgressql設置一樣, trust/md5保持一致)

 

配置pg_hba.conf,認證方式保持一致

  修改 vi  /app/pgsql/data/pg_hba.conf   與上面保持一致

 

 非必要可選步驟,為了集群可擴展性,可以將復制的認證條件放寬

 

pcp.conf / pool_passwd (主備相同)

這個文件是pgpool管理器自己的用戶名和密碼,用於管理集群的.

 在  /etc/pgpool-II/ 目錄下

pg_md5 postgres
e8a48653851e28c69d0506508fb27fc5
vi pcp.conf
--添加
#USERID:MD5PASSWD
postgres:e8a48653851e28c69d0506508fb27fc5

   

pg_md5 -p -m -u postgres pool_passwd
#數據庫登錄用戶是postgres,這里輸入登錄密碼,不能出錯
#輸入密碼后,在/etc/pgpoll-II目錄下會生成一個pool_passwd文件

  

 pgpool.conf (重點)

這里我們配置主節點的,然后備節點直接拷貝過去

 

su - postgres
cd  /etc/pgpool-II/
touch failover_stream.sh
chmod u+x failover_stream.sh
vim  failover_stream.sh

-- 鍵入一下內容

#! /bin/sh
# Failover command for streaming replication.
# Arguments: $1: new master hostname.

new_master=$1
trigger_command="/usr/pgsql-12/bin/pg_ctl promote -D /app/pgsql/data"

# Prompte standby database.
/usr/bin/ssh -T $new_master $trigger_command

exit 0;

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM