1.前言
你会如何在服务器配置和数量方面进行选择呢?
是购买一台配置高的服务器,还是选择购买多台配置低的服务器呢?
夜梦选择后者,毕竟高配服务器对夜梦来说没用。最近夜梦一直在折腾,多点服务器就可以部署多个项目,几个小项目可以同时跑。
此外,最近夜梦 闲的没事干 想要学习学习虚拟化方面的知识,于是找到了一个名为“一键虚拟化项目”的资源,借助该项目可以在一台主机上创建多个虚拟机,实现多“一机多用”!
2.地址
一键虚拟化项目 | 开源、易于使用的服务器虚拟化项目 (spiritlhl.net)
夜梦使用LXD方法,具体参考:系统与硬件配置要求 | LXD
3.准备
夜梦使用的服务器为:
夜梦开的小机在两服务商机器上面已经测试成功!
官网给的步骤已经十分详细,夜梦这里仅仅做简单叙述。
4.系统与硬件配置要求
4.1硬件要求
- 系统:Debian 8+, Ubuntu 18+(推荐 Ubuntu 20.04)
- 虚拟化:推荐KVM、VMWARE虚拟化
- 内存:内存至少512MB
- 硬盘:硬盘(系统盘)至少10G
- 网络:独立的IPV4地址,IPV6可有可无,带宽能下载脚本就行,网络能连接Github的raw页面就行
4.2项目特点
- 本套脚本开发使用的Ubuntu20,Ubuntu别的长期维护版本应该也没问题,Debian无法使用zfs时自动切换别的存储类型
- 已设置同时进行TCP和UDP转发,除了SSH端口其他的映射内网外网端口一致
- 已设置支持开出的LXC容器进行docker嵌套虚拟,默认普通版本和纯探针版本使用debian11系统
- 已屏蔽容器内可能用于滥用的工具包和IPV4网络的TCP/UDP协议的端口( 3389 8888 54321 65432 ),以防止容器被用于扫描和爆破,且可外置进程检查有问题自动停机
- 已支持一键为LXC容器配置IPV6地址(前提是母鸡有IPV6子网,无IPV6地址则不配置),自动适配子网大小
- 保证你要开的盘为默认的系统盘(sda或者sda1)而不是挂载的盘(sdb之类的),不确定的使用
fdisk -l
和df
查看 - 挂载其他盘的详看 其他说明
- 一键脚本支持自定义限制所有内容,普通版本支持多次运行批量生成不覆盖先前生成的配置
4.3检测环境
使用后续脚本的务必执行本命令检测宿主机是否符合要求
国际
bash <(wget -qO- --no-check-certificate https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/pre_check.sh)
国内
bash <(wget -qO- --no-check-certificate https://ghproxy.com/https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/pre_check.sh)
5.LXD主体安装
夜梦这里仅介绍手动安装过程(方便排查Bug)。
5.1关闭防火墙
apt update
apt install curl wget sudo dos2unix ufw jq -y
ufw disable
5.2开设虚拟内存SWAP
虚拟内存的大小看你需要开多少台机器。
举个例子:如果你每台机器内存开256M,开8台,则换算下来需要2G内存。但是如果你的宿主机实际内存只有512MB,那么你就至少还需要1.5G的虚拟内存,保守点开2G虚拟内存即可。不就是超开嘛!实际swap开的虚拟内存最好是实际内存的2倍(影响小),按照例子来说也就是1GB。
执行下面命令,输入1,再输入2048,代表开2G虚拟内存
国际
curl -L https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/swap.sh -o swap.sh && chmod +x swap.sh && bash swap.sh
国内
curl -L https://ghproxy.com/https://raw.githubusercontent.com/spiritLHLS/lxd/main/script
5.3安装LXD
apt install snapd -y
snap install lxd
/snap/bin/lxd init
如果上面的命令中出现下面的错误
(snap "lxd" assumes unsupported features: snapd2.39 (try to update snapd and refresh the core snap))
使用命令修补后再进行lxd的安装
snap install core
如果无异常,一般的选项回车默认即可。其中两项需要注意一下:
- 选择配置物理盘大小(提示最小1GB那个选项),建议填空闲磁盘大小减去内存大小后乘以0.95并向下取整。
- 提示带auto的更新image的选项记得选no,避免更新占用系统。
测试lxc有没有软连接上
lxc -h
如果报错则执行以下命令软连接lxc命令:
! lxc -h >/dev/null 2>&1 && echo 'alias lxc="/snap/bin/lxc"' >> /root/.bashrc && source /root/.bashrc
export PATH=$PATH:/snap/bin
连接后再测试lxc命令是否有报错找不到。
6.LXC虚拟化
6.1单独生成一个NAT服务器
只生成一个NAT服务器,可自定义限制所有内容
脚本下载:
国际
curl -L https://ghproxy.com/https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/buildone.sh -o buildone.sh && chmod +x buildone.sh && dos2unix buildone.sh
国内
curl -L https://ghproxy.com/https://ghproxy.com/https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/buildone.sh -o buildone.sh && chmod +x buildone.sh && dos2unix buildone.sh
6.1.1使用方法
./buildone.sh 小鸡名称 内存大小 硬盘大小 SSH端口 外网起端口 外网止端口 下载速度 上传速度 是否启用IPV6(Y or N) 系统(留空则为debian11)
内存大小以MB计算,硬盘大小以GB计算,下载速度上传速度以Mbit计算,是否启用IPV6不一定要填Y或者N,没有这个参数也行,留空默认不开启IPV6
如果外网起端口
和外网止端口
都设置为0则不做区间外网端口映射了,只映射基础的SSH端口,注意不能为空
,不进行映射需要设置为0
支持自定义小鸡的系统,不填写留空时默认使用debian11,注意传入参数为系统名字+版本号,如:
- debian10,debian11,debian12
- ubuntu18,ubuntu20,ubuntu22
- centos8,centos9 (实际开设出来都是Stream版本)
- alpine3.15,alpine3.16,alpine3.17,alpine3.18
- 注意都是小写字母+数字的组合,自行尝试,如果搜索无该系统则会自动退出脚本
- 版本号可以带英文小数点,为了适配alpine的版本号已支持
- 注意部分系统可能因为未加载cgroup,所以在容器内测试系统资源会显示的宿主机的系统资源,实际是有约束的
6.1.2示例
./buildone.sh test 256 2 20001 20002 20025 500 500 N
- 以下为开设的示例小鸡的信息:
`小鸡名字` - test
`SSH登录的用户名` - root
`SSH登录的密码` - 随机生成
`CPU核数` - 1
`内存大小` - 256MB
`磁盘大小` - 2G
`内外网映射端口一致的区间` - 20002到20025
`上传带宽` - 500Mbit
`下载带宽` - 500Mbit
`自动设置外网IPV6地址` - N
`系统` - debian11
需要查看信息则执行
cat 小鸡名字
比如查询示例的信息就是
cat test
如果已通过以上方法生成过小鸡,还需要批量生成小鸡,可使用自定义批量生成版本的脚本,但注意先删除测试小鸡再进行批量生成小鸡
6.1.3删除测试小鸡
lxc stop test
lxc delete test
rm -rf test
rm -rf test_v6
ls
6.2普通版本批量生成
开出的小鸡配置:
- 1核256MB内存1GB硬盘限速300Mbit带宽
- 带1个SSH端口,25个外网端口
- 默认内存和硬盘大小
TIP
lxc若命令无问题,执行初始化开小鸡,这一步最好放
screen
中后台挂起执行,开小鸡时长与你开几个和母鸡配置相关
执行下面命令加载开机脚本
国际
curl -L https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/init.sh -o init.sh && chmod +x init.sh && dos2unix init.sh
国内
curl -L https://ghproxy.com/https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/init.sh -o init.sh && chmod +x init.sh && dos2unix init.sh
下面命令为开小鸡名字前缀为tj的10个小鸡
./init.sh tj 10
有时候init.sh的运行路径有问题,此时建议前面加上sudo强制根目录执行
6.3纯SSH端口版本批量生成
开出的小鸡配置:
- 1核128MB内存300MB硬盘限速300Mbit带宽
- 只有一个SSH端口
- 无法挂载warp
TIP
lxc若命令无问题,执行初始化开小鸡,这一步最好放
screen
中后台挂起执行,开小鸡时长与你开几个和母鸡配置相关
加载开机脚本
国际
curl -L https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/least.sh -o least.sh && chmod +x least.sh && dos2unix least.sh
国内
curl -L https://ghproxy.com/https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/least.sh -o least.sh && chmod +x least.sh && dos2unix least.sh
下列命令最后一行为开小鸡名字前缀为tj的10个小鸡
./least.sh tj 10
有时候least.sh的运行路径有问题,此时建议前面加上sudo强制根目录执行
6.4自定义批量生成版本
- 可自定义内存和硬盘大小
- 有执行过上面的手动批量生成过也没问题,配置是继承的不覆盖
如果需要多次批量生成小鸡,可使用
国际
curl -L https://github.com/spiritLHLS/lxd/raw/main/scripts/add_more.sh -o add_more.sh && chmod +x add_more.sh && bash add_more.sh
国内
curl -L https://ghproxy.com/https://github.com/spiritLHLS/lxd/raw/main/scripts/add_more.sh -o add_more.sh && chmod +x add_more.sh && bash add_more.sh
可多次运行批量生成小鸡,且继承前面已生成的部分在后面添加,可自定义内存和硬盘大小
6.5查看已批量开设的信息
开完小鸡后,具体信息会生成在当前目录下的log文件中,格式如下
1号服务器名称 密码 ssh端口 外网端口起始 外网端口终止
2号服务器名称 密码 ssh端口 外网端口起始 外网端口终止
如果想要查看,只需在当前目录执行以下命令打印log文件即可
cat log
WARNING
不要拿该脚本开出的小鸡当生产环境,LXC虚拟化不支持换内核,dd,开启bbr等操作
6.6部分常用LXD命令
查看所有
lxc list
查看个例
lxc info 服务器名字
启动个例
lxc start 服务器名字
停止个例
lxc stop 服务器名字
删除个例
lxc delete -f 服务器名字
进入内部
lxc exec 服务器名字 /bin/bash
TIP
在alpine中不用/bin/bash而是用/bin/sh,常规的系统都是/bin/bash
退出则输入
exit
回车即可
删除所有LXC容器
lxc list | awk '{print $2}' | grep -v "^$" | xargs -I {} lxc delete -f {}
在容器内执行删除无用日志
sudo apt-get autoremove
sudo apt-get clean
sudo find /var/log -type f -delete
sudo find /var/tmp -type f -delete
sudo find /tmp -type f -delete
sudo find /var/cache/apt/archives -type f -delete
6.7更新上述所有一键脚本的相关命令
删除原始配置脚本
rm -rf /usr/local/bin/alpinessh.sh
rm -rf /usr/local/bin/config.sh
rm -rf /usr/local/bin/ssh.sh
rm -rf /usr/local/bin/check-dns.sh
rm -rf /root/alpinessh.sh
rm -rf /root/config.sh
rm -rf /root/ssh.sh
rm -rf /root/buildone.sh
rm -rf /root/add_more.sh
下载回新版本的相关配置脚本
wget https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/check-dns.sh -O /usr/local/bin/check-dns.sh && chmod +x /usr/local/bin/check-dns.sh
wget https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/config.sh -O /usr/local/bin/config.sh && chmod +x /usr/local/bin/config.sh
wget https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/ssh.sh -O /usr/local/bin/ssh.sh && chmod +x /usr/local/bin/ssh.sh
wget https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/alpinessh.sh -O /usr/local/bin/alpinessh.sh && chmod +x /usr/local/bin/alpinessh.sh
其他一键脚本自己对应下载回来就行了
7.可视化操作面板
- 非必须,该面板只是为了方便可视化操作,没有也没问题
- 作者仓库:跳转
lxc config set core.https_address [::]
lxc config set core.trust_password some-secret-string
snap install lxdmosaic
安装完毕后打开宿主机IP地址,按照提示设置admin的密码,其他一路默认就能使用面板了