PostgreSQL 流復制+高可用


QA PgPool-II 同步 Postgresql

X1 服務器准備

	192.168.59.121	PostgreSQL10
	192.168.59.120	PGPool-II 3.7 

X2 安裝PostgreSQL

	#M1 下載
	$ https://yum.postgresql.org/
	$ yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm -y 
	#M2 安裝
	$ yum list | grep postgresql
	$ yum install postgresql10-contrib postgresql10-server -y
	#M3 初始化數據庫
	$ /usr/pgsql-10/bin/postgresql-10-setup initdb
	** /var/lib/pgsql/10/data /** 數據目錄 /
	** /usr/pgsql-10/bin      /** 命令目錄 /
	#M4 啟動數據庫並設置開機啟動
	$ systemctl start  postgresql-10.service
	$ systemctl enable postgresql-10.service
	#M5 登錄postgresql並設置密碼---postgresql在安裝時默認添加用戶postgres
	$ su - postgres
	$ psql
	$ ALTER USER postgres WITH PASSWORD 'hotcomm123';
	$ \q
	#M6 支持遠程登錄-修改配置文件[pg_hba.conf,postgresql.conf]
	&& pg_hba.conf
		@在文件末尾添加下面記錄,並且將所有 peer|ident 修改為md5
		host    all             all             0.0.0.0/0               md5
	&& postgresql.conf
		@ listen_addresses = '*'
		@ port = 5432

X3 安裝PgPool-II

	##M1 安裝
	$ rpm -ivh http://www.pgpool.net/yum/rpms/3.7/redhat/rhel-7-x86_64/pgpool-II-release-3.7-1.noarch.rpm
	$ yum -y install pgpool-II-pg95
	$ yum -y install pgpool-II-pg95-debuginfo
	$ yum -y install pgpool-II-pg95-devel
	$ yum -y install pgpool-II-pg95-extensions
	## 配置文件路徑
	/etc/pgpool-II/pgpool.conf	
	##M2 修改配置文件 pgpool.conf
	@ listen_addresses = '*'
	@ port = 9999		
	@ backend_hostname0 = '10.10.10.104' #主機ip
	@ backend_port0 = 5432
	@ backend_weight0 = 1 #loadbalance不開啟,無效
	@ backend_data_directory0 = '/var/lib/postgresql/9.5/main'
	@ backend_flag0 = 'ALLOW_TO_FAILOVER'
	@ enable_pool_hba = on 
	@ pool_passwd = 'pool_passwd'
	##M3 修改配置文件pool_hba.conf
	local   all         all                               md5
	# IPv4 local connections:
	host    all         all         127.0.0.1/32          md5
	host    all         all         ::1/128               md5
	host	all			all			0.0.0.0/0 			  md5
	##M4 啟用配置文件pool_passwd 密碼:hotcomm123 客戶端連接pgpool
	$ pg_md5 -m -p -u postgres pool_passwd ## 配置的賬號密碼將直接用於連接PostgreSQL 數據的賬號密碼
	$ pgpool -n 
	$ psql -h 192.168.59.120 -p 9999 -U postgres  

QB PostgreSQL10 流復制

X1 服務器准備

	192.168.59.121  PostgreSQL10 Master
	192.168.59.122	PostgreSQL10 Slaver

X2 安裝 Master PostgreSQL10

	##M0 此處和接下來就不在陳述安裝細節,可以參考QA.X2
	##M1 修改配置文件-postgresql.conf
		@wal_level = replica 				# 參數控制 WAL 日志信息的輸出級別,有 minimal 、 replica 、 logical 三種模式, minimal 記錄的 WAL 日 志信息最少,除了記錄數據庫異常關閉需要恢復時的WAL 信息外,其他操作信息都不記錄; replica 記錄 的 WAL 信息比 minimal 信息多些,會記錄支持 WAL 歸檔、復制和備庫中啟用只讀查詢等操作所需 的 WAL 信息;logical 記 錄 的 WAL 日志信息 最多, 包含了支持邏輯解析 (IO 版本的新特性,邏輯復制使用這種模式,本章后面會介紹)所需 的 WAL
		@archive_mode = on 					# 參數控制是否啟用歸檔, off 表示不啟用歸檔, on 表示啟用歸檔並使用 archive command 參數的配置命令將 WAL 日志歸檔到歸檔存儲上,此參數設置后需重啟數據庫生效,這里通常設置成 on 
		@archive command = ’ / bin/date ’ 	# 參數設置 WAL 歸檔命令, 可以將 WAL 歸檔到本機目錄,也可以歸檔到遠程其他主機上,由於流復制的配置並不一定需要依賴配置歸檔命令,我們將歸檔命令暫且設置成偽歸檔命令/bin/date ,后期如果需要打開歸檔直接配置歸檔命令即可
		@max wal senders = 10 				# 參數控制主庫上的最大 WAL 發送進程數 ,通過 pg_basebackup 命令在主庫上做基准備份時也會消耗 WAL 進程, 此參數設置不能 比 max_connections參數值高 , 默認值為 10 , 一個流復制備庫通常只需要消耗流復制主庫一個 WAL 發送進程 。
		@wal keep segments = 512 			# 設置流復制保留的最多的xlog數目,一份是 16M,注意機器磁盤 16M*64 = 1G
		@hot_standby = on 					# 參數控制數據庫恢復過程中是否啟用讀操作 ,這個參數通常用在流復制備庫,開啟此參數后流復制備庫支持只讀 SQL ,但備庫不支持寫操作,主庫上也設置此參數為 on 。	
		@wal_sender_timeout = 60s 			# 設置流復制主機發送數據的超時時間
		@max_connections = 100 				# 這個設置要注意下,從庫的max_connections必須要大於主庫的 
	##M2 創建流復制賬號,進入數據庫內部執行腳本,該角色(賬號)用於復制和登入
		$ CREATE ROLE replica login replication encrypted password 'replica';
	##M3 修改 pg_hba.conf 文件 進入最后部分,添加如下
		host   replication      replica       0.0.0.0/0          md5   #允許使用 replica 用戶來復制
	##M4 重啟服務,執行之后通過status檢查執行是否成功,假如失敗,則返回前面步驟好好檢查是否哪里忘了
		$ systemctl restart postgresql-10.service

X3 安裝 Slaver PostgreSQL10

	##M0 此處不重復展示安裝細節,參考QA.X2,但是需要注意,執行完M2即可停止
	##M1 通過執行pg_basebackup 方式部署流復制,具體執行下面腳本
		$ pg_basebackup -h 192.168.59.121 -U replica -D  /var/lib/pgsql/10/data -X stream -P -R  ## 輸入主庫流復制 賬號-密碼
		$ chown -R postgres:postgres /var/lib/pgsql/10/data/*
	##M2 修改配置文件 recovery.conf	
		$ vim recovery.conf /**添加屬性/
		@ recovery_target_timeline = 'latest'  ##參數設置恢復的時間線( timeline ) , 默認情況下是恢復到基准備份生成時 的時間線,設置成 latest 表示從備份 中恢復到最近的 時間線 , 通常流復制環境設置此參數為 latest ,復雜的恢復場景可將此參數設置成其他值 
	##M3 重啟並檢查服務
		$ systemctl restart  postgresql-10.service
		$ systemctl status  postgresql-10.service

X4 驗證復制

	##M0 來到主庫 192.168.59.121 進入數據庫執行腳本
	$ psql 
	$ select client_addr,sync_state from pg_stat_replication; ## 通過查看記錄,正常安裝成功則會顯示從庫地址 例如 192.168.59.122
	$ CREATE DATABASE test_v1 OWNER postgres;				  ## 可以通過創建數據庫(DDL)來判斷
	##M1 來到從庫 192.168.59.122  到這一步假如一切成功則證明流復制(異步)成功
	$ su - postgres
	$ psql
	$ \l		

X5 參考資料

	網址:
		https://www.jianshu.com/p/343c3c8047f0
		 https://blog.csdn.net/pg_hgdb/article/details/79069407
		 https://www.postgresql.org/files/documentation/pdf/10/postgresql-10-A4.pdf
		 https://www.jb51.net/article/148841.htm
	書籍:	 
		PostgreSQL實戰.pdf
		PostgreSQL 修煉之道.pdf(該書默認使用postgresql_9,所以部分屬性不適用,例如wal_level的值和PSQL_10完全不同,但是該書在很多細節方面寫的很全面,非常有參考價值)


免責聲明!

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



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