侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Xen虚拟化进阶篇 Xen平台下虚拟机的实时迁移

技术  /  管理员 发布于 7年前   263

Xen的虚拟机的实时迁移简介

Xen为我们提供了一种强大的功能,它就是动态迁移法。它能让Domain在运行期间,以最小的服务中断为代价,将Domain迁移到另外的Xen 服务器上。

使用Xen动态迁移的主要优点列举如下:

1.Xen的动态迁移随同诸如heartbeat之类的高可用性解决方案一起使用,能给我们带来一个“永不抛锚”的系统。最新版本的Enterprise SUSE Linux Server 和Red Hat EnterpriseLinux 也是利用Xen来提供各种高可用性解决方案的。您可以轻而易举的满足各种服务的苛刻要求,同时还能保证所有关键商业服务不会出现中断。
2.它使我们能够以“治未病”方式来维护寄放虚拟机的物理服务器。您可以监视服务器,然后通过转移系统来即时解决潜在的和可疑的问题。
3.它使得在多个服务器之间实现负载均衡成为可能,使我们能够更好地利用企业中的所有计算资源,使其利用情况达到最佳状态。需要注意的是,Xen的开源版本目前还不支持在dom0上感应到故障时自动进行动态迁移的功能。
4.它使得在需要时向系统配置添加计算能力变得更加轻松。
5.您可以根据需要更换硬件,而无需中断运行在该硬件上的服务。

只知道动态迁移的好处还不够,现在就实现Xen的动态实时迁移。

实验介绍:

1.存在一台iSCSI共享存储,iSCSI存储被两台Xen虚拟化平台使用;
2.实验环境存在两台Xen的虚拟化平台,其中一个虚拟化平台上存在一个简单的busybox虚拟机,其映像文件存放在iSCSI共享存储上;这里我在两个虚拟化平台都做了简单的busybox虚拟机;
3.在Xen虚拟化平台间实现实时迁移其中一台busybox虚拟机实例;

实验架构图:

实验实现:

一.构建iSCSI共享存储
1.iSCSI服务器构建

格式化磁盘:# echo -n -e"n\np\n3\n\n+5G\nt\n3\n8e\nw\n" |fdisk /dev/sda# partx -a /dev/sda# fdisk -l /dev/sda3 Disk /dev/sda3: 5378 MB, 5378310144 bytes255 heads, 63 sectors/track, 653 cylindersUnits = cylinders of 16065 * 512 = 8225280bytesSector size (logical/physical): 512 bytes /512 bytesI/O size (minimum/optimal): 512 bytes / 512bytesDisk identifier: 0x00000000

安装iSCSI服务器端软件:

# yum install -y scsi-target-utils

编辑iSCSI服务器的配置文件:

# vim /etc/tgt/targets.conf#添加如下内容;<target iqn.2015-02.com.stu31:t1>    backing-store /dev/sda3    initiator-address 172.16.31.0/24</target>

配置完成后即可启动iscsi服务器:

# service tgtd start

查看共享设备:

# tgtadm --lld iscsi -m target -o showTarget 1: iqn.2015-02.com.stu31:t1  System information:    Driver: iscsi    State: ready  I_T nexus information:  LUN information:    LUN: 0      Type: controller      SCSI ID: IET   00010000      SCSI SN: beaf10      Size: 0 MB, Block size: 1      Online: Yes      Removable media: No      Prevent removal: No      Readonly: No      Backing store type: null      Backing store path: None      Backing store flags:    LUN: 1      Type: disk      SCSI ID: IET   00010001      SCSI SN: beaf11      Size: 5378 MB, Block size: 512      Online: Yes      Removable media: No      Prevent removal: No      Readonly: No      Backing store type: rdwr      Backing store path: /dev/sda3      Backing store flags:  Account information:  ACL information:    172.16.31.0/24

2.iSCSI客户端的安装和配置

两个Xen虚拟化平台节点安装iSCSI客户端软件:

#yum install -y iscsi-initiator-utils

启动iSCSI客户端:

# service iscsi start# service iscsid start

让客户端发现iSCSI服务器共享的存储:

# iscsiadm -m discovery -t st -p172.16.31.3172.16.31.3:3260,1 iqn.2015-02.com.stu31:t1

注册iscsi共享设备,节点登录,

# iscsiadm -m node -Tiqn.2015-02.com.stu31:t1 -p 172.16.31.3 -lLogging in to [iface: default, target:iqn.2015-02.com.stu31:t1, portal: 172.16.31.3,3260] (multiple)Login to [iface: default, target:iqn.2015-02.com.stu31:t1, portal: 172.16.31.3,3260] successful.

查看iSCSI存储:

# fdisk -l /dev/sdb Disk /dev/sdb: 5378 MB, 5378310144 bytes166 heads, 62 sectors/track, 1020 cylindersUnits = cylinders of 10292 * 512 = 5269504bytesSector size (logical/physical): 512 bytes /512 bytesI/O size (minimum/optimal): 512 bytes / 512bytesDisk identifier: 0x00000000

登录后就可以格式化磁盘和分区了:

# echo -e "n\np\n1\n\n+2G\nw\n"|fdisk /dev/sdb# partx -a /dev/sdb查看格式化后的磁盘:# fdisk -l /dev/sdb Disk /dev/sdb: 5378 MB, 5378310144 bytes166 heads, 62 sectors/track, 1020 cylindersUnits = cylinders of 10292 * 512 = 5269504bytesSector size (logical/physical): 512 bytes /512 bytesI/O size (minimum/optimal): 512 bytes / 512bytesDisk identifier: 0x8e1d9dd0  Device Boot   Start     End   Blocks Id System/dev/sdb1        1     409  2104683  83 Linux

二.客户端节点Xen虚拟化环境构建

由于是两个Xen虚拟化节点,我这里已经有一个现成的ok的Xen虚拟化节点,我们再添加一个虚拟化节点,当作事例提供;
1.配置xen的yum源

# vim /etc/yum.repos.d/xen4.repo[xen4]name=Xen4 For CentOS6baseurl=ftp://172.16.0.1/pub/Sources/6.x86_64/xen4centos/x86_64/gpgcheck=0清空现有yum库缓存:# yum clean all

2.安装xen-4.2.5版本的软件,更新内核版本到3.7.10
# yum install -y xen-4.2.5 xen-libs-4.2.5xen-runtime-4.2.5 kernel-xen

3.配置grub.conf配置文件

# vim /etc/grub.confdefault=0timeout=5splashimage=(hd0,0)/grub/splash.xpm.gzhiddenmenutitle CentOS (3.7.10-1.el6xen.x86_64)    root (hd0,0)    kernel /xen.gz dom0_mem=1024M,max:1024M dom0_max_vcpus=1 dom0_vcpus_pincpufreq=xen    module /vmlinuz-3.7.10-1.el6xen.x86_64 ro root=/dev/mapper/vg0-rootrd_NO_LUKS rd_NO_DM.UTF-8 rd_LVM_LV=vg0/swap rd_NO_MDSYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg0/root KEYBOARDTYPE=pc KEYTABLE=us rhgbcrashkernel=auto quiet rhgb quiet    module /initramfs-3.7.10-1.el6xen.x86_64.imgtitle CentOS 6 (2.6.32-504.el6.x86_64)    root (hd0,0)    kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=/dev/mapper/vg0-rootrd_NO_LUKS rd_NO_DM.UTF-8 rd_LVM_LV=vg0/swap rd_NO_MDSYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg0/root KEYBOARDTYPE=pc KEYTABLE=us rhgbcrashkernel=auto quiet rhgb quiet    initrd /initramfs-2.6.32-504.el6.x86_64.img

配置完成后重新启动Linux系统,启动完成后自动进入了Xen的Dom0环境:
查看内核版本,已经升级到3.7.10:

# uname -r
3.7.10-1.el6xen.x86_64

查看xen的xend服务开机启动项:

# chkconfig --list xend
xend 0:off 1:off 2:off 3:on 4:on 5:on 6:off

4.启动xend服务
# service xend start

可以查看一下现在运行的虚拟机:

# xm listName        ID  Mem VCPUs   State Time(s)Domain-0       0 1024  1   r-----   23.7

查看一下Xen虚拟机的信息:

# xm infohost          : test2.stu31.comrelease        : 3.7.10-1.el6xen.x86_64version        : #1 SMP Thu Feb 5 12:56:19 CST2015machine        : x86_64nr_cpus        : 1nr_nodes        : 1cores_per_socket    : 1threads_per_core    :1cpu_mhz        : 2272hw_caps        :078bfbff:28100800:00000000:00000140:00000209:00000000:00000001:00000000virt_caps       :total_memory      : 2047free_memory      : 998free_cpus       : 0xen_major       : 4xen_minor       : 2xen_extra       : .5-38.el6xen_caps        : xen-3.0-x86_64 xen-3.0-x86_32pxen_scheduler     : creditxen_pagesize      : 4096platform_params    : virt_start=0xffff800000000000xen_changeset     : unavailablexen_commandline    : dom0_mem=1024M,max:1024Mdom0_max_vcpus=1 dom0_vcpus_pin cpufreq=xencc_compiler      : gcc (GCC) 4.4.7 20120313 (Red Hat4.4.7-11)cc_compile_by     : mockbuildcc_compile_domain   :centos.orgcc_compile_date    : Tue Jan 6 12:04:11 CST 2015xend_config_format   : 4

iSCSI客户端配置发现iSCSI服务器的共享存储依据上面的配置即可(配置略);

三.在Xen虚拟化环境上构建虚拟机busybox

只需要在其中一个节点构建即可;
1.将iSCSI共享存储作为虚拟机的磁盘存放路径

格式化共享存储:# mke2fs -t ext4 /dev/sdb1创建目录,将存储挂载上:# mkdir /scsistore# mount /dev/sdb1 /scsistore/ 进入目录创建虚拟机磁盘设备:# cd /scsistore# dd if=/dev/zero of=./busybox.img bs=1Moflag=direct seek=1023 count=1查看设备大小,可以发现实际大小才1MB:# ll -htotal 1.1M-rw-r--r-- 1 root root 1.0G Feb 6 20:17 busybox.imgdrwx------ 2 root root 16K Feb 6 20:05 lost+found格式化虚拟磁盘设备:# mke2fs -t ext4 /scsistore/busybox.imgmke2fs 1.41.12 (17-May-2010)/scsistore/busybox.img is not a blockspecial device.Proceed anyway? (y,n) y信息略... 挂载虚拟磁盘设备,等待后续操作:# mount -o loop /scsistore/busybox.img /mnt

2.编译安装busybox

编译环境需要的开发包组安装:# yum groupinstall -y Developmenttools # yum install -y ncurses-devel glibc-static 获取busybox软件:busybox-1.22.1.tar.bz2 编译安装busybox:# tar xf busybox-1.22.1.tar.bz2# cd busybox-1.22.1# make menuconfig

配置如下图所示:




设置完成后进行编译和安装:

# make && make install

编译安装busybox完成后在这个目录会生成安装好的文件_install目录,我们将_install目录拷贝到挂载的虚拟磁盘中:

# cp -a _install/* /mnt# cd /mnt# lsbin linuxrc lost+found sbin usr# rm -rf linuxrc# mkdir dev proc sys lib/modules etc/rc.dboot mnt media opt misc -pv

至此,虚拟磁盘就构建完成了。

3.虚拟化平台节点桥设备构建
两个节点都需要配置;
1).test1节点:

添加网卡桥设备文件:# cd /etc/sysconfig/network-scripts/# cp ifcfg-eth0 ifcfg-xenbr0配置桥接设备:# vim ifcfg-xenbr0DEVICE="xenbr0"BOOTPROTO="static"NM_CONTROLLED="no"ONBOOT="yes"TYPE="Bridge"IPADDR=172.16.31.1NETMASK=255.255.0.0GATEWAY=172.16.0.1 配置网卡设备:# vim ifcfg-eth0DEVICE="eth0"BOOTPROTO="static"HWADDR="08:00:27:16:D9:AA"NM_CONTROLLED="no"ONBOOT="yes"BRIDGE="xenbr0"TYPE="Ethernet"USERCTL="no"

2).test2节点的配置:

添加网卡桥设备文件:# cd /etc/sysconfig/network-scripts/# cp ifcfg-eth0 ifcfg-xenbr0配置桥接设备:# vim ifcfg-xenbr0DEVICE="xenbr0"BOOTPROTO="static"NM_CONTROLLED="no"ONBOOT="yes"TYPE="Bridge"IPADDR=172.16.31.2NETMASK=255.255.0.0GATEWAY=172.16.0.1 配置网卡设备:# vim ifcfg-eth0DEVICE="eth0"BOOTPROTO="static"HWADDR="08:00:27:6A:9D:57"NM_CONTROLLED="no"ONBOOT="yes"BRIDGE="xenbr0"TYPE="Ethernet"USERCTL="no"

3).配置桥接模式需要将NetworkManager服务关闭:

两个节点都需要操作#chkconfig NetworkManager off#service NetworkManager stop 配置完成后重启网络服务:#service network restart

4).登录终端查看桥接状态:

# ifconfigeth0   Link encap:Ethernet HWaddr08:00:27:16:D9:AA      inet6 addr: fe80::a00:27ff:fe16:d9aa/64 Scope:Link     UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1     RX packets:37217 errors:0 dropped:7 overruns:0 frame:0     TX packets:4541 errors:0 dropped:0 overruns:0 carrier:0     collisions:0 txqueuelen:1000     RX bytes:7641467 (7.2 MiB) TXbytes:773075 (754.9 KiB) lo    Link encap:Local Loopback      inet addr:127.0.0.1 Mask:255.0.0.0     inet6 addr: ::1/128 Scope:Host     UP LOOPBACK RUNNING MTU:65536 Metric:1     RX packets:12 errors:0 dropped:0 overruns:0 frame:0     TX packets:12 errors:0 dropped:0 overruns:0 carrier:0     collisions:0 txqueuelen:0     RX bytes:1032 (1.0 KiB) TXbytes:1032 (1.0 KiB) xenbr0  Link encap:Ethernet HWaddr08:00:27:16:D9:AA      inet addr:172.16.31.1 Bcast:172.16.255.255 Mask:255.255.0.0     inet6 addr: fe80::a00:27ff:fe16:d9aa/64 Scope:Link     UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1     RX packets:1211 errors:0 dropped:0 overruns:0 frame:0     TX packets:90 errors:0 dropped:0 overruns:0 carrier:0     collisions:0 txqueuelen:0     RX bytes:116868 (114.1 KiB) TXbytes:15418 (15.0 KiB)

4.构建busybox虚拟机

创建虚拟机配置文件# vim /etc/xen/busyboxkernel ="/boot/vmlinuz-2.6.32-504.el6.x86_64"ramdisk ="/boot/initramfs-2.6.32-504.el6.x86_64.img"name = "busybox"memory = "512"vcpus = 1disk =['file:/scsistore/busybox.img,xvda,w',]root = "/dev/xvda ro"extra = "selinux=0 init=/bin/sh"vif = ['bridge=xenbr0',]on_crash = "destroy"on_reboot = "destroy"on_shutdown = "destroy"

将配置文件复制一份到节点test2上:
# scp /etc/xen/busybox [email protected]:/etc/xen/

如果希望busybox这个用户空间能够设置网卡,我们还需要加载xen-netfront.ko进入虚拟机磁盘的指定目录;
我们将Dom0中的xen-netfront.ko模块复制进虚拟机磁盘的lib/modules/目录中:

# cd /lib/modules/2.6.32-504.el6.x86_64/kernel/drivers/net/

需要查看模块依赖关系:

# modinfo xen-netfront.kofilename:    xen-netfront.koalias:     xennetalias:     xen:viflicense:    GPLdescription:  Xen virtual network device frontendsrcversion:   5C6FC78BC365D9AF8135201depends:    vermagic:    2.6.32-504.el6.x86_64 SMP mod_unloadmodversions

可以发现无依赖关系,我们可以直接使用:
# cp xen-netfront.ko /mnt/lib/modules/

复制完成后卸载虚拟机磁盘:
# umount /mnt

至此,我们的虚拟机busybox就创建完毕!

5.我将卸载scsistore,到另外的Xen虚拟化平台挂载查看测试:
在test1节点卸载:
[root@test1 xen]# umount /scsistore/

在test2节点上发现iSCSI共享存储:

[root@test2 ~]# iscsiadm -m discovery -t st-p 172.16.31.3Starting iscsid:         [ OK ]172.16.31.3:3260,1 iqn.2015-02.com.stu31:t1

注册iscsi共享设备,节点登录,

[root@test2 ~]# iscsiadm -m node -Tiqn.2015-02.com.stu31:t1 -p 172.16.31.3 -l[root@test2 ~]# fdisk -l /dev/sdb Disk /dev/sdb: 5378 MB, 5378310144 bytes166 heads, 62 sectors/track, 1020 cylindersUnits = cylinders of 10292 * 512 = 5269504bytesSector size (logical/physical): 512 bytes /512 bytesI/O size (minimum/optimal): 512 bytes / 512bytesDisk identifier: 0x8e1d9dd0  Device Boot   Start     End   Blocks Id System/dev/sdb1        1     409  2104683  83 Linux

挂载磁盘后查看磁盘中的内容:

[root@test2 ~]# mkdir /scsistore[root@test2 ~]# mount /dev/sdb1 /scsistore/[root@test2 ~]# ls /scsistore/busybox.img lost+found

可以发现文件是共享的,我们的iSCSI共享存储是正常的。

四.两个虚拟化平台的虚拟机实时迁移测试

1.两个虚拟化节点挂载共享存储

test1节点:[root@test1 ~]# mount /dev/sdb1 /scsistore/[root@test1 ~]# ls /scsistore/busybox.img lost+foundtest2节点:[root@test2 ~]# mount /dev/sdb1 /scsistore/[root@test2 ~]# ls /scsistore/busybox.img lost+found

2.启动虚拟机busybox
test1节点启动:

[root@test1 ~]# xm create -c busyboxUsing config file"/etc/xen/busybox".Started domain busybox (id=13)   Initializingcgroup subsys cpusetInitializing cgroup subsys cpuLinux version 2.6.32-504.el6.x86_64([email protected]) (gcc version 4.4.7 20120313 (Red Hat4.4.7-11) (GCC) ) #1 SMP Wed Oct 15 04:27:16 UTC 2014Command line: root=/dev/xvda ro selinux=0init=/bin/sh#信息略...;加载网卡模块;/ # insmod /lib/modules/xen-netfront.koInitialising Xen virtual ethernet driver.#设置网卡ip地址;/ # ifconfig eth0 172.16.31.4 up/ # ifconfigeth0   Link encap:Ethernet HWaddr00:16:3E:49:E8:18      inet addr:172.16.31.4 Bcast:172.16.255.255 Mask:255.255.0.0     UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1     RX packets:42 errors:0 dropped:0 overruns:0 frame:0     TX packets:0 errors:0 dropped:0 overruns:0 carrier:0     collisions:0 txqueuelen:1000     RX bytes:2942 (2.8 KiB) TXbytes:0 (0.0 B)     Interrupt:247

test2节点启动:

[root@test2 ~]# xm create -c busyboxUsing config file"/etc/xen/busybox".Started domain busybox (id=2)   Initializingcgroup subsys cpusetInitializing cgroup subsys cpuLinux version 2.6.32-504.el6.x86_64([email protected]) (gcc version 4.4.7 20120313 (Red Hat4.4.7-11) (GCC) ) #1 SMP Wed Oct 15 04:27:16 UTC 2014Command line: root=/dev/xvda ro selinux=0init=/bin/sh#信息略...EXT4-fs (xvda): mounted filesystem withordered data mode. Opts:dracut: Mounted root filesystem /dev/xvdadracut: Switching root/bin/sh: can't access tty; job controlturned off/ # ifconfig/ # insmod /lib/modules/xen-netfront.koInitialising Xen virtual ethernet driver./ # ifconfig eth0 172.16.31.5 up/ # ifconfigeth0   Link encap:Ethernet HWaddr00:16:3E:41:B0:32      inet addr:172.16.31.5 Bcast:172.16.255.255 Mask:255.255.0.0     UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1     RX packets:57 errors:0 dropped:0 overruns:0 frame:0     TX packets:0 errors:0 dropped:0 overruns:0 carrier:0     collisions:0 txqueuelen:1000     RX bytes:3412 (3.3 KiB) TXbytes:0 (0.0 B)     Interrupt:247

技巧:按CTRL+]退出虚拟机
这里我只是为了测试两个虚拟化平台都能运行虚拟机,所以都建立了busybox这个虚拟机,但是我们迁移的时候只需要一台busybox,我们在test1节点上将busybox迁移到test2节点。
我们先将所有的虚拟机都关闭:

#xm destory busybox

3.配置节点实时迁移
test节点的配置:

[root@test1 ~]# grep xend/etc/xen/xend-config.sxp |grep -v "#"     (xend-http-server yes)(xend-unix-server yes)(xend-relocation-server yes)(xend-relocation-port 8002)(xend-relocation-address '172.16.31.1')(xend-relocation-hosts-allow '')

test2节点的配置:

[root@test2 ~]# grep xend/etc/xen/xend-config.sxp |grep -v '#'(xend-http-server yes)(xend-unix-server yes)(xend-relocation-server yes)(xend-relocation-port 8002)(xend-relocation-address '172.16.31.2')(xend-relocation-hosts-allow '')

两个虚拟化节点重启xend服务:

# service xend restartStopping xend daemon:       [ OK ]Starting xend daemon:       [ OK ]

查看监听端口:

# ss -tunl |grep 8002tcp  LISTEN   0   5      172.16.31.2:8002         *:*

启动节点test1的busybox:

#xm create -c busybox#信息略...#设置IP地址,以便一会儿迁移后查看有依据;/ # insmod /lib/modules/xen-netfront.koInitialising Xen virtual ethernet driver./ # ifconfig eth0 172.16.31.4 up/ # ifconfigeth0   Link encap:Ethernet HWaddr00:16:3E:28:BB:F6      inet addr:172.16.31.4 Bcast:172.16.255.255 Mask:255.255.0.0     UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1     RX packets:921 errors:0 dropped:0 overruns:0 frame:0     TX packets:2 errors:0 dropped:0 overruns:0 carrier:0     collisions:0 txqueuelen:1000     RX bytes:78367 (76.5 KiB) TXbytes:84 (84.0 B)     Interrupt:247

将test1节点的虚拟机迁移到test2节点:
[root@test1 ~]# xm migrate -l busybox 172.16.31.2
迁移完成后查看test1节点的虚拟机列表:

[root@test1 ~]# xm listName        ID  Mem VCPUs   State Time(s)Domain-0       0 1023  1   r-----  710.1

迁移完成后查看test2节点的虚拟机:

[root@test2 network-scripts]# xm listName        ID  Mem VCPUs   State Time(s)Domain-0       0 1023  1   r-----  142.8[root@test2 network-scripts]# xm listName        ID  Mem VCPUs   State Time(s)Domain-0       0 1023  1   r-----  147.4busybox       3  512  0   --p---   0.0

连接上test2的虚拟机查看:

[root@test2 ~]# xm console busyboxUsing NULL legacy PICChanging capacity of (202, 0) to 2097152sectorsChanging capacity of (202, 0) to 2097152sectors / # ifconfigeth0   Link encap:Ethernet HWaddr00:16:3E:1D:38:69      inet addr:172.16.31.4 Bcast:172.16.255.255 Mask:255.255.0.0     UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1     RX packets:350 errors:0 dropped:0 overruns:0 frame:0     TX packets:2 errors:0 dropped:0 overruns:0 carrier:0     collisions:0 txqueuelen:1000     RX bytes:27966 (27.3 KiB) TXbytes:84 (84.0 B)     Interrupt:247

可以发现迁移到test2节点上的虚拟机的地址是test1上的;证明我们的迁移完成了。
至此,我们的Xen虚拟化平台的实时迁移实验就完成了。


  • 上一条:
    KVM虚拟化技术之virt-manager使用及KVM虚拟化平台网络模型介绍
    下一条:
    Xen虚拟化基础篇第1/2页
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 2024.07.09日OpenAI将终止对中国等国家和地区API服务(0个评论)
    • 2024/6/9最新免费公益节点SSR/V2ray/Shadowrocket/Clash节点分享|科学上网|免费梯子(0个评论)
    • 国外服务器实现api.openai.com反代nginx配置(0个评论)
    • 2024/4/28最新免费公益节点SSR/V2ray/Shadowrocket/Clash节点分享|科学上网|免费梯子(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-07
    • 2017-08
    • 2017-09
    • 2018-01
    • 2018-07
    • 2018-08
    • 2018-09
    • 2018-12
    • 2019-01
    • 2019-02
    • 2019-03
    • 2019-04
    • 2019-05
    • 2019-06
    • 2019-07
    • 2019-08
    • 2019-09
    • 2019-10
    • 2019-11
    • 2019-12
    • 2020-01
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2020-10
    • 2020-11
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-12
    • 2024-02
    • 2024-04
    • 2024-05
    • 2024-06
    • 2025-02
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客