云服务器安装AlpineLinux系统

各大云厂商提供了种类繁多的系统镜像,但唯独这个小巧可爱的Alpine无人问津。不过也难不倒咱们这些具有折腾精神的极客们。

本教程支持且不限于阿里云、腾讯云、微软云、谷歌云。

1、登录云服务器,写入Alpine安装镜像后重启
(如果无法正常启动,请先下载好ISO文件,随后切换到Debain的维护模式,再执行dd命令)

# 写入镜像
wget http://dl-cdn.alpinelinux.org/alpine/v3.13/releases/x86_64/alpine-virt-3.13.5-x86_64.iso
dd if=alpine-virt-3.13.5-x86_64.iso of=/dev/vda
# 重启
reboot

2、通过vnc连接云服务器,将安装文件复制到内存中

# 备份文件
tar cf /sys.tar /.modloop /media/vda
# 卸载硬盘
/etc/init.d/modloop stop
umount /dev/vda
# 恢复文件
tar xf /sys.tar -C /

3、执行安装脚本,接下来就需要看你自己的啦~

setup-alpine

另一种安装方式:将本地虚拟机克隆到云服务器

  • 虚拟磁盘格式转换
apt install -y qemu-utils
qemu-img convert -f vmdk -O raw disk.vmdk disk.raw
  • 把本地虚拟机克隆到云服务器
wget -qO- http://your-domain/disk.raw.gz | gunzip | dd of=/dev/vda

ZFS文件系统常用命令

zfs的强大毋庸置疑,今天分享下自己常用的zfs相关命令

存储池基本操作命令

  • 创建名为tank的存储池 (type: ”,mirror,raidz,raidz2)
zpool create tank [type] disk1 disk2 disk3
  • 向池中添加更多空间
zpool add tank mirror disk4 disk5
  • 本机导出和导入存储池
zpool export tank
zpool import tank [newtank]
  • 更换服务器后导入存储池
zpool import -f tank
# 指定挂载根路径
zpool import -f -o altroot=/mnt tank
  • 查看存储池当前状态和 I/O 状况
zpool status
zpool iostat
zpool iostat -v

文件系统基础操作命令

  • 创建文件系统,挂载在/export/home
zfs create -o mountpoint=/mnt/home tank/home
  • 修改文件系统名称
zfs rename tank/home tank/newname
  • 修改文件系统挂载点
zfs set mountpoint=/mnt/newdir tank/home
  • 启用压缩属性
zfs set compression=lz4 tank
  • 删除文件系统
zfs destroy -Rf tank/home

文件系统快照操作命令

  • 创建一个快照
zfs snapshot tank/home@tuesday
  • 按日期创建快照
name=`date +"%Y-%m-%d"`
zfs snapshot tank/home@$name
  • 查看所有快照
zfs list -t snapshot tank/home
  • 回滚到前一个快照
zfs rollback tank/home@monday
  • 删除一个快照
zfs destroy -R tank/home@monday

冗余备份/复制数据集

zfs send tank/home@monday | zfs receive arch/home

手工挂载/卸载文件系统

zfs mount -a
zfs unmount -a
zfs unmount tank/home

VirtualBox后台批量启动虚拟机

VirtualBox作为跨平台的开源虚拟化产品,其开放的接口能力是非常强大的。即使在Windows平台,寥寥几行批处理,也可以轻松实现后台批量启动虚拟机。

@echo off

set "PATH=%PATH%;C:\Program Files\Oracle\VirtualBox"

for /f "tokens=1" %%a in ('VBoxManage list vms') do (
    VBoxManage startvm %%a -type headless
)

ping -n 10 127.1 >nul

实现docker跨主机通信 – 基于Consul的overlay网络

环境配置

节点名 节点IP 节点服务
consul 192.168.0.11 安装 Consul
dnode1 192.168.0.12 安装 Docker
dnode2 192.168.0.12 安装 Docker

配置三台机器,请注意修改hostname为不同的值,防火墙放行如下端口:

  • 2376
  • 4789
  • 7946
  • 8300-8302
  • 8500
  • 8600

启动一个单节点的Consul服务

consul agent -ui -server -bootstrap -data-dir /var/lib/consul -bind 192.168.0.11 -client 192.168.0.11

在其他服务器分别启动Docker服务

docker daemon -D -g /var/lib/docker -H unix:// -H tcp://0.0.0.0:2376  --cluster-store=consul://192.168.0.11:8500 --cluster-advertise=eth0:2376
  • --cluster-store 指定了consul服务发现地址
  • --cluster-advertise 指定了本机服务注册地址,其中eth0是自己网卡的名称,也可以用内网地址192.168.0.21代替

等待自动注册服务

可以使用浏览器打开http://192.168.0.11:8500查看

在节点上创建网络

docker network create --driver overlay \
    --subnet=192.168.2.0/24 --gateway=192.168.2.1 vnet2

为方便部署,也可以将CLI参数写入配置文件

cat <<EOF >/etc/consul/server.json
{
  "data_dir": "/var/consul",
  "server": true,
  "bootstrap": true,
  "bind_addr": "{{ GetInterfaceIP \"eth0\" }}",
  "client_addr": "0.0.0.0",
  "ui_config": {
    "enabled": true
  }
}
EOF

cat <<EOF >/etc/docker/daemon.json
{
  "cluster-advertise": "eth0:2376",
  "cluster-store": "consul://192.168.0.11:8500"
}
EOF

Nginx 实现冷热文件分区读取

  • 10.2.2.2 为热文件服务器,存储1年内上传的文件
  • 10.3.3.3 为冷文件服务器,存储上传超过1年的文件
  • 冷热文件服务器不互通,但都可以响应静态文件网关的请求
upstream host_s1 {
    server 10.2.2.2:443;
    server 10.3.3.3:443 backup;
}

server {

    listen 80;

    server_name s1.rehiy.com;

    location / {
        proxy_pass http://host_s1;
        proxy_connect_timeout 5s;
        proxy_next_upstream_tries 2;
        proxy_next_upstream_timeout 5s;
        proxy_next_upstream error timeout http_404 http_502;
    }

}