利用docker部署oxidized網絡設備備份系統


隨着網絡設備的增多,通過人手備份網絡設備倍感壓力,而且效率低。有編程基礎的人可能會通過Python的parimiko 或者netmiko 連接到設備操作 把文件通過ftp 上傳到FTP服務器, 在通過定時任務,定期自動備份。這個應該是現階段主流非人民幣網絡玩家的最優解決方案。

今天我們來看看oxidized這個被稱之為“最好用的”網絡備份系統,友好的支持不同廠商。

oxidized簡介

oxidized 是一個網絡設備備份系統, 輕量級,可擴展,支持超過90多個操作系統。個人覺得它無與倫比的優勢, 同時支持h3c,華為,思科。

隨着容器化的興起,部署軟件變得的越來越簡單,有的已經幫您封裝好,你開箱即用就可以了。好了下面,我們看看這個oxidized系統有沒有鏡像的。

[root@node1 ~]# docker search oxidized
NAME                       DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
oxidized/oxidized          Oxidized is a network device configuration b…   27                                      [OK]
alectolytic/oxidized       Oxidized: Alpine Linux based Docker image       1                                       [OK]
klinnex/oxidized           Oxidized                                        0                                       [OK]
bootc/oxidized             Oxidized, the configuration backup software …   0                                       
edeln/oxidized             oxidized as a framework, using its ssh and s…   0                                       
mkbarry/oxidized-worker                                                    0                                       
mkbarry/oxidized-tooling                                                   0                                       
b3vis/oxidized             Oxidized config backup software in an Alpine…   0                                       [OK]
neteng1/oxidized           Backup Network Devices                          0                                       
rbrayner/oxidized          older oxidized                                  0                                       [OK]
macaty/oxidized            oxidized                                        0                                       [OK]
ossobv/oxidized            Edited oxidized (ios.rb) so you can use read…   0                                       
dbrockus/oxidized          This is a TEST, DO NO USE                       0                                       
voravitl/oxidized                                                          0                                       
zxandy/oxidized            Oxidized - Configuration backup software htt…   0                                       
deesel/oxidized                                                            0                                       
zeyanlin/oxidized          configuration backup software (IOS, JunOS) -…   0                                       [OK]
samkdocker/oxidized                                                        0                                       
talibaiiika/oxidized                                                       0                                       
splendid/oxidized          mtk                                             0                                       
sfoster/oxidized           Docker Oxidized auto build                      0                                       [OK]
xrlx/graphite-rust         Oxidized graphite stack                         0                                       [OK]
View Code

把官方的 oxidized/oxidized 鏡像拉下來

[root@node1 ~]# docker pull oxidized/oxidized:latest

 下載完啟動鏡像

[root@node1 data]# docker run  --name='oxidized' -itd -v /data/oxidized:/root/.config/oxidized -p 8888:8888/tcp -t oxidized/oxidized
4bbb01b608e38c59469b1056e24c65f1f36f6e65b0734ab1e86b64b4efcf3306

 說明一下:掛載本地/data/oxidized目錄到容器內的/root/.config/oxidized目錄下,將本地8888端口映射到容器的tcp8888端口。

查看是否已經啟動完

[root@node1 data]# docker logs oxidized 
*** Running /etc/my_init.d/00_regen_ssh_host_keys.sh...
*** Running /etc/my_init.d/10_syslog-ng.init...
Jul 11 15:03:44 4bbb01b608e3 syslog-ng[13]: syslog-ng starting up; version='3.13.2'
*** Booting runit daemon...
*** Runit started as PID 21
Jul 11 15:03:45 4bbb01b608e3 cron[29]: (CRON) INFO (pidfile fd = 3)
Jul 11 15:03:45 4bbb01b608e3 cron[29]: (CRON) INFO (Running @reboot jobs)
edit ~/.config/oxidized/config
I, [2019-07-11T15:03:47.866728 #34]  INFO -- : Oxidized starting, running as pid 34
F, [2019-07-11T15:03:47.869750 #34] FATAL -- : Oxidized crashed, crashfile written in /root/.config/oxidized/crash
no source csv config, edit ~/.config/oxidized/config
I, [2019-07-11T15:03:49.179948 #36]  INFO -- : Oxidized starting, running as pid 36
I, [2019-07-11T15:03:49.180885 #36]  INFO -- : lib/oxidized/nodes.rb: Loading nodes
F, [2019-07-11T15:03:49.181047 #36] FATAL -- : Oxidized crashed, crashfile written in /root/.config/oxidized/crash
No such file or directory @ rb_sysopen - /root/.config/oxidized/router.db

從以上日志看到缺失router.db這個文件,導致啟動失敗。解決方法在/data/oxidized目錄下新建router.db文件,並在router.db隨意添加一條記錄。后重新啟動容器

[root@node1 oxidized]# touch router.db
[root@node1 oxidized]# cat router.db
192.168.1.1:vrp:admin:admin [root@node1 oxidized]# docker restart oxidized oxidized [root@node1 oxidized]#

 再次查看日志

[root@node1 data]# docker logs oxidized
......省略
Puma starting in single mode... * Version 3.11.4 (ruby 2.5.1-p57), codename: Love Song * Min threads: 0, max threads: 16 * Environment: development * Listening on tcp://127.0.0.1:8888 Use Ctrl-C to stop [root@node1 oxidized]#

 修改配置文件

router.db是記錄設備備份配置的本地信息文件

x.x.x.x:device type:username:password
10.10.24.241:ios:admin:password
10.10.28.235:comware:admin:password
10.10.0.107:vrp:admin:password

 

 注解:device對應的是容器目錄/var/lib/gems/2.5.0/gems/oxidized-0.26.3/lib/oxidized/model/的文件名

config文件

---
username: username : 用戶名 這個參數不用改,會從router.db讀取.
password: password : 密碼 這個參數也不用改,會從router.db讀取.
model: junos    : 模型 這個參數也不用改,會從router.db讀取.
interval: 3600    : 備份周期 單位是秒,也就是默認一個小時備份一次
log: /home/oxidized/.config/oxidized/logs/oxidized.log:日志
debug: false    :debug模式 
threads: 30    :線程
timeout: 20    : 超時
retries: 3    : 重試次數
prompt: !ruby/regexp /^([\w.@-]+[#>]\s?)$/
rest: 127.0.0.1:8888    :web 用到
next_adds_job: false    
vars: {}
groups: {}
models: {}    
pid: "/home/oxidized/.config/oxidized/pid"
input:    連接設備模式
  default: ssh, telnet
  debug: false
  ssh:
    secure: false
output:    導出配置模式
  default: file
  file:
    directory: "/home/oxidized/.config/oxidized/configs"
source:
  default: csv
  csv:
    file: "/home/oxidized/.config/oxidized/router.db"
    delimiter: !ruby/regexp /:/
    map:    這個地方和router.db里面的參數對應 從0開始
      name: 0
      model: 1
      username: 2
      password: 3
    gpg: false
model_map:
  cisco: ios
  juniper: junos

rest:127.0.0.1:888修改成0.0.0.0:8888。重啟容器,就可以訪問web頁面了。

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM