高可用集群Keepalived、Redis、NoSQL數據庫Redis基礎管理

?1. 總結負載均衡常見的算法

  • 輪詢 (Round Robin):按順序將請求依次分配給后端服務器,適合服務器性能相近的場景。

  • 加權輪詢 (Weighted Round Robin):在輪詢的基礎上,根據服務器的權重分配請求。

  • 隨機 (Random):隨機選擇一臺服務器處理請求,簡單但不考慮負載。

  • 加權隨機 (Weighted Random):在隨機的基礎上,根據服務器的權重進行隨機選擇。

  • 源IP哈希 (Source IP Hash):根據請求的源IP地址進行哈希計算,將請求分配給特定的服務器。
    最少連接算法(Least Connections)

    最少連接算法是一種動態調整的負載均衡算法。其思路是盡可能將請求分配到當前空閑連接數最少的后端服務器,以達到負載均衡的效果。在實現過程中,通常需要定期檢測每個服務器的連接數并進行動態調整。


? ? 2. 使用keepalived做nginx和haproxy高可用

#安裝

sudo apt-get update
sudo apt-get install keepalived
sudo apt-get install nginx

#編輯配置文件

sudo vim /etc/keepalived/keepalived.conf?

global_defs {
? router_id nginx
}

# nginx檢測腳本
vrrp_script check_nginx {
? script "/etc/keepalived/check_nginx.sh"
? interval 2
? weight 50
}

vrrp_instance VI_1 {
? ? # 實例初始化狀態 (MASTER or BACKUP)
? ? state MASTER ? ? ? ? ? ?
? ? # vrrp監聽的網卡設備
? ? interface ens33 ? ?
? ? # 虛擬路由ID(0-255),可用過tcpdump vrrp查看(vrid)
? ? virtual_router_id 62 ? ?
? ? # 優先級, 優先級高的競選為master
? ? priority 151 ? ?
? ? # vrrp廣播間隔(單位:秒,可用小數點)
? ? advert_int 1 ??
? ? # 非搶占模式,只適用于BACKUP state,允許一個priority更低的節點作為master
? ? # (官方)NOTE: For this to work, the initial state must not be MASTER.
? ? nopreempt?? ??? ??? ?
? ? # vrrp單播,源IP
? ? unicast_src_ip 172.25.254.131
? ? # vrrp單播,對端IP
? ? unicast_peer {
? ? ? ? 172.25.254.132
? ? }
? ? # 用于節點間的通訊認證,需要主備設置一致
? ? authentication { ? ? ? ?
? ? ? ? auth_type PASS
? ? ? ? auth_pass 1111
? ? }
? ? # 虛擬IP
? ? virtual_ipaddress {
? ? ? ? 172.25.254.130 ? ? ?
? ? }
? ? # 服務檢測腳本
? ? track_script {
? ? ? ? check_nginx
? ? }
}
?

#服務器編輯配置文件

sudo vim /etc/keepalived/keepalived.conf?

global_defs {
? router_id nginx
}

# nginx檢測腳本
vrrp_script check_nginx {
? script "/etc/keepalived/check_nginx.sh"
? interval 2
? weight 50
}

vrrp_instance VI_1 {
? ? # 實例初始化狀態 (MASTER or BACKUP)
? ? state BACKUP ? ? ? ? ? ?
? ? # vrrp監聽的網卡設備
? ? interface ens33 ? ?
? ? # 虛擬路由ID(0-255),可用過tcpdump vrrp查看(vrid)
? ? virtual_router_id 62 ? ?
? ? # 優先級, 優先級高的競選為master
? ? priority 150 ? ?
? ? # vrrp廣播間隔(單位:秒,可用小數點)
? ? advert_int 1 ??
? ? # 非搶占模式,只適用于BACKUP state,允許一個priority更低的節點作為master
? ? # NOTE: For this to work, the initial state must not be MASTER.
? ? nopreempt?? ??? ??? ?
? ? # vrrp單播,源IP
? ? unicast_src_ip 172.25.254.132
? ? # vrrp單播,對端IP
? ? unicast_peer {
? ? ? ? 172.25.254.131
? ? }
? ? # 用于節點間的通訊認證,需要主備設置一致
? ? authentication { ? ? ? ?
? ? ? ? auth_type PASS
? ? ? ? auth_pass 1111
? ? }
? ? # 虛擬IP
? ? virtual_ipaddress {
? ? ? ? 172.25.254.130 ? ? ?
? ? }
? ? # 服務檢測腳本
? ? track_script {
? ? ? ? check_nginx
? ? }
}
?

兩臺服務器中都生成如下nginx檢測腳本

sudo vim /etc/keepalived/check_nginx.sh

#!/bin/sh
if [ -z "`/usr/bin/pidof nginx`" ]; then
? systemctl stop keepalived
? exit 1
fi

#添加權限

sudo chmod +x /etc/keepalived/check_nginx.sh

啟動服務

啟動nginx,并檢查服務狀態

sudo systemctl start nginx
systemctl status nginx

● nginx.service - A high performance web server and a reverse proxy server
? ? ?Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
? ? ?Active: active (running) since Tue 2024-05-07 07:22:43 UTC; 37s ago
? ? ? ?Docs: man:nginx(8)
? ? Process: 205677 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
? ? Process: 205678 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
? ?Main PID: 205679 (nginx)
? ? ? Tasks: 3 (limit: 4515)
? ? ?Memory: 3.3M
? ? ? ? CPU: 52ms
? ? ?CGroup: /system.slice/nginx.service
? ? ? ? ? ? ?├─205679 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
? ? ? ? ? ? ?├─205680 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
? ? ? ? ? ? ?└─205681 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

May 07 07:22:43 svr1 systemd[1]: Starting A high performance web server and a reverse proxy server...
May 07 07:22:43 svr1 systemd[1]: Started A high performance web server and a reverse proxy server.

啟動keepalived,并檢查服務狀態

sudo systemctl start keepalived
systemctl status keepalived

● keepalived.service - Keepalive Daemon (LVS and VRRP)
? ? ?Loaded: loaded (/lib/systemd/system/keepalived.service; enabled; vendor preset: enabled)
? ? ?Active: active (running) since Tue 2024-05-07 07:25:20 UTC; 18s ago
? ?Main PID: 205688 (keepalived)
? ? ? Tasks: 2 (limit: 4515)
? ? ?Memory: 2.0M
? ? ? ? CPU: 265ms
? ? ?CGroup: /system.slice/keepalived.service
? ? ? ? ? ? ?├─205688 /usr/sbin/keepalived --dont-fork
? ? ? ? ? ? ?└─205689 /usr/sbin/keepalived --dont-fork

May 07 07:25:20 svr1 Keepalived[205688]: Starting VRRP child process, pid=205689
May 07 07:25:20 svr1 systemd[1]: keepalived.service: Got notification message from PID 205689, but reception only permitted for main PID 205688
May 07 07:25:20 svr1 Keepalived_vrrp[205689]: WARNING - default user 'keepalived_script' for script execution does not exist - please create.
May 07 07:25:20 svr1 Keepalived_vrrp[205689]: SECURITY VIOLATION - scripts are being executed but script_security not enabled.
May 07 07:25:20 svr1 Keepalived[205688]: Startup complete
May 07 07:25:20 svr1 systemd[1]: Started Keepalive Daemon (LVS and VRRP).
May 07 07:25:20 svr1 Keepalived_vrrp[205689]: (VI_1) Entering BACKUP STATE (init)
May 07 07:25:20 svr1 Keepalived_vrrp[205689]: VRRP_Script(check_nginx) succeeded
May 07 07:25:20 svr1 Keepalived_vrrp[205689]: (VI_1) Changing effective priority from 101 to 151
May 07 07:25:24 svr1 Keepalived_vrrp[205689]: (VI_1) Entering MASTER STATE

啟動Keepalived以后,主節點中查看是否綁定了配置中的VIP

ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
? ? link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
? ? inet 127.0.0.1/8 scope host lo
? ? ? ?valid_lft forever preferred_lft forever
? ? inet6 ::1/128 scope host?
? ? ? ?valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
? ? link/ether 00:0c:29:a1:d7:ea brd ff:ff:ff:ff:ff:ff
? ? altname enp2s1
? ? inet 172.25.254.131/24 brd 172.25.254.255 scope global ens33
? ? ? ?valid_lft forever preferred_lft forever
? ? inet 172.25.254.130/32 scope global ens33
? ? ? ?valid_lft forever preferred_lft forever
? ? inet6 fe80::20c:29ff:fea1:d7ea/64 scope link?
? ? ? ?valid_lft forever preferred_lft forever

#服務器2

ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
? ? link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
? ? inet 127.0.0.1/8 scope host lo
? ? ? ?valid_lft forever preferred_lft forever
? ? inet6 ::1/128 scope host?
? ? ? ?valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
? ? link/ether 00:0c:29:5c:c4:91 brd ff:ff:ff:ff:ff:ff
? ? altname enp2s1
? ? inet 172.25.254.132/24 brd 172.25.254.255 scope global ens33
? ? ? ?valid_lft forever preferred_lft forever
? ? inet6 fe80::20c:29ff:fe5c:c491/64 scope link?
? ? ? ?valid_lft forever preferred_lft forever

嘗試停止nginx服務,看是否能夠故障轉移。

sudo systemctl stop nginx

1服務器(master)

ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
? ? link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
? ? inet 127.0.0.1/8 scope host lo
? ? ? ?valid_lft forever preferred_lft forever
? ? inet6 ::1/128 scope host?
? ? ? ?valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
? ? link/ether 00:0c:29:a1:d7:ea brd ff:ff:ff:ff:ff:ff
? ? altname enp2s1
? ? inet 172.25.254.131/24 brd 172.25.254.255 scope global ens33
? ? ? ?valid_lft forever preferred_lft forever
? ? inet6 fe80::20c:29ff:fea1:d7ea/64 scope link?
? ? ? ?valid_lft forever preferred_lft forever

?

2服務器(backup)

ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
? ? link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
? ? inet 127.0.0.1/8 scope host lo
? ? ? ?valid_lft forever preferred_lft forever
? ? inet6 ::1/128 scope host?
? ? ? ?valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
? ? link/ether 00:0c:29:5c:c4:91 brd ff:ff:ff:ff:ff:ff
? ? altname enp2s1
? ? inet 172.25.254.132/24 brd 172.25.254.255 scope global ens33
? ? ? ?valid_lft forever preferred_lft forever
? ? inet 172.25.254.130/32 scope global ens33
? ? ? ?valid_lft forever preferred_lft forever
? ? inet6 fe80::20c:29ff:fe5c:c491/64 scope link?
? ? ? ?valid_lft forever preferred_lft forever

關閉主節點nginx服務后,能看到keepalived正常執行了故障轉移

通過Keepalived & HAProxy,實現負載均衡(Active-Active)?

在1階段的架構上,我們添加HAProxy來實現雙主負載均衡。

兩臺服務器都安裝HAProxy

sudo apt-get install haproxy

編輯HAProxy配置文件:

sudo vim /etc/haproxy/haproxy.cfg

global
? ? ? ? log /dev/log ? ?local0 info
? ? ? ? log /dev/log ? ?local1 warning
? ? ? ? chroot /var/lib/haproxy
? ? ? ? stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
? ? ? ? stats timeout 30s
? ? ? ? user haproxy
? ? ? ? group haproxy
? ? ? ? daemon

? ? ? ? # 默認為ulimit -n值,并受該數值的限制
? ? ? ? # 可以當作每個連接占用32KB內存來計算出合適的數值,并分配相應的內存
? ? ? ? maxconn 60000

? ? ? ? # Default SSL material locations
? ? ? ? ca-base /etc/ssl/certs
? ? ? ? crt-base /etc/ssl/private

? ? ? ? # See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
? ? ? ? ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
? ? ? ? ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
? ? ? ? ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets

defaults
? ? ? ? log ? ? global
? ? ? ? mode ? ?http
? ? ? ? option ?httplog
? ? ? ? option ?dontlognull
? ? ? ? retries 3
? ? ? ? timeout http-request 10s
? ? ? ? timeout connect 3s
? ? ? ? timeout client ?10s
? ? ? ? timeout server ?10s
? ? ? ? timeout http-keep-alive 10s
? ? ? ? timeout check ? ? ? ? ? 2s
? ? ? ? errorfile 400 /etc/haproxy/errors/400.http
? ? ? ? errorfile 403 /etc/haproxy/errors/403.http
? ? ? ? errorfile 408 /etc/haproxy/errors/408.http
? ? ? ? errorfile 500 /etc/haproxy/errors/500.http
? ? ? ? errorfile 502 /etc/haproxy/errors/502.http
? ? ? ? errorfile 503 /etc/haproxy/errors/503.http
? ? ? ? errorfile 504 /etc/haproxy/errors/504.http

frontend http-in
? ? bind *:8000
? ? maxconn 20000
? ? default_backend servers

backend servers
? ? balance roundrobin
? ? server server1 172.25.254.131:80 check
? ? server server2 172.25.254.132:80 check
?

負載均衡及高可用測試

while sleep 1 ; do curl http://172.25.254.130:8000 ; done

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

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

相關文章

【深度學習】獨熱編碼(One-Hot Encoding)

獨熱編碼&#xff08;One-Hot Encoding&#xff09; 在機器學習中&#xff0c;數據預處理是不可或缺的關鍵一步。面對各種非數值類型的分類數據&#xff08;Categorical Data&#xff09;&#xff0c;如何將其轉換為機器學習模型能夠“理解”的語言呢&#xff1f;獨熱編碼&…

Promise完全體總結

我們在上篇文章提到了異步會導致無法通過返回值來獲取函數的執行結果&#xff0c;我們通過傳入一個回調函數的方式&#xff0c;以參數的形式獲取到了我們想要獲取的數據&#xff0c;但是這樣如果需要對數據進行多次操作導致形成回調地獄那種不便于閱讀以及護理的代碼。為了解決…

SpringJDBC源碼初探-DataSource類

一、DataSource接口核心作用 DataSource是JDBC規范的核心接口&#xff0c;位于javax.sql包中&#xff0c;用于替代傳統的DriverManager獲取數據庫連接。Spring框架通過org.springframework.jdbc.datasource包對該接口進行了增強&#xff0c;提供連接池管理、事務綁定等高級特性…

C語言(08)——關于指針(逐漸清晰版)

為了更好地理解本篇文章的知識內容&#xff0c;讀者可以將以下文章作為補充知識進行閱讀 &#xff1a; C語言————原碼 補碼 反碼 &#xff08;超絕詳細解釋&#xff09;-CSDN博客 C語言————二、八、十、十六進制的相互轉換-CSDN博客 C語言————斐波那契數列的理解…

LeetCode 1616.分割兩個字符串得到回文串

給你兩個字符串 a 和 b &#xff0c;它們長度相同。請你選擇一個下標&#xff0c;將兩個字符串都在 相同的下標 分割開。由 a 可以得到兩個字符串&#xff1a; aprefix 和 asuffix &#xff0c;滿足 a aprefix asuffix &#xff0c;同理&#xff0c;由 b 可以得到兩個字符串 …

算法【1】

網址&#xff1a;主站 工具補充 1. sort 函數的使用規則 作用&#xff1a;對容器元素進行排序&#xff0c;默認升序。語法&#xff1a;sort(起始迭代器, 結束迭代器, 比較規則) 前兩個參數是排序范圍&#xff1a;[begin, end)&#xff08;包含begin&#xff0c;不包含end&am…

信創國產Linux操作系統匯總:從桌面到服務器,百花齊放

在數字化浪潮席卷全球的今天&#xff0c;操作系統作為信息產業的基石&#xff0c;其戰略地位日益凸顯。曾經由國外巨頭壟斷的格局正悄然改變——中國本土Linux操作系統歷經多年沉淀&#xff0c;已形成了百花齊放的局面。無論是日常辦公、專業開發&#xff0c;還是關鍵行業應用&…

claudia for claude code

一.安裝所有必需的依賴項 1.安裝 Git for Windows 步驟: 訪問 Git 的官方網站 git-scm.com。 下載適用于 Windows 的最新版本安裝程序。 運行安裝程序。在安裝向導的各個步驟中&#xff0c;建議保留所有默認設置&#xff0c;這些設置對于本指南的后續操作已經足夠。 驗證…

企業內外網文件安全傳輸解決方案

企業內外網文件安全傳輸解決方案 基于零信任架構的智能中轉系統設計 一、業務背景與挑戰分析 1.1 企業網絡安全現狀 在數字化轉型浪潮下&#xff0c;企業面臨著前所未有的安全挑戰。傳統的"城墻式"網絡防護已無法滿足現代企業靈活協作的需求。根據《2024年中國企業…

《HCIA-Datacom 認證》希賽三色筆記:詳解 VLAN 間通信的 3 種實現方式

標記說明:&#xffed;掌握內容 &#xffed;次重點 &#xffed;理解內容 在局域網部署中&#xff0c;VLAN 技術通過隔離廣播域提升了網絡安全性和穩定性&#xff0c;但不同 VLAN 間的通信需求又成了新的難題。比如財務部門的電腦&#xff08;VLAN 10&#xff09;需要訪問服務…

Windows 10 系統下的編程字體安裝與配置(VSCode)教程

Windows 10 系統下的編程字體安裝與配置教程 常見的優秀編程字體 開發者社區中有許多備受推崇的編程字體&#xff0c;它們都致力于提升代碼的可讀性和舒適度。以下是一些常見的選擇&#xff1a; Fira Code: 以其豐富的編程連字&#xff08;ligatures&#xff09;而聞名&…

ITIL 4 高速IT:解耦架構——構建快速迭代的技術基座

一、為什么要解耦&#xff1a;從“架構”談到“速度”1.高速IT的真正瓶頸&#xff1a;不是能力&#xff0c;而是架構在我們深入學習ITIL 4 高速IT的時候&#xff0c;大家可能都會有個疑問&#xff1a;為什么有些組織在數字化轉型過程中推得動&#xff0c;有些卻始終難以突破&am…

網絡協議——MPLS(多協議標簽轉發)

一&#xff0c;基本概述1. mpls基本概念MPLS位于二三層之間&#xff0c;可以向所有網絡層提供服務。通過在數據鏈路層和網絡層之間增加額外的MPLS頭部&#xff0c;基于MPLS頭部實現數據快速轉發。2. 控制平面和轉發平面控制平面&#xff1a;負責產生和維護路由信息以及標簽信息…

影刀RPA_初級課程_玩轉影刀自動化_EXCEL操作自動化

聲明&#xff1a;相關內容來自影刀學院&#xff0c;本文章為自用筆記&#xff0c;切勿商用&#xff01;&#xff08;若有侵權&#xff0c;請聯絡刪除&#xff09; 1. 數據的表達 1.1 列表 1.1 獲取一段字符&#xff08;字符串列表的截取 —— 前開后閉&#xff09; 1.2 獲取長…

當貝純凈版_海信ip811n海思mv320處理器安卓4.42及9.0主板優盤免拆刷機固件及教程

海信IP811N安卓4.4.2及安卓9.0主板免拆升級教程 下載固件之前&#xff0c;請拆機確認下主板處理器是否為 海思hi3798mv320處理器&#xff0c;拆機將主板上 位于中心位置的CPU芯片上的黑色貼紙取下 然后查看芯片第二行是否有V32字樣&#xff0c;如下圖 然后進入機頂盒設置&a…

三、平衡橋電路

一、電路結構 由于平衡橋后要連接雙T型橋逆變電路并聯&#xff0c;這里采用平衡橋電路來穩定母線和中線的電壓平衡&#xff0c;使正母線電壓BUS和負母線電壓BUS-相對于中線的電壓大小相等&#xff0c;極性相反&#xff0c;如50VBUS&#xff0c;-50BUS-。 平衡橋電路由兩個電容…

Java-85 深入淺出 MySQL InnoDB 存儲結構:Buffer Pool、寫緩沖與日志機制全解

點一下關注吧&#xff01;&#xff01;&#xff01;非常感謝&#xff01;&#xff01;持續更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持續更新中&#xff01;&#xff08;長期更新&#xff09; AI煉丹日志-30-新發布【1T 萬億】參數量大模型&#xff01;Kim…

Linux救援模式之應用篇

掛載并訪問文件系統1. 首先識別分區 fdisk -l # 查看所有磁盤和分區 lsblk # 以樹狀結構查看塊設備 blkid # 查看分區的UUID和文件系統類型2. 創建掛載點并掛載分區 mkdir /mnt/rescue # 創建掛載點# 掛載根分區(根據你實際的根分區設備) mount /dev/…

【學習路線】游戲開發大師之路:從編程基礎到獨立游戲制作

前言 游戲開發是一個充滿創意和技術挑戰的領域&#xff0c;它融合了編程、美術、音效、設計等多個學科。隨著游戲產業的蓬勃發展&#xff0c;游戲開發已成為最具吸引力的技術職業之一。本文將為您提供一條從零基礎到游戲開發大師的完整學習路線&#xff0c;涵蓋編程基礎、游戲引…

宇樹 G1 部署(九)——遙操作控制腳本 teleop_hand_and_arm.py 分析與測試部署

首先&#xff0c;我使用的是 v1.0 版本&#xff0c;宇樹最近發力了更新的很快&#xff1a;xr_teleoperate-1.0 teleop_hand_and_arm.py 支持通過 XR 設備&#xff08;比如手勢或手柄&#xff09;來控制實際機器人動作&#xff0c;也支持在虛擬仿真中運行。可以根據需要&#x…