7里博客

PVE 服务器搭建维护折腾全记录

Proxmox VE 作为一款开源免费的虚拟化服务系统,安装在服务器上要远比单独安装CentOS或Window要好多了。

一、安装部分

前往官方下载对应的PVE版本。本例安装的时候刚好碰上6.0版本发布,我已经彻底踩坑了。后来不得已换回5.4版本。大版本的X.0版本还是等测试好再上到服务器中吧。

1.1 针对物理服务:制作USB安装盘-》插盘-》安装。没什么特别要提示的,记得选好要安装的硬盘就可以了。
安利一下另外一个通用开源的写U盘工具 Etcher,一步搞定。

1.2 针对VPS:如果你可以装载ISO就直接上传PVE的安装ISO就可以了。如果没有,那么就安装Debian系统。然后

[scode type="share"]hostname --ip-address[/scode]

用此命令查看自己的IP是否正确,此处应该会显示你刚才添加的IP了。

然后添加安装源

[scode type="share"]echo "deb http://download.proxmox.com/debian/pve stretch pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list[/scode]

以及为此源添加KEY

[scode type="share"]wget http://download.proxmox.com/debian/proxmox-ve-release-5.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-5.x.gpg[/scode]

更新

[scode type="share"]apt update && apt dist-upgrade[/scode]

最后一键安装PVE,期间要求你设置MAIL SERVER,如果不需要可以选择不设置
[scode type="share"]apt install proxmox-ve postfix open-iscsi[/scode]

这样就安装完成了,访问地址为:https://IP:8006/

二、重要的设置-/etc/rc.local的执行

先检查有没有rc.local的服务。

[scode type="share"]cat /lib/systemd/system/rc.local.service[/scode]

如果没有,那么就vi /lib/systemd/system/rc.local.service 并写入如下内容

[collapse status="true" title="/lib/systemd/system/rc.local.service 范例内容"]
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.

# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.local is executable.
[Unit]
Description=/etc/rc.local Compatibility
ConditionFileIsExecutable=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no
[/collapse]

然后这个/etc/rc.local 有点特别注意的,就是一定要以exit 0 结束。
格式参考:

[collapse status="true" title="/etc/rc.local 范例内容"]
#!/bin/sh
cd /etc/network && cp interfaces.ok interfaces && /etc/init.d/networking restart &
/etc/init.d/isc-dhcp-server restart &
sh /etc/_auto_/pve.up.sh &

exit 0
[/collapse]

三、重要的设置-网络IP设置
我们就直接进实际应用吧,假设服务器有两个IP,分别为111.111.111.111 和111.111.111.222,网关是111.111.111.254。然后需要将不同的IP内网转发到不同的地址。假设10.0.0.100~192分给IP1,10.0.0.193~253分给IP2。如果你有更多IP可以通过IP计算器来划分一下。
重启网络的命令:
[scode type="share"]/etc/init.d/networking restart[/scode]

[collapse status="true" title="/etc/network/interfaces 范例内容"]
# cd /etc/network && cp interfaces.ok interfaces && /etc/init.d/networking restart
auto lo

iface lo inet loopback

auto eno1
#real IP address1
iface eno1 inet static
address 111.111.111.111
netmask 24
gateway 111.111.111.254

auto eno2
#real IP address2
iface eno2 inet static
address 111.111.111.222
netmask 24
gateway 111.111.111.254

auto vmbr0
#private sub network
iface vmbr0 inet static
address 10.0.0.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0

post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '10.0.0.0/25' -o eno1 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.0.0.0/25' -o eno1 -j MASQUERADE

auto vmbr1
#private sub network
iface vmbr1 inet static
address 10.0.0.254
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
post-up iptables -t nat -A POSTROUTING -s '10.0.0.193/26' -o eno2 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.0.0.193/26' -o eno2 -j MASQUERADE
[/collapse]

由于很多时候,这个配置都会提示重启失败,但是不影响使用。

为什么/etc/rc.local执行的时候会有用/etc/network/interfaces.ok 来替代/etc/network/interfaces 然后再重启networking?

主要还是为了安全,因为网络配置不好,就会丢了服务器的控制了。所以,如果检测正常,就放在/etc/network/interfaces.ok。下次启动的时候替换就可以了。多一个事情,就是为了少点出事。

四、重要的设置-NAT指向设置

大家也看得到,很多时候interfaces内容太敏感,我就将内容转出到/etc/_auto_/pve.up.sh来执行。

[collapse status="true" title="/etc/_auto_/pve.up.sh 示范内容"]
echo 1 > /proc/sys/net/ipv4/ip_forward
#可以选择指向端口,速度更快
iptables -t nat -A POSTROUTING -s '10.0.0.1/25' -o eno1 -j MASQUERADE
iptables -t nat -A POSTROUTING -s '10.0.0.192/26' -o eno2 -j MASQUERADE
#或者选择指向IP,更具体
#iptables -t nat -D POSTROUTING -s '10.0.0.1/25' -j SNAT --to-source 111.111.111.111

iptables -t nat -A PREROUTING -d 111.111.111.111 -p tcp --dport 8006 -j DNAT --to-destination 10.0.0.1:8006
iptables -t nat -A PREROUTING -d 111.111.111.111 -p tcp --dport 8022 -j DNAT --to-destination 10.0.0.1:22
iptables -t nat -A PREROUTING -d 111.111.111.111 -p tcp --dport 1:8000 -j DNAT --to-destination 10.0.0.100:1-8000
iptables -t nat -A PREROUTING -d 111.111.111.111 -p tcp --dport 8050:65000 -j DNAT --to-destination 10.0.0.100:8050-65000

iptables -t nat -A PREROUTING -d 111.111.111.222 -p tcp --dport 8006 -j DNAT --to-destination 10.0.0.1:8006
iptables -t nat -A PREROUTING -d 111.111.111.222 -p tcp --dport 8022 -j DNAT --to-destination 10.0.0.1:22
iptables -t nat -A PREROUTING -d 111.111.111.222 -p tcp --dport 1:8000 -j DNAT --to-destination 10.0.0.200:1-8000
iptables -t nat -A PREROUTING -d 111.111.111.222 -p tcp --dport 8050:65000 -j DNAT --to-destination 10.0.0.200:8050-65000
iptables -t nat -vnL PREROUTING
[/collapse]

赋予执行权限:
[scode type="share"]chmod +x /etc/_auto_/pve.up.sh[/scode]

五、重要的设置-DHCP设置
这个时候,母鸡还是要做下DHCP的服务器的。
[scode type="share"]apt install isc-dhcp-server[/scode]

[collapse status="true" title="/etc/dhcp/dhcpd.conf 最后再加内容"]
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.5 10.0.0.230;
option subnet-mask 255.255.255.0;
option domain-name-servers 8.8.8.8, 8.8.4.4;
option routers 10.0.0.1;
option netbios-name-servers 10.0.0.1;
option netbios-node-type 8;
get-lease-hostnames true;
use-host-decl-names true;
default-lease-time 600;
max-lease-time 7200;
interface vmbr0;
include "/etc/dhcp/server.conf";
}
[/collapse]

如果要不绑定网卡,就去掉上面的 interface vmbr0;
然后到/etc/default/isc-dhcp-server 添加相关的网卡ID。
如:INTERFACES="wlan0 eth0"

具体可以参考这里

设置固定的IP指定:/etc/dhcp/server.conf

[collapse status="true" title="/etc/dhcp/dhcpd.conf 最后再加内容"]
host SERVER-100 {
hardware ethernet e2:75:64:12:12:12;
fixed-address 10.0.0.100;
}

host SERVER-101 {
hardware ethernet e2:75:64:12:12:12;
fixed-address 10.0.0.101;
}
[/collapse]

MAC地址冒号分隔,字母要小写。

重启DHCP服务:
[scode type="share"]/etc/init.d/isc-dhcp-server restart[/scode]

六、重要的设置-优化启动,避免一直重启不了

里面提到的这个a stop job running for PVE guest……是一个没有超时的任务,会卡死很久。怎么办?

去/etc/pve/qemu-server/[VMID].conf下面的配置增加
[scode type="share"]watchdog: model=i6300esb,action=reset[/scode]

七、优化日常管理
增加快捷方式: vi ~/.bashrc
[collapse status="true" title="增加快捷方式"]
alias ll='ls $LS_OPTIONS -l'
alias pve.stop="pvesh create /nodes/localhost/stopall"
alias reboot="pvesh create /nodes/localhost/stopall & /sbin/reboot "
alias dhcp.restart='service isc-dhcp-server restart'
alias network.restart='/etc/_auto_/pve.down.iptable.sh && service networking restart && /etc/_auto_/pve.up.iptable.sh && iptables -t nat -vnL PREROUTING'
[/collapse]

里面的reboot做了改动,使得重启前执行关闭全部虚拟机。

八、为虚拟机增加硬盘空间

第一步:关闭对应的VM,在PVE后台设置需要扩容的大小。PVE->硬件->选择硬盘->调整磁盘大小->输入要增加多少G。

第二步:开启该VM,并进行扩容。本案例扩容的是系统盘,盘符/dev/sda。

[scode type="share"]fdisk /dev/sda[/scode]
分别进行要输入的是:
n -> 新建分区
p -> 选择逻辑分区
回车两次 -> 分别默认是新的分区大小始末值
t -> 开始更改分区类型
3 -> 这个是我这边的数字,实际上是列表数字的最后一个,代表最新增加的分区
8e -> 新建的分区格式为: Primary 8e(Linux LVM)
w -> 写入分区。

这个时候可以重启,也可以不重启。

第三步:调整LVM,本案例对应的lv(可以通过 lvdisplay 查看): /dev/mapper/centos_s1-root。

给新建的分区创建物理卷:
[scode type="share"]pvcreate /dev/sda3[/scode]

扩大卷组:
[scode type="share"]vgextend centos_s1 /dev/sda3[/scode]

调整逻辑卷的大小,默认根文件系统的文件系统格式存在差异,需要判断是否为xfs,如果是xfs则应该使用xfs_growfs而不是一味的使用resize2fs。有两种情况:
[collapse status="true" title="xfs版本,大部分VM版本"]
[scode type="share"]xfs_info /dev/mapper/centos_s1-root[/scode]
只要上面的命令执行有输出详细的分区信息就说明是xfs格式。
[scode type="share"]xfs_growfs /dev/mapper/centos_s1-root[/scode]
扩容成功。
[/collapse]

[collapse status="true" title="普通版本,一般是硬盘直通"]
[scode type="share"]vgextend centos_s1 /dev/sda3[/scode]
[scode type="share"]lvextend -l +100%FREE /dev/mapper/centos_s1-root[/scode]
[scode type="share"]resize2fs -p /dev/mapper/centos_s1-root[/scode]
扩容成功。
[/collapse]

九、常用命令:

关闭所有虚拟机:
[scode type="share"]pvesh create /nodes/localhost/stopall[/scode]

查看已执行的iptables规则:
[scode type="share"]iptables -t nat -vnL PREROUTING[/scode]

所有转发端口:
[scode type="share"]iptables -t nat -L -n --line-number[/scode]

重启PVE服务8006端口:
[scode type="share"]service pveproxy restart && service pvedaemon restart[/scode]

直通硬盘给某个虚拟机,比如个给ID100的虚拟机增加stat编号的3硬盘:
[scode type="share"]qm set 100 --sata3 /dev/disk/by-id/scsi-35000c50056bb5083[/scode]

硬盘ID可以在PVE后台看,也可以用下面的命令看硬盘ID:
[scode type="share"]ls /dev/disk/by-id/*[/scode]

释放网卡:如释放vmbr1 虚拟网卡,谨慎操作!
[scode type="share"]ip addr flush dev vmbr1[/scode]

重启网络:
[scode type="share"]service networking restart[/scode]

直接从主机进入小鸡101:

首先,小鸡的配置要增加一个配置:
/etc/pve/qemu-server/101.conf
在最后面增加:
[scode type="share"]serial0: socket[/scode]
重新启动101后可以通过下面的命令进入:
[scode type="share"]qm terminal 101[/scode]

去掉订阅弹窗:
[scode type="share"]sed -i "s/data.status !== 'Active'/false/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js[/scode]

PVE的lvm如果要拓展或者收缩的做法:

将剩余的空间都给root

lvextend -l +100%FREE -r pve/root

从root里面减少400G

lvreduce -L -400G pve/root

一般用法都是讲剩余空间给data的

lvextend -l +100%FREE -r pve/data

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »