postgresql10主從+keepalived高可用自動切換(切換關鍵在指令碼)
前言
因為之前自己部落格已經寫過太多次的主從搭建了,這裡就不寫了,直接copy自己以前寫過的內容,後面加上keepalived高可用的重點內容!!!
一、下載POSTGRESQL原始碼安裝包及主機配置
虛擬機器環境
node1 192.168.159.4
node2 192.168.159.5
VIP 192.168.159.100
作業系統為redhat7.6
資料庫為postgresql10.8
兩個節點均配置/etc/hosts
vi /etc/hosts
node1 192.168.159.4
node2 192.168.159.5
二、編譯安裝
(1)建立postgres使用者
useradd -m -r -s /bin/bash -u 5432 postgres
(2)安裝相關依賴包
yum install gettext gcc make perl python perl-ExtUtils-Embed readline-devel zlib-devel openssl-devel libxml2-devel cmake gcc-c++ libxslt-devel openldap-devel pam-devel python-devel cyrus-sasl-devel libgcrypt-devel libgpg-error-devel libstdc++-devel
(3)配置POSTGRES
上傳解壓安裝包
cd /opt/
tar -zxvf
cd /opt/
./configure --prefix=/opt/postgresql-10.8 --with-segsize=8 --with-wal-segsize=64 --with-wal-blocksize=16 --with-blocksize=16 --with-libedit-preferred --with-perl --with-python --with-openssl --with-libxml --with-libxslt --enable-thread-safety --enable-nls=zh_CN
注意編譯的時候一定不要加引數--enable-profiling --enable-debug 這引數會導致不必要的日誌產生,
而且增長極快,會導致磁碟空間迅速爆滿,手動刪除還可能有一些不好的影響,所以不要配這引數就好。
而且這引數說明也是用於測試開發用的,不適用於生產系統
configure 編譯選項:
--prefix=PREFIX 指定安裝目錄,預設為 /usr/local/pgsql
--bindir= 可執行檔案目錄,預設 /PREFIX/bin
--sysconfdir= 配置檔案目錄,預設 /PREFIX/etc
--libdir= 庫檔案目錄,預設 /PREFIX/lib
--includedir= 標頭檔案目錄,預設 /PREFIX/include
--datarootdir=DATAROOTDIR 設定只讀共享檔案目錄,預設為 /PREFIX/share
--mandir= man手冊目錄,預設 /DATAROOTDIR/man
--with-extra-version=STRING 在版本號後面追加 STRING 字串,用作自定義版本標識
--with-pgport=NUMBER 指定伺服器端與客戶端的預設埠號,預設為 5432
--with-openssl 編譯 ssl 支援,需要事先安裝 OpenSSL 包
--with-pam 編譯 PAM 支援
--with-ldap 編譯 LDAP 支援,需要事先安裝 OpenLDAP 包
--with-segsize= 設定 segment size ,以 gigabytes(GB) 為單位,預設為 1GB ,大型的表會按 segsize 被分割成多個檔案
--with-blocksize= 指定塊大小,是表記憶體儲和 I/O 的基本單位,預設 8Kbytes ,通常無需變更,取值範圍 1-32KB
--with-wal-segsize= 設定 WAL(Write-Ahead Logging) 的 segment size ,以 megabytes(MB) 為單位,預設 16MB ,取值範圍 1-64MB
--with-wal-blocksize= 指定 WAL 的塊大小,這是 WAL 預寫式日誌儲存和 I/O 的基本單位,以 Kbytes 為單位,預設 8KB ,取值範圍 1-64KB
--enable-debug (Compiles all programs and libraries with debugging symbols. This means that you can run the programs in a debugger to analyze problems),使用 GCC 編譯器時可用於生產環境,其它編譯器會影響效能;多用於開發
--enable-profiling GCC編譯器下,所有程式和庫將被編譯成可進行效能分析,後端退出時生成的 gmon.out 用於效能分析;多用於開發
--enable-coverage 程式碼覆蓋率測試,僅用於開發
--enable-cassert 開啟伺服器的 assertion(斷言) 檢查,僅用於開發
--enable-depend (Enables automatic dependency tracking. With this option, the makefiles are set up so that all affected object files will be rebuilt when any header file is changed),僅用於開發
--enable-dtrace 編譯動態追蹤工具 Dtrace 支援,當前尚不能用於 Linux 平臺,可用於 FreeBSD、Solaris
--with-systemd 開啟 systemd 支援,需9.6及以上版本
最後幾行出現以下黃色輸出即配置正確,否則根據報錯提示繼續安裝依賴包
checking thread safety of required library functions... yes
checking whether gcc supports -Wl,--as-needed... yes
configure: using compiler=gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)
configure: using CFLAGS=-Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -pg -DLINUX_PROFILE -O2
configure: using CPPFLAGS= -D_GNU_SOURCE -I/usr/include/libxml2
configure: using LDFLAGS= -Wl,--as-needed
configure: creating ./config.status
config.status: creating GNUmakefile
config.status: creating src/Makefile.global
config.status: creating src/include/pg_config.h
config.status: creating src/include/pg_config_ext.h
config.status: creating src/interfaces/ecpg/include/ecpg_config.h
config.status: linking src/backend/port/tas/dummy.s to src/backend/port/tas.s
config.status: linking src/backend/port/dynloader/linux.c to src/backend/port/dynloader.c
config.status: linking src/backend/port/posix_sema.c to src/backend/port/pg_sema.c
config.status: linking src/backend/port/sysv_shmem.c to src/backend/port/pg_shmem.c
config.status: linking src/backend/port/dynloader/linux.h to src/include/dynloader.h
config.status: linking src/include/port/linux.h to src/include/pg_config_os.h
config.status: linking src/makefiles/Makefile.linux to src/Makefile.port
或者馬上輸入echo $?得到輸出是0就可以了
(4)編譯
make && make install
最後幾行出現以下黃色輸出即配置正確
make[2]: 離開目錄“/opt/postgresql-10.8/src/test/perl”
/usr/bin/mkdir -p '/opt/postgresql-10.8/lib/pgxs/src'
/usr/bin/install -c -m 644 Makefile.global '/opt/postgresql-10.8/lib/pgxs/src/Makefile.global'
/usr/bin/install -c -m 644 Makefile.port '/opt/postgresql-10.8/lib/pgxs/src/Makefile.port'
/usr/bin/install -c -m 644 ./Makefile.shlib '/opt/postgresql-10.8/lib/pgxs/src/Makefile.shlib'
/usr/bin/install -c -m 644 ./nls-global.mk '/opt/postgresql-10.8/lib/pgxs/src/nls-global.mk'
make[1]: 離開目錄“/opt/postgresql-10.8/src”
make -C config install
make[1]: 進入目錄“/opt/postgresql-10.8/config”
/usr/bin/mkdir -p '/opt/postgresql-10.8/lib/pgxs/config'
/usr/bin/install -c -m 755 ./install-sh '/opt/postgresql-10.8/lib/pgxs/config/install-sh'
/usr/bin/install -c -m 755 ./missing '/opt/postgresql-10.8/lib/pgxs/config/missing'
make[1]: 離開目錄“/opt/postgresql-10.8/config”
PostgreSQL installation complete.
或者馬上輸入echo $?得到輸出是0就可以了
(5)安裝
make world && make install -world
最後幾行出現以下黃色輸出即配置正確
/usr/bin/mkdir -p '/opt/postgresql-10.8/lib/pgxs/src'
/usr/bin/install -c -m 644 Makefile.global '/opt/postgresql-10.8/lib/pgxs/src/Makefile.global'
/usr/bin/install -c -m 644 Makefile.port '/opt/postgresql-10.8/lib/pgxs/src/Makefile.port'
/usr/bin/install -c -m 644 ./Makefile.shlib '/opt/postgresql-10.8/lib/pgxs/src/Makefile.shlib'
/usr/bin/install -c -m 644 ./nls-global.mk '/opt/postgresql-10.8/lib/pgxs/src/nls-global.mk'
make[1]: 離開目錄“/opt/postgresql-10.8/src”
make -C config install
make[1]: 進入目錄“/opt/postgresql-10.8/config”
/usr/bin/mkdir -p '/opt/postgresql-10.8/lib/pgxs/config'
/usr/bin/install -c -m 755 ./install-sh '/opt/postgresql-10.8/lib/pgxs/config/install-sh'
/usr/bin/install -c -m 755 ./missing '/opt/postgresql-10.8/lib/pgxs/config/missing'
make[1]: 離開目錄“/opt/postgresql-10.8/config”
PostgreSQL installation complete.
make: 離開目錄“/opt/postgresql-10.8”
或者馬上輸入echo $?得到輸出是0就可以了
(6)建立相關目錄及配置環境變數
mkdir -p /home/postgresql10.8/serverlogmkdir /home/postgresql10.8/pgdata
su - postgres
vi .bash_profile (刪除原來的所有,以下黃色部分直接複製貼上)
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
# postgres
#PostgreSQL埠
PGPORT=5432
#PostgreSQL資料目錄
PGDATA=/home/postgresql10.8/pg/pgdata
export PGPORT PGDATA
#所使用的語言
export.utf8
#PostgreSQL 安裝目錄
export PGHOME= /home/postgresql10.8/pg/pgdata
#PostgreSQL 連線庫檔案
export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH
export DATE=`date +"%Y%m%d%H%M"`
#將PostgreSQL的命令列新增到 PATH 環境變數
export PATH=$PGHOME/bin:$PATH
#PostgreSQL的 man 手冊
export MANPATH=$PGHOME/share/man:$MANPATH
#PostgreSQL的預設使用者
export PGUSER=postgres
#PostgreSQL預設主機地址
export PGHOST=127.0.0.1
#預設的資料庫名
export PGDATABASE=postgres
#定義日誌存放目錄
PGLOG="$PGDATA/serverlog"
source .bash_profile
(7)初始化資料庫
#執行資料庫初始化指令碼
root使用者登入
chown -R postgres.postgres /home/postgresql10.8
su - postgres
/opt/postgresql-10.8/bin/initdb --encoding=utf8 -D /home/postgresql10.8/pg/pgdata/
警告:為本地連線啟動了 "trust" 認證.
你可以透過編輯 pg_hba.conf 更改或你下次
行 initdb 時使用 -A或者--auth-local和--auth-host選項.
Success. You can now start the database server using:
啟動資料庫
su - postgres
/opt/postgresql-10.8/bin/pg_ctl -D '/home/postgresql10.8/pg/pgdata/' -l logfile start
(8)相關命令複製
root使用者
mkdir /home/postgresql10.8/pg/pgdata/bin
cp /opt/postgresql-10.8/bin/* /home/postgresql10.8/pg/pgdata/bin
chown -R postgres.postgres /home/postgresql10.8/pg/pgdata/bin
三、postgresql主從搭建
1、主庫配置
(1)建立一個使用者複製的使用者replica
su - postgrespsqlCREATE ROLE replica login replication encrypted password ' replica';
(2)修改pg_hba.conf檔案,指定replica登入網路(最後一行新增)vi /home/postgresql10.8/pg/pgdata/pg_hba.conf
host replication replica 192.168.159.0/24 md5
host all replica 192.168.159.0/24 md5
host all all 192.168.159.0/24 md5
host all all 0.0.0.0/0 md5
(3)主庫配置檔案修改以下幾項,其他不變
vi
/home/postgresql10.8/pg/pgdata/ postgresql.conf
listen_addresses = '*'
wal_level = hot_standby #熱備模式
max_wal_senders= 10 #可以設定最多幾個流複製連結,差不多有幾個從,就設定多少
wal_keep_segments = 100 #重要配置
wal_send_timeout = 60s
max_connections = 3000 #從庫的 max_connections要大於主庫
archive_mode = on #允許歸檔
archive_command = 'cp %p
/home/postgresql10.8/pg/archivedir/%f'
#根據實際情況設定
checkpoint_timeout = 30min
max_wal_size = 2GB
min_wal_size = 1GB
mkdir /home/postgresql10.8/pg/archivedir
2、從庫環境(1)把備庫的資料資料夾目錄清空rm -rf /home/postgresql10.8/pg/*(2)在備庫上執行/opt/postgresql-10.8/bin/pg_basebackup -F p --progress -D /home/postgresql10.8/pg/pgdata -h 192.168.159.4 -p 5432 -U replica --password輸入密碼replica !!!注意,複製完成後,在備庫一定要將資料目錄下的所有檔案重新授權chown -R postgres.postgres /home/postgresql10.8/pg/pgdata
(3)建立recovery.conf 檔案cp /opt/postgresql-10.8/share/recovery.conf.sample /home/postgresql10.8/pg/pgdata/recovery.conf
vi /home/postgresql10.8/pg/pgdata/recovery.confstandby_mode = port=5432 user=replica password=replica'recovery_target_timeline = 'latest'trigger_file = ' /home/postgresql10.8/pg/pgdata/ trigger.kenyon'
(4)配置
postgresql.conf檔案
vi
/home/postgresql10.8/pg/pgdata
/postgresql.conf
listen_addresses ='*'wal_level = hot_standbymax_connections =1000
#一般從的最大連結要大於主的hot_standby =on
#說明這臺機器不僅僅用於資料歸檔,也用於查詢max_standby_streaming_delay =30swal_receiver_status_interval = 10s
#多久向主報告一次從的狀態hot_standby_feedback = on
#如果有錯誤的資料複製,是否向主進行範例
(5)
啟動備庫
su - postgres
/opt/postgresql-10.8/bin/pg_ctl -D '/home/postgresql10.8/pg/pgdata/' -l logfile start如果無法啟動,到主庫複製檔案
postmaster.opts到備庫如下操作:scp
/home/postgresql10.8/pg/pgdata/postmaster.opts 192.168.159.5:
/home/postgresql10.8/pg/pgdata/
chown -R postgres.postgres /home/postgresql10.8/pg/pgdata/
cd /home/postgresql10.8/pg/
chmod 700 pgdata/
3、驗證主從功能主庫查詢
su - postgrespsqlpostgres=#
select client_addr,sync_state from pg_stat_replication;
client_addr | sync_state-----------------+------------
192.168.159.5 | async(1 row)
注意一個問題,生產庫要注意時區問題
找到配置檔案postgresql.conf
其中引數
timezone = 'PRC'
PRC代表是上海時區
四、keepalived高可用搭建
安裝包:
keepalived-1.4.2.tar.gz
libnfnetlink-1.0.0-1.el6.x86_64.rpm
libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm
libnl-devel-1.1.4-2.el6.x86_64.rpm
安裝包下載地址:
keepalived-1.4.2.tar.gz
http://rpmfind.net/linux/RPM/centos/6.10/x86_64/Packages/libnfnetlink-devel-1.0.0-1.el6.x86_64.html
http://rpmfind.net/linux/RPM/centos/6.10/x86_64/Packages/libnl-devel-1.1.4-2.el6.x86_64.html
安裝keepalived
tar zxvf keepalived-1.4.2.tar.gz
cd keepalived-1.4.2
./configure
遇到以下報錯
!!! OpenSSL is not properly installed on your system. !!!
!!! Can not include OpenSSL headers files.
解決方法:
yum -y install openssl-devel
openssl version可檢視openssl版本,只要是1.0.2k就可以。
make
make install
mkdir /etc/keepalived
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/sbin/keepalived /usr/sbin/
master的keepalived配置檔案如下:
vi /etc/keepalived/keepalived.conf
global_defs {
router_id PG-HA
}
vrrp_script check_run {
script "/etc/keepalived/pg_check.sh"
interval 60
}
vrrp_sync_group VG1 {
group {
VI_1
}
}
vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id 51
priority 100
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1234
}
track_script {
check_run
}
virtual_ipaddress {
192.168.159.100
}
}
slave的keepalived配置檔案如下:
mkdir /etc/keepalived
vi /etc/keepalived/keepalived.conf
global_defs {
router_id PG_HA
}
vrrp_script check_run {
script "/ etc/keepalived/pg_check.sh"
interval 60
}
vrrp_sync_group VG1 {
group {
VI_1
}
}
vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id 51
priority 90
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1234
}
track_script {
check_run
}
virtual_ipaddress {
192.168.159.100
}
}
說明:
1、
master與slave的keepalived配置檔案中只有priority設定不同,master為100,slave為90,其它一樣。
配置檔案是以塊形式組織的,每個塊都在{}包圍的範圍內,#和!開頭的行都是註釋。
2、
global_defs為全域性定義,對整個Keepalived起作用,而不管是否使用LVS。
3、
router_id:執行Keepalived的機器的一個標識。
4、
vrrp_script配置業務程式監控指令碼。
5、
script:設定指令碼檔名。
6、
interval:設定指令碼執行的時間間隔,這裡為每60秒執行一次。
7、
/ etc/keepalived/pg_check.sh用以檢測PG服務是否正常,
當發現連線不上PG,自動把keepalived程式殺掉,讓VIP進行漂移。檔案內容如下。
下面是關鍵指令碼
主節點:
#!/bin/bash
count=1
while true
do
su - postgres -c "psql -c "select 1"" > /dev/null 2>&1
i=$?
ps aux | grep postgres | grep -v grep > /dev/null 2>&1
j=$?
if [ $i = 0 ] && [ $j = 0 ]
then
exit 0
else
if [ $i = 1 ] && [ $j = 0 ]
then
exit 0
else
if [ $count -gt 5 ]
then
break
fi
let count++
continue
fi
fi
done
/etc/init.d/keepalived stop
scp /opt/trigger.kenyon 192.168.159.5: /home/postgresql10.8/pg/pgdata /trigger.kenyon
#注意這裡要自己先touch一個檔案/opt/trigger.kenyon
#然後還要用root使用者把主從兩個節點的秘鑰互相弄好
兩個節點都操作:
mkdir ~/.ssh
ssh-keygen -t rsa
ssh-keygen -t dsa
其中1個節點操作:
cat ~/.ssh/id_rsa.pub >> ./.ssh/authorized_keys -公鑰存在authorized_keys檔案中,寫到本機
cat ~/.ssh/id_dsa.pub >> ./.ssh/authorized_keys
ssh 192.168.159.5 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 另一個節點的公鑰寫到本機
ssh 192.168.159.5 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys 192.168.159.5:~/.ssh/authorized_keys
兩個節點都操作:
ssh 192.168.159.5 date
ssh 192.168.159.4 date
完成後就配置好秘鑰了。
從節點:(其實就是IP換一換)
#!/bin/bash
count=1
while true
do
su - postgres -c "psql -c "select 1"" > /dev/null 2>&1
i=$?
ps aux | grep postgres | grep -v grep > /dev/null 2>&1
j=$?
if [ $i = 0 ] && [ $j = 0 ]
then
exit 0
else
if [ $i = 1 ] && [ $j = 0 ]
then
exit 0
else
if [ $count -gt 5 ]
then
break
fi
let count++
continue
fi
fi
done
/etc/init.d/keepalived stop
scp /opt/trigger.kenyon 192.168.159.4: /home/postgresql10.8/pg/pgdata /trigger.kenyon
完事之後,就是測試了
兩個節點的pg和keepalived都啟動,主節點ip addr可以看到vip地址
將主節點的postgres程式殺掉
kill pid
然後vip地址漂移到從節點,從節點psql登入
create table test (name varchar(9));
建立一個表測試可以建立成功就證明從庫成功切換到主庫了。
OK! 這裡切換成功,那就是原來的從庫變成了主庫,而主庫就是相當於是(模擬掛掉了)
這個時候如何修復原來掛掉的主庫呢?
其實很簡單,只需要把pg_wal 目錄下的檔案都刪除(包含archive_status目錄)
然後從現主庫把pg_wal 目錄下的檔案都複製過來,
修改現從庫的postgresql.conf配置檔案中max_connections的數值比現主庫的數值大即可
否則會報錯:
2019-11-28 23:43:43.191 PST [21692] LOG: listening on IPv4 address "0.0.0.0", port 5432
2019-11-28 23:43:43.191 PST [21692] LOG: listening on IPv6 address "::", port 5432
2019-11-28 23:43:43.194 PST [21692] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"
2019-11-28 23:43:43.285 PST [21693] LOG: database system was interrupted while in recovery at log time 2019-11-28 23:37:49 PST
2019-11-28 23:43:43.285 PST [21693] HINT: If this has occurred more than once some data might be corrupted and you might need to choose an earlier recovery target.
2019-11-28 23:43:43.454 PST [21693] LOG: entering standby mode
2019-11-28 23:43:43.456 PST [21693] FATAL: hot standby is not possible because max_connections = 2000 is a lower setting than on the master server (its value was 2002)
2019-11-28 23:43:43.457 PST [21692] LOG: startup process (PID 21693) exited with exit code 1
2019-11-28 23:43:43.458 PST [21692] LOG: aborting startup due to startup process failure
2019-11-28 23:43:43.471 PST [21692] LOG: database system is shut down
然後啟動現從庫pg,啟動keepalived,完成。
檢查主從狀態
在主庫查詢
postgres=# select client_addr,sync_state from pg_stat_replication;
client_addr | sync_state
----------------+------------
192.168.159.5 | async
(1 row)
master.sh
#!/bin/sh
Master_Log_File=$(ps -ef|grep -v 'grep'|grep -w sender|awk -F ' ' '{print $10}')
Relay_Master_Log_File=$(ps -ef|grep -v 'grep'|grep -w sender|awk -F ' ' '{print $10}')
su - postgres -c "psql -U postgres -p 123456 -h 192.168.159.4 -p5432 -c "select 1""
j=$?
i=1
while true
do
if [ $Master_Log_File = $Relay_Master_Log_File ] && [ $j = 0 ] #&& [ $Read_Master_Log_Pos -eq $Exec_Master_Log_Pos ]
then
echo "ok"
break
else
sleep 1
if [ $i -gt 60 ]
then
break
scp /opt/trigger.kenyon 192.168.159.5:/data/pg/data/trigger.kenyon
fi
continue
let i++
fi
done
stop.sh
#!/bin/bash
M_File1=$(ps -ef|grep -v 'grep'|grep -w sender|awk -F ' ' '{print $10}')
sleep 1
M_File2=$(ps -ef|grep -v 'grep'|grep -w sender|awk -F ' ' '{print $10}')
i=1
while true
do
if [ $M_File1 = $M_File2 ]
then
echo "ok"
break
else
sleep 1
if [ $i -gt 60 ]
then
break
fi
continue
let i++
fi
done
su - postgres -c " /opt/postgresql-10.8/bin/pg_ctl -D '/home/postgresql10.8/pg/pgdata/' -l logfile stop"
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28371090/viewspace-2666240/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MYSQL5.6主從+keepalive高可用自動切換MySql
- keepalived配置redis主從切換Redis
- Oracle ADG 自動切換指令碼分享Oracle指令碼
- ostgreSQL主從切換-手動SQL
- Redis主從切換Redis
- mysql 5.7+keepalived主從切換步驟簡述MySql
- Dledger是如何實現主從自動切換的
- 手工切換MySQL主從MySql
- Redis sentinel主從切換Redis
- MHA高可用配置及故障切換
- MySQL 主從切換延時高問題分析MySql
- 可自動切換 learnku 夜間 / 白天模式的 python 指令碼模式Python指令碼
- echarts 主題動態切換Echarts
- StoneDB 主從切換實踐方案
- MySQL Orchestrator自動導換+VIP切換MySql
- (九)主題切換
- iOS 切換鍵盤iOS
- Redis叢集的主從切換研究Redis
- oracle 11g datagurd主從切換Oracle
- REDIS主從頻繁切換事件排查Redis事件
- Mongodb資料同步和主從切換MongoDB
- vue 構建環境切換指令碼Vue指令碼
- MySQL高可用之MHA切換測試(switchover & failover)MySqlAI
- 實現自動切換主題的 VSCode 擴充套件VSCode套件
- win10桌布自動切換怎麼關閉_win10桌布自動切換如何取消Win10
- 從遠端桌面連線切換回主螢幕的快捷鍵
- Flutter主題切換——讓你的APP也能一鍵換膚FlutterAPP
- 程式切換(上下文切換)
- 安卓-自動切換APP圖示安卓APP
- [Delphi] 自帶皮膚動態切換
- uniapp 滑動切換APP
- 小程式切換主題配色
- Tab鍵切換選擇物件物件
- 生產環境中mysql資料庫由主從關係切換為主主關係MySql資料庫
- MHA實現mysql主從資料庫手動切換的方法MySql資料庫
- 使用JavaScript設定Tab欄自動切換JavaScript
- docker Redis單機主從哨兵模式切換失敗DockerRedis模式
- 電腦鍵盤怎麼切換中文 電腦鍵盤切換中英文教程