日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Lightdb Pgpool-II 读写分离使用

發布時間:2023/12/31 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Lightdb Pgpool-II 读写分离使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、介紹

二、pgpool-II下載

三、pgpool-II 安裝

????????1.源碼安裝前提

????????2.解壓編譯安裝

? ? ? ? 3.添加環境變量

? ? ? ? 4.配置pool_hba.conf

? ? ? ? 5.配置pcp.conf

? ? ? ? 6.配置pool_passwd

? ? ? ? 7.配置pgpool.conf

? ? ? ? 8.pgpool的啟動和關閉

? ? ? ? 9.查看集群狀態

四、驗證讀寫分離

五、測試(模擬master宕機)


一、介紹

pgpool-II是位于LightDB服務器和 LightDB 數據庫客戶端之間的中間件,也是現在比較成熟的讀寫分離的中間件,它提供以下功能:

??

  • 連接池

????????Pgpool-II維護與PostgreSQL 服務器的已建立連接,并在出現具有相同屬性(即用戶名,數據庫,協議版本和其他連接參數,如果有)的新連接時重用它們。它減少了連接開銷并改善了系統的整體吞吐量。

  • 負載均衡

????????如果復制了數據庫(因為以復制模式或主/從模式運行),則在任何服務器上執行SELECT查詢都將返回相同的結果。Pgpool-II 利用復制功能來減少每個PostgreSQL服務器上的負載。它通過在可用服務器之間分配SELECT查詢來做到這一點,從而提高了系統的整體吞吐量。在理想情況下,讀取性能可以與PostgreSQL服務器的數量成比例地提高。在許多用戶同時執行許多只讀查詢的情況下,負載平衡效果最佳。

  • 看門狗

????????跟keepalived一樣,對其他pgpool-II節點執行生命檢查,以檢測Pgpoll-II的故障。如果活動Pgpool-II發生故障,則備用 Pgpool-II可以提升為活動狀態,并接管虛擬IP

二、pgpool-II下載

Downloads - pgpool Wiki

三、pgpool-II 安裝

????????1.源碼安裝前提

需要有lightdb庫環境

GNU make 版本是3.8及以上

#查看版本命令 make --version

????????2.解壓編譯安裝

tar -zxvf pgpool-II-4.4.0.tar.gz -C /data1/lightdb/wuxj cd /data1/lightdb/wuxj/pgpool-II-4.4.0#--prefix 安裝路徑 #-with-pgsql lightdb LTHOME環境路徑 ./configure --prefix=/data1/lightdb/wuxj/pgpool -with-pgsql=/data1/lightdb/lightdb-em-13.8-22.4-d53528018-el7.x86_64/lightdb-x-for-em/13.8-22.4make make install

? ? ? ? 3.添加環境變量

vim ~/.bashrc #添加如下信息 export PGPOOL_HOME=/data1/lightdb/wuxj/pgpool export PATH=${PGPOOL_HOME}/bin:${PATH}#使之生效 source ~/.bashrc

? ? ? ? 4.配置pool_hba.conf

#進入配置目錄

cd /data1/lightdb/wuxj/pgpool/etc/

#復制

cp pool_hba.conf.sample pool_hba.conf

增加如下內容

host all all 0.0.0.0/0 md5

? ? ? ? 5.配置pcp.conf

cp pcp.conf.sample pcp.conf

獲取lightdb用戶MD5密碼

加入lightdb:上面MD5輸出

# USERID:MD5PASSWD lightdb:7550896f8721834867162e708adfe6a6

? ? ? ? 6.配置pool_passwd

(master)主節點登陸后執行:select rolname,rolpassword from pg_authid;

[lightdb@lightdb-1 etc]$ ltsql -h10.19.70.49 -p30001 -dpostgres Password for user lightdb: ltsql (13.8, server 13.3) Type "help" for help.lightdb@postgres=# select rolname,rolpassword from pg_authid;rolname | rolpassword ---------------------------+-------------------------------------pg_monitor | pg_read_all_settings | pg_read_all_stats | pg_stat_scan_tables | pg_read_server_files | pg_write_server_files | pg_execute_server_program | pg_signal_backend | lightdb | md54f3305909c6724814ede585e873b845clt_probackup | ltcluster | md58b0b5b2bbd4c2a5f6ae630c8e0e3a961em | md5a7addd43aa6c1b5c21b5a7b7744f9a3d (12 rows)

修改pool_passwd增加lightdb用戶的結果
形式為rolname:rolpassword例如:
lightdb:md54f3305909c6724814ede585e873b845c

? ? ? ? 7.配置pgpool.conf

#內容如下:根據自己的配置進行相應的修改。相關目錄需要提前創建。如果相關目錄沒有權限則需要賦權

chown -R lightdb:lightdb?/data1/lightdb/wuxj/pgpool

listen_addresses = '*' port = 9999 socket_dir = '/data1/lightdb/wuxj/pgpool' pcp_listen_addresses = '*' pcp_port = 9898 pcp_socket_dir = '/data1/lightdb/wuxj/pgpool'backend_hostname0 = '10.19.70.49' #主庫 backend_port0 = 30001 backend_weight0 = 1 backend_data_directory0 = '/home/lightdb/lightdb-22.2-5950/lightdb-x/13.3-22.2/data/defaultCluster' #數據庫data位置 backend_flag0 = 'ALLOW_TO_FAILOVER' # backend_hostname1 = '10.19.70.51' #從庫 backend_port1 = 30001 backend_weight1 = 1 backend_data_directory1 = '/home/lightdb/lightdb-22.2-5950/lightdb-x/13.3-22.2/data/defaultCluster' #數據庫data位置 backend_flag1 = 'ALLOW_TO_FAILOVER'enable_pool_hba = onpid_file_name = '/data1/lightdb/wuxj/pgpool/pgpool.pid' ##pid文件位置 logdir = '/data1/lightdb/wuxj/pgpool/logs' ##日志位置replication_mode = off #開啟讀寫分離 load_balance_mode = onmaster_slave_mode = on master_slave_sub_mode = 'stream'sr_check_period = 5 sr_check_user = 'lightdb' ##主庫創建的用戶 sr_check_password = 'lightdb123' ##密碼 sr_check_database = 'postgres' # # # HEALTH CHECK 健康檢查 # health_check_period = 10 health_check_timeout = 20 health_check_user = 'lightdb' ##主庫創建的用戶 health_check_password = 'lightdb123' ##密碼 health_check_database = 'postgres' ##檢查的庫

? ? ? ? 8.pgpool的啟動和關閉

#啟動 pgpool -n -D >> /data1/lightdb/wuxj/pgpool/logs/pgpool.log 2>&1 &#關閉 pgpool -m fast stop

? ? ? ? 9.查看集群狀態

[lightdb@lightdb-1 etc]$ ltsql -p9999 -dpostgres ltsql (13.8, server 13.3) Type "help" for help.lightdb@postgres=# show pool_nodes;node_id | hostname | port | status | pg_status | lb_weight | role | pg_role | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state | last_status_change ---------+-------------+-------+--------+-----------+-----------+---------+---------+------------+-------------------+-------------------+-------------------+------------------------+---------------------0 | 10.19.70.49 | 30001 | up | up | 0.500000 | primary | primary | 0 | false | 0 | | | 2022-12-22 15:05:221 | 10.19.70.51 | 30001 | up | up | 0.500000 | standby | standby | 0 | true | 0 | | | 2022-12-22 15:05:22 (2 rows)lightdb@postgres=#

四、驗證讀寫分離

?#主節點

10.19.70.49

#備節點

10.19.70.51

? ? ? ? 新建兩張測試表

CREATE table new_test_wuxj( id int8, name varchar(100) );CREATE table new_test_wuxj_2( id int8, name varchar(100) );

通過連接pgpool 對表進行插入和查詢

try {Class.forName("org.postgresql.Driver");Connection connection = DriverManager.getConnection("jdbc:postgresql://10.20.31.205:9999/postgres", "lightdb", "lightdb123");String sql = "insert into new_test_wuxj(id,name) values(?,?)";PreparedStatement preparedStatement = connection.prepareStatement(sql);preparedStatement.setInt(1,1);preparedStatement.setString(2,"nihao");preparedStatement.execute();preparedStatement = connection.prepareStatement("select * from new_test_wuxj");ResultSet resultSet = preparedStatement.executeQuery();while (resultSet.next()){String name = resultSet.getString("name");System.out.println(name);}resultSet.close();preparedStatement.close();connection.close();} catch (Exception e) {e.printStackTrace();}

查看主備日志可以看到寫操作在主庫,讀操作在備庫。

開啟手動事務

try {Class.forName("org.postgresql.Driver");Connection connection = DriverManager.getConnection("jdbc:postgresql://10.20.31.205:9999/postgres", "lightdb", "lightdb123");String sql = "insert into new_test_wuxj_2(id,name) values(?,?)";connection.setAutoCommit(false);PreparedStatement preparedStatement = connection.prepareStatement(sql);preparedStatement.setInt(1,1);preparedStatement.setString(2,"讀寫均在主庫");preparedStatement.execute();preparedStatement = connection.prepareStatement("select * from new_test_wuxj_2");ResultSet resultSet = preparedStatement.executeQuery();while (resultSet.next()){String name = resultSet.getString("name");System.out.println(name);}connection.commit();resultSet.close();preparedStatement.close();connection.close();} catch (Exception e) {e.printStackTrace();}

查看主備日志可以看到讀寫操作在主庫。

五、測試(模擬master宕機)

1.關閉master數據庫

查看pgpool ,master關閉后,從節點的連接中斷后又成功連接上,發現master已經是standby了,且down機了,slave升為了primary

2.恢復原先主節點

[lightdb@iZvv70ftvto0eaujmkhmu3Z 13.3-22.2]$ lt_ctl -D $LTDATA start waiting for server to start....2022-12-22 16:51:55.584906T,,,,,postmaster,,00000,2022-12-22 16:51:55 CST,0,1592013, LOG: LightDB autoprewarm: prewarm dbnum=0 2022-12-22 16:51:55.602435T,,,,,postmaster,,00000,2022-12-22 16:51:55 CST,0,1592013, LOG: ltaudit extension initialized ......2022-12-22 16:52:01.757518T,,,,,postmaster,,00000,2022-12-22 16:51:55 CST,0,1592013, LOG: redirecting log output to logging collector process 2022-12-22 16:52:01.757518T,,,,,postmaster,,00000,2022-12-22 16:51:55 CST,0,1592013, HINT: Future log output will appear in directory "log". ............. done server started

查看集群狀態master成為了新的standby

總結

以上是生活随笔為你收集整理的Lightdb Pgpool-II 读写分离使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。