高可用集群keepalived

1.不同操作系統的安裝

1.1 不同系統編譯安裝

ubuntu環境
apt-get - y install libssl-dev libpopt-dev daemon build-essential libssl-dev openssl libpopt-dev libsnmp-dev libnl-3-dev libnl-genl-3-dev
centos環境 (其他的下同)
yum install - y gcc curl openssl-devel libnl3-devel net-snmp-devel
ubuntu server版本編譯環境配置 - 時間可能有些長
apt update
apt - y install make gcc ipvsadm build-essential pkg-config automake autoconf libipset-dev libnl-3-dev libnl-genl-3-dev libssl-dev libxtables-dev libip4tc-dev libip6tc-dev libmagic-dev libsnmp-dev libglib2 .0 - dev libpcre2-dev libnftnl-dev libmnl-dev libsystemd-dev libpopt-dev daemon
ubuntu server 安裝日志環境
apt install rsyslog - y
獲取軟件并解壓
mkdir / data / {server,softs} - p && cd / data / softs
wget https :// keepalived.org / software / keepalived-2 .3.2 .tar.gz
tar xvf keepalived-2 .3.2 .tar.gz
配置文件
cd keepalived-2 .3.2
. / configure -- prefix =/ data / server / keepalived
編譯于安裝
make
makeinstall
使用默認的服務啟動文件
cp keepalived / keepalived.service / lib / systemd / system /
定制專屬的配置文件
/data/server/keepalived/sbin/keepalived --help
Usage : / data / server / keepalived / sbin / keepalived [OPTION .. .]
-f , -- use-file = FILE ? ? ? ? ?Use the specified configuration file ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
default
'/data/server/keepalived/etc/keepalived/keepalived.conf' or '/etc/keepalived/keepalived.conf'
配置的文件路徑:
/ data / server / keepalived / etc / keepalived / keepalived.conf (優先高)
或者
/ etc / keepalived / keepalived.conf (優先級低)
直接使用模版文件
cd / data / server / keepalived / etc / keepalived /
mkdir / etc / keepalived
mv keepalived.conf.sample / etc / keepalived / keepalived.conf
定制服務配置文件(注意此操作不管是源安裝還是編譯安裝都需要進行?否則服務起不來)
sed - i '/virtual_server/,$d' / etc / keepalived / keepalived.conf
sed - i 's/eth0/ens33/g' / etc / keepalived / keepalived.conf? ? 注:ens33不是唯一?根據對應網卡修改
同時ubuntu源安裝后還要注意
[root@ubantu24 ~]# mv /etc/keepalived/keepalived.conf.sample /etc/keepalived/keepalived.conf?? ? ? ? ? ? ? ? ? ?#更改配置文件名,否則服務起不來
啟動服務
# systemctl daemon-reload
# systemctl start keepalived

1.2 防火墻規則 nftables

hostname -I? ? ?# 檢測服務后的 ip 效果
root @ubuntu24-13: ~ # apt install iputils-ping psmisc -y
root @ubuntu24-13: ~ # ping -c1 192.168.200.16
# 結果無法反應,處于阻塞的狀態 ..
它存在新式的防火墻規則, nftables 規則
root @ubuntu24-13: ~ # apt -y install nftables? ?(若沒有則可以安裝,本人測試的時候沒有安裝)
查看防火墻規則,這里顯示出來 拒絕了 keepalived 生產的三個默認的 vip 地址? 命令: nft list ruleset
(1)root @ubuntu24-13: ~ # nft flush ruleset? ? #臨時清理
(2)ruleset 規則在 keepalive 每次重啟后,都會存在, 如果不想讓它存在,可以清理默認的策略規則
root @ubuntu24-13: ~ # systemctl stop nftables? ? 首先關閉服務
root @ubuntu24-13: ~ # nft flush ruleset ? ? 清理默認規則
root @ubuntu24-13: ~ # > /etc/nftables.conf? ? 清理開機自啟動服務規則
root @ubuntu24-13: ~ # systemctl restart nftables? ? 重啟服務
root @ubuntu24-13: ~ # nft list ruleset? ?? 確認效果

1.3?環境部署腳本

也可以通過下面的腳本進行安裝
#!/bin/bash
# 定義日志文件路徑
LOG_FILE="/var/log/keepalived_install.log"# 定義環境變量
KEEPALIVED_VERSION="2.3.2"
KEEPALIVED_INSTALL_PATH="/data/server/keepalived"
KEEPALIVED_TAR_NAME="keepalived-${KEEPALIVED_VERSION}"# 讀取節點角色
read -p "當前節點的角色(MASTER|BACKUP): " KEEPALIVED_ROLE# 定義日志記錄函數
function log() {local timestamp=$(date "+%Y-%m-%d %H:%M:%S")local message="$1"echo "[${timestamp}] ${message}" | tee -a ${LOG_FILE}
}# 定義函數:基本環境定制
function setup_environment() {log "開始基本環境定制"echo "正在更新軟件包列表..."apt update 2>&1 | tee -a ${LOG_FILE}if [ $? -eq 0 ]; thenlog "軟件包列表更新成功"elselog "軟件包列表更新失敗"exit 1fiecho "正在安裝必要的軟件包..."apt -y install make gcc ipvsadm build-essential pkg-config automake autoconf \libipset-dev libnl-3-dev libnl-genl-3-dev libssl-dev libxtables-dev libip4tc-dev \libip6tc-dev libmagic-dev libsnmp-dev libglib2.0-dev libpcre2-dev libnftnl-dev \libmnl-dev libsystemd-dev libpopt-dev daemon 2>&1 | tee -a ${LOG_FILE}if [ $? -eq 0 ]; thenlog "必要軟件包安裝成功"elselog "必要軟件包安裝失敗"exit 1fi
}# 定義函數:下載軟件
function download_software() {log "開始下載軟件"echo "正在創建目錄并下載 Keepalived ${KEEPALIVED_VERSION}..."mkdir -p /data/{server,softs} 2>&1 | tee -a ${LOG_FILE}if [ $? -eq 0 ]; thenlog "目錄創建成功"elselog "目錄創建失敗"exit 1ficd /data/softsif [ ! -f ${KEEPALIVED_TAR_NAME}.tar.gz ]; thenlocal keepalived_url="https://keepalived.org/software/${KEEPALIVED_TAR_NAME}.tar.gz"wget "${keepalived_url}" 2>&1 | tee -a ${LOG_FILE}if [ $? -eq 0 ]; thenlog "Keepalived ${KEEPALIVED_VERSION} 下載成功"elselog "Keepalived ${KEEPALIVED_VERSION} 下載失敗"exit 1fifiecho "正在解壓 Keepalived ${KEEPALIVED_VERSION}..."local untar_dir="/data/softs/${KEEPALIVED_TAR_NAME}"[ -d ${untar_dir} ] && rm -rf ${untar_dir}tar xvf "${KEEPALIVED_TAR_NAME}.tar.gz" 2>&1 | tee -a ${LOG_FILE}if [ $? -eq 0 ]; thenlog "Keepalived ${KEEPALIVED_VERSION} 解壓成功"elselog "Keepalived ${KEEPALIVED_VERSION} 解壓失敗"exit 1fi
}# 定義函數:編譯安裝
function compile_and_install() {log "開始編譯安裝"echo "正在進入解壓目錄并進行配置..."cd "${KEEPALIVED_TAR_NAME}"./configure --prefix="${KEEPALIVED_INSTALL_PATH}" 2>&1 | tee -a ${LOG_FILE}if [ $? -eq 0 ]; thenlog "配置成功,安裝路徑為 ${KEEPALIVED_INSTALL_PATH}"elselog "配置失敗,安裝路徑為 ${KEEPALIVED_INSTALL_PATH}"exit 1fiecho "正在編譯 Keepalived ${KEEPALIVED_VERSION}..."make 2>&1 | tee -a ${LOG_FILE}if [ $? -eq 0 ]; thenlog "編譯成功"elselog "編譯失敗"exit 1fiecho "正在安裝 Keepalived ${KEEPALIVED_VERSION} 到 ${KEEPALIVED_INSTALL_PATH}..."make install 2>&1 | tee -a ${LOG_FILE}if [ $? -eq 0 ]; thenlog "安裝成功,安裝路徑為 ${KEEPALIVED_INSTALL_PATH}"elselog "安裝失敗,安裝路徑為 ${KEEPALIVED_INSTALL_PATH}"exit 1fi
}# 定義函數:定制服務文件
function customize_service_file() {log "開始定制服務文件"echo "正在復制服務文件..."cd /data/softs/${KEEPALIVED_TAR_NAME}/keepalivedcp keepalived.service /lib/systemd/system/ 2>&1 | tee -a ${LOG_FILE}if [ $? -eq 0 ]; thenlog "服務文件復制成功"elselog "服務文件復制失敗"exit 1fi
}# 定義函數:定制配置文件
function customize_config_file() {log "開始定制配置文件"echo "正在定制配置文件..."cd "${KEEPALIVED_INSTALL_PATH}/etc/keepalived/"[ ! -d /etc/keepalived ] && mkdir /etc/keepalived || rm -rf /etc/keepalived/*mv keepalived.conf.sample /etc/keepalived/keepalived.conf 2>&1 | tee -a ${LOG_FILE}local net_name=$(ip a | awk -F " |:" '/MULTICAST/{print $3}'|head -n1)sed -i "s/eth0/${net_name}/g" /etc/keepalived/keepalived.confsed -i '/virtual_server/,$d' /etc/keepalived/keepalived.confif [ "${KEEPALIVED_ROLE}" == "BACKUP" ]; thensed -i 's/MASTER/BACKUP/' /etc/keepalived/keepalived.confsed -i 's/ty 100/ty 90/' /etc/keepalived/keepalived.conf  # 注意:這里可能存在拼寫錯誤(ty應為priority)fiif [ $? -eq 0 ]; thenlog "配置文件定制成功,安裝路徑為 ${KEEPALIVED_INSTALL_PATH}"elselog "配置文件定制失敗,安裝路徑為 ${KEEPALIVED_INSTALL_PATH}"exit 1fi
}# 定義函數:啟動服務
function start_service() {log "開始啟動服務"echo "正在重新加載 systemd 管理器配置..."systemctl daemon-reload 2>&1 | tee -a ${LOG_FILE}if [ $? -eq 0 ]; thenlog "systemd 管理器配置重新加載成功"systemctl start keepalivedelselog "systemd 管理器配置重新加載失敗"exit 1fi
}# 主函數,按順序調用各個子函數
function main() {# 檢查環境變量是否為空if [ -z "${KEEPALIVED_VERSION}" ]; thenlog "錯誤:KEEPALIVED_VERSION 環境變量為空"exit 1fiif [ -z "${KEEPALIVED_INSTALL_PATH}" ]; thenlog "錯誤:KEEPALIVED_INSTALL_PATH 環境變量為空"exit 1fisetup_environmentdownload_softwarecompile_and_installcustomize_service_filecustomize_config_filestart_servicelog "Keepalived ${KEEPALIVED_VERSION} 安裝及配置完成,安裝路徑為 ${KEEPALIVED_INSTALL_PATH}!"echo "Keepalived ${KEEPALIVED_VERSION} 安裝及配置完成,安裝路徑為 ${KEEPALIVED_INSTALL_PATH}!"
}# 執行主函數
main

2.配置解讀

1.1?配置簡介

keepalived 默認配置文件主要有三部分組成, global_defs vrrp_instance virtual_server 其中最重要的配置內容是 vrrp_instance ,在這個配置段中,設置了 keepalived 對外提供的統一入口。
修改兩臺 keepalived 主機的global_defs vrrp_instance 部分內容,就能讓 keepalived 正常啟動。
global_defs - 全局配置段router_id 設定當前keepalived提供的路由標識,它在keepalived集群中必須唯一vrrp_instance - vrrp配置段state 描述keepalived主機間的角色定位的,一般只有兩個值MASTER、BACKUPinterface 指定在哪個網卡上綁定VIPvirtual_router_id 指定VIP的唯一標識,在keepalived集群中,此配置必須一致。priority 被VRRP協議來判斷那個router_id作為主路由,值越大,優先級越高authentication 多個路由之間通信的認證virtual_ipaddress 指定VIP的地址,可以是多個。virtual_server - vs配置段lb_algo 定制算法信息protocol 數據通信協議的定制real_server 后端真實主機的定制
查看幫助信息
二進制包安裝方式
man keepalived.conf
源碼包安裝方式
man /usr/share/man/man5/keepalived.conf.5.gz

1.2?配置細節

root @ubuntu24-13: ~ # tcpdump -i ens33 host 224.0.0.18 -nn? ? # vrrp 通信數據

1.3?簡單實踐

兩臺主機安裝nginx(略)
keepalived里面修改
? ?virtual_ipaddress { ? ? ? ?
192.168.8.100
? ?}
?interface ens224
每個主機都增加一個網卡例如ens224
最終修改實現的效果如下
命令:for i in {1..10};do curl 192.168.8.100;done
結果顯示: VIP 效果完全正常,可以替代原來的 web 地址訪問效果
15主機上抓包? ? ?tcpdump -i ens224?-nn host 224.0.0.18 12主機優先級高所以它占用vip
停掉12主機? ?15主機搶了VIP,說明keepalived默認 工作模式搶占式開啟12主機后又恢復。

1.4 日志功能

(1)日志存放在哪里
默認情況下, keepalived 的日志功能是放入到 syslog 文件里面的,但是 syslog 文件不僅僅給 keepalived使用,還給很多其他的服務去使用,所以,一般情況下,我們需要將keepalived 的日志功能,單獨獨立出來。
cat /data/server/keepalived/etc/sysconfig/keepalived? ? ? ? ? #查看依賴的配置文件
KEEPALIVED_OPTIONS = "-D" # 記錄詳細的日志
data/server/keepalived/sbin/keepalived --help? ? # 查看 keepalived 的命令啟動選項
KEEPALIVED_OPTIONS="-D -S 6"? 注:里面解釋了左邊命令所寫的原因
(2)定制日志輸出
在/etc/rsyslog.d/目錄下創建 keepalived的日志配置文件keepalived.conf
[root@rocky9-15 ~]# vim /etc/rsyslog.d/keepalived.conf
local6. * / var / log / keepalived.log
& ~
注意:? & ~ 表示 keepalived 日志僅僅寫入 / var / log / keepalived.log 中,不寫入 / var / log / syslog 文件。
[root@rocky9-15 ~]# vim /etc/sysconfig/keepalived? ?# apt 安裝的在 / etc / default / keepalived
KEEPALIVED_OPTIONS = "-D -S 6"
systemctl restart rsyslog.service? ? ? ? ? ? ? #重啟rsyslog服務
systemctl restart keepalived.service? ? ? ??#重啟keepalived服務
tail /var/log/keepalived.log? ? ? ? ? ? ? ? ? ? ? ?#查看日志效果

1.5?子配置[M]

當生產環境復雜時, / etc / keepalived / keepalived.conf 文件中內容過多,除了全局級別的配
置,還有大量的業務級別的配置,相當的不易管理。?利用 include 指令可以實現包含子配置文件。
配置格式:
include / path / file
定制主從配置文件? 其中#里面的內容是定制從節點配置要寫的
global_defs {router_id kpmaster   #kpbackup
}vrrp_instance VI_1 {state MASTER         #BACKUP interface ens224virtual_router_id 50priority 100         #100以下,例99authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.8.100}
}
確定確認要截取的內容
主從節點相同的完全步驟
1 定制子配置文件
mkdir / etc / keepalived / conf.d /
cd / etc / keepalived
sed - nr '5,$p' keepalived.conf > / etc / keepalived / conf.d / cluster1.conf
2 定制主配置
sed - i '5,$d' / etc / keepalived / keepalived.conf
echo 'include /etc/keepalived/conf.d/*.conf' >> / etc / keepalived / keepalived.conf
3 重啟服務
systemctl restart keepalived.service

3.工作模式[L]

Keepalived 是一個基于 VRRP 協議的實現高可用的軟件,在 Keepalived 中,搶占式非搶占式是兩種重要的工作模式。keepalived 默認搶占式工作模式。
非搶占式配置
注意:要關閉 VIP 搶占, 必須將各 Keepalived 服務器 state 配置為 BACKUP
master主機配置比slave主機配置多了nopreempt而已 其他配置相同
nopreempt 的主要目的是為了保持服務的穩定性和連續性,避免由于主服務器的頻繁恢復和搶占導致的服務中斷和網絡抖動。
結果顯示: 雖然 master 節點優先級高,因為處于非搶占模式,所以 vip 依然在 slave 節點上。
slave 節點服務異常, vip 才會被 master 接管 , 這樣避免了 vip 的頻繁移動
非搶占延遲模式
Keepalived 的非搶占延時模式是在非搶占式模式基礎上增加了延時機制
主從節點主機配置 如下 其他的不變
state BACKUP
preempt_delay 60? #表示60s?
關于工作模式的小結
搶占模式
? ? -主掛了,備立刻搶vip
? ? -主恢復了,立刻搶備vip
延遲搶占
? ? -主掛了,備讓幾秒鐘,確保主掛了,然后搶vip
? ? -主恢復了,讓讓
非搶占
? ?-主掛了,備立刻搶vip
? ?-主恢復了,不搶備的vip
4. 消息傳遞
單播: 是一種點到點的通信方式,數據從發送方發送到特定的一個接收方。即 一對一。
多播: 是一種點到多點的通信方式,數據從發送方發送到一組特定的接收方,即 一對多。
如何配置多播通信

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/906651.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906651.shtml
英文地址,請注明出處:http://en.pswp.cn/news/906651.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SpringCloud - 整合MQ實現消息總線服務

一、背景介紹 每當修改配置文件內容,如果需要客戶端也同步更新,就需要手動調用/refresh接口,以便客戶端能獲取到最新的配置內容。 當客戶端越來越多的時候,通過人工進行處理顯然非常雞肋。有沒有一種更加高效的辦法,…

測試W5500的第3步_使用ioLibrary庫創建TCPServer

W5500是一款具有8個Socket的網絡芯片,支持TCP Server模式,最多可同時連接8個客戶端。本文介紹了基于STM32F10x和W5500的TCP Server實現,包括SPI初始化、W5500復位、網絡參數配置、Socket狀態管理等功能,適用于需要多客戶端連接的嵌…

Web攻防-SQL注入數據庫類型用戶權限架構分層符號干擾利用過程發現思路

知識點: 1、Web攻防-SQL注入-產生原理&應用因素 2、Web攻防-SQL注入-各類數據庫類型利用 演示案例-WEB攻防-SQL注入-數據庫類型&架構分層&符號干擾 一、數據庫知識 1、數據庫名,表名,列名,數據 2、自帶數據庫&…

手機合集(不定期更新)

一、華為手機: 1.華為手機自助維修的方法: https://blog.csdn.net/humors221/article/details/145946128 2.華為手機實用功能介紹: https://blog.csdn.net/humors221/article/details/132514011 3.華為手機清理大數據的方法:…

移動安全Android——ROOT檢測繞過

工具準備 Magisk GitHub - topjohnwu/Magisk: The Magic Mask for Android ZygisckNext GitHub - Dr-TSNG/ZygiskNext at v1.2.8 Shamiko Releases LSPosed/LSPosed.github.io 安卓ROOT教程 Magisk 安裝教程 - Magisk 中文網 問題 大多數手機在ROOT狀態下會出現APP閃…

Python高效網絡爬蟲開發指南

Python 網絡爬蟲入門與實戰 一、引言 隨著互聯網數據的爆炸性增長,獲取和分析這些數據變得越來越重要。網絡爬蟲作為數據采集的重要工具,在這其中扮演了不可或缺的角色。 二、環境搭建 首先我們需要安裝Python環境以及一些必要的庫: req…

wireshark: Display Filter Reference

https://www.wireshark.org/docs/dfref/// 這個里面的擴展功能還是很強大,可以幫著問題分析。支持大量的自定義化的字段讀取功能,支持很多的協議。 https://www.wireshark.org/docs/dfref///f/frame.html frame.time_delta Time delta from previous ca…

dify創建銀行客服系統例子

傳統的銀行客服系統,通常以會話管理的方式實現,配置繁瑣復雜,固定且不靈活。如: 智能體的出現,為實現銀行客服系統提供了想象空間,可以集知識庫和業務流程為一體實現靈活可控的智能客服系統,即能…

前端函數防抖(Debounce)完整講解 - 從原理、應用到完整實現

🌷 古之立大事者,不惟有超世之才,亦必有堅忍不拔之志 🎐 個人CSND主頁——Micro麥可樂的博客 🐥《Docker實操教程》專欄以最新的Centos版本為基礎進行Docker實操教程,入門到實戰 🌺《RabbitMQ》…

服務接口鑒權與內部認證:自定義注解與AOP實現的企業級實踐

本文深入解析企業級系統中接口安全管控的核心需求,提出基于Spring AOP與自定義注解的輕量級鑒權方案。通過解構注解元數據定義、切面攔截邏輯、上下文傳遞機制等關鍵技術環節,系統闡述零侵入式鑒權體系的構建路徑。結合金融支付網關、多租戶SaaS平臺、物…

26考研|高等代數:線性變換

前言 線性變換這一章節是考頻較高的一部分,此部分涉及考點較多,涉及的考題也較多,學習線性變換時,應該注意搭建線性變換與矩陣之間的聯系,掌握如何利用矩陣表示一個線性變換結構,同時介紹了最簡單的線性變…

電磁兼容(EMC)仿真(精編版)

寫在前面 本系列文章主要講解電磁兼容(EMC)仿真的相關知識,希望能幫助更多的同學認識和了解電磁兼容(EMC)仿真。 若有相關問題,歡迎評論溝通,共同進步。(*^▽^*) 隨著產品復雜性和密集度的提高以及設計周期的不斷縮短,在設計周期的后期解決電磁兼容性(EMC)問題變得…

解決:dpkg: error: dpkg frontend lock is locked by another process

1、等待其他進程完成 如果后臺有其他包管理操作(如自動更新、軟件安裝等),等待幾分鐘再重試。 可以通過以下命令查看是否有相關進程: ps aux | grep -E apt|apt-get|dpkg 2、強制終止占用鎖的進程 如果確認沒有其他包管理操作&…

LVGL(lv_textarea文本框控件)

文章目錄 一、lv_textarea 是什么?二、基本用法1. 創建 lv_textarea 對象2. 設置提示文字(占位符)3. 設置最大長度4. 設置密碼模式(顯示為\*號)5. 獲取和設置內容6. 配合虛擬鍵盤使用(常用于觸摸屏&#xf…

【Java高階面經:數據庫篇】18、分布式事務:如何在分庫分表中實現高性能與一致性?

一、分布式事務核心挑戰:分庫分表下的一致性困境 在分布式系統架構中,分庫分表通過將數據分散存儲提升了擴展性和性能,但卻打破了傳統單庫事務的邊界,使得分布式事務成為保障數據一致性的核心難題。其挑戰主要體現在以下三方面: 1.1 ACID特性的分布式撕裂 原子性(Atomi…

【云吶】房地產企業固定資產如何管理

房產類固定資產如辦公樓、門面房、宿舍樓、庫房等,價值高、使用年限長、權屬復雜、變更流程多,是企業最為關鍵的資產類型之一。管理房產類資產不僅要“看得到”,更要“管得住”。 房產資產管理應從權屬明確開始。固定資產管理系統支持房產資產…

oracle數據庫生成awr報告,排查數據庫服務器CPU100%,系統卡頓,慢sql,根據sqlid查詢關鍵信息,如會話SID,客戶端機器名

AWR報告簡介 AWR是Oracle 10g版本推出的特性,全稱叫做 Automatic Workload Repository 全自動負載信息庫 。Oracle啟動后,會有后臺進程定時采集并保存系統快照信息,也可以手工創建快照。AWR通過對比兩個時間點的快照信息,生成該時間段的AWR報告,幫助DBA或開發人員了解 Ora…

kafka吞吐量提升總結

前言 原本自以為閱讀了很久kafka的源碼,對于kafka的了解已經深入到一定程度了,后面在某大廠的面試中,面試官詢問我,如果需要提升kafka的性能,應該怎么做,我發現我能答上來的點非常的少,也暴露了…

鴻蒙 HarmonyOS NEXT 系統 Preference 首選項使用全解析

鴻蒙HarmonyOS系統Preference首選項使用全解析 大家好,我是威哥。在鴻蒙應用開發里,用戶偏好設置的管理是極為重要的一環。HarmonyOS為我們提供了Preference組件,它能讓我們輕松實現應用設置界面,對用戶首選項進行高效管理。接下…

xdc約束學習

對clk的約束 //約束clk為 125M Hz create_clock -period 8.000 -name gt_refclk1_p -waveform {0.000 4.000} [get_ports gt_refclk1_p] 偽時鐘路徑,用于兩個時鐘域之間數據的交互 單邊性(unateness)對于時序很重要,因為它指定的…