意義
各位礦工在參與CVNT項目時爲了到達一機多挖的效果,選擇了虛擬機Vmware等方式。但Vm佔用資源高且安裝效率慢。而docker則可以很好的解決這個問題。現爲大家講解,如何以最優雅的方式實現一機多挖。
我的微信:laughing_jk 由於各種原因,腳本下載地址暫時關閉,如果您需要腳本請添加我的微信,加我請備註出處。
腳本已更新至2019.11.1 已適配CVNT最新版本,
針對官方限制虛擬機流量,我的方案是,多開篩選。比如 一臺機器打算跑40個 在虛擬的時候 虛擬100個
這樣起碼應該有40個有流量 拿低保 想相當於最大化利用資源。
雖治標不治本,但能更多地保證低保
虛擬節點數量建議:;
虛擬個數 =3*(心儀節點數)-0零點的節點
ps:假如您打算虛擬40個虛擬節點。 在安裝過程的中 可以將參數填寫爲虛擬120個,然後讓節點跑一個小時後,在super-user.rrysapi.com刪除0流量的節點。
一、必要配置以及準備(若有python3,則跳過此步驟)
我們是基於python3開發的腳本,所以在運行一鍵安裝CVNT腳本時,必須確保本機有裝有python3。
1.1判斷是否有python3
請在服務器端打開終端輸入python3 ,若出現如下界面,則代表您已經安裝過python3,可跳過配置階段。
圖1.1
1.2安裝python3
1.2.1請複製鏈接並打開瀏覽器,點擊download.zip(如圖):https://github.com/lsy-zhaoshuaiji/Installcvnt.git
1.2.2 解壓文件
解壓後您將會看到兩個文件installCvnt.py和python.sh,請將這兩個文件複製到您的目錄中,並在此目錄中打開命令終端。 1.2.3切換管理員權限,(切換root)
請輸入 su root 點擊回撤,並輸入密碼 再點擊回撤
ps(小編抱怨一句):不要問我爲什麼輸入密碼不顯示,如果這個你都不懂 ,你自己請技術去安裝。這類問題,也不要在羣裏問我,問我,我也不想說。
1.2.3安裝python3.6
請在終端輸入:
sh python.sh
腳本會自動幫您安裝python3,這個過程是編譯安裝,可能需要5-10分鐘,機器會一直刷屏。請您耐心等待
1.2.4檢驗是否安裝成功
再次輸入python3 若出現如圖1.1所示就代表成功安裝python3.
ps:出現如圖1.1所述就代表成功了,其他的顯示不重要。
二、一鍵安裝多臺Cvnt(重點來了哦)
2.1下載腳本文件
請複製鏈接並打開瀏覽器,點擊download.zip(如圖):https://github.com/lsy-zhaoshuaiji/Installcvnt.git
2.2解壓文件
解壓後您將會看到兩個文件installCvnt.py和python.sh,請將這兩個文件複製到您的目錄中,並在此目錄中打開命令終端。
1.2.3切換管理員權限,(切換root)
請輸入 su root 點擊回撤,並輸入密碼 再點擊回撤
2.3掛載並獲取硬盤掛載位置方法(若您已經掛載過,可跳過此步驟):
請輸入以下命令:
fdisk -l
比如5.5T的硬盤,/dev/sda 這就是我要掛載的硬盤名,再輸入:
mkdir /home/data1
mkfs.ext4 /dev/sda
mount /dev/sda /home/data1
檢查硬盤大小,請輸入下面的命令,若出現了正確的大小,則代表掛載完成
df -h --total
其中/dev/sda爲您的硬盤,請根據自己的硬盤名稱填寫
其中/home/data1爲硬盤掛載點,也就是下文您mount_dev參數。請記住這個參數
開機自動掛載:(可跳過此步驟,請點擊下面地址)
自動掛載https://blog.csdn.net/up_com/article/details/51264872
2.4執行安裝程序腳本(重點)
1.在終端輸入
python3 installCvnt.py docker_num(虛擬節點的個數) cvnt_uid(您人人影視的uid) mount_dev(外接硬盤的掛載目錄)
新版本加入了mount_dev參數,可根據此參數讓虛擬節點內部存儲到硬盤上、此參數可以爲空。但由於固態空間比較小,如果您需要虛擬大於20個節點時,建議您在礦機上接一塊硬盤。
例如:
python3 installCvnt.py 25 123456 /home/data2
#25爲虛擬25個cvnt節點
#123456爲UID值
#/home/data2 爲硬盤掛載點
如果您虛擬的節點數量比較小,可以不填寫mount_dev參數,讓cvnt存儲在固態硬盤上:
例如:
python3 installCvnt.py 5 123456
#5爲虛擬5個cvnt節點
#123456爲UID值
請按照自己的需求修改參數值,不改的話,您就沒收益了,。
~~~代碼執行過程中需要獲取dockerHub的鏡像,雖然我用阿里雲加速了 但可以還是會等待很久,所以請您耐心等待5-10分鐘(根據您的網速來決定)
2.4在web端開啓挖礦(後續我會將基於selenium自動化一鍵開啓挖礦的程序開源 ,目前您還是手動點擊開啓挖礦)
執行完腳本後會返回如下界面,其中[60001,60005.......]就是您的web開啓端口,如圖:
請在瀏覽器中輸入您的公網ip+端口訪問 並點擊開啓挖礦
您的本機IP可以在終端通過命令ip addr 或者 ifconfig獲取
若您是UPNP則按照您實際的公網IP 填寫
如在瀏覽器中輸入-----> 171.8.91.65:60001 (第一個節點)
-----> 171.8.91.65:600015 (第二個節點)
........等
2.5請在瀏覽器輸入http://super-user.rrysapi.com/#/ 查看運行狀態
在執行後上述操作後,在此後臺可以查看礦機狀態,大概一/二個小時就會顯示公網ip
若顯示了公網ip則代表安裝成功。
到此安裝教程結束,下面我們對源碼進行說明(感興趣的小夥伴可以看看,不感興趣則跳過)
功能更新:(可忽略)
一.自動化點擊web端開啓挖礦程序:
(前提:您必須已經安裝谷歌瀏覽器,其他瀏覽器暫時不支持)
1.1請複製鏈接並打開瀏覽器,點擊download.zip:https://github.com/lsy-zhaoshuaiji/Installcvnt.git並下載autoclick.rar文件,如圖:
1.2解壓autoclick程序,並運行autoclick.exe
1.2.3按照要求填寫信息,系統將自動開啓挖礦
二.機器重啓後,自動恢復掉線的CVNT節點
1.2.1請複製鏈接並打開瀏覽器,點擊download.zip:https://github.com/lsy-zhaoshuaiji/Installcvnt.git
1.2.2 下載restart_cvnt.py文件:
1.2.3在礦機端執行 python3 restart_cvnt.py
執行後 掉線的節點會自動恢復,過一個小時,後臺便會恢復狀態。
三、關鍵源碼解讀(如果您改善了源碼,請聯繫我)
我的微信:laughing_jk 加人請備註來源
邏輯上我定義了這幾個方法,如圖:
其中:
# -*- coding:utf-8 -*-
#這個是讓服務器能識別UTF-8編碼的
1.檢測安裝docker
這個邏輯很簡單:
1.根據which docker的返回值判斷是否安裝了docker
2.針對不同linux內核版本配置阿里源
3.安裝並啓動docker
def install_docker():
'''
判斷系統內核,安裝docker
:return:
'''
output = subprocess.getoutput('which docker')
if len(output) < 2:
print('正在安裝docker中.......')
output = subprocess.getoutput('lsb_release -a')
if 'CentOS' in output:
print('您的系統爲:CentOS')
docker_shell = 'yum install -y yum-utils device-mapper-persistent-data lvm2 &&' \
'yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo &&' \
'yum makecache fast &&' \
'yum install docker-ce -y'
output = subprocess.getoutput(docker_shell)
elif 'Ubuntu' in output:
print('您的系統爲:Ubuntu')
docker_shell='apt-get update &&' \
'apt-get -y install apt-transport-https ca-certificates curl software-properties-common &&' \
'curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - &&' \
'add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" &&' \
'apt-get update &&' \
'apt-get -y install docker-ce'
else:
docker_shell ='apt-get -y install docker-ce && yum install docker-ce -y'
output = subprocess.getoutput(docker_shell)
subprocess.getoutput('systemctl enable docker && systemctl start docker && systemctl status docker')
print("成功安裝docker,正在安裝CVNT------------>")
else:
print("您已經安裝過docker了,無須安裝,正在安裝CVNT------------>")
2.pull鏡像
這個我要重點講一下封裝的docker鏡像,很多人用docker採集不到公網ip就是因爲這一步驟:
1.首先我在封裝鏡像時使用的是centos,並將採集ip的所以工具手動裝了上去,比如:
yum install lsb
dmidecode -t1
sudo ip link show
sudo ip addr show
yum install sudo
yum install dmidecode
因爲CMDB的採集都會用到這些工具,我們不確定官網採集是用的什麼方式,所以我們提前需要將採集工具封裝在容器中。
這部分源碼邏輯是:
1.判斷docker images中是否有我封裝的鏡像
2.若無鏡像,則修改docker源爲阿里雲,並pull鏡像,若有則跳過。
def pull_docker():
images_status = subprocess.getoutput("docker images|grep reg|awk '{print $(NF-6)}'")
if images_status == "registry.cn-hangzhou.aliyuncs.com/cs_work/cvnt_work":
print("已存在,跳過pull")
return
Change_docker_Source="sudo tee /etc/docker/daemon.json <<-'EOF'\n" \
"{\n" \
" \"registry-mirrors\": [\"https://o4hd5pcr.mirror.aliyuncs.com\"]\n" \
"}\n" \
"EOF\n" \
"sudo systemctl daemon-reload\n" \
"sudo systemctl restart docker\n"
subprocess.getoutput(Change_docker_Source)
print("成功修改docker源......正在獲取鏡像.....請耐心等待幾分鐘......")
output=subprocess.getoutput("docker pull registry.cn-hangzhou.aliyuncs.com/cs_work/cvnt_work:v1.0")
print("容器Images爲:%s"%output)
3.運行容器並修改容器配置文件
代碼邏輯爲:
1.定義映射端口,並隨機生成mac地址
2.docker run 開啓重啓
3.docker exec -c 在進入容器時執行shell命令
def install_cvnt(docker_num,cvnt_uid):
name_num = 1
port_web = 60001
port_list=[]
for i in range(docker_num):
mac=randomMAC()
container_name = "cvnt{}".format(name_num)
a = port_web + 1
b = port_web + 2
c = port_web + 3
port_list.append(port_web)
run_container = "docker run -d -it --name {} " \
" --net bridge --mac-address {} -p " \
"{}:10000 -p {}:59606 -p {}:59608 -p {}:59843 " \
"-h {} " \
"registry.cn-hangzhou.aliyuncs.com/cs_work/cvnt_work:v1.0 ".format(container_name, mac, port_web,
a, b, c, container_name)
container_Id = subprocess.getoutput(run_container)
start_cvnt = r'docker exec %s bash -c "cd /usr/local/yyets_20190829/yyets_20190829;cd conf;' \
r"echo -e '#本地賬戶信息\nuid=%d' > " \
r'user.conf;cd /usr/local/yyets_20190829/yyets_20190829;./install.sh start;"' % (container_Id,cvnt_uid)
result=subprocess.getoutput(start_cvnt)
print(result)
port_web = c
port_web += 1
name_num += 1
return port_list
4.隨機生成mac地址
這部分安裝mac地址的要求來生成即可,很簡單,用隨機數。
def randomMAC():
mac = [0x52, 0x54, 0x00,
random.randint(0x00, 0x7f),
random.randint(0x00, 0xff),
random.randint(0x00, 0xff)]
return ':'.join(map(lambda x: "%02x" % x, mac))
大概就是這些,其實程序本身只是用python、shell與docker交互並不困難。難點在於封裝一個可用的docker容器。
當然在大容器管理下,我還是推薦用k8s集羣化管理。
~~最後,小編會在這兩天去開發一鍵點擊web的程序,知道大家都懶,不想點擊,所以小編就加加班啦。
下次再會~~~~~~~