柚子快報(bào)邀請(qǐng)碼778899分享:postgresql 讀寫分離
柚子快報(bào)邀請(qǐng)碼778899分享:postgresql 讀寫分離
一、postgresql數(shù)據(jù)庫(kù)安裝
1.數(shù)據(jù)庫(kù)安裝包下載(本次使用12.2版本)
Index of /pub/source/v12.2/
2.數(shù)據(jù)庫(kù)安裝包依賴下載安裝
yum install -y perl-ExtUtils-Embed readline-devel zlib-devel pam-devel libxml2-devel libxslt-devel openldap-devel python-devel gcc-c++ openssl-devel cmake
3.創(chuàng)建pgsql文件夾,將下載的數(shù)據(jù)庫(kù)安裝包移動(dòng)到目錄中
#創(chuàng)建文件夾目錄
mkdir /opt/module/pgsql
#文件上傳通過(guò)命令 rz 選擇上傳文件
#文件上傳通過(guò)ftp
#直接將數(shù)據(jù)庫(kù)安裝包拖動(dòng)到對(duì)應(yīng)目錄中
4.解壓數(shù)據(jù)庫(kù)壓縮包
tar -zxvf postgresql-12.2.tar.gz
5.編譯postgres源碼
#進(jìn)入解壓后文件目錄
cd /opt/module/pgsql/postgresql-12.2
#設(shè)置配置文件
./configure --prefix=/opt/module/pgsql/postgresql
6.編譯安裝
make
make install
二、數(shù)據(jù)庫(kù)配置
1.創(chuàng)建用戶組postgres并創(chuàng)建用戶postgres
#添加用戶組
groupadd postgres
#添加用戶并設(shè)置密碼
useradd -g postgres postgres
#查詢用戶
id postgres
2.創(chuàng)建postgres數(shù)據(jù)庫(kù)的數(shù)據(jù)主目錄并修改文件所有者
#進(jìn)入數(shù)據(jù)庫(kù)配置主目錄
cd /opt/module/pgsql/
#創(chuàng)建數(shù)據(jù)主目錄
mkdir data
#修改文件所有者
chown postgres:postgres data
3.配置環(huán)境變量
#打開(kāi)配置文件
vi /etc/profile
#添加以下內(nèi)容
export PGHOME=/opt/module/pgsql/postgresql?
export PGDATA=/opt/module/pgsql/data
export PGPORT=5432
export PATH=$PATH:$PGHOME/bin
#保存并退出配置文件,執(zhí)行下方命令刷新配置文件使其生效
source /etc/profile
4.初始化數(shù)據(jù)庫(kù)
#切換到postgres用戶
su?-?postgres
#初始化數(shù)據(jù)庫(kù)
initdb
#切換到數(shù)據(jù)庫(kù)數(shù)據(jù)主目錄
cd /opt/module/pgsql/data
5.配置服務(wù)
#修改/opt/module/pgsql/data目錄下的兩個(gè)文件
#postgresql.conf ? 配置PostgreSQL數(shù)據(jù)庫(kù)服務(wù)器的相應(yīng)的參數(shù) #pg_hba.conf ? ? ? 配置對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)權(quán)限
vi postgresql.conf
#參數(shù)“l(fā)isten_addresses”表示監(jiān)聽(tīng)的IP地址,默認(rèn)是在localhost處監(jiān)聽(tīng), #也就是127.0.0.1的ip地址上監(jiān)聽(tīng),
#只接受來(lái)自本機(jī)localhost的連接請(qǐng)求,
#這會(huì)讓遠(yuǎn)程的主機(jī)無(wú)法登陸這臺(tái)數(shù)據(jù)庫(kù),
#如果想從其他的機(jī)器上登陸這臺(tái)數(shù)據(jù)庫(kù),
#需要把監(jiān)聽(tīng)地址改為實(shí)際網(wǎng)絡(luò)的地址,
#一種簡(jiǎn)單的方法是,將行開(kāi)頭的#去掉,把這個(gè)地址改為*,
#表示在本地的所有地址上監(jiān)聽(tīng)。
listen_addresses = '*'
vi pg_hba.conf?
#添加以下內(nèi)容,這樣局域網(wǎng)的人才能訪問(wèn)
# IPv4 remote address connections:
host ???all ????????????all ????????????0.0.0.0/0 ??????????????trust?
6.設(shè)置開(kāi)機(jī)自啟動(dòng)
6.1.進(jìn)入腳本目錄
cd /opt/module/pgsql/postgresql-12.2/contrib/start-scripts
6.2.切換為root用戶,修改linux文件屬性,添加X(jué)屬性
chmod a+x linux
6.3.復(fù)制linux文件到/etc/init.d目錄下,更名為postgresql
cp linux /etc/init.d/postgresql
6.4.修改/etc/init.d/postgresql文件的兩個(gè)變量
prefix設(shè)置為postgresql的安裝路徑:/opt/module/pgsql/postgresql
PGDATA設(shè)置為postgresql的數(shù)據(jù)目錄路徑:/opt/module/pgsql/data
6.5.設(shè)置postgresql服務(wù)開(kāi)機(jī)自啟動(dòng)
chkconfig --add postgresql
6.6、查看開(kāi)機(jī)自啟動(dòng)服務(wù)設(shè)置成功
chkconfig
請(qǐng)與以下信息進(jìn)行對(duì)比:
postgresql ? ? ? ? 0:關(guān)閉 ? ?1:關(guān)閉 ? ?2:啟用 ? ?3:啟用 ? ?4:啟用 ? ?5:啟用 ? ?6:關(guān)閉
6.7.開(kāi)放5432端口 (若需開(kāi)啟防火墻)
firewall-cmd --zone=public --add-port=5432/tcp --permanent
6.8.重啟防火墻
firewall-cmd --reload
6.9.查看防火墻開(kāi)放端口
firewall-cmd --zone=public --list-ports
數(shù)據(jù)庫(kù)讀寫分離
(一)前期準(zhǔn)備工作
1.主機(jī)選擇
192.168.70.52?master
192.168.70.40?slave
2.修改主機(jī)名稱
#將主備庫(kù)的主機(jī)名修改為master,slave(可以自定義)修改如下文件的主機(jī)名
主從庫(kù)都需要配置
[postgres@master ~]$ vim /etc/hosts
192.168.70.52 master ????#主機(jī)中的配置
192.168.70.40 slave ?????#從機(jī)中的配置
主庫(kù)機(jī)器配置
[root@master ~]$ vim /etc/hostname
master
從庫(kù)機(jī)器配置
[root@slave ~]# vim /etc/hostname
slave
#查看主機(jī)名
hostname ; hostname -i
3.ssh互信免密操作
3.1自動(dòng)方式
(1) 創(chuàng)建服務(wù)器公鑰以及密鑰(主從都需要)
#執(zhí)行命令生成id_rsa.pub文件
ssh-keygen -t rsa -P ''
(2) 發(fā)送公鑰至登陸服務(wù)器?(若以下命令執(zhí)行失敗,請(qǐng)按照3.2手動(dòng)方式進(jìn)行配置)
#執(zhí)行ssh-copy-id命令將/root/.ssh/目錄下的id_rsa.pub公鑰文件發(fā)送到登陸服務(wù)器中
ssh-copy-id -i?/root/.ssh/id_rsa.pub root@192.168.70.40??#主機(jī)操作
ssh-copy-id -i?/root/.ssh/id_rsa.pub root@192.168.70.52 ?#從機(jī)操作
(3) 測(cè)試免密登錄
ssh root@192.168.70.40?#主機(jī)操作
ssh root@192.168.70.52 #從機(jī)操作
3.2手動(dòng)方式
在主機(jī)和從機(jī)上分別創(chuàng)建服務(wù)器公鑰以及密鑰
#執(zhí)行命令生成id_rsa.pub文件
ssh-keygen -t rsa -P ''
在主機(jī)和從機(jī)上分別創(chuàng)建authorized_keys文件
#進(jìn)入 /root/.ssh目錄
cd /root/.ssh
#執(zhí)行命令創(chuàng)建文件 authorized_keys
touch authorized_keys
主從機(jī)交換公鑰信息
將主機(jī)的id_rsa.pub文件內(nèi)容附加到從機(jī)的authorized_keys
將從機(jī)的id_rsa.pub文件內(nèi)容附加到主機(jī)的authorized_keys
測(cè)試免密登錄
ssh root@192.168.70.40?#主機(jī)操作
ssh root@192.168.70.52 #從機(jī)操作
(二)master主機(jī)操作
1、修改配置文件
#設(shè)置好用于復(fù)制的訪問(wèn)權(quán)限非常重要,這樣只有受信的用戶可以讀取 WAL 流,
#因?yàn)楹苋菀讖?WAL 流中抽取出需要特權(quán)才能訪問(wèn)的信息。
#后備服務(wù)器必須作為一個(gè)超級(jí)用戶或一個(gè)具有REPLICATION特權(quán)的賬戶向主服務(wù)器認(rèn)證。
#推薦為復(fù)制創(chuàng)建一個(gè)專用的具有REPLICATION和LOGIN特權(quán)的用戶賬戶。
#雖然REPLICATION特權(quán)給出了非常高的權(quán)限,但它不允許用戶修改主系統(tǒng)上的任何數(shù)據(jù),
#而SUPERUSER特權(quán)則可以。
cd /opt/module/pgsql/data
vim pg_hba.conf
#向文件中添加配置,如下:
host ???replication ????all ????????????192.168.70.52/32 ??????trust
#修改配置postgresql.conf以下幾處 內(nèi)存大小按需求更改
vi postgresql.conf
#主要修改
listen_addresses = '*'
port = 5432
wal_level = hot_standby
wal_log_hints = on
max_wal_senders = 10
hot_standby = on
logging_collector = on
log_directory = 'pg_log'
archive_mode =on
archive_command ='DATE=`date +%Y%m%d`;DIR="/opt/module/pgsql/postgresql/arch/$DATE";(test -d $DIR || mkdir -p $DIR)&& cp %p $DIR/%f'
2、創(chuàng)建歸檔路徑(路徑與上方archive_command中DIR對(duì)應(yīng))
mkdir ?-p /opt/module/pgsql/postgresql/arch/
chown -R postgres:postgres /opt/module/pgsql/postgresql/arch/
3、主庫(kù)中創(chuàng)建流復(fù)制用戶和pgpool用戶
#這里的流復(fù)制用戶要和上面pg_hba.conf里面寫的相同。
#PGPool用戶是在之后用到的,在這里先創(chuàng)建了
#進(jìn)入數(shù)據(jù)庫(kù)
psql postgres
CREATE USER stream_replication replication LOGIN CONNECTION LIMIT 5 ENCRYPTED PASSWORD '1qaz@WSX3edc';
CREATE USER pgpool replication LOGIN CONNECTION LIMIT 5 ENCRYPTED PASSWORD '1qaz@WSX3edc';
4、重啟數(shù)據(jù)庫(kù)
#切換到postgres用戶
su postgres
#重啟數(shù)據(jù)庫(kù)服務(wù)
pg_ctl -D ?/opt/module/pgsql/data/?restart
(三)slave?從機(jī)操作
1、基礎(chǔ)備份復(fù)制到備份服務(wù)器
#用戶切換
su postgres
#停止數(shù)據(jù)庫(kù)服務(wù)
pg_ctl ?-D /opt/module/pgsql/data/ ?stop
#刪除從庫(kù)數(shù)據(jù)文件
rm -rf /opt/module/pgsql/data # 如果沒(méi)有重要數(shù)據(jù)可操作,主要為同步主庫(kù)路徑
#如果postgres用戶沒(méi)有新建文件夾權(quán)限則需要用root用戶創(chuàng)建一個(gè)新的data文件夾
mkdir /opt/module/pgsql/data
#修改所屬組
chown -R postgres:postgres?/opt/module/pgsql
#從主庫(kù)拉取數(shù)據(jù)文件
pg_basebackup -h 192.168.70.52?-U stream_replication ?-F p ?-P -R -D /opt/module/pgsql/data
2、配置文件修改
su postgres
vi postgresql.conf
#修改以下內(nèi)容,主庫(kù)如果已經(jīng)自選修改過(guò)以后無(wú)需修改
hot_standby = on
3、主庫(kù)信息查看
#postgresql.auto.conf里面存放了主庫(kù)連接信息
vi /opt/module/pgsql/data/postgresql.auto.conf
4、啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)
#啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)
pg_ctl -D /opt/module/pgsql/data/ start
可能遇到的錯(cuò)誤:
#報(bào)錯(cuò)內(nèi)容
waiting for server to start....2023-02-01 09:54:36.742 CST [6406] FATAL: ?data directory "/opt/module/pgsql/data" has invalid permissions
2023-02-01 09:54:36.742 CST [6406] DETAIL: ?Permissions should be u=rwx (0700) or u=rwx,g=rx (0750).
?stopped waiting
pg_ctl: could not start server
Examine the log output.
#解決方案
#修改權(quán)限,再啟動(dòng)即可
chmod 0750 /opt/module/pgsql/data/
pg_ctl -D /opt/module/pgsql/data/ start
5、流復(fù)制信息查看
#查看流復(fù)制的信息可以使用主庫(kù)上的視圖
select pid,state,client_addr,sync_priority,sync_state from pg_stat_replication;
柚子快報(bào)邀請(qǐng)碼778899分享:postgresql 讀寫分離
相關(guān)文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。