分类: LINUX
2015-05-19 16:05:04
在这篇教程中,我是用三个系统,2台服务器和一个客户端:
server1.example.com: IP address 192.168.0.100 (服务器)
server2.example.com: IP address 192.168.0.101 (服务器)
client1.example.com: IP address 192.168.0.102 (客户端)
这三个系统之间应该能够相互解析到对方的主机名,如果不能通过DNS完成,你可以在这个三个系统上用下列命令编辑/etc/hosts文件:
vi /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.0.100 server1.example.com server1
192.168.0.101 server2.example.com server2
192.168.0.102 client1.example.com client1# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
(你也可以在先前的设置当中使用IP地址而非主机名,如果你更喜欢使用IP地址,你在这里可以不关心主机名是否能被解析到)
server1.example.com/server2.example.com:
Debian Squeeze源中有GlusterFS,因此你可以用下列命令安装它:
apt-get install glusterfs-server
这个命令可以查看你刚才安装的GlusterFS的版本(本例中为3.0.5)
glusterfs –version
root@server1:~# glusterfs –version
glusterfs 3.0.5 built on Jul 13 2010 16:44:21
Repository revision: v3.0.5
Copyright (c) 2006-2009 Gluster Inc.
GlusterFS comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of GlusterFS under the terms of the GNU General Public License.
root@server1:~#
下面我们创建一些新的文件夹:
mkdir /data/
mkdir /data/export
mkdir /data/export-ns
现在我们在GlusterFS服务器上创建/etc/glusterfs/glusterfsd.vol配置文件(我们首先备份原始/etc/glusterfs/glusterfsd.vol文件),并设定/data/export作为共享和只允许192.168.0.102 = client1.example.com访问这个共享:
cp /etc/glusterfs/glusterfsd.vol /etc/glusterfs/glusterfsd.vol_orig
cat /dev/null > /etc/glusterfs/glusterfsd.vol
vi /etc/glusterfs/glusterfsd.vol
volume posix
type storage/posix
option directory /data/export
end-volumevolume locks
type features/locks
subvolumes posix
end-volumevolume brick
type performance/io-threads
option thread-count 8
subvolumes locks
end-volumevolume server
type protocol/server
option transport-type tcp
option auth.addr.brick.allow 192.168.0.102
subvolumes brick
end-volume
请注意,如果使用多个ip地址的话 (如192.168.*)你可以通过在参数中添加逗号,指定多个IP地址(例如.192.168.0.102,192.168.0.103).
最后我们启动GlusterFS服务器:
/etc/init.d/glusterfs-server start
client1.example.com:
在客户端上,我们用下列命令安装GlusterFS客户端:
apt-get install glusterfs-client
然后我们创建下列文件夹:
mkdir /mnt/glusterfs
下面我们创建/etc/glusterfs/glusterfs.vol 文件(在创建之前,我们首先备份原始/etc/glusterfs/glusterfs.vol 文件):
cp /etc/glusterfs/glusterfs.vol /etc/glusterfs/glusterfs.vol_orig
cat /dev/null >/etc/glusterfs/glusterfs.vol
vi /etc/glusterfs/glusterfs.vol
volume remote1
type protocol/client
option transport-type tcp
option remote-host server1.example.com
option remote-subvolume brick
end-volumevolume remote2
type protocol/client
option transport-type tcp
option remote-host server2.example.com
option remote-subvolume brick
end-volumevolume replicate
type cluster/replicate
subvolumes remote1 remote2
end-volumevolume writebehind
type performance/write-behind
option window-size 1MB
subvolumes replicate
end-volumevolume cache
type performance/io-cache
option cache-size 512MB
subvolumes writebehind
end-volume
请确保你在option remote-host 这一行中填入了你服务器的正确主机名和IP地址!
大功告成!下面我们可以用下面两个命令的其中一条挂载GlusterFS文件系统到/mnt/glusterfs :
glusterfs -f /etc/glusterfs/glusterfs.vol /mnt/glusterfs
或者
mount -t glusterfs /etc/glusterfs/glusterfs.vol /mnt/glusterfs
你会在下面输出中找到新的共享…….
mount
root@client1:~# mount
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
/etc/glusterfs/glusterfs.vol on /mnt/glusterfs type fuse.glusterfs (rw,allow_other,default_permissions,max_read=131072)
root@client1:~#
… and…
df -h
root@client1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 29G 778M 27G 3% /
tmpfs 249M 0 249M 0% /lib/init/rw
udev 244M 100K 244M 1% /dev
tmpfs 249M 0 249M 0% /dev/shm
/etc/glusterfs/glusterfs.vol
18G 848M 16G 5% /mnt/glusterfs
root@client1:~#
(server1.example.com和 server2.example.com 都为GlusterFS文件系统留有 18GB 空间, 但是因为数据是镜像的,所以我们在客户端上 看不到36GB的数据,只有18GB
)
你可以通过修改/etc/fstab 让客户端在启动的时候自动挂载GlusterFS,而不用每次都手动挂载.
打开/etc/fstab ,添加下列行
vi /etc/fstab
[...]
/etc/glusterfs/glusterfs.vol /mnt/glusterfs glusterfs defaults,_netdev 0 0
测试完你修改的 /etc/fstab能正常工作,重启这个客户端:
reboot
在重新启动后,你应该就能在输出中找到这个共享…..
df -h
… and…
mount
如果修改/etc/fstab 不起作用,取消你在/etc/fstab 的修改,可以在/etc/rc.local文件里添加下面这行(在exit 0前):
vi /etc/rc.local
[...]
/bin/mount -t glusterfs /etc/glusterfs/glusterfs.vol /mnt/glusterfs
[...]
确保在网络正常的情况下挂载共享.
现在我们在GlusterFS共享上创建一些测试文件:
client1.example.com:
touch /mnt/glusterfs/test1
touch /mnt/glusterfs/test2
现在让我们在server1.example.com和server2.example.com上分别检查检查/data/export 文件夹,test1和test2文件应该已经分发到了每个节点。
server1.example.com/server2.example.com:
ls -l /data/export
root@server1:~# ls -l /data/export
total 0
-rw-r–r– 1 root root 0 2012-03-29 14:51 test1
-rw-r–r– 1 root root 0 2012-03-29 14:51 test2
root@server1:~#
现在我们关闭server1.example.com ,并在 client1.example.com的GlusterFS上添加或删除一些文件。
server1.example.com:
shutdown -h now
client1.example.com:
touch /mnt/glusterfs/test3
touch /mnt/glusterfs/test4
rm -f /mnt/glusterfs/test2
这些改变就能在server2.example.com的/data/export 文件夹中看到:
server2.example.com:
ls -l /data/export
root@server2:~# ls -l /data/export
total 0
-rw-r–r– 1 root root 0 2012-03-29 14:51 test1
-rw-r–r– 1 root root 0 2012-03-29 14:52 test3
-rw-r–r– 1 root root 0 2012-03-29 14:52 test4
root@server2:~#
我们再次启动server1.example.com 并看一下/data/export文件夹:
server1.example.com:
ls -l /data/export
root@server1:~# ls -l /data/export
total 0
-rw-r–r– 1 root root 0 2012-03-29 14:51 test1
-rw-r–r– 1 root root 0 2012-03-29 14:51 test2
root@server1:~#
正如你所见,server1.example.com关闭的时候并没有同步.这个很好解决,我们只需要在 client1.example.com查看一下GlusterFS共享就可以了:
client1.example.com:
ls -l /mnt/glusterfs/
root@client1:~# ls -l /mnt/glusterfs/
total 8
-rw-r–r– 1 root root 0 2012-03-29 14:51 test1
-rw-r–r– 1 root root 0 2012-03-29 14:52 test3
-rw-r–r– 1 root root 0 2012-03-29 14:52 test4
root@client1:~#
现在再次看一下server1.example.com 的/data/export文件夹,你就应该能在server1.example.com节点上发现刚刚修改的文件已经被同步了:
Server1.example.com:
ls -l /data/export
root@server1:~# ls -l /data/export
total 8
-rw-r–r– 1 root root 0 2012-03-29 14:51 test1
-rw-r–r– 1 root root 0 2012-03-29 14:52 test3
-rw-r–r– 1 root root 0 2012-03-29 14:52 test4
root@server1:~#
? GlusterFS:
? Debian: (210)