Salt安裝部署

来源:https://www.cnblogs.com/DBArtist/archive/2023/03/22/17243131.html
-Advertisement-
Play Games

Salt安裝部署 一:salt簡介 ​ 早期運維人員會根據自己的生產環境來寫特定腳本完成大量重覆性工作,這些腳本複雜且難以維護。系統管理員面臨的問題主要是1、系統配置管理,2、遠程執行命令,因此誕生了很多開源軟體,系統維護方面有fabric、puppet、chef、ansible、saltstack ...


Salt安裝部署

一:salt簡介

​ 早期運維人員會根據自己的生產環境來寫特定腳本完成大量重覆性工作,這些腳本複雜且難以維護。系統管理員面臨的問題主要是1、系統配置管理,2、遠程執行命令,因此誕生了很多開源軟體,系統維護方面有fabric、puppet、chef、ansible、saltstack等,這些軟體擅長維護系統狀態或方便的對大量主機進行批量的命令執行。

  salt靈活性強大,可以進行大規模部署,也能進行小規模的系統部署。salt的設計架構適用於任意數量的伺服器,從少量本地網路系統到跨越數個數據中心,拓撲架構都是c/s模型,配置簡單。

  不管是幾台、幾百台、幾千台伺服器,都可以使用salt在一個中心節點上進行管控,靈活定位任意伺服器子集來運行命令。 

  Salt是python編寫的,支持用戶通過python自定義功能模塊,也提供了大量的python API介面,用戶可以根據需要進行簡單快速的擴展。

官方中文文檔網站:http://docs.saltstack.cn/

官方安裝配置教程: http://docs.saltstack.cn/topic

github:https://github.com/saltstack/salt

二:背景環境

2.1:部署情況

機器IP/HOST 安裝內容
192.168.0.110 master端(主控端)
192.168.0.101 minion端(被控端)
192.168.0.102 minion端(被控端)
192.168.0.103 minion端(被控端)

2.2:配置hosts文件,用於加速功能變數名稱解析。

# 服務端 
[root@manager110 ~]# vim /etc/hosts
192.168.0.101 db101
192.168.0.102 db102
192.168.0.103 db103
192.168.0.110 manager110


# 客戶端: 所有機器101-103都相同操作
[root@db101 ~]# vim /etc/hosts
192.168.0.101 db101
192.168.0.102 db102
192.168.0.103 db103
192.168.0.110 manager110

2.3:埠號

  • publish_port:4505
  • ret_port:4506

三:下載安裝

安裝教程:http://docs.saltstack.cn/topics/installation/rhel.html

安裝教程:https://mirrors.aliyun.com/saltstack/#rhel

3.1:配置yum倉庫

  • 配置官網鏡像倉庫和key

    # 服務端和客戶端節點都要執行(我直接使用官網鏡像倉庫,沒有使用阿裡雲的)
    rpm --import https://repo.saltproject.io/salt/py3/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub
    
    curl -fsSL https://repo.saltproject.io/salt/py3/redhat/7/x86_64/latest.repo | sudo tee /etc/yum.repos.d/salt.repo
    
    
    # 清空過期緩存
    sudo yum clean expire-cache
    
  • 配置阿裡雲鏡像倉庫

    yum install -y https://mirrors.aliyun.com/saltstack/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
    
    # 補充: 配置Redhat8/CentOS8 倉庫
    #導入key,配置salt倉庫
    rpm --import https://repo.saltproject.io/py3/redhat/8/x86_64/latest/SALTSTACK-GPG-KEY.pub
    curl -fsSL https://repo.saltproject.io/py3/redhat/8/x86_64/latest.repo | tee /etc/yum.repos.d/salt.repo
    
    # 教程鏈接 https://mirrors.aliyun.com/saltstack/#rhel
    

3.2:主控端部署

sudo yum install salt-master
sudo yum install salt-minion
sudo yum install salt-ssh
sudo yum install salt-syndic
sudo yum install salt-cloud
sudo yum install salt-api

3.3:主控端設置開機自啟

sudo systemctl enable salt-master && sudo systemctl start salt-master
sudo systemctl enable salt-minion && sudo systemctl start salt-minion
sudo systemctl enable salt-syndic && sudo systemctl start salt-syndic
sudo systemctl enable salt-api && sudo systemctl start salt-api

3.4:被控端部署

sudo yum install salt-minion

3.5:被控端設置開機自啟

sudo systemctl enable salt-minion && sudo systemctl start salt-minion

四:配置

4.1:Master端和Minion端常用配置參數說明

Master端常用的配置參數說明:

  • interface:指定bind的地址,預設為0.0.0.0

  • publish_port:指定發佈埠,預設為4505

  • ret_port:指定結果返回埠,與minion配置文件中的master_port對應,預設為4506

  • uesr:指定master進程的運行用戶,如果調整,則需要調整部分目錄的許可權,預設許可權為root

  • timeout:指定timeout時間,如果minion規模龐大或絡狀況不好,建議增該值,預設5s

  • keep_jobs:預設情況下,minion會執行結果會返回master,master會緩存到本地的cachedir目錄,該參數指定緩存多長時間,以供查看之前的執行結果,會占用磁碟空間,預設為24h

  • job_cache:master是否緩存執行結構,如果規模龐大(超過5000台),建議使用其他方式來存儲jobs,關閉本選項,預設為True

  • file_recv:是否允許minion傳送文件到master上,預設是Flase

  • file_roots:指定file server目錄,預設為:

    file_roots:    
       base:    
           - /srv/salt
    
  • pillar_roots:指定pillar目錄,預設為:

    pillar_roots:     
       base:     
           - /srv/pillar
    
  • log_level:執行日誌級別,支持的日誌級別由'garbage', 'trace', 'debug', info', 'warning', 'error', ‘critical ’ ,預設為’warning’

Minion端常用的配置參數說明:

  • master:指定master主機,預設為salt
  • mastar_port:指定認證和執行結果發送到master的哪個埠,與master配置文件中的ret_port對應,預設為4506
  • id:指定minion的標識,Salt內部使用id作為標識,唯一標識符,預設為主機名
  • user:指定運行minion的用戶,由於安裝包,啟動服務等操作需要特殊用戶,推薦使用root,預設為root
  • cache_jobs:minion是否緩存執行結果,預設為False
  • backuo_mode:在文件操作(file.managed或file.recurse)時,如果文件發送更改,指定備份目錄,當前有效的值為minion,備份在cachedir/file_backups目錄下,以原始文件名稱加時間戳來命名,預設為Disabled
  • providers:指定模塊對應的providers,如果RHRL系列中,pkg對應的providers是yumpkg5
  • renderer:指定配置管理系統中的渲染器,預設值為:yaml_jinja
  • file_client:指定file client預設去哪裡(remotr或local)尋找文件,預設值為remote
  • loglevel:指定日誌級別,預設為warnning
  • tcp_keepalive:minion是否與master保持keepalive檢查,zeromq3一下版本存在keepalive bug,會導致某些情況下鏈接異常後minion無法重連master,建議有條件的話吧zeromq3以上版本,預設為True

4.2:修改主控端的maser配置文件

最簡配置:不用調整master,直接使用預設master配置即可。

# 完整配置:(大部分是預設配置)
[root@manager110 salt]# cat /etc/salt/master
file_roots:
  base:
    - /srv/salt/base
  grantcron:
    - /srv/salt/grantcron
  revokecron:
    - /srv/salt/revokecron

publisher_acl:
  dba:
    - test.ping
    - cmd.*
    - cron.*
    - cp.*
  devuser:
    - test.ping
    - cmd.*
    - cron.*
    - cp.*
    
default_include: master.d/*.conf
interface: 0.0.0.0
ipv6: False
publish_port: 4505
user: root

ret_port: 4506      # 這裡ret_port和後面minion配置中的master_port對應保持一致。
pidfile: /var/run/salt/salt-master.pid
conf_file: /etc/salt/master
pki_dir: /etc/salt/pki/master
cachedir: /var/cache/salt/master
keep_jobs: 2
gather_job_timeout: 10
timeout: 5
sock_dir: /var/run/salt/master
max_open_files: 100000
worker_threads: 12
zmq_backlog: 1000
open_mode: False
auto_accept: true
file_recv: True
file_recv_max_size: 1000
tcp_keepalive: True
tcp_keepalive_idle: 300

4.3:修改主控端的minion配置文件

最簡配置:配置master: 192.168.0.110即可;id可以不用配置,預設取hostname。

切記:“master: ” 冒號後要添加一個空格,然後再寫IP。

如果需要調整id,先刪除/etc/salt/minion_id文件,然後重啟minion,會自動在/etc/salt目錄下新生成一個minion_id文件來存放id。

# 修改主控端的minion配置文件  修改 #id和#master:salt 這兩行 (註意書寫規範:每個冒號後面都要跟一個空格)
# #master: salt  指向管理端地址,這裡是指向salt-master伺服器,可以是IP、功能變數名稱或主機名
# #id: xxx       minion主機標識必須唯一,如果不配置,預設取機器的hostname。
[root@manager110 ~]# sed -i 's/^#master: salt/master: 192.168.0.110/g' /etc/salt/minion   #註意master:後的空格
[root@manager110 ~]# sed -i 's/^#id:/id: manager110/g'  /etc/salt/minion   #註意id:後的空格

# 查看配置內容
[root@manager110 ~]# sed -n '/^master:/p'  /etc/salt/minion
master: 192.168.0.110
[root@manager110 ~]# sed -n '/^id:/p'  /etc/salt/minion
id: manager110

[root@manager110 salt]# cat /etc/salt/minion
master: 192.168.0.110
id: manager110

完整配置:(大部分都是預設配置)

[root@manager110 salt]# cat /etc/salt/minion
master: 192.168.0.110
ipv6: False
master_port: 4506
user: root
pidfile: /var/run/salt/salt-minion.pid
conf_file: /etc/salt/minion
pki_dir: /etc/salt/pki/minion
minion_id_caching: True
cachedir: /var/cache/salt/minion
sock_dir: /var/run/salt/minion
log_file: /var/log/salt/minion
log_level: warning
log_datefmt: '%H:%M:%S'
tcp_keepalive: True
tcp_keepalive_idle: 300

4.4:修改被控端的minion配置文件

最簡配置:配置master: 192.168.0.110即可;id可以不用配置,預設取hostname。

切記:“master: ” 冒號後要添加一個空格,然後再寫IP。

[root@db101 ~]# sed -i 's/^#master: salt/master: 192.168.0.110/g' /etc/salt/minion   #註意master:後有空格
[root@db101 ~]# sed -i 's/^#id:/id: db101/g'  /etc/salt/minion   #註意id:後的空格

[root@db101 ~]# sed -n '/^master:/p'  /etc/salt/minion
master: 192.168.0.110
[root@db101 ~]# sed -n '/^id:/p'  /etc/salt/minion
id: db101


[root@db101 ~]# cat /etc/salt/minion
master: 192.168.0.110
id: db101


# 其它被控端部署同上,db101修改成對應的host名稱就可以了。
# db102修改
sed -i 's/^#master: salt/master: 192.168.0.110/g' /etc/salt/minion 
sed -i 's/^#id:/id: db102/g'  /etc/salt/minion

# db103修改
sed -i 's/^#master: salt/master: 192.168.0.110/g' /etc/salt/minion 
sed -i 's/^#id:/id: db103/g'  /etc/salt/minion

# 查看
sed -n '/^master:/p'  /etc/salt/minion
sed -n '/^id:/p'  /etc/salt/minion

完整配置:(大部分是預設配置)

[root@db101 ~]# cat /etc/salt/minion
master: 192.168.0.110
ipv6: False
master_port: 4506
user: root
pidfile: /var/run/salt/salt-minion.pid
conf_file: /etc/salt/minion
pki_dir: /etc/salt/pki/minion
minion_id_caching: True
cachedir: /var/cache/salt/minion
sock_dir: /var/run/salt/minion
log_file: /var/log/salt/minion
log_level: warning
log_datefmt: '%H:%M:%S'
tcp_keepalive: True
tcp_keepalive_idle: 300

4.5:重啟服務

# 主控端
systemctl restart salt-master
systemctl status salt-master

systemctl restart salt-minion
systemctl status salt-minion

# 被控端
systemctl restart salt-minion
systemctl status salt-minion

4.6:salt-minion和salt-master認證過程

  • minion在第一次啟動時,會在/etc/salt/pki/minion/下自動生成一對密鑰,然後將公鑰發給master
  • master收到minion的公鑰後,通過salt-key命令接受該公鑰。此時master的/etc/salt/pki/master/minions目錄將會存放以minion id命名的公鑰,然後master就能對minion發送控制指令了
  • master 秘鑰對預設存儲在/etc/salt/pki/master/master.pub /etc/salt/pki/master/master.pem
  • master 端認證的公鑰存儲在:/etc/salt/pki/master/minions/
  • minion 秘鑰對預設存儲在/etc/salt/pki/minion/minion.pub /etc/salt/pki/minion/minion.pem
  • minion 存放的master公鑰/etc/salt/pki/minion/minion_master.pub
  • minion_id 預設存儲在/etc/salt/minion_id
    若想修改minion名稱,需刪除原來的minion_id,重啟重新生成一個minion_id

salt-key常用選項

-L             列出所有公鑰信息
-a minion      接受指定minion等待認證的key
-A             接受所有minion等待認證的key
-r minion      拒絕指定minion等待認證的key
-R             拒絕所有minion等待認證的key
-f minion      顯示指定key的指紋信息
-F             顯示所有key的指紋信息
-d minion      刪除指定minion的key
-D             刪除所有minion的key
-y             自動回答yes

查看當前證書情況

[root@manager110 salt]# salt-key -L
Accepted Keys:
manager110
Denied Keys:
Unaccepted Keys:
Rejected Keys:

接受指定minion的新證書

[root@manager110 salt]# salt-key -a -y db101
The key glob '-y' does not match any unaccepted keys.

# 查看salt master和minion的版本是否一致,如果不一致保持一致。
[root@manager110 salt]# salt-minion --versions-report


image-20230321211612018

接受所有minion的新證書

[root@manager110 manager110]# salt-key -y -A

4.7:debug

[root@db101 salt]# salt-minion -l debug
[DEBUG   ] TiamatPipPathFinder.find_spec: First time trying to load log4mongo
[DEBUG   ] TiamatPipPathFinder.find_spec: First time trying to load raven
[DEBUG   ] Reading configuration from /etc/salt/minion
[WARNING ] Insecure logging configuration detected! Sensitive data may be logged.
[DEBUG   ] TiamatPipPathFinder.find_spec: First time trying to load log4mongo
[DEBUG   ] TiamatPipPathFinder.find_spec: First time trying to load raven
[DEBUG   ] Configuration file path: /etc/salt/minion
[INFO    ] Setting up the Salt Minion "db101"
[INFO    ] An instance is already running. Exiting the Salt Minion
[INFO    ] Shutting down the Salt Minion
The Salt Minion is shutdown.

4.8:查看日誌

[root@manager110 salt]# cat /var/log/salt/master 
[root@manager110 salt]# cat /var/log/salt/minion 

[root@db101 salt]# tail -f /var/log/salt/minion 
2023-03-21 21:38:47,174 [salt.minion      :1089][ERROR   ][95757] Minion unable to successfully connect to a Salt Master.
2023-03-21 21:39:07,335 [salt.minion      :1141][ERROR   ][95757] Error while bringing up minion for multi-master. Is master at 192.168.0.110 responding?


# 查看埠是否通
[root@db101 salt]# telnet 192.168.0.110 4505
Trying 192.168.0.110...
telnet: connect to address 192.168.0.110: No route to host


# 埠不通,直接關閉防火牆
$ systemctl stop firewalld && systemctl disable firewalld



# 重新查看
[root@manager110 manager110]# salt-key -L
Accepted Keys:
db101
db102
db103
manager110
Denied Keys:
Unaccepted Keys:
Rejected Keys:

image-20230321214510181

五:常用模塊、命令、執行

5.1:列出所有salt的sys模塊

[root@manager110 manager110]# salt db101 sys.list_modules

5.2:test模塊下的ping方法測試主機是否存在

# 指定一個minion
[root@manager110 manager110]# salt db101 test.ping
db101:
    True

# 指定多個minions : -L:list,可指定多個minions,多個minions之間用空格或者逗號隔開
[root@manager110 manager110]# salt -L "db101 db102 db103" test.ping
[root@manager110 manager110]# salt -L "db101,db102,db103" test.ping
db102:
    True
db101:
    True
db103:
    True


# 所有的minions
[root@manager110 manager110]# salt "*" test.ping
db101:
    True
db102:
    True
manager110:
    True
db103:
    True
    

5.3:cmd超級模塊,所有shell命令都能執行

[root@manager110 manager110]# salt '*' cmd.run 'ps -ef | grep python'
db101:
    root       1053      1  0 Mar16 ?        00:00:37 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
    root      97014  97013  0 22:09 ?        00:00:00 /bin/sh -c ps -ef | grep python
    root      97016  97014  0 22:09 ?        00:00:00 grep python
manager110:
    root       1143      1  0 Mar19 ?        00:00:17 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
    root      55232  78679 64 22:09 pts/0    00:00:00 /opt/saltstack/salt/run/run * cmd.run ps -ef | grep python MainProcess
    root      55247  55243  0 22:09 ?        00:00:00 /bin/sh -c ps -ef | grep python
    root      55249  55247  0 22:09 ?        00:00:00 grep python
db102:
    root       1047      1  0 Mar17 ?        00:00:28 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
    root      66497  66496  0 22:09 ?        00:00:00 /bin/sh -c ps -ef | grep python
    root      66499  66497  0 22:09 ?        00:00:00 grep python
db103:
    root       1052      1  0 Mar17 ?        00:00:29 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
    root     113232 113231  0 22:09 ?        00:00:00 /bin/sh -c ps -ef | grep python
    root     113234 113232  0 22:09 ?        00:00:00 grep python

5.4:salt-run命令

該命令執行runner(salt帶的或者自定義的,runner以後會講),通常在master端執行,比如經常用到的manage

salt-run [options] [runner.func]
salt-run manage.status   ##查看所有minion狀態
salt-run manage.down     ##查看所有沒線上minion
salt-run manage.up       ##查看所有線上minion

5.5:salt-key密鑰管理,通常在master端執行

salt-key [options]
salt-key -L              ##查看所有minion-key
salt-key -a <key-name>   ##接受某個minion-key
salt-key -d <key-name>   ##刪除某個minion-key
salt-key -A              ##接受所有的minion-key
salt-key -D              ##刪除所有的minion-key

5.6:salt-call

該命令通常在minion上執行,minion自己執行可執行模塊,不是通過master下發job

salt-call [options] <function> [arguments]
salt-call test.ping           ##自己執行test.ping命令
salt-call cmd.run 'ifconfig'  ##自己執行cmd.run函數

5.7:salt-cp

分發文件到minion上,不支持目錄分發,通常在master運行

salt-cp [options] '<target>' SOURCE DEST
salt-cp '*' testfile.html /tmp
salt-cp 'test*' index.html /tmp/a.html

5.8:salt-ssh



5.9:salt-master

master 運行命令

salt-master [options]
salt-master            ##前臺運行master
salt-master -d         ##後臺運行master
salt-master -l debug   ##前臺debug輸出

5.10:salt-minion

minion運行命令

salt-minion [options]
salt-minion            ##前臺運行
salt-minion -d         ##後臺運行
salt-minion -l debug   ##前臺debug輸出

5.11:salt-syndic

syndic是salt的代理

十:參考文章

參考文章:https://blog.csdn.net/hbhe0316/article/details/122701252

參考文章:https://blog.csdn.net/m0_46674735/article/details/113928894

參考文章:[死磕salt系列-salt配置文件 - biglittleant - 博客園 (cnblogs.com)](https://www.cnblogs.com/biglittleant/p/8743843.html#:~:text=死磕salt系列-salt配置文件 1 interface%3A 伺服器監聽地址。 2 ipv6%3A 是否啟用ipv6。 3,5 timeout%3A 設置saltAPI和命令預設超時時間。 6 state_verbose%3A 顯示返回狀態的詳細信息程度。 False 只返回變化的地方及執行結果。)

參考文章:zmq導致master收不到minion的key - doublexi - 博客園 (cnblogs.com)

參考文章:salt常用命令、模塊、執行 - davygeek - 博客園 (cnblogs.com)

salt命令詳解:https://docs.saltproject.io/en/getstarted/fundamentals/remotex.html, https://docs.saltproject.io/en/getstarted/system/execution.html
執行函數模塊:https://docs.saltproject.io/en/latest/ref/modules/all/index.html#all-salt-modules
salt 插件:https://docs.saltproject.io/en/getstarted/system/plugins.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • aliases: [] tags : " #QA #Java " summary: [POI生成Excel超出的單元格樣式的最大數量] author : [yaenli] notekey: [20230322-100908] 問題現象 使用Apache POI生成Excel時,如果創建的單元格樣式過 ...
  • Tomcat生命周期管理 各種組件如何統一管理 Tomcat的架構設計是清晰的、模塊化、它擁有很多組件,加入在啟動Tomcat時一個一個組件啟動,很容易遺漏組件,同時還會對後面的動態組件拓展帶來麻煩。如果採用我們傳統的方式的話,組件在啟動過程中如果發生異常,會很難管理,比如你的下一個組件調用了sta ...
  • Tcl語言線上運行編譯,是一款可線上編程編輯器,在編輯器上輸入Tcl語言代碼,點擊運行,可線上編譯運行Tcl語言,Tcl語言代碼線上運行調試,Tcl語言線上編譯,可快速線上測試您的Tcl語言代碼,線上編譯Tcl語言代碼發現是否存在錯誤,如果代碼測試通過,將會輸出編譯後的結果。 該線上工具由IT寶庫提 ...
  • 直入主題: Q1:為什麼要用分散式鎖? 在分散式系統中,多個進程或線程可能會同時訪問共用資源,這可能會導致數據不一致、併發性問題、性能下降等問題。為瞭解決這些問題,我們通常會使用分散式鎖來協調多個進程或線程對共用資源的訪問。 分散式鎖是一種協調機制,它通過在共用資源上設置鎖來防止多個進程或線程同時訪 ...
  • 一.註解 1. 註解入門 Annotation是從JDK5.0開始引入的新技術 Annotation的作用: 不是程式本身,可以對程式做出解釋(這一點和註釋(comment)沒什麼區別) 可以被其他程式(比如:編譯器等)讀取 Annotation的格式: 註解是以“@註解名”在代碼中存在的,還可以添 ...
  • 原文:blog.csdn.net/qunqunstyle99/article/details/94717256 ThreadLocal是什麼 ThreadLocal是一個本地線程副本變數工具類。主要用於將私有線程和該線程存放的副本對象做一個映射,各個線程之間的變數互不幹擾,在高併發場景下,可以實現無 ...
  • 說明 使用 VLD 記憶體泄漏檢測工具輔助開發時整理的學習筆記。 1. 使用前的準備 參考本人另一篇博客 安裝 Visual Leak Detector 下載 vld-2.5.1-setup.exe 並按步驟安裝 VLD。這一種使用方式的特點是,在一臺電腦上安裝完成後,將 VLD 安裝目錄下的 lib ...
  • ​1 導庫 import re 2 使用模板 re_pattern = re.compile(pattern, flags=0) result = re.findall(re_pattern,string) 3 說明 參數 描述 pattern 匹配的正則表達式,如 r'abc' 可用來匹配abc ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...