GlusterFS的卷类型原理
内容过多,我理论与实验分开写了
GlusterFS分布式文件系统理论
GlusterFS实验
1.底层环境
20.0.0.21 | node1 |
---|---|
20.0.0.22 | node2 |
20.0.0.31 | node3 |
20.0.0.32 | node4 |
网关 | 20.0.0.1 |
防火墙与内核 | 全关 |
2.添加硬盘并添加地址解析
所有的node节点都需要做以下操作,下面以node1为列
一路回车,每台node节点添加4块20G的硬盘,注意,必须关机状态添加
3.开始搭建卷组池
###从这里开始:所有的电脑都操作下面这些步骤,这里以node1:20.0.0.21为列####
##地址解析
[root@node1 ~]# vi /etc/hosts
20.0.0.21 node1
20.0.0.22 node2
20.0.0.31 node3
20.0.0.32 node4
######更改主机名#################
hostnamectl set-hostname node1
hostnamectl set-hostname node2
hostnamectl set-hostname node3
hostnamectl set-hostname node4
##创建磁盘自动格式化,自动永久挂载脚本######
[root@node1 ~]# vi gsf.sh
#!/bin/bash
for V in $(ls /dev/sd[b-z])
do
echo -e "n\np\n\n\n\nw\n" |fdisk $V
mkfs.xfs -i size=512 ${V}1 &>/dev/null
sleep 1
M=$(echo "$V" |awk -F "/" '{print $3}')
mkdir -p /data/${M}1 &>/dev/null
echo -e "${V}1 /data/${M}1 xfs defaults 0 0\n" >>/etc/fstab
mount -a &>/dev/null
done
[root@node1 ~]# chmod +x gsf.sh
[root@node1 ~]# ./gsf.sh
[root@node1 ~]# scp gsf.sh 20.0.0.22:/
[root@node1 ~]# scp gsf.sh 20.0.0.31:/
[root@node1 ~]# scp gsf.sh 20.0.0.32:/
##搭建yum仓库##
[root@node1 abc]# cd /etc/yum.repos.d/
[root@node1 yum.repos.d]# vim local.repo
[centos]
name=CentOS
baseurl=http://mirror.centos.org/centos/$releasever/storage/$basearch/gluster-3.12/
gpgcheck=0
enabled=1
##这里的路径是Centos7.6用的
[root@node1 yum.repos.d]# yum clean all
[root@node1 yum.repos.d]# yum list
##安装依赖包##
[root@node1 yum.repos.d]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
[root@node1 yum.repos.d]# systemctl start glusterd.service
[root@node1 yum.repos.d]# systemctl enable glusterd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/glusterd.service to /usr/lib/systemd/system/glusterd.service.
##查看以下状态##
[root@node1 yum.repos.d]# systemctl status glusterd.service
##同步时间##
[root@node1 yum.repos.d]# ntpdate ntp1.aliyun.com
###以上操作所有节点机器都需要操作###
##下面的操作只需要在一台机器上操作下面的就可以了,随便在哪,以下以node1:20.0.0.21为列##
[root@node1 ~]# gluster peer probe node2 ##添加池子,peer匹配, probe信任+节点名称
peer probe: success.
[root@node1 ~]# gluster peer probe node3
peer probe: success.
[root@node1 ~]# gluster peer probe node4
peer probe: success.
####查看节点池##############
[root@node1 ~]# gluster peer status
Number of Peers: 3
Hostname: node2
Uuid: 542a7be9-1a0c-43be-89db-57fe4db5a56f
State: Peer in Cluster (Connected)
Hostname: node3
Uuid: 2ca567f1-e92e-4215-9b09-e6c5e1f08f35
State: Peer in Cluster (Connected)
Hostname: node4
Uuid: 9110ff49-ab25-45d0-85fb-ad67fc266d7c
State: Peer in Cluster (Connected)
[root@node1 ~]# gluster peer status
Number of Peers: 3
#####这个侯换到node2查看池子#######
[root@node2 ~]# gluster peer status
Number of Peers: 3
Hostname: node1
Uuid: 91ff57bc-9215-494c-8e9d-5d0be7286034
State: Peer in Cluster (Connected)
Hostname: node3
Uuid: 2ca567f1-e92e-4215-9b09-e6c5e1f08f35
State: Peer in Cluster (Connected)
Hostname: node4
Uuid: 9110ff49-ab25-45d0-85fb-ad67fc266d7c
State: Peer in Cluster (Connected)
#########可以看到1 3 4 没有问题,池子连通了############
4.创建卷组
以下所有操作只需要在一台机器上执行即可,因为此时所有的机器为一个整体
###########创建分布式卷####################
[root@node2 ~]# gluster volume create dis-vol node1:/data/sdb1 node2:/data/sdb1 force
volume create: dis-vol: success: please start the volume to access data
####查看分布式卷的详细信息##################
[root@node2 ~]# gluster volume info dis-vol
Volume Name: dis-vol ##姓名
Type: Distribute ##类型
Volume ID: 028c2554-a6d6-48cd-a3ad-8778998c42da ##ID
Status: Created 状态
Snapshot Count: 0
Number of Bricks: 2 ##有几个块
Transport-type: tcp ##协议
Bricks: ##具体的组成块
Brick1: node1:/data/sdb1
Brick2: node2:/data/sdb1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
###开启分布式卷组################
[root@node2 ~]# gluster volume start dis-vol
volume start: dis-vol: success
####查看是不是开启状态##########
[root@node2 ~]# gluster volume info dis-vol
Volume Name: dis-vol
Type: Distribute
Volume ID: 028c2554-a6d6-48cd-a3ad-8778998c42da
Status: Started
Snapshot Count: 0
##############条带卷创建######################################
[root@node2 ~]# gluster volume create stripe-vol stripe 2 node1:/data/sdc1 node2:/data/sdc1 force
volume create: stripe-vol: success: please start the volume to access data
######查看条带卷具体信息##################
[root@node2 ~]# gluster volume info stripe-vol
Volume Name: stripe-vol
Type: Stripe
Volume ID: 4b9fe354-a14c-4cfa-9dbc-b887cf101d7c
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdc1
Brick2: node2:/data/sdc1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
##########开启条带卷########################
[root@node2 ~]# gluster volume start stripe-vol
volume start: stripe-vol: success
[root@node2 ~]# gluster volume info stripe-vol
Volume Name: stripe-vol
Type: Stripe
Volume ID: 4b9fe354-a14c-4cfa-9dbc-b887cf101d7c
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
###########复制卷#############################
[root@node2 ~]# gluster volume create rep-vol replica 2 node3:/data/sdb1 node4:/data/sdb1 force
volume create: rep-vol: success: please start the volume to access data
[root@node2 ~]# gluster volume info rep-vol
Volume Name: rep-vol
Type: Replicate
Volume ID: bb87f9dc-8260-44b8-8ba3-53aab9ae10be
Status: Created
Snapshot Count: 0
Xlator 1: BD
Capability 1: thin
Capability 2: offload_copy
Capability 3: offload_snapshot
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node3:/data/sdb1
Brick1 VG:
Brick2: node4:/data/sdb1
Brick2 VG:
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
[root@node2 ~]# gluster volume start rep-vol
volume start: rep-vol: success
############分布式条带#######################
#####创建,末尾如果不加force会报错
[root@node2 ~]# gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1
volume create: dis-stripe: failed: The brick node2:/data/sdd1 is a mount point. Please create a sub-directory under the mount point and use that as the brick directory. Or use 'force' at the end of the command if you want to override this behavior.
##卷创建:分区:失败:brick node2:/data/sdd1是一个挂载点。请在挂载点下创建一个子目录,并将其用作砖目录。或者,如果您想重写此行为,请在命令末尾使用“force”。
[root@node2 ~]# gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 force
volume create: dis-stripe: success: please start the volume to access data
###查看分布式条带卷信息
[root@node2 ~]# gluster volume info dis-stripe
Volume Name: dis-stripe
Type: Distributed-Stripe
Volume ID: 37af4c7c-4dcc-47a6-89b7-91443343b0a0
Status: Created
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdd1
Brick2: node2:/data/sdd1
Brick3: node3:/data/sdd1
Brick4: node4:/data/sdd1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
###开启分布式条带卷
[root@node2 ~]# gluster volume start dis-stripe
volume start: dis-stripe: success
[root@node2 ~]# gluster volume info dis-stripe
Volume Name: dis-stripe
Type: Distributed-Stripe
Volume ID: 37af4c7c-4dcc-47a6-89b7-91443343b0a0
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdd1
Brick2: node2:/data/sdd1
Brick3: node3:/data/sdd1
Brick4: node4:/data/sdd1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
##################分布式复制卷#######################
[root@node2 ~]# gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force
volume create: dis-rep: success: please start the volume to access data
###分布式复制卷信息
[root@node2 ~]# gluster volume info dis-rep
Volume Name: dis-rep
Type: Distributed-Replicate
Volume ID: 12e0a204-b09d-427e-a43d-743fd709a096
Status: Created
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/data/sde1
Brick2: node2:/data/sde1
Brick3: node3:/data/sde1
Brick4: node4:/data/sde1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
[root@node2 ~]# gluster volume start dis-rep
volume start: dis-rep: success
[root@node2 ~]# gluster volume info dis-rep
Volume Name: dis-rep
Type: Distributed-Replicate
Volume ID: 12e0a204-b09d-427e-a43d-743fd709a096
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/data/sde1
Brick2: node2:/data/sde1
Brick3: node3:/data/sde1
Brick4: node4:/data/sde1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
######################################################
卷组全部创建完成
######################################################
查看所有卷组
[root@node2 ~]# gluster volume list
dis-rep ###分布式复制卷
dis-stripe ###分布式条带卷
dis-vol ###分布式卷
rep-vol ###复制卷
stripe-vol ###条带卷
全在,没有问题
5.开台客户机验证结果
#######这个时候再去开一台客户机:20.0.0.23,####################
####客服端你只需要这两个###########
[root@localhost ~]# yum -y install glusterfs glusterfs-fuse
###你需要识别这些节点############
[root@localhost ~]# vi /etc/hosts
20.0.0.21 node1
20.0.0.22 node2
20.0.0.31 node3
20.0.0.32 node4
临时挂载,随便挂载谁都可以,只要挂载一个,就可以访问任何节点
###首先挂载到不同的目录,为了等会方便验证########
[root@localhost ~]# mkdir -p /test/dis
[root@localhost ~]# mkdir -p /test/strip
[root@localhost ~]# mkdir -p /test/rep
[root@localhost ~]# mkdir -p /test/dis_stripe
[root@localhost ~]# mkdir -p /test/dis_rep
[root@localhost ~]# mount.glusterfs node1:dis-vol /test/dis ###分布式卷
[root@localhost ~]# mount.glusterfs node2:stripe-vol /test/strip ###条带卷
[root@localhost ~]# mount.glusterfs node3:rep-vol /test/rep ###复制卷
[root@localhost ~]# mount.glusterfs node4:dis-stripe /test/dis_stripe ###分布式条带卷
[root@localhost ~]# mount.glusterfs node1:dis-rep /test/dis_rep ###分布式复制卷
###查看挂载情况和各自的空间对不对########
[root@localhost ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 182G 1.2G 181G 1% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 12M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sr0 iso9660 4.3G 4.3G 0 100% /mnt
/dev/sda1 xfs 2.0G 146M 1.9G 8% /boot
tmpfs tmpfs 378M 0 378M 0% /run/user/0
node1:dis-vol fuse.glusterfs 40G 65M 40G 1% /test/dis
node2:stripe-vol fuse.glusterfs 40G 65M 40G 1% /test/strip
node3:rep-vol fuse.glusterfs 20G 33M 20G 1% /test/rep
node4:dis-stripe fuse.glusterfs 80G 130M 80G 1% /test/dis_stripe
node1:dis-rep fuse.glusterfs 40G 65M 40G 1% /test/dis_rep
##########ok,没问题继续向下#######################
###创建5个大小为40M的文件###########
解释:dd-连续复制
if=从什么地方复制,/dev/zero这是个取之不尽的黑洞
of=放到哪里去,/opt/1.log-放到/opt/下面取名叫1.log
bs=每一次取多大,count=一共拿40次
[root@localhost opt]# dd if=/dev/zero of=/opt/1.log bs=1M count=40
[root@localhost opt]# dd if=/dev/zero of=/opt/2.log bs=1M count=40
[root@localhost opt]# dd if=/dev/zero of=/opt/3.log bs=1M count=40
[root@localhost opt]# dd if=/dev/zero of=/opt/4.log bs=1M count=40
[root@localhost opt]# dd if=/dev/zero of=/opt/5.log bs=1M count=40
[root@localhost opt]# ll -h
total 200M
-rw-r--r-- 1 root root 40M Oct 27 13:22 1.log
-rw-r--r-- 1 root root 40M Oct 27 13:21 2.log
-rw-r--r-- 1 root root 40M Oct 27 13:21 3.log
-rw-r--r-- 1 root root 40M Oct 27 13:21 4.log
-rw-r--r-- 1 root root 40M Oct 27 13:22 5.log
###为什么都做40M,因为有个条带卷,为了验证它的分块处理########
#####复制5个文件,存到你的卷组里########
[root@localhost opt]# cp * /test/dis
[root@localhost opt]# cp * /test/strip/
[root@localhost opt]# cp * /test/rep/
[root@localhost opt]# cp * /test/dis_stripe/
[root@localhost opt]# cp * /test/dis_rep/
###这边可以看到
[root@localhost dis]# cd /test/
###挑两个看下##
[root@localhost test]# ll -h dis/
total 200M
-rw-r--r-- 1 root root 40M Oct 27 13:28 1.log
-rw-r--r-- 1 root root 40M Oct 27 13:28 2.log
-rw-r--r-- 1 root root 40M Oct 27 13:28 3.log
-rw-r--r-- 1 root root 40M Oct 27 13:28 4.log
-rw-r--r-- 1 root root 40M Oct 27 13:28 5.log
[root@localhost test]# ll -h rep/
total 200M
-rw-r--r-- 1 root root 40M Oct 27 13:28 1.log
-rw-r--r-- 1 root root 40M Oct 27 13:28 2.log
-rw-r--r-- 1 root root 40M Oct 27 13:28 3.log
-rw-r--r-- 1 root root 40M Oct 27 13:28 4.log
-rw-r--r-- 1 root root 40M Oct 27 13:28 5.log
####开始破坏性实验之前,验证卷组没出问题######################
##首先看一下分布式卷,它由node1-sdb1 node2-sdb1 组成
##分别去这两个点查看存储情况
[root@node1 ~]# cd /data/sdb1/
[root@node1 sdb1]# ll -h
total 160M
-rw-r--r-- 2 root root 40M Oct 27 13:28 1.log
-rw-r--r-- 2 root root 40M Oct 27 13:28 3.log
-rw-r--r-- 2 root root 40M Oct 27 13:28 4.log
-rw-r--r-- 2 root root 40M Oct 27 13:28 5.log
[root@node2 ~]# cd /data/sdb1/
[root@node2 sdb1]# ll -h
总用量 40M
-rw-r--r-- 2 root root 40M 10月 28 01:28 2.log
###总结:分布式按单个文件完整存储######
##########查看条带卷,它由node1-sdc1 node2-sdc1 组成
##分别去这两个点查看存储情况
[root@node1 sdb1]# cd /data/
[root@node1 data]# ll -h sdc1/
total 100M
-rw-r--r-- 2 root root 20M Oct 27 13:28 1.log
-rw-r--r-- 2 root root 20M Oct 27 13:28 2.log
-rw-r--r-- 2 root root 20M Oct 27 13:28 3.log
-rw-r--r-- 2 root root 20M Oct 27 13:28 4.log
-rw-r--r-- 2 root root 20M Oct 27 13:28 5.log
[root@node2 sdb1]# cd /data/
[root@node2 data]# ll -h sdc1/
总用量 100M
-rw-r--r-- 2 root root 20M 10月 28 01:28 1.log
-rw-r--r-- 2 root root 20M 10月 28 01:28 2.log
-rw-r--r-- 2 root root 20M 10月 28 01:28 3.log
-rw-r--r-- 2 root root 20M 10月 28 01:28 4.log
-rw-r--r-- 2 root root 20M 10月 28 01:28 5.log
###可以看到,原本40M完整文件,被分成一半分别存储了######
####总结:条带卷同时存储,完整的文件会被分开存储#############
##########查看复制卷,它由node3-sdb1 node4-sdb1 组成
##分别去这两个点查看存储情况
[root@node3 ~]# cd /data/
[root@node3 data]# ll -h sdb1/
总用量 200M
-rw-r--r-- 2 root root 40M 10月 28 01:28 1.log
-rw-r--r-- 2 root root 40M 10月 28 01:28 2.log
-rw-r--r-- 2 root root 40M 10月 28 01:28 3.log
-rw-r--r-- 2 root root 40M 10月 28 01:28 4.log
-rw-r--r-- 2 root root 40M 10月 28 01:28 5.log
[root@node4 ~]# cd /data/
[root@node4 data]# ll -h sdb1/
总用量 200M
-rw-r--r-- 2 root root 40M 10月 28 01:28 1.log
-rw-r--r-- 2 root root 40M 10月 28 01:28 2.log
-rw-r--r-- 2 root root 40M 10月 28 01:28 3.log
-rw-r--r-- 2 root root 40M 10月 28 01:28 4.log
-rw-r--r-- 2 root root 40M 10月 28 01:28 5.log
###总结:文件被完整的复制了一份####
##########查看分布式条带卷,它由node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 组成
[root@node1 data]# ll -h sdd1/
total 80M
-rw-r--r-- 2 root root 20M Oct 27 13:28 1.log
-rw-r--r-- 2 root root 20M Oct 27 13:28 3.log
-rw-r--r-- 2 root root 20M Oct 27 13:28 4.log
-rw-r--r-- 2 root root 20M Oct 27 13:28 5.log
[root@node2 data]# ll -h sdd1/
总用量 80M
-rw-r--r-- 2 root root 20M 10月 28 01:28 1.log
-rw-r--r-- 2 root root 20M 10月 28 01:28 3.log
-rw-r--r-- 2 root root 20M 10月 28 01:28 4.log
-rw-r--r-- 2 root root 20M 10月 28 01:28 5.log
[root@node3 data]# ll -h sdd1/
总用量 20M
-rw-r--r-- 2 root root 20M 10月 28 01:28 2.log
[root@node4 data]# ll -h sdd1/
总用量 20M
-rw-r--r-- 2 root root 20M 10月 28 01:28 2.log
###总结:单个完整的文件,被分成多块,并随即的存放####
######查看分布式复制卷:它由node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1组成
[root@node1 data]# ll -h sde1/
total 160M
-rw-r--r-- 2 root root 40M Oct 27 13:28 1.log
-rw-r--r-- 2 root root 40M Oct 27 13:28 3.log
-rw-r--r-- 2 root root 40M Oct 27 13:28 4.log
-rw-r--r-- 2 root root 40M Oct 27 13:28 5.log
[root@node2 data]# ll -h sde1/
总用量 160M
-rw-r--r-- 2 root root 40M 10月 28 01:28 1.log
-rw-r--r-- 2 root root 40M 10月 28 01:28 3.log
-rw-r--r-- 2 root root 40M 10月 28 01:28 4.log
-rw-r--r-- 2 root root 40M 10月 28 01:28 5.log
[root@node3 data]# ll -h sde1/
总用量 40M
-rw-r--r-- 2 root root 40M 10月 28 01:28 2.log
[root@node4 data]# ll -h sde1/
总用量 40M
-rw-r--r-- 2 root root 40M 10月 28 01:28 2.log
#总结:文件被完整的存储并且存储位置是随机的,每个文件都是多份完整存储#####
###########破坏性实验,node1节点挂掉##########
init 0 node1 并去客户端:20.0.0.23查看结果
##查看分布式卷####刚刚我们看到node1有1 3 4 5,所以只能看到一个
[root@localhost test]# ls -lh dis/
total 40M
-rw-r--r-- 1 root root 40M Oct 27 13:28 2.log
#查看条带卷#####直接提醒我条带卷挂掉了!!!
[root@localhost test]# ll
ls: cannot access strip: Transport endpoint is not connected
total 16
drwxr-xr-x 3 root root 4096 Oct 27 13:28 dis
drwxr-xr-x 3 root root 4096 Oct 27 13:28 dis_rep
drwxr-xr-x 3 root root 4096 Oct 27 13:28 dis_stripe
drwxr-xr-x 3 root root 4096 Oct 27 13:28 rep
d????????? ? ? ? ? ? strip
#查看复制卷####完整可访问
[root@localhost test]# ll -h rep/
total 200M
-rw-r--r-- 1 root root 40M Oct 27 13:28 1.log
-rw-r--r-- 1 root root 40M Oct 27 13:28 2.log
-rw-r--r-- 1 root root 40M Oct 27 13:28 3.log
-rw-r--r-- 1 root root 40M Oct 27 13:28 4.log
-rw-r--r-- 1 root root 40M Oct 27 13:28 5.log
#查看分布式条带卷####只剩下2了,因为2是存在node3 node4上的
[root@localhost test]# ll -h dis_stripe/
total 40M
-rw-r--r-- 1 root root 40M Oct 27 13:28 2.log
如果你down掉node3后再看它
[root@localhost test]# ll -h dis_stripe/
^C^Z^Z^C
直接把我看的不动了,等待一段时间后,
[root@localhost test]# ll -h dis_stripe/
ls: reading directory dis_stripe/: Transport endpoint is not connected
#########挂掉了看不到了
#查看分布式复制卷####安全性高,随便访问##
[root@localhost test]# ll -h dis_rep/
total 200M
-rw-r--r-- 1 root root 40M Oct 27 13:28 1.log
-rw-r--r-- 1 root root 40M Oct 27 13:28 2.log
-rw-r--r-- 1 root root 40M Oct 27 13:28 3.log
-rw-r--r-- 1 root root 40M Oct 27 13:28 4.log
-rw-r--r-- 1 root root 40M Oct 27 13:28 5.log
最后知识补充
############知识点补充#################
###删除卷组#######需要先停止,然后才能删除
gluster volume stop dis-vol
yes
gluster volume delete dis-vol
#######访问控制##########
//仅拒绝
gluster volume set dis-vol auth.reject 20.0.0.23
//仅允许
gluster volume set dis-vol auth.allow 20.0.0.23