2.GlusterFS 安装配置
2.1 GlusterFS 安装前的准备
服务器规划:(vmware 实验)
操作系统 | IP | 主机名 | 数据盘(2 块) |
---|---|---|---|
CentOS 6.8 x86_64 | 10.1.0.151 | mystorage1 | sdb:10G sdc:10G |
CentOS 6.8 x86_64 | 10.1.0.152 | mystorage2 | sdb:10G sdc:10G |
CentOS 6.8 x86_64 | 10.1.0.153 | mystorage3 | sdb:10G sdc:10G |
CentOS 6.8 x86_64 | 10.1.0.154 | mystorage4 | sdb:10G sdc:10G |
2.2 GlusterFS 安装
2.2.1 修改主机名
# vim /etc/sysconfig/network
执行 hostname 主机名 ;
主机名修改完毕
2.2.2 添加 hosts 文件实现集群主机之间相互能够解析
# vim /etc/hosts
10.1.0.151 mystorage1
10.1.0.152 mystorage2
10.1.0.153 mystorage3
10.1.0.154 mystorage4
2.2.3 关闭 SELinux 和 防火墙
# sed -i 's#SELINUX=enforcing#SELINUX=disabled#' /etc/selinux/config
# chkconfig iptables off
# reboot
2.2.4 安装 EPEL 源
GlusterFS yum 源有部分包依赖 epel 源
# 移除/etc/yum.repos.d 中的原由yum源,更改为aliyun的源;
# yum install epel-release -y
2.2.5 安装 GlusterFS 源及相关软件包
# yum install centos-release-gluster37.noarch -y
# yum --enablerepo=centos-gluster*-test install glusterfs-server glusterfs-cli glusterfs-geo-replication -y # 安装完成后的包
rpm -qa | grep gluster*
centos-release-gluster37-1.0-.el6.centos.noarch
glusterfs-api-3.7.-.el6.x86_64
glusterfs-3.7.-.el6.x86_64
glusterfs-client-xlators-3.7.-.el6.x86_64
glusterfs-fuse-3.7.-.el6.x86_64
glusterfs-server-3.7.-.el6.x86_64
glusterfs-libs-3.7.-.el6.x86_64
glusterfs-cli-3.7.-.el6.x86_64
glusterfs-geo-replication-3.7.-.el6.x86_64
2.3配置 GlusterFS
2.3.1 查看 GlusterFS 版本信息
使用 glusterfs -V
命令
[root@mystorage1 ~]# glusterfs -V
glusterfs 3.7. built on Jan ::
2.3.2启动、停止服务
# 四台虚机上都执行
# /etc/init.d/glusterd start
# /etc/init.d/glusterd status
# chkconfig glusterd on
2.3.3 存储主机加入信任主机池
在一台主机上执行,将其他主机加入,如下是在 mystorage1 上执行
[root@mystorage1 ~]# gluster peer probe mystorage2
peer probe: success.
[root@mystorage1 ~]# gluster peer probe mystorage3
peer probe: success.
[root@mystorage1 ~]# gluster peer probe mystorage4
peer probe: success.
2.3.4查看状态
在其他机器查看状态:
[root@mystorage2 ~]# gluster peer status
Number of Peers: Hostname: mystorage1
Uuid: 6e6a84af-ac7a-44eb-85c9-50f1f46acef1
State: Peer in Cluster (Connected) Hostname: mystorage3
Uuid: 36e4c45c-466f-47b0-b829-dcd4a69ca2e7
State: Peer in Cluster (Connected) Hostname: mystorage4
Uuid: c607f6c2-bdcb--bc82-4bc2243b1b7a
State: Peer in Cluster (Connected)
2.3.5 配置前的准备工作
安装 xfs 支持包(ext4文件格式支持16TB的磁盘大小,而xfs是PB级别的)
# 四台都执行
# yum install xfsprogs -y
fdisk -l
查看磁盘设备
# fdisk /dev/sdb
n
p
1
w
** 线上是可以不做这一步的;
# 解释说明:
如果磁盘大于 2T 的话就用 parted 来分区,这里我们不用分区(可以不分区);
做分布式文件系统的时候数据盘一般不需要做 RAID,一般系统盘会做 RAID 1;
如果有raid卡的话,最好用上,raid卡有数据缓存功能,也能提高磁盘的iops,最好的话,用RAID 5;
如果都不做raid的话,也是没问题的,glusterfs也是可以保证数据的安全的。
格式化创建文件系统
# 四台都执行
# mkfs.xfs -f /dev/sdb
在四台机器上创建挂载块设备的目录,挂载硬盘到目录:
# 四台都执行
# mkdir -p /storage/brick{..}
# mount /dev/sdb /storage/brick1
# df -h
# 加入开机自动挂载
# echo "/dev/sdb /storage/brick1 xfs defaults 0 0" >>/etc/fstab
# mount -a
2.3.6 创建 volume 及其他操作
GlusterFS 五种卷
- Distributed:分布式卷,文件通过 hash 算法随机分布到由 bricks 组成的卷上。
- Replicated: 复制式卷,类似 RAID 1,replica 数必须等于 volume 中 brick 所包含的存储服务器数,可用性高。
- Striped: 条带式卷,类似 RAID 0,stripe 数必须等于 volume 中 brick 所包含的存储服务器数,文件被分成数据块,以 Round Robin 的方式存储在 bricks 中,并发粒度是数据块,大文件性能好。
- Distributed Striped: 分布式的条带卷,volume中 brick 所包含的存储服务器数必须是 stripe 的倍数(>=2倍),兼顾分布式和条带式的功能。
- Distributed Replicated: 分布式的复制卷,volume 中 brick 所包含的存储服务器数必须是 replica 的倍数(>=2倍),兼顾分布式和复制式的功能。
分布式复制卷的brick顺序决定了文件分布的位置,一般来说,先是两个brick形成一个复制关系,然后两个复制关系形成分布。
glustfs 最常用的卷就是分布式复制卷。
striped 的目的就提高性能,读取更快。
企业一般用后两种,大部分会用分布式复制(可用容量为 总容量/复制份数),通过网络传输的话最好用万兆交换机,万兆网卡来做。这样就会优化一部分性能。它们的数据都是通过网络来传输的。
1)分布式卷
# 创建分布式卷
[root@mystorage1 ~]# gluster volume create gv1 mystorage1:/storage/brick1 mystorage2:/storage/brick1 force
volume create: gv1: success: please start the volume to access data # 启动创建的卷
[root@mystorage1 ~]# gluster volume start gv1
volume start: gv1: success # 在另一台机器(mystorage4)查看卷信息
[root@mystorage4 ~]# gluster volume info Volume Name: gv1
Type: Distribute
Volume ID: b6ec2f8a-d1f0-4d1b-806b-238efb6dcb84
Status: Started
Number of Bricks:
Transport-type: tcp
Bricks:
Brick1: mystorage1:/storage/brick1
Brick2: mystorage2:/storage/brick1
Options Reconfigured:
performance.readdir-ahead: on # 挂载卷到目录
[root@mystorage4 ~]# mount -t glusterfs 127.0.0.1:/gv1 /mnt
[root@mystorage4 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 33G .3G 30G % /
tmpfs 242M 242M % /dev/shm
/dev/sda1 976M 38M 888M % /boot
/dev/sdb 10G 33M 10G % /storage/brick1
127.0.0.1:/gv1 20G 65M 20G % /mnt # 在 mystorage1 创建测试文件
[root@mystorage1 ~]# touch /mnt/{a..d}
[root@mystorage1 ~]# ll /mnt
total
-rw-r--r-- root root Jul : a
-rw-r--r-- root root Jul : b
-rw-r--r-- root root Jul : c
-rw-r--r-- root root Jul : d # 在 mystorage4 也可看到新创建的文件,信任存储池中的每一台主机挂载这个卷后都可以看到
[root@mystorage4 ~]# ll /mnt/
total
-rw-r--r-- root root Jul : a
-rw-r--r-- root root Jul : b
-rw-r--r-- root root Jul : c
-rw-r--r-- root root Jul : d # 文件实际存在位置
[root@mystorage1 ~]# ls /storage/brick1
a b c e
[root@mystorage2 ~]# ls /storage/brick1
d # 上面可以看到文件根据 hash 算法随机分布到由不同的 brick 上
使用 NFS 方式挂载
[root@mystorage3 ~]# mount -o mountproto=tcp -t nfs mystorage1:/gv1 /mnt/
[root@mystorage3 ~]# ll /mnt
total
-rw-r--r-- root root Jul : a
-rw-r--r-- root root Jul : b
-rw-r--r-- root root Jul : c
-rw-r--r-- root root Jul : d [root@mystorage2 ~]# mount -o mountproto=tcp -t nfs 192.168.56.13:/gv1 /mnt/
# host 可以写 IP,可以看到这个 mystorage3 的 IP,说明 gv1 是共享给信任存储池的所有主机的
[root@mystorage2 ~]# ll /mnt/
total
-rw-r--r-- root root Jul : a
-rw-r--r-- root root Jul : b
-rw-r--r-- root root Jul : c
-rw-r--r-- root root Jul : d
2)复制式卷
# 创建复制式卷
[root@mystorage1 ~]# gluster volume create gv2 replica mystorage3:/storage/brick1 mystorage4:/storage/brick1 force
volume create: gv2: success: please start the volume to access data # 启动创建的卷
[root@mystorage1 ~]# gluster volume start gv2
volume start: gv2: success # 查看卷信息
[root@mystorage1 ~]# gluster volume info gv2 Volume Name: gv2
Type: Replicate
Volume ID: -263a-4c7a-a155-5115af29221f
Status: Started
Number of Bricks: x =
Transport-type: tcp
Bricks:
Brick1: mystorage3:/storage/brick1
Brick2: mystorage4:/storage/brick1
Options Reconfigured:
performance.readdir-ahead: on # 挂载卷到目录,创建测试文件
[root@mystorage1 ~]# mount -t glusterfs 127.0.0.1:/gv2 /opt
[root@mystorage1 ~]# touch /opt/{a..d}
[root@mystorage1 ~]# ls /opt
a b c d # 在 mystorage3, 可看到新创建的文件
[root@mystorage3 ~]# mount -t glusterfs 127.0.0.1:/gv2 /opt
[root@mystorage3 ~]# ls /opt/
a b c d [root@mystorage4 ~]# mount -t glusterfs 127.0.0.1:/gv2 /opt
[root@mystorage4 ~]# ls /opt/
a b c d # 文件实际存在位置
[root@mystorage3 ~]# ls /storage/brick1
a b c d
[root@mystorage4 ~]# ls /storage/brick1
a b c d # 上面可以看到文件根据在 台机器上的 brick 上都有
格式化挂载第二块硬盘
# mkfs.xfs -f /dev/sdc
# mkdir -p /storage/brick2
# echo "/dev/sdc /storage/brick2 xfs defaults 0 0" >> /etc/fstab
# mount -a
# df -h
3)分布式条带卷
# 创建分布式条带卷
[root@mystorage1 ~]# gluster volume create gv3 stripe mystorage3:/storage/brick2 mystorage4:/storage/brick2 force
volume create: gv3: success: please start the volume to access data # 启动创建的卷
[root@mystorage1 ~]# gluster volume start gv3
volume start: gv3: success # 查看卷信息
[root@mystorage1 ~]# gluster volume info gv3 Volume Name: gv3
Type: Stripe
Volume ID: 2871801f-b125-465c-be3a-4eeb2fb44916
Status: Started
Number of Bricks: x =
Transport-type: tcp
Bricks:
Brick1: mystorage3:/storage/brick2
Brick2: mystorage4:/storage/brick2
Options Reconfigured:
performance.readdir-ahead: on # 挂载卷到目录,创建测试文件
mkdir /gv1 /gv2 /gv3
mount -t glusterfs 127.0.0.1:gv1 /gv1
mount -t glusterfs 127.0.0.1:gv2 /gv2
mount -t glusterfs 127.0.0.1:gv3 /gv3
df -h dd if=/dev/zero bs= count= of=/gv3/10M.file
dd if=/dev/zero bs= count= of=/gv3/20M.file # 查看新创建的文件
[root@mystorage1 ~]# ll /gv3/
total
-rw-r--r-- root root Jul : 10M.file
-rw-r--r-- root root Jul : 20M.file # 文件实际存放位置
[root@mystorage3 ~]# ll -h /storage/brick2/
total 15M
-rw-r--r-- root root 4.9M Jul : 10M.file
-rw-r--r-- root root 9.8M Jul : 20M.file
[root@mystorage4 ~]# ll -h /storage/brick2/
total 15M
-rw-r--r-- root root 4.9M Jul : 10M.file
-rw-r--r-- root root 9.8M Jul : 20M.file # 上面可以看到 10M 20M 的文件分别分成了 块(这是条带的特点),每块又分别在同的 brick 下(这是分布式的特点)
4)分布式复制卷
# 查看复制式卷的效果
cd /gv2
rm -f *
dd if=/dev/zero bs= count= of=/gv2/10M.file
dd if=/dev/zero bs= count= of=/gv2/20M.file
dd if=/dev/zero bs= count= of=/gv2/30M.file [root@mystorage3 ~]# ll -h /storage/brick1/
total 59M
-rw-r--r-- root root 9.8M Jul : 10M.file
-rw-r--r-- root root 20M Jul : 20M.file
-rw-r--r-- root root 30M Jul : 30M.file
[root@mystorage4 ~]# ll -h /storage/brick1
total 59M
-rw-r--r-- root root 9.8M Jul : 10M.file
-rw-r--r-- root root 20M Jul : 20M.file
-rw-r--r-- root root 30M Jul : 30M.file # gv2 添加 brick 进行扩容
[root@mystorage1 ~]# gluster volume stop gv2
Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y [root@mystorage1 ~]# gluster volume add-brick gv2 replica mystorage1:/storage/brick2 mystorage2:/storage/brick2 force
volume add-brick: success [root@mystorage1 ~]# gluster volume start gv2
volume start: gv2: success [root@mystorage1 ~]# gluster volume info gv2 Volume Name: gv2
Type: Distributed-Replicate # 这里显示是分布式复制卷,是在 gv2 复制卷的基础上增加 块 brick 形成的
Volume ID: -263a-4c7a-a155-5115af29221f
Status: Stopped
Number of Bricks: x =
Transport-type: tcp
Bricks:
Brick1: mystorage3:/storage/brick1
Brick2: mystorage4:/storage/brick1
Brick3: mystorage1:/storage/brick2
Brick4: mystorage2:/storage/brick2
Options Reconfigured:
performance.readdir-ahead: on
注意:当你给分布式复制卷和分布式条带卷增加 bricks 时,你增加的 bricks 数目必须是复制或条带数目的倍数,例如:你给一个分布式复制卷的 replica 为 2,你在增加 bricks 的时候数量必须为2、4、6、8等。 扩容后进行测试,发现文件都分布在扩容前的卷中。
分布式复制卷的最佳实践:
1)搭建条件
- 块服务器的数量必须是复制的倍数
- 将按块服务器的排列顺序指定相邻的块服务器成为彼此的复制
例如,8台服务器:
- 当复制副本为2时,按照服务器列表的顺序,服务器1和2作为一个复制,3和4作为一个复制,5和6作为一个复制,7和8作为一个复制
- 当复制副本为4时,按照服务器列表的顺序,服务器1/2/3/4作为一个复制,5/6/7/8作为一个复制
2)创建分布式复制卷
# gluster volume create test-volume replica transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4
Creation of test-volume has been successful
Please start the volume to access data
参考博客:
http://cmdschool.blog.51cto.com/2420395/1828450
磁盘存储的平衡
注意:平衡布局是很有必要的,因为布局结构是静态的,当新的 bricks 加入现有卷,新创建的文件会分布到旧的 bricks 中,所以需要平衡布局结构,使新加入的 bricks 生效。布局平衡只是使新布局生效,并不会在新的布局中移动老的数据,如果你想在新布局生效后,重新平衡卷中的数据,还需要对卷中的数据进行平衡。
# 再在 /gv2 下创建 个新的文件 10M.file1 20M.file1 [root@mystorage1 ~]# dd if=/dev/zero bs= count= of=/gv2/10M.file1
[root@mystorage1 ~]# dd if=/dev/zero bs= count= of=/gv2/20M.file1
[root@mystorage1 ~]# ll -rht /gv2/
total 88M
-rw-r--r-- root root 9.8M Jul : 10M.file
-rw-r--r-- root root 20M Jul : 20M.file
-rw-r--r-- root root 30M Jul : 30M.file
-rw-r--r-- root root 9.8M Jul : 10M.file1
-rw-r--r-- root root 20M Jul : 20M.file1 [root@mystorage1 ~]# ll /storage/brick2
total
[root@mystorage2 ~]# ll /storage/brick2
total
[root@mystorage3 ~]# ll -hrt /storage/brick1
total 88M
-rw-r--r-- root root 9.8M Jul : 10M.file
-rw-r--r-- root root 20M Jul : 20M.file
-rw-r--r-- root root 30M Jul : 30M.file
-rw-r--r-- root root 9.8M Jul : 10M.file1
-rw-r--r-- root root 20M Jul : 20M.file1
[root@mystorage4 ~]# ll -hrt /storage/brick1
total 88M
-rw-r--r-- root root 9.8M Jul : 10M.file
-rw-r--r-- root root 20M Jul : 20M.file
-rw-r--r-- root root 30M Jul : 30M.file
-rw-r--r-- root root 9.8M Jul : 10M.file1
-rw-r--r-- root root 20M Jul : 20M.file1 # 从上面可以看到,新创建的文件还是在之前的 bricks 中,并没有分布中新加的 bricks 中 # 下面进行磁盘存储平衡
[root@mystorage1 ~]# gluster volume rebalance gv2 start
volume rebalance: gv2: success: Rebalance on gv2 has been started successfully. Use rebalance status command to check status of the rebalance process.
ID: e23213be--4a2b-87b4-259fd048ec46 [root@mystorage1 ~]# gluster volume rebalance gv2 status
Node Rebalanced-files size scanned failures skipped status run time in h:m:s
--------- ----------- ----------- ----------- ----------- ----------- ------------ --------------
localhost 0Bytes completed ::
mystorage2 0Bytes completed ::
mystorage3 .1MB completed ::
mystorage4 0Bytes completed ::
volume rebalance: gv2: success # 查看磁盘存储平衡后文件在 bricks 中的分布情况
[root@mystorage1 ~]# ll /storage/brick2
total
-rw-r--r-- root root Jul : 20M.file
-rw-r--r-- root root Jul : 20M.file1
[root@mystorage2 ~]# ll /storage/brick2
total
-rw-r--r-- root root Jul : 20M.file
-rw-r--r-- root root Jul : 20M.file1
[root@mystorage3 ~]# ll -hrt /storage/brick1
total 49M
-rw-r--r-- root root 9.8M Jul : 10M.file
-rw-r--r-- root root 30M Jul : 30M.file
-rw-r--r-- root root 9.8M Jul : 10M.file1
[root@mystorage4 ~]# ll -hrt /storage/brick1
total 49M
-rw-r--r-- root root 9.8M Jul : 10M.file
-rw-r--r-- root root 30M Jul : 30M.file
-rw-r--r-- root root 9.8M Jul : 10M.file1 # 从上面可以看到 20M.file 20M.file1 个文件 平衡到 新加的 个 brick 中了
每做一次扩容后都需要做一次磁盘平衡。 磁盘平衡是在万不得已的情况下再做的,一般再创建一个卷就可以了。
移除 brick
你可能想在线缩小卷的大小,例如:当硬件损坏或网络故障的时候,你可能想在卷中移除相关的 bricks。
注意:当你移除 bricks 的时候,你在 gluster 的挂载点将不能继续访问数据,只有配置文件中的信息移除后你才能继续访问 bricks 中的数据。当移除分布式复制卷或者分布式条带卷的时候,移除的 bricks 数目必须是 replica 或者 stripe 的倍数。
例如:一个分布式条带卷的 stripe 是 2,当你移除 bricks 的时候必须是 2、4、6、8 等。
# 下面移除 gv2 卷的 个 bricks [root@mystorage1 ~]# gluster volume stop gv2
Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y
volume stop: gv2: success
[root@mystorage1 ~]# gluster volume remove-brick gv2 replica mystorage3:/storage/brick1 mystorage4:/storage/brick1 force
Removing brick(s) can result in data loss. Do you want to Continue? (y/n) y
volume remove-brick commit force: success
[root@mystorage1 ~]# gluster volume start gv2
volume start: gv2: success
[root@mystorage1 ~]# ll /gv2/
total
-rw-r--r-- root root Jul : 20M.file
-rw-r--r-- root root Jul : 20M.file1 # 如果误操作删除了后,其实文件还在 /storage/brick1 里面的,加回来就可以了
[root@mystorage1 ~]# gluster volume stop gv2
Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y
volume stop: gv2: success
[root@mystorage1 ~]# gluster volume add-brick gv2 replica mystorage3:/storage/brick1 mystorage4:/storage/brick1 force
volume add-brick: success
[root@mystorage1 ~]# gluster volume info gv2 Volume Name: gv2
Type: Distributed-Replicate
Volume ID: -263a-4c7a-a155-5115af29221f
Status: Stopped
Number of Bricks: x =
Transport-type: tcp
Bricks:
Brick1: mystorage1:/storage/brick2
Brick2: mystorage2:/storage/brick2
Brick3: mystorage3:/storage/brick1
Brick4: mystorage4:/storage/brick1
Options Reconfigured:
performance.readdir-ahead: on
[root@mystorage1 ~]# gluster volume start gv2
volume start: gv2: success
[root@mystorage1 ~]# ll /gv2/ # 文件还在
total
-rw-r--r-- root root Jul : 10M.file
-rw-r--r-- root root Jul : 10M.file1
-rw-r--r-- root root Jul : 20M.file
-rw-r--r-- root root Jul : 20M.file1
-rw-r--r-- root root Jul : 30M.file
删除卷
一般会用在命名不规范的时候才会删除
[root@mystorage1 ~]# umount /gv1
[root@mystorage1 ~]# gluster volume stop gv1
Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y
volume stop: gv1: success
[root@mystorage1 ~]# gluster volume delete gv1
Deleting volume will erase all information about the volume. Do you want to continue? (y/n) y
volume delete: gv1: success
[root@mystorage1 ~]# gluster volume info gv1
Volume gv1 does not exist
VMware WorkStation在线加硬盘:
# echo "- - -" > /sys/class/scsi_host/host2/scan
# fdisk -l
2.GlusterFS 安装配置的更多相关文章
- glusterfs安装配置
目标: 原有的k8s的集群磁盘容量不够,数据迁移无法完成,数据迁移是物理机无法由于采购磁盘流程过程,申请虚拟机搭建glusterfs做分布式存储 磁盘规划: # 查看盘符 $ lsblk # 然后创建 ...
- GlusterFS 安装配置
1.磁盘格式化 mkfs.xfs -i size=512 /dev/vdb1 mkdir -p /data/brick1 cat > /etc/fstab <<EOF /dev/vd ...
- glusterfs安装配置简单使用
GlusterFS是一种分布式分布式文件系统,默认采用无中心完全对等架构,搭建维护使用十分简单,是很受欢迎的分布式文件系统. 官网https://www.gluster.org/,官网上表示Glust ...
- GlusterFS 安装 on centos7
本文演示如何在CentOS7上安装,配置和使用GlusterFS. 1 准备工作 1.1 基础设施 编号 IP OS 主机名 角色 说明 A 192.168.1.101 CentOS7.4 ddc_n ...
- Docker: 安装配置入门[二]
一.安装配置启动 1.环境 [root@docker1 ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@d ...
- GlusterFS 安装
一.简介 GlusterFS 是近年兴起的一个高性能开源分布式文件系统,其目标是全局命名空间.分布式前端的高性能文件系统,目前已被 RedHat 看中,GlusterFS 具有高扩展.高可性.高性能. ...
- Hive安装配置指北(含Hive Metastore详解)
个人主页: http://www.linbingdong.com 本文介绍Hive安装配置的整个过程,包括MySQL.Hive及Metastore的安装配置,并分析了Metastore三种配置方式的区 ...
- Hive on Spark安装配置详解(都是坑啊)
个人主页:http://www.linbingdong.com 简书地址:http://www.jianshu.com/p/a7f75b868568 简介 本文主要记录如何安装配置Hive on Sp ...
- ADFS3.0与SharePoint2013安装配置(原创)
现在越来越多的企业使用ADFS作为单点登录,我希望今天的内容能帮助大家了解如何配置ADFS和SharePoint 2013.安装配置SharePoint2013这块就不做具体描述了,今天主要讲一下怎么 ...
随机推荐
- JS获取按键的代码,Js如何屏蔽用户的按键
[From] http://www.zgguan.com/zsfx/jsjc/1181.html 在使用JavaScript做WEB键盘事件侦听捕获时,主要采用onkeypress,onkeydown ...
- Scrapy错误-no active project Unknown command: crawl
在运行别人的scrapy项目时,使用命令行 scrapy crawl douban(douban是该项目里爬虫的名字,烂大街的小项目---抓取豆瓣电影). 执行之后,出现报错如下: 上网搜寻无果. 大 ...
- sed 练习
[root@server3 mnt]# cat -n passwd 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nol ...
- 采用MQTT协议实现android消息推送(3)选ActiveMQ当服务端
官网: http://activemq.apache.org/ 1.简介 强壮.快速.客户端支持多种语言的mqtt服务端软件. 2.特性 MQTT v3.1.AMQP v1.0.Stomp .Open ...
- Android应用捕获全局异常自定义处理
[2016-06-30]最新的全局异常处理DRCrashHandler已经集成在DR_support_lib库中 具体请看: https://coding.net/u/wrcold520/p/DR_s ...
- http statusCode(状态码) 200、300、400、500序列详解
201-206都表示服务器成功处理了请求的状态代码,说明网页可以正常访问.200(成功) 服务器已成功处理了请求.通常,这表示服务器提供了请求的网页.201(已创建) 请求成功且服务器已创建了新的资源 ...
- PHP 编译安装 gd 库
作者博文地址:https://www.cnblogs.com/liu-shuai/ 安装gd依赖库 freetype wget http://download.savannah.gnu.org/rel ...
- Hashtable和HashMap的区别,Properties类的简单使用
一.Java Properties类 Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置 ...
- centos6.5下搭建oracle 11g
1.安装依赖 sudo yum install binutils compat-libstdc++-33 compat-libstdc++-33.i686 elfutils-libelf elfuti ...
- Linux VFS机制简析(一)
Linux VFS机制简析(一) 本文主要基于Linux内核文档,简单分析Linux VFS机制,以期对编写新的内核文件系统(通常是给分布式文件系统编写内核客户端)的场景有所帮助. 个人渊源 切入正文 ...