zoukankan      html  css  js  c++  java
  • RHEL 6.5----SCSI存储

    主机名 IP
    master 192.168.30.130
    node-1 192.168.30.131
    node-2 192.168.30.132

    安装并启动

    [root@master ~]# ll /etc/tgt/targets.conf 
    -rw------- 1 root root 6945 Sep  4  2013 /etc/tgt/targets.conf
    [root@master ~]# /etc/init.d/tgtd start 
    Starting SCSI target daemon:                               [  OK  ]
    [root@master ~]# chkconfig tgtd on
    [root@master ~]# grep 3260 /etc/services 
    iscsi-target    3260/tcp                # iSCSI port
    iscsi-target    3260/udp                # iSCSI port
    
    [root@master ~]# netstat -antup | grep 3260
    tcp        0      0 0.0.0.0:3260                0.0.0.0:*                   LISTEN      48963/tgtd          
    tcp        0      0 :::3260                     :::*                        LISTEN      48963/tgtd          
    [root@master ~]# netstat -antup | grep tgtd
    tcp        0      0 0.0.0.0:3260                0.0.0.0:*                   LISTEN      48963/tgtd          
    tcp        0      0 :::3260                     :::*                        LISTEN      48963/tgtd

    将master作为存储服务器,添加一块新硬盘

    [root@master ~]# ls /dev/sd*
    /dev/sda  /dev/sda1  /dev/sda2  /dev/sda3  /dev/sdb
    [root@master ~]# fdisk /dev/sdb
    Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
    Building a new DOS disklabel with disk identifier 0x3c41883c.
    Changes will remain in memory only, until you decide to write them.
    After that, of course, the previous content won't be recoverable.
    
    Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
    
    WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
             switch off the mode (command 'c') and change display units to
             sectors (command 'u').
    
    Command (m for help): n
    Command action
       e   extended
       p   primary partition (1-4)
    p
    Partition number (1-4): 1
    First cylinder (1-2610, default 1): 
    Using default value 1
    Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +5G
    
    Command (m for help): p
    
    Disk /dev/sdb: 21.5 GB, 21474836480 bytes
    255 heads, 63 sectors/track, 2610 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x3c41883c
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1               1         654     5253223+  83  Linux
    
    Command (m for help): w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    Syncing disks.
    
    [root@master ~]# ls /dev/sdb*
    /dev/sdb  /dev/sdb1
    [root@master ~]# mkfs.ext4 /dev/sdb1

    修改配置文件

    [root@master ~]# vim /etc/tgt/targets.conf 
    #找到这段内容,在其下方添加83-88一段内容
    75 #<target iqn.2008-09.com.example:server.target4>
    76 #    direct-store /dev/sdb      # Becomes LUN 1
    77 #    direct-store /dev/sdc      # Becomes LUN 2
    78 #    direct-store /dev/sdd      # Becomes LUN 3
    79 #    write-cache off
    80 #    vendor_id MyCompany Inc.
    81 #</target>
    82 
    83 <target iqn.2015-01.cn.xuegod.www:target_san1>
    84         backing-store /dev/sdb1
    85         initiator-address 192.168.30.131
    86         initiator-address 192.168.30.132
    87         vendor_id sishen
    88         product_id target-01
    89 </target>

    重启服务

    [root@master ~]# tgt-admin --show 
    Target 1: iqn.2018-05.cn.sishen.www:target_san1
        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: 5379 MB, Block size: 512
                Online: Yes
                Removable media: No
                Prevent removal: No
                Readonly: No
                Backing store type: rdwr
                Backing store path: /dev/sdb1
                Backing store flags: 
        Account information:
        ACL information:
            192.168.30.131
            192.168.30.132

    在客户端安装

    [root@node-1 ~]# yum install -y iscsi-initiator-utils
    [root@node-1 ~]# /etc/init.d/iscsid start    #直接启动没有反应
    [root@node-1 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.30.130:3260  #执行完这步会有提示
    Starting iscsid:                                           [  OK  ]
    192.168.30.130:3260,1 iqn.2018-05.cn.sishen.www:target_san1
    [root@node-1 ~]# /etc/init.d/iscsi status
    No active sessions
    [root@node-1 ~]# /etc/init.d/iscsid status
    iscsid (pid  48868) is running...
    [root@node-1 ~]# /etc/init.d/iscsid restart
    Stopping iscsid: 
    Starting iscsid:                                           [  OK  ]
    [root@node-1 ~]# /etc/init.d/iscsid status
    iscsid (pid  48931) is running...

     安装tree命令查看发现的目录树

    [root@node-1 ~]# yum install -y tree 
    [root@node-1 ~]# tree /var/lib/iscsi/
    /var/lib/iscsi/
    ├── ifaces
    ├── isns
    ├── nodes
    │   └── iqn.2018-05.cn.sishen.www:target_san1
    │       └── 192.168.30.130,3260,1
    │           └── default
    ├── send_targets
    │   └── 192.168.30.130,3260
    │       ├── iqn.2018-05.cn.sishen.www:target_san1,192.168.30.130,3260,1,default -> /var/lib/iscsi/nodes/iqn.2018-05.cn.sishen.www:target_san1/192.168.30.130,3260,1
    │       └── st_config
    ├── slp
    └── static
    
    10 directories, 2 files

    在客户端查看

    一定要先启动iscsid在启动iscsi,

    [root@node-1 ~]# /etc/init.d/iscsid start 
    [root@node-1 ~]# /etc/init.d/iscsi start
    [root@node-1 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.30.130:3260
    Starting iscsid:                                           [  OK  ]
    192.168.30.130:3260,1 iqn.2018-05.cn.sishen.www:target_san1
    [root@node-1 ~]# tree /var/lib/iscsi/
    /var/lib/iscsi/
    ├── nodes
    │   └── iqn.2018-05.cn.sishen.www:target_san1
    │       └── 192.168.30.130,3260,1
    │           └── default
    └── send_targets
        └── 192.168.30.130,3260
            ├── iqn.2018-05.cn.sishen.www:target_san1,192.168.30.130,3260,1,default -> /var/lib/iscsi/nodes/iqn.2018-05.cn.sishen.www:target_san1/192.168.30.130,3260,1
            └── st_config
    
    6 directories, 2 files

    关闭顺序

    [root@node-1 ~]# /etc/init.d/iscsi stop
    Stopping iscsi:                                            [  OK  ]
    [root@node-1 ~]# /etc/init.d/iscsid stop
    Stopping iscsid:                                         [  OK  ]

    查看默认的开机启动项

    [root@node-1 ~]# grep chkconfig /etc/init.d/iscsid
    # chkconfig: 345 7 89
    [root@node-1 ~]# grep chkconfig /etc/init.d/iscsi
    # chkconfig: 345 13 89
    设置开机启动
    [root@node-1 ~]# chkconfig iscsi on
    [root@node-1 ~]# chkconfig iscsid on

    在客户端查看是否设备

    [root@node-1 ~]# /etc/init.d/iscsid restart 
    Stopping iscsid: 
    Starting iscsid:                                           [  OK  ]
    [root@node-1 ~]# /etc/init.d/iscsi restart 
    Stopping iscsi:                                            [  OK  ]
    Starting iscsi:                                            [  OK  ]
    [root@node-1 ~]# ll /dev/sdb 
    brw-rw---- 1 root disk 8, 16 Jun  4 10:15 /dev/sdb
    [root@node-1 ~]# lsblk 
    NAME                          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sr0                            11:0    1  3.6G  0 rom  /media/cdrom
    sda                             8:0    0   20G  0 disk 
    ├─sda1                          8:1    0  200M  0 part /boot
    ├─sda2                          8:2    0    2G  0 part [SWAP]
    └─sda3                          8:3    0 17.8G  0 part 
      └─vg_master-LogVol00 (dm-0) 253:0    0 17.8G  0 lvm  /
    sdb                             8:16   0    5G  0 disk 

    iscsi的卸载和登录

    reboot后再次查看
    [root@node-1 ~]# ll /dev/sd*
    brw-rw---- 1 root disk 8,  0 May 31 08:19 /dev/sda
    brw-rw---- 1 root disk 8,  1 May 31 08:19 /dev/sda1
    brw-rw---- 1 root disk 8,  2 May 31 08:19 /dev/sda2
    brw-rw---- 1 root disk 8,  3 May 31 08:19 /dev/sda3
    brw-rw---- 1 root disk 8, 16 May 31 10:13 /dev/sdb
    
    卸载
    [root@node-1 ~]# iscsiadm -m node -T iqn.2018-05.cn.sishen.www:target_san1 -u
    Logging out of session [sid: 1, target: iqn.2018-05.cn.sishen.www:target_san1, portal: 192.168.30.130,3260]
    Logout of [sid: 1, target: iqn.2018-05.cn.sishen.www:target_san1, portal: 192.168.30.130,3260] successful.
    [root@node-1 ~]# lsblk 
    NAME                          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sr0                            11:0    1  3.6G  0 rom  /media/cdrom
    sda                             8:0    0   20G  0 disk 
    ├─sda1                          8:1    0  200M  0 part /boot
    ├─sda2                          8:2    0    2G  0 part [SWAP]
    └─sda3                          8:3    0 17.8G  0 part 
      └─vg_master-LogVol00 (dm-0) 253:0    0 17.8G  0 lvm  /
    再次登录
    [root@node-1 ~]# iscsiadm -m node -T iqn.2018-05.cn.sishen.www:target_san1 -l
    Logging in to [iface: default, target: iqn.2018-05.cn.sishen.www:target_san1, portal: 192.168.30.130,3260] (multiple)
    Login to [iface: default, target: iqn.2018-05.cn.sishen.www:target_san1, portal: 192.168.30.130,3260] successful.
    [root@node-1 ~]# lsblk 
    NAME                          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sr0                            11:0    1  3.6G  0 rom  /media/cdrom
    sda                             8:0    0   20G  0 disk 
    ├─sda1                          8:1    0  200M  0 part /boot
    ├─sda2                          8:2    0    2G  0 part [SWAP]
    └─sda3                          8:3    0 17.8G  0 part 
      └─vg_master-LogVol00 (dm-0) 253:0    0 17.8G  0 lvm  /
    sdb                             8:16   0    5G  0 disk 

    也可以通过停止iscsi服务来卸载iscsi设备

    [root@node-1 ~]# /etc/init.d/iscsi stop
    Stopping iscsi:                                            [  OK  ]
    [root@node-1 ~]# ls /dev/sdb
    ls: cannot access /dev/sdb: No such file or directory
    [root@node-1 ~]# /etc/init.d/iscsi start 
    Starting iscsi:                                            [  OK  ]
    [root@node-1 ~]# ls /dev/sdb
    /dev/sdb

    在停止了iscsi服务后,如果执行

    [root@node-1 ~]# rm -rf /var/lib/iscsi/*
    #这样会彻底推出iscsi设备

    在客户端使用iscsi设备

    [root@node-1 ~]# fdisk /dev/sdb 
    Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
    Building a new DOS disklabel with disk identifier 0x68cb068f.
    Changes will remain in memory only, until you decide to write them.
    After that, of course, the previous content won't be recoverable.
    
    Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
    
    WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
             switch off the mode (command 'c') and change display units to
             sectors (command 'u').
    
    Command (m for help): n
    Command action
       e   extended
       p   primary partition (1-4)
    p
    Partition number (1-4): 1
    First cylinder (1-1020, default 1): 
    Using default value 1
    Last cylinder, +cylinders or +size{K,M,G} (1-1020, default 1020):    
    Using default value 1020
    
    Command (m for help): w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    Syncing disks.
    [root@node-1 ~]# lsblk 
    NAME                          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sr0                            11:0    1  3.6G  0 rom  /media/cdrom
    sda                             8:0    0   20G  0 disk 
    ├─sda1                          8:1    0  200M  0 part /boot
    ├─sda2                          8:2    0    2G  0 part [SWAP]
    └─sda3                          8:3    0 17.8G  0 part 
      └─vg_master-LogVol00 (dm-0) 253:0    0 17.8G  0 lvm  /
    sdb                             8:16   0    5G  0 disk 
    └─sdb1                          8:17   0    5G  0 part 
    [root@node-1 ~]# mkfs.ext4 /dev/sdb1
    mke2fs 1.41.12 (17-May-2010)
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    Fragment size=4096 (log=2)
    Stride=0 blocks, Stripe width=0 blocks
    328656 inodes, 1312222 blocks
    65611 blocks (5.00%) reserved for the super user
    First data block=0
    Maximum filesystem blocks=1346371584
    41 block groups
    32768 blocks per group, 32768 fragments per group
    8016 inodes per group
    Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736
    
    Writing inode tables: done                            
    Creating journal (32768 blocks): done
    Writing superblocks and filesystem accounting information: done
    
    This filesystem will be automatically checked every 30 mounts or
    180 days, whichever comes first.  Use tune2fs -c or -i to override.
    [root@node-1 ~]# mount /dev/sdb1  /opt/
    [root@node-1 ~]# cp /etc/passwd /opt/
    [root@node-1 ~]# df -h /opt/
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sdb1       5.0G  139M  4.6G   3% /opt

    在另一客户端

    [root@node-2 ~]# yum install -y iscsi-initiator-utils
    [root@node-2 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.30.130:3260
    Starting iscsid:                                           [  OK  ]
    192.168.30.130:3260,1 iqn.2018-05.cn.sishen.www:target_san1
    [root@node-2 ~]# /etc/init.d/iscsid  start
    [root@node-2 ~]# lsblk 
    NAME                          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sr0                            11:0    1  3.6G  0 rom  /media/cdrom
    sda                             8:0    0   20G  0 disk 
    ├─sda1                          8:1    0  200M  0 part /boot
    ├─sda2                          8:2    0    2G  0 part [SWAP]
    └─sda3                          8:3    0 17.8G  0 part 
      └─vg_master-LogVol00 (dm-0) 253:0    0 17.8G  0 lvm  /
    [root@node-2 ~]# /etc/init.d/iscsi  restart
    Stopping iscsi:                                            [  OK  ]
    Starting iscsi:                                            [  OK  ]
    [root@node-2 ~]# lsblk 
    NAME                          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sr0                            11:0    1  3.6G  0 rom  /media/cdrom
    sda                             8:0    0   20G  0 disk 
    ├─sda1                          8:1    0  200M  0 part /boot
    ├─sda2                          8:2    0    2G  0 part [SWAP]
    └─sda3                          8:3    0 17.8G  0 part 
      └─vg_master-LogVol00 (dm-0) 253:0    0 17.8G  0 lvm  /
    sdb                             8:16   0    5G  0 disk 
    └─sdb1                          8:17   0    1G  0 part 
    [root@node-2 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.30.130:3260
    Starting iscsid:                                           [  OK  ]
    192.168.30.130:3260,1 iqn.2018-05.cn.sishen.www:target_san1
    [root@node-2 ~]# /etc/init.d/iscsid start 
    [root@node-2 ~]# /etc/init.d/iscsi start 
    Starting iscsi:                                            [  OK  ]
    [root@node-2 ~]# lsblk 
    NAME                          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sr0                            11:0    1  3.6G  0 rom  /media/cdrom
    sda                             8:0    0   20G  0 disk 
    ├─sda1                          8:1    0  200M  0 part /boot
    ├─sda2                          8:2    0    2G  0 part [SWAP]
    └─sda3                          8:3    0 17.8G  0 part 
      └─vg_master-LogVol00 (dm-0) 253:0    0 17.8G  0 lvm  /
    sdb                             8:16   0    5G  0 disk 
    └─sdb1                          8:17   0    5G  0 part 
    [root@node-2 ~]# mount /dev/sdb1 /opt/
    [root@node-2 ~]# ll /opt/
    total 20
    drwx------ 2 root root 16384 Jun  4 10:19 lost+found
    -rw-r--r-- 1 root root  1779 Jun  4 10:20 passwd

    卸载iscsi设备

    [root@node-2 ~]# iscsiadm -m node -T iqn.2018-05.cn.sishen.www:target_san1 -u
    Logging out of session [sid: 3, target: iqn.2018-05.cn.sishen.www:target_san1, portal: 192.168.30.130,3260]
    Logout of [sid: 3, target: iqn.2018-05.cn.sishen.www:target_san1, portal: 192.168.30.130,3260] successful.
    [root@node-2 ~]# lsblk 
    NAME                          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sr0                            11:0    1  3.6G  0 rom  /media/cdrom
    sda                             8:0    0   20G  0 disk 
    ├─sda1                          8:1    0  200M  0 part /boot
    ├─sda2                          8:2    0    2G  0 part [SWAP]
    └─sda3                          8:3    0 17.8G  0 part 
      └─vg_master-LogVol00 (dm-0) 253:0    0 17.8G  0 lvm  /
    [root@node-2 ~]# iscsiadm -m node -T iqn.2018-05.cn.sishen.www:target_san1 -l
    Logging in to [iface: default, target: iqn.2018-05.cn.sishen.www:target_san1, portal: 192.168.30.130,3260] (multiple)
    Login to [iface: default, target: iqn.2018-05.cn.sishen.www:target_san1, portal: 192.168.30.130,3260] successful.
    [root@node-2 ~]# lsblk 
    NAME                          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sr0                            11:0    1  3.6G  0 rom  /media/cdrom
    sda                             8:0    0   20G  0 disk 
    ├─sda1                          8:1    0  200M  0 part /boot
    ├─sda2                          8:2    0    2G  0 part [SWAP]
    └─sda3                          8:3    0 17.8G  0 part 
      └─vg_master-LogVol00 (dm-0) 253:0    0 17.8G  0 lvm  /
    sdc                             8:32   0    5G  0 disk 
    └─sdc1                          8:33   0    1G  0 part 

    遇到的问题

    [root@node-2 ~]# /etc/init.d/iscsi restart 
    Stopping iscsi:                                            [  OK  ]
    Starting iscsi:                                            [  OK  ]
    [root@node-2 ~]# mount /dev/sdb1 /sdb1/
    mount: you must specify the filesystem type
    [root@node-2 ~]# df -h /sdb1
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sdb1      1014M   34M  930M   4% /sdb1
    [root@node-2 ~]# cd /sdb1/
    [root@node-2 sdb1]# ls
    ls: reading directory .: Input/output error
    [root@node-2 sdb1]# /etc/init.d/iscsi restart 
    Stopping iscsi:                                            [  OK  ]
    Starting iscsi:                                            [  OK  ]
    [root@node-2 sdb1]# /etc/init.d/iscsid restart 
    Not stopping iscsid: iscsi sessions still active           [WARNING]
    Starting iscsid: 
    [root@node-2 sdb1]# /etc/init.d/iscsid restart 
    Not stopping iscsid: iscsi sessions still active           [WARNING]
    Starting iscsid: 
    [root@node-2 sdb1]# cd
    [root@node-2 ~]# /etc/init.d/iscsid restart 
    Not stopping iscsid: iscsi sessions still active           [WARNING]
    Starting iscsid: 

    错误日志

    。。。。。。。。
    May 31 10:43:02 node-2 kernel: scsi 4:0:0:1: Direct-Access     sishen   target-01        0001 PQ: 0 ANSI: 5
    May 31 10:43:02 node-2 kernel: sd 4:0:0:1: Attached scsi generic sg3 type 0
    May 31 10:43:02 node-2 kernel: sd 4:0:0:1: [sdc] 10506447 512-byte logical blocks: (5.37 GB/5.00 GiB)
    May 31 10:43:02 node-2 kernel: sd 4:0:0:1: [sdc] Write Protect is off
    May 31 10:43:02 node-2 kernel: sd 4:0:0:1: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
    May 31 10:43:02 node-2 kernel: sdc: sdc1
    May 31 10:43:02 node-2 kernel: sd 4:0:0:1: [sdc] Attached SCSI disk
    May 31 10:43:02 node-2 iscsid: Connection2:0 to [target: iqn.2018-05.cn.sishen.www:target_san1, portal: 192.168.30.130,3260] through [iface: default] is operational now
    May 31 10:43:33 node-2 kernel: sd 4:0:0:1: [sdc] Synchronizing SCSI cache
    May 31 10:43:34 node-2 kernel: scsi5 : iSCSI Initiator over TCP/IP
    May 31 10:43:34 node-2 kernel: scsi 5:0:0:0: RAID              IET      Controller       0001 PQ: 0 ANSI: 5
    May 31 10:43:34 node-2 kernel: scsi 5:0:0:0: Attached scsi generic sg2 type 12
    May 31 10:43:34 node-2 kernel: scsi 5:0:0:1: Direct-Access     sishen   target-01        0001 PQ: 0 ANSI: 5
    May 31 10:43:34 node-2 kernel: sd 5:0:0:1: Attached scsi generic sg3 type 0
    May 31 10:43:34 node-2 kernel: sd 5:0:0:1: [sdc] 10506447 512-byte logical blocks: (5.37 GB/5.00 GiB)
    May 31 10:43:34 node-2 kernel: sd 5:0:0:1: [sdc] Write Protect is off
    May 31 10:43:34 node-2 kernel: sd 5:0:0:1: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
    May 31 10:43:34 node-2 kernel: sdc: sdc1
    May 31 10:43:34 node-2 kernel: sd 5:0:0:1: [sdc] Attached SCSI disk
    May 31 10:43:34 node-2 iscsid: Connection2:0 to [target: iqn.2018-05.cn.sishen.www:target_san1, portal: 192.168.30.130,3260] through [iface: default] is shutdown.
    May 31 10:43:34 node-2 iscsid: Connection3:0 to [target: iqn.2018-05.cn.sishen.www:target_san1, portal: 192.168.30.130,3260] through [iface: default] is operational now
    May 31 10:45:10 node-2 rhsmd: In order for Subscription Manager to provide your system with updates, your system must be registered with the Customer Portal. Please enter your Red Hat login to ensure your system is up-to-date.

    暂时还不清楚什么原因

  • 相关阅读:
    Windows UI自动化测试的XPATH实现
    Laravel修炼:服务容器绑定与解析
    swoole之memoryGlobal内存池分析
    Go语言的前景分析
    thinkphp5 编辑时 唯一验证 解决办法
    GIT配置多用户
    PHP 数组
    PHP 变量作用域
    PHP 使用 Swoole
    欢迎使用CSDN-markdown编辑器
  • 原文地址:https://www.cnblogs.com/zd520pyx1314/p/9115445.html
Copyright © 2011-2022 走看看