超牛 X 的企業級網絡設備自動備份系統搭建

網事如煙釋然 發佈 2020-08-12T21:04:58+00:00

網絡運維管理的網絡設備在量級較小的時候,傳統的網絡配置備份通常是人肉登陸手動備份,隨著管理網絡設備越來越多,進階的方式通常會使用腳本自動抓取配置,通過 FTP 等把配置上傳到某處存儲,但如果可以有一個備份系統不需要你使用腳本、不限設備廠商可以支持國內外主流的網絡設備、同時有web介面,能夠查看配置差異對比,同時可以同時同步配置到內部 Gitlab。

背景



網絡運維管理的網絡設備在量級較小的時候,傳統的網絡配置備份通常是人肉登陸手動備份,隨著管理網絡設備越來越多,進階的方式通常會使用腳本自動抓取配置,通過 FTP 等把配置上傳到某處存儲,但如果可以有一個備份系統不需要你使用腳本、不限設備廠商可以支持國內外主流的網絡設備、同時有web介面,能夠查看配置差異對比,同時可以同時同步配置到內部 gitlab。而我們今天要聊的就是這樣的一個系統, 而且安裝配置簡單,最重要開源免費 真正的大殺器 不負」最好用」之名。

官網連結:https://github.com/ytti/oxidized

oxidized搭建


環境準備

系統

nginx

oxidized

Centos 7

1.18.0

0.28.0

卸載系統自帶 ruby,因為系統自帶的版本低於需要的版本要求

[root@host ~]# sudo yum remove ruby ruby-devel


安裝工具包

[root@host ~]# sudo yum groupinstall "Development Tools"

安裝 Ruby

[root@host ~]# wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.5.tar.gz

[root@host ~]# tar -zxvf ruby-2.5.5.tar.gz

[root@host ~]# cd ruby-2.5.5

[root@host ~]# ./configure

[root@host ~]# make

[root@host ~]# sudo make install


安裝所有依賴環境

[root@host ~]# yum install make cmake which sqlite-devel openssl-devel libssh2-devel ruby gcc ruby-devel libicu-devel gcc-c++


安裝 Oxidized

[root@host ~]# gem install oxidized

[root@host ~]# gem install oxidized-script oxidized-web


安裝完成後首次運行 Oxidized,會提示去編輯配置文件

[root@host ~]# oxidized

edit ~/.config/oxidized/config


組件說明

config 文件: 就用來存放配置文件

Sources 欄位: 指出要備份設備的存放方式

Outputs 欄位: 指出備份文件存放的方式

model 欄位:指出該設備的廠商所用的os名稱, 核心功能就是靠這個實現的。

router.db文件 可以理解成 存放被管理主機的地方


編輯配置文件

[root@host ~]# vi ~/.config/oxidized/config

username: username //用戶名 router.db中讀取.

password: password //密碼 router.db中讀取.

model: junos //模型 router.db中讀取.

interval: 86400 //備份周期(秒)

use_syslog: false //日誌開關

debug: false //診斷開關

threads: 100 //線程

timeout: 20 //超時

retries: 3 //重試次數

prompt: !ruby/regexp /^([\w.@-]+[#>]\s?)$/

rest: 10.7.212.16:8888

next_adds_job: false

vars: {}

groups: {}

models: {}

pid: "/root/.config/oxidized/pid"

input: //連接設備模式

default: ssh, telnet

debug: false

ssh:

secure: false

default: git //輸出到git,用來配置對比使用

git:

user: Oxidized

email: o@example.com

repo: "/root/.config/oxidized/git-repos/default.git"

source:

default: csv

csv:

file: "/root/.config/oxidized/router.db" //儲存設備信息IP、Username、Password 等

delimiter: !ruby/regexp /:/

map: //連接順序格式

name: 0

model: 1

ip: 2

group: 3

username: 4

password: 5

vars_map:

enable: 6

comware_cmdline: 7

gpg: false

model_map:

juniper: junos

cisco: ios

huawei: vrp


編輯完配置文件後,在相同路徑下創建一個 router.db文件,用來存儲主機基本信息並被 config文件調用vi ~/.config/oxidized/router.db

test:vrp:172.16.0.1:test:test:test

再次運行 Oxidized,測試備份設備配置成功

[root@host ~]# oxidized

I, [2020-07-28T11:06:20.592961 #14850] INFO -- : Oxidized starting, running as pid 14850

I, [2020-07-28T11:06:20.593455 #14850] INFO -- : lib/oxidized/nodes.rb: Loading nodes

I, [2020-07-28T11:06:20.691863 #14850] INFO -- : lib/oxidized/nodes.rb: Loaded 2 nodes

Puma starting in single mode...

* Version 3.11.4 (ruby 2.5.5-p157), codename: Love Song

* Min threads: 0, max threads: 16

* Environment: development

* Listening on tcp://10.7.212.16:8888

Use Ctrl-C to stop

I, [2020-07-28T11:06:39.980781 #14850] INFO -- : Configuration updated for test/test


驗證,打開 WEB 頁面 ,埠 http://IP:8888



配置對比演示


Oxidized Web 參數介紹

last status: 綠色(備份正常), 藍色(正在備份), 紅色(備份失敗)

last update: 上一次備份的時間

action: 點擊第一個圖標就能看到設備備份文件內容,第二個圖標為配置文件比對,第三個圖標為手動強製備份.


安裝 nginx 服務,默認 WEB 不提供登錄認證,安裝 nginx 進行登錄認證

[root@host ~]# sudo yum install nginx


安裝 httpd 服務

[root@host ~]# sudo yum install httpd-tools


創建一個文件夾用於存儲用戶信息

[root@host ~]# sudo mkdir /usr/local/nginx/

[root@host ~]# sudo chown -R 777 /usr/local/nginx/


創建 web 登錄認證用戶

[root@host ~]# htpasswd -c /usr/local/nginx/.htpasswd oxidized

New password:

Re-type new password:

Adding password for user oxidized


修改 nginx配置文件如下:

[root@host ~]# vi /etc/nginx/conf.d/default.conf

server {

listen 80;

server_name 10.7.212.16;

location / {

root /usr/share/nginx/html;

index index.html index.htm;

auth_basic "Welcome to Oxidized WEB Login";

auth_basic_user_file /usr/local/nginx/.htpasswd;

proxy_pass http://10.7.212.16:8888;

}


賦予nginx 配置文件權限,並啟動 nginx

[root@host ~]# sudo chown -R 777 /usr/local/nginx/

[root@host ~]# systemctl enable nginx && systemctl start nginx


登錄 web 介面提示輸入用戶名密碼,用之前創建的用戶認證成功後跳轉到 Oxidized



最後把 Oxidized nohub 設置為後台運行就行啦!

[root@host ~]# nohup oxidized >> /var/log/oxidized.log 2>&1 &


踩過的坑


華為防火牆HRP備份失敗

$ 進入模塊目錄

[root@host ~]# cd /opt/rh/rh-ruby25/root/usr/local/share/gems/gems/oxidized-0.28.0/lib/oxidized/model

$ 修改 vrp.rb 配置文件

[root@host ~]# vi vrp.rb

$ 修改如下:

prompt /^(HRP_[MS])?(<[\w.-]+>)$/


nginx 安裝失敗

$ 新建 vim nginx.repo 文件

[root@host ~]# vi /etc/yum.repos.d/

[nginx-stable]

name=nginx stable repo

baseurl=http://nginx.org/packages/centos/$releasever/$basearch/

gpgcheck=1

enabled=1

gpgkey=https://nginx.org/keys/nginx_signing.key

[nginx-mainline]

name=nginx mainline repo

baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/

gpgcheck=1

enabled=0

gpgkey=https://nginx.org/keys/nginx_signing.key

然後再 yum -y install nginx 就可以正常安裝啦!

Done!

註:本文僅是開源技術分享,沒有任何商業目的,如有版權問題請聯繫小編刪除處理,我們並表示歉意

END

關鍵字: