ÒÔ
Docker Ϊ´ú±íµÄÈÝÆ÷¼¼ÊõÔÚÔÆ¼ÆËãÁìÓòÕý°çÑÝ×ÅÔ½À´Ô½ÖØÒªµÄ½ÇÉ«£¬ÉõÖÁÒ»¶È±»ÈÏΪÊÇÐéÄ⻯¼¼ÊõµÄÌæ´úÆ·¡£ÆóÒµ¼¶µÄÈÝÆ÷Ó¦Óó£³£ÐèÒª½«ÖØÒªµÄÊý¾Ý³Ö¾Ã»¯£¬·½±ãÔÚ²»Í¬ÈÝÆ÷¼ä¹²Ïí¡£ÎªÁËÄܹ»³Ö¾Ã»¯Êý¾ÝÒÔ¼°¹²ÏíÈÝÆ÷¼äµÄÊý¾Ý£¬Docker
Ìá³öÁË Volume µÄ¸ÅÄî¡£µ¥»ú»·¾³µÄÊý¾Ý¾íÄÑÒÔÂú×ã Docker ¼¯Èº»¯µÄÒªÇó£¬Òò´ËÐèÒªÒýÈë·Ö²¼Ê½Îļþϵͳ¡£Ä¿Ç°¿ªÔ´µÄ·Ö²¼Ê½ÎļþϵͳÓÐÐí¶à£¬ÀýÈç
GFS£¬Ceph£¬HDFS£¬FastDFS£¬GlusterFS µÈ¡£GlusterFS ÒòÆä²¿Êð¼òµ¥¡¢À©Õ¹ÐÔÇ¿¡¢¸ß¿ÉÓõÈÌØµã£¬ÔÚ·Ö²¼Ê½´æ´¢ÁìÓò±»¹ã·ºÊ¹Óᣱ¾ÎÄÖ÷Òª½éÉÜÁËÈçºÎÀûÓÃ
GlusterFS Ϊ Docker ¼¯ÈºÌṩ¿É¿¿µÄ·Ö²¼Ê½Îļþ´æ´¢¡£
GlusterFS ·Ö²¼Ê½Îļþϵͳ¼ò½é
GlusterFS ¸ÅÊö
GlusterFS (Gluster File System) ÊÇÒ»¸ö¿ªÔ´µÄ·Ö²¼Ê½Îļþϵͳ£¬Ö÷ÒªÓÉ Z
RESEARCH ¹«Ë¾¸ºÔ𿪷¢¡£GlusterFS ÊÇ Scale-Out ´æ´¢½â¾ö·½°¸ Gluster
µÄºËÐÄ£¬¾ßÓÐÇ¿´óµÄºáÏòÀ©Õ¹ÄÜÁ¦£¬Í¨¹ýÀ©Õ¹Äܹ»Ö§³ÖÊýPB´æ´¢ÈÝÁ¿ºÍ´¦ÀíÊýǧ¿Í»§¶Ë¡£GlusterFS ½èÖú
TCP/IP »ò InfiniBand RDMA ÍøÂ罫ÎïÀí·Ö²¼µÄ´æ´¢×ÊÔ´¾Û¼¯ÔÚÒ»Æð£¬Ê¹Óõ¥Ò»È«¾ÖÃüÃû¿Õ¼äÀ´¹ÜÀíÊý¾Ý¡£GlusterFS
»ùÓڿɶѵþµÄÓû§¿Õ¼äÉè¼Æ£¬¿ÉΪ¸÷ÖÖ²»Í¬µÄÊý¾Ý¸ºÔØÌṩÓÅÒìµÄÐÔÄÜ¡£
GlusterFS ×ÜÌå¼Ü¹¹Óë×é³É²¿·ÖÈçͼ1Ëùʾ£¬ËüÖ÷ÒªÓÉ´æ´¢·þÎñÆ÷£¨Brick Server£©¡¢¿Í»§¶ËÒÔ¼°
NFS/Samba ´æ´¢Íø¹Ø×é³É¡£²»ÄÑ·¢ÏÖ£¬GlusterFS ¼Ü¹¹ÖÐûÓÐÔªÊý¾Ý·þÎñÆ÷×é¼þ£¬ÕâÊÇÆä×î´óµÄÉè¼ÆÕâµã£¬¶ÔÓÚÌáÉýÕû¸öϵͳµÄÐÔÄÜ¡¢¿É¿¿ÐÔºÍÎȶ¨ÐÔ¶¼ÓÐמö¶¨ÐÔµÄÒâÒå¡£
GlusterFS Ö§³Ö TCP/IP ºÍ InfiniBand RDMA ¸ßËÙÍøÂ绥Áª¡£
¿Í»§¶Ë¿Éͨ¹ýÔÉú GlusterFS ÐÒé·ÃÎÊÊý¾Ý£¬ÆäËûûÓÐÔËÐÐ GlusterFS ¿Í»§¶ËµÄÖÕ¶Ë¿Éͨ¹ý
NFS/CIFS ±ê×¼ÐÒéͨ¹ý´æ´¢Íø¹Ø·ÃÎÊÊý¾Ý£¨´æ´¢Íø¹ØÌṩµ¯ÐÔ¾í¹ÜÀíºÍ·ÃÎÊ´úÀí¹¦ÄÜ£©¡£
´æ´¢·þÎñÆ÷Ö÷ÒªÌṩ»ù±¾µÄÊý¾Ý´æ´¢¹¦ÄÜ£¬¿Í»§¶ËÃÖ²¹ÁËûÓÐÔªÊý¾Ý·þÎñÆ÷µÄÎÊÌ⣬³Ðµ£Á˸ü¶àµÄ¹¦ÄÜ£¬°üÀ¨Êý¾Ý¾í¹ÜÀí¡¢I/O
µ÷¶È¡¢Îļþ¶¨Î»¡¢Êý¾Ý»º´æµÈ¹¦ÄÜ£¬ÀûÓà FUSE£¨File system in User Space£©Ä£¿é½«
GlusterFS ¹ÒÔØµ½±¾µØÎļþϵͳ֮ÉÏ£¬ÊµÏÖ POSIX ¼æÈݵķ½Ê½À´·ÃÎÊϵͳÊý¾Ý¡£

»ùÓÚ GlusterFS ʵÏÖ Docker ¼¯ÈºµÄ·Ö²¼Ê½´æ´¢
Èçͼ 1 ÖÐ GlusterFS Óзdz£¶àµÄÊõÓÀí½âÕâЩÊõÓï¶ÔÀí½â GlusterFS µÄ¶¯×÷»úÀíÊǷdz£ÖØÒªµÄ£¬±í1¸ø³öÁË
GlusterFS ³£¼ûµÄÃû³Æ¼°Æä½âÊÍ¡£
±í1. GlusterFS ³£¼ûÊõÓï
Ãû³Æ ½âÊÍ
Brick ×î»ù±¾µÄ´æ´¢µ¥Ôª£¬±íʾΪtrusted
storage poolÖÐÊä³öµÄĿ¼£¬¹©¿Í»§¶Ë¹ÒÔØÓá£
Volume
Ò»¸ö¾í¡£ÔÚÂß¼ÉÏÓÉN¸öbricks×é³É¡£
FUSE Unix-like OSÉϵĿɶ¯Ì¬¼ÓÔØµÄÄ£¿é£¬ÔÊÐíÓû§²»ÓÃÐÞ¸ÄÄں˼´¿É´´½¨×Ô¼ºµÄÎļþϵͳ¡£
Glusterd Gluster management daemon
ÒªÔÚtrusted storage poolÖÐËùÓеķþÎñÆ÷ÉÏÔËÐС£
POSIX Ò»¸ö±ê×¼£¬GlusterFS¼æÈÝ¡£
GlusterFS¾íÀàÐÍ
ΪÁËÂú×㲻ͬӦÓöԸßÐÔÄÜ¡¢¸ß¿ÉÓõÄÐèÇó£¬GlusterFS Ö§³Ö 7 ÖÖ¾í£¬¼´ distribute ¾í¡¢stripe
¾í¡¢replica ¾í¡¢distribute stripe ¾í¡¢distribute replica ¾í¡¢stripe
Replica ¾í¡¢distribute stripe replica ¾í¡£Æäʵ²»ÄÑ¿´³ö£¬GlusterFS
¾íÀàÐÍʵ¼ÊÉÏ¿ÉÒÔ·ÖΪ 3 ÖÖ»ù±¾¾íºÍ 4 ÖÖ¸´ºÏ¾í£¬Ã¿ÖÖÀàÐÍµÄ¾í¶¼ÓÐÆä×ÔÉíµÄÌØµãºÍÊÊÓó¡¾°¡£
»ù±¾¾í£º
(1) distribute volume ·Ö²¼Ê½¾í
»ùÓÚ Hash Ëã·¨½«Îļþ·Ö²¼µ½ËùÓÐ brick server£¬Ö»ÊÇÀ©´óÁË´ÅÅ̿ռ䣬²»¾ß±¸ÈÝ´íÄÜÁ¦¡£ÓÉÓÚdistribute
volume ʹÓñ¾µØÎļþϵͳ£¬Òò´Ë´æÈ¡Ð§Âʲ¢Ã»ÓÐÌá¸ß£¬Ïà·´»áÒòÎªÍøÂçͨÐŵÄÔÒòʹÓÃЧÂÊÓÐËù½µµÍ£¬ÁíÍâ±¾µØ´æ´¢É豸µÄÈÝÁ¿ÓÐÏÞÖÆ£¬Òò´ËÖ§³Ö³¬´óÐÍÎļþ»áÓÐÒ»¶¨ÄѶȡ£Í¼2
ÊÇ distribute volume ʾÒâͼ¡£
ͼ2. Distribute volumeʾÒâͼ

»ùÓÚ GlusterFS ʵÏÖ Docker ¼¯ÈºµÄ·Ö²¼Ê½´æ´¢
(2) stripe volume Ìõ´ø¾í
ÀàËÆ RAID0£¬Îļþ·Ö³ÉÊý¾Ý¿éÒÔ Round Robin ·½Ê½·Ö²¼µ½ brick server ÉÏ£¬²¢·¢Á£¶ÈÊÇÊý¾Ý¿é£¬Ö§³Ö³¬´óÎļþ£¬´óÎļþµÄ¶ÁдÐÔÄܸߡ£Í¼3
ÊÇ stripe volume ʾÒâͼ¡£
ͼ3. Stripe volumeʾÒâͼ

»ùÓÚ GlusterFS ʵÏÖ Docker ¼¯ÈºµÄ·Ö²¼Ê½´æ´¢
(3) replica volume ¸´Öƾí
Îļþͬ²½¸´ÖƵ½¶à¸ö brick ÉÏ£¬Îļþ¼¶ RAID1£¬¾ßÓÐÈÝ´íÄÜÁ¦£¬Ð´ÐÔÄÜϽµ£¬¶ÁÐÔÄÜÌáÉý¡£Replicated
ģʽ£¬Ò²³Æ×÷ AFR£¨Auto File Replication£©£¬Ï൱ÓÚ RAID1£¬¼´Í¬Ò»ÎļþÔÚ¶à¸ö¾µÏñ´æ´¢½ÚµãÉϱ£´æ¶à·Ý£¬Ã¿¸ö
replicated ×Ó½ÚµãÓÐ×ÅÏàͬµÄĿ¼½á¹¹ºÍÎļþ£¬replica volume Ò²ÊÇÔÚÈÝÆ÷´æ´¢ÖнÏÎªÍÆ³çµÄÒ»ÖÖ¡£Í¼4
ÊÇ replica volume ʾÒâͼ¡£
ͼ4 . Replica volumeʾÒâͼ

»ùÓÚ GlusterFS ʵÏÖ Docker ¼¯ÈºµÄ·Ö²¼Ê½´æ´¢
¸´ºÏ¾í£º
(4) distribute stripe volume ·Ö²¼Ê½Ìõ´ø¾í
Brick server ÊýÁ¿ÊÇÌõ´øÊýµÄ±¶Êý£¬¼æ¾ß distribute ºÍ stripe ¾íµÄÌØµã¡£·Ö²¼Ê½µÄÌõ´ø¾í£¬volume
ÖÐ brick Ëù°üº¬µÄ´æ´¢·þÎñÆ÷Êý±ØÐëÊÇ stripe µÄ±¶Êý(>=2±¶)£¬¼æ¹Ë·Ö²¼Ê½ºÍÌõ´øÊ½µÄ¹¦ÄÜ¡£Ã¿¸öÎļþ·Ö²¼ÔÚËĄ̈¹²Ïí·þÎñÆ÷ÉÏ£¬Í¨³£ÓÃÓÚ´óÎļþ·ÃÎÊ´¦Àí£¬×îÉÙÐèÒª
4 ̨·þÎñÆ÷²ÅÄÜ´´½¨·Ö²¼Ìõ´ø¾í¡£Í¼5 ÊÇdistribute stripe volume ʾÒâͼ¡£
ͼ5 . Distribute stripe volume ʾÒâͼ

»ùÓÚ GlusterFS ʵÏÖ Docker ¼¯ÈºµÄ·Ö²¼Ê½´æ´¢
(5) distribute replica volume ·Ö²¼Ê½¸´Öƾí
Brick server ÊýÁ¿ÊǾµÏñÊýµÄ±¶Êý£¬¼æ¾ß distribute ºÍ replica ¾íµÄÌØµã,¿ÉÒÔÔÚ
2 ¸ö»ò¶à¸ö½ÚµãÖ®¼ä¸´ÖÆÊý¾Ý¡£·Ö²¼Ê½µÄ¸´ÖÆ¾í£¬volume ÖÐ brick Ëù°üº¬µÄ´æ´¢·þÎñÆ÷Êý±ØÐëÊÇ
replica µÄ±¶Êý(>=2±¶)£¬¼æ¹Ë·Ö²¼Ê½ºÍ¸´ÖÆÊ½µÄ¹¦ÄÜ¡£Í¼6 ÊÇ distribute replica
volume ʾÒâͼ¡£
ͼ6 . Distribute replica volume ʾÒâͼ

»ùÓÚ GlusterFS ʵÏÖ Docker ¼¯ÈºµÄ·Ö²¼Ê½´æ´¢
(6) stripe replica volume Ìõ´ø¸´Öƾí
ÀàËÆ RAID 10£¬Í¬Ê±¾ßÓÐÌõ´ø¾íºÍ¸´ÖƾíµÄÌØµã¡£Í¼7 ÊÇ distribute replica volume
ʾÒâͼ¡£
ͼ7 . Stripe replica volume ʾÒâͼ

»ùÓÚ GlusterFS ʵÏÖ Docker ¼¯ÈºµÄ·Ö²¼Ê½´æ´¢
(7) distribute stripe replica volume£º·Ö²¼Ê½Ìõ´ø¸´Öƾí
ÈýÖÖ»ù±¾¾íµÄ¸´ºÏ¾í£¬Í¨³£ÓÃÓÚÀà Map Reduce Ó¦Óá£Í¼8 ÊÇ distribute stripe
replica volume ʾÒâͼ¡£
ͼ8 . Distribute stripe replica volume ʾÒâͼ

»ùÓÚ GlusterFS ʵÏÖ Docker ¼¯ÈºµÄ·Ö²¼Ê½´æ´¢
GlusterFS ³£ÓÃÃüÁî
GlusterFS ¿Í»§¶ËÌṩÁ˷dz£·á¸»µÄÃüÁîÓÃÀ´²Ù×÷½Úµã¡¢¾í£¬±í2¸ø³öÁ˳£ÓõÄһЩÃüÁî¡£ÔÚÓëÈÝÆ÷¶Ô½Ó¹ý³ÌÖУ¬Í¨¹ýÎÒÃÇÐèÒª´´½¨¾í¡¢É¾³ý¾í£¬ÒÔ¼°É趨¾íµÄÅä¶îµÈ¹¦ÄÜ£¬²¢ÇÒºóÐøÕâЩ¹¦ÄÜÒ²ÐèÒª
REST API »¯£¬·½±ãͨ¹ýHTTPÇëÇóµÄ·½Ê½À´²Ù×÷¾í¡£
±í2. GlusterFS ¿Í»§¶Ë³£ÓÃÃüÁî
ÃüÁî ¹¦ÄÜ
gluster peer probe Ìí¼Ó½Úµã
gluster peer detach ÒÆ³ý½Úµã
gluster volume create ´´½¨¾í
gluster volume start Æô¶¯¾í
gluster volume stop Í£Ö¹¾í
gluster volume delete ɾ³ý¾í
gluster volume quota enable ¿ªÆô¾íÅä¶î
gluster volume quota enable ¹Ø±Õ¾íÅä¶î
gluster volume quota limit-usage É趨¾íÅä¶î
GlusterFS ·Ö²¼Ê½Îļþϵͳ°²×°ÓëÅäÖÃ
GlusterFS ¼¯Èº´î½¨
±¾ÎĽ«ÒÔ Ubuntu14.04.3 LTS Server ΪÀý°²×° 2 ¸ö½ÚµãµÄ GlusterFS
¼¯Èº¡£Ã¿¸ö·þÎñ½ÚµãÐèÒªÓÐÒ»¸ö¶îÍâµÄÅÌ·û¡£¾ßÌåÇë²Î¿¼ÏÂÃæ²½Ö裺
Çåµ¥1. ´î½¨ GlusterFS ¼¯Èº
# (1). ¸ñʽ»¯´ÅÅÌ fdisk /dev/sdb ÃüÁîÐÐÌáʾÏÂÊäÈ롾m¡¿ ÊäÈëÃüÁn¡¿Ìí¼ÓзÖÇø ÊäÈëÃüÁp¡¿´´½¨Ö÷·ÖÇø ÊäÈ롾»Ø³µ¡¿£¬Ñ¡ÔñĬÈÏ´óС£¬ÕâÑù²»À˷ѿռä ÊäÈ롾»Ø³µ¡¿£¬Ñ¡ÔñĬÈϵÄstart cylinder ÊäÈ롾w¡¿£¬±£³ÖÐÞ¸Ä
# (2). Ìí¼ÓglusterÔ´
cat >>/etc/apt/sources.list <<EOF
deb http://ppa.launchpad.net/gluster/glusterfs-3.7/ubuntu
trusty main
deb-src http://ppa.launchpad.net/gluster/glusterfs-3.7/ubuntu
trusty main
EOF
# (3). °²×°glusterfs
apt-get install xfsprogs glusterfs-server -y
mkfs.xfs -i size=512 /dev/sdb1
mkdir -p /glusterfs/brick #¹ÒÔØµã
echo '/dev/sdb1 /glusterfs/brick xfs defaults
1 2' >> /etc/fstab #ÉèÖÃ×Ô¶¯¹ÒÔØ
mount -a && mount
gluster volume set all cluster.op-version 30710
# (4). ÅäÖÃpeer
gluster peer probe <IP|HOSTNAME>
gluster peer status
# (5). µ±³öÏÖÏÂÁÐÐÅϢʱ±íʾ¼¯Èº´î½¨³É¹¦
gluster peer status
Number of Peers: 1
Hostname: 192.168.1.101
Uuid: 8d836e09-f217-488b-971c-be9206a197f6
State: Peer in Cluster (Connected)
# (6). ´´½¨Volume
gluster volume create <VOLUME_NAME> replica
2 \
node1: /glusterfs/brick/<VOLUME_NAME> \
node2: /glusterfs/brick/<VOLUME_NAME>
# (7). Æô¶¯Volume
gluster volume start <VOLUME_NAME> |
GlusterFS ¿Í»§¶ËÅäÖÃ
Çåµ¥2. GlusterFS ¿Í»§¶ËÅäÖÃ
# (1). Ìí¼ÓglusterÔ´ cat >>/etc/apt/sources.list <<EOF deb http://ppa.launchpad.net/gluster/glusterfs-3.7/ubuntu trusty main deb-src http://ppa.launchpad.net/gluster/glusterfs-3.7/ubuntu trusty main EOF
# (2). °²×°glusterfs client
apt-get install glusterfs-client -y
# (3). ¹ÒÔØgluster¾í
glusterfs node1:<VOLUME_NAME> /mnt/local-volume |
ÖÁ´Ë£¬ÎÒÃǾ͹ÒÔØºÃÁËGlusterFS¼¯ÈºÖеÄÒ»¸öReplicaÀàÐÍµÄ¾í£¬ËùÓÐдÈë¸Ã¾íÖеÄÊý¾Ý¶¼»áÔÚ¼¯ÈºÖÐÓÐÁ½·Ý¿½±´¡£
Docker GlusterFS Volume ²å¼þ
½ÓÏÂÀ´£¬ÎÒÃÇÔÙÀ´¿´GlusterFSÈçºÎ×÷ΪDockerµÄ´æ´¢¡£Docker VolumeÊÇÒ»ÖÖ¿ÉÒÔ½«ÈÝÆ÷ÒÔ¼°ÈÝÆ÷Éú²úµÄÊý¾Ý·ÖÏí¿ªÀ´µÄÊý¾Ý¸ñʽ£¬ÎÒÃÇ¿ÉÒÔʹÓÃËÞÖ÷»úµÄ±¾µØ´æ´¢×÷ΪVolumeµÄÌṩ·½£¬Ò²¿ÉÒÔʹÓÃVolume
Plugin½ÓÈëÐí¶àµÚÈý·½µÄ´æ´¢¡£ GitHub¾ÍÓÐÒ»¸ö Docker GlusterFS Volume
Plugin £¬·½±ãÎÒÃǽ«GlusterFS¹ÒÔØµ½ÈÝÆ÷ÖС£¾ßÌå²½ÖèÈçÏ£º
Çåµ¥3. °²×° Docker GlusterFS Volume ²å¼þ
# (1). »ñÈ¡docker-volume-glusterfs go get github.com/calavera/docker-volume-glusterfs ¿¼Âǵ½´î½¨golang»·¾³ÓÐÒ»¶¨µÄ¸´ÔÓÐÔ£¬ÎÒÃÇÒ²¿ÉÒÔ²ÉÓÃgolangÈÝÆ÷À´»ñÈ¡¸ÃÓ¦ÓÃ
# (2). ¿½±´docker-volume-glusterfsÖÁ/usr/bin
cp ./docker-volume-glusterfs /usr/bin
chmod 777 /usr/bin/docker-volume-glusterfs
# (3). ÉùÃ÷gluster·þÎñ¼¯Èº
docker-volume-glusterfs -servers node1:node2
# (4). Ö¸¶¨volume
docker run --volume-driver glusterfs --volume
datastore:/data alpine touch /data/hello
ÕâÀïµÄdatastore¼´ÎÒÃÇÔÚglusterfs¼¯ÈºÖд´½¨µÄvolume£¬µ«ÐèÒªÊÂÏÈÊÖ¶¯´´½¨ |
GlusterFS REST API ·þÎñ´î½¨
ÉÏÊö²½ÖèËäȻʵÏÖÁË GlusterFS ×÷Ϊ Docker ´æ´¢·½°¸£¬µ« GlusterFS ¾íÈÔÐèÒªÊÖ¶¯´´½¨¡£ÎªÁË×Ô¶¯»¯µØ¹ÜÀí
GlusterFS ¾í£¬ÎÒÃǽ«¾í²Ù×÷·â×°³É REST API¡£ GitHubÉ쵀 glusterfs-rest
½« GlusterFS »ù´¡²Ù×÷ʹÓà Python ·â×°³ÉÁË REST API£¬µ«ÊÇËüûÓн« Volume
ÈÝÁ¿ÏÞÖÆµÈ¹¦ÄÜ·â×°ÆðÀ´£¬¶øÎÒÃÇÏîÄ¿ÖÐÕâ¸ö¹¦ÄÜÓÖÊDZØÐëµÄ£¬²»¹ýÉÔ¼ÓÐ޸ĺó¾Í¿ÉÒÔʵÏÖÈÝÁ¿ÏÞÖÆµÄ¹¦ÄÜ¡£
Çåµ¥4. Ìí¼Ó Volume ÈÝÁ¿ÏÞÖÆ¹¦ÄÜ
# (1). ¿Ë¡´úÂë git clone https://github.com/aravindavk/glusterfs-rest.git
# (2). ÐÞ¸Äglusterfs-rest/glusterfsrest/cli/ volume.py
create·½·¨
def create(name, bricks, replica=0, stripe=0,
transport='tcp', force=False,
start_volume=False,limit=False,quota=1):
cmd = VOLUME_CMD + ["create", name]
if stripe > 0:
cmd += ["stripe", str(stripe)]
if replica > 0:
cmd += ["replica", str(replica)]
cmd += ["transport", transport]
cmd += bricks
if force:
cmd += ["force"]
# If volume needs to be started, then run create
command without
# decorator else return create command and status
zero true
# decorator will take care of running cmd
if start_volume:
utils.checkstatuszero(cmd)
if limit:
enable_cmd = VOLUME_CMD + ["quota",name,"enable"]
quota_cmd = VOLUME_CMD +["quota",name,"limit-usage","/",str(quota)+"GB"]
start(name, force=True)
utils.checkstatuszero(enable_cmd)
return utils.checkstatuszero(quota_cmd)
else:
return start(name, force=True)
else:
return utils.checkstatuszero(cmd)
# (3). ÐÞ¸Äglusterfs-rest/glusterfsrest/doc/api-1.0.yml
CreateÄÚÈÝ
# -----------------------------------------------------------------------------
# Create Gluster Volume
# -----------------------------------------------------------------------------
- title: Create Gluster Volume
auth: true
url: volume/:name
category: volume
method: POST
params:
- name: bricks
type: string
required: true
example: "bricksserver1:/exports/bricks/b1"
desc: Comma seperated Brick paths
- name: replica
type: int
required: false
example: 1
desc: Replica Count
default: 0
- name: stripe
type: int
required: false
example: 1
desc: Stripe Count
default: 0
- name: transport
type: int
required: false
example: tcp
desc: Transport Type, available types "tcp",
"rdma", "tcp,rdma"
default: tcp
- name: force
type: int
required: false
example: 1
desc: Volume create force
default: 0
- name: start
type: int
required: false
example: 1
desc: Start volume after create
default: 0
- name: limit
type: int
required: false
example: 1
desc: Limit volume after start
default: 0
- name: quota
type: int
required: false
example: 1
desc: Set Quota if limit
default: 1
example: |
curl -X POST http://admin:secret123@localhost:9000/api/1.0/volume/gv1
-d \
"bricks=bricksserver1:/exports/bricks/b1,bricksserver2: /exports/bricks/b2&start=1&replica=2&limit=1"a=2"
response: |
Success example:
{
"data": true,
"ok": true
}
Failure example:
{
"error": "volume create: gv1: failed:
Volume gv1 already exists",
"ok": false
}
# (4). °²×°ÒÀÀµ
apt-get install python-setuptools
# (5). Æô¶¯·þÎñ
cd glusterfs-rest
python setup.py install
glusterrest install # (Reinstall also available,
sudo glusterrest reinstall)
# (6). ¿½±´gunicorn
cp /usr/local/bin/gunicorn /usr/bin/
chmod 777 /usr/bin/gunicorn
# (7). Æô¶¯·þÎñ
glusterrest port 80
sudo glusterrest useradd root -g glusterroot -p
root
glusterrestd |
·þÎñÆô¶¯ºó£¬ÎÒÃÇ¿ÉÒÔͨ¹ý http://<node_ip>/ api/1.0/doc ·ÃÎÊ
API µÄ¾ßÌåʹÓ÷½·¨£¬Ö÷Òª·â×°µÄ API ¼û±í 3¡£
±í3. Gluster-rest ·â×° API
¹¦ÄÜÃèÊö HTTPÇëÇó·½·¨ URL
²é¿´¾íÁбí GET /api/1.0/volumes
²é¿´µ¥¶À¾íÐÅÏ¢ GET /api/1.0/volume/:name
´´½¨¾í POST /api/1.0/volume/:name
ɾ³ý¾í DELETE /api/1.0/volume/:name
Æô¶¯¾í PUT /api/1.0/volume/:name/start
Í£Ö¹¾í PUT /api/1.0/volume/:name/stop
ÖØÆô¾í PUT /api/1.0/volume/:name/restart
»ñÈ¡¼¯Èº½ÚµãÐÅÏ¢ GET /api/1.0/peers
Ìí¼Ó½Úµã POST /api/1.0/peer/:hostname
ɾ³ý½Úµã DELETE /api/1.0/peer/:hostname
»ùÓÚ GlusterFS ʵÏÖÊý¾Ý³Ö¾Ã»¯°¸Àý
½ÓÏÂÀ´£¬Óà MYSQL Êý¾Ý¿âÈÝÆ÷À´Õ¹Ê¾ GlusterFS ÈçºÎʵÏÖÊý¾Ý³Ö¾Ã»¯¡£
·Ç³Ö¾Ã»¯MYSQLÊý¾Ý¿âÈÝÆ÷
Çåµ¥5. ´´½¨·Ç³Ö¾Ã»¯MYSQL Êý¾Ý¿âÈÝÆ÷
# (1). ´´½¨mysql_1 docker run --name mysql_1 -e MYSQL_ROOT_PASSWORD=password -d -p 3306:3306 mysql
# (2). 怬mysql_1
docker exec -it mysql_1 /bin/bash
root@4320a6f596fe:/# mysql -uroot
# (3). ´´½¨database
mysql> create database mydb;
Query OK, 1 row affected (0.00 sec)
# (4). Áгödatabase
mysql>show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydb |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.00 sec)
# (5). Í˳ömysql¼°ÈÝÆ÷
mysql> exit
root@4320a6f596fe:/# exit
# (6). ɾ³ýÈÝÆ÷
docker stop mysql_1 && docker rm mysql_1
# (7). ´´½¨msqyl_2
docker run --name mysql_2 -e MYSQL_ROOT_PASSWORD=password
-d -p 3306:3306 mysql
# (8). 怬mysql_2
docker exec -it mysql_2 /bin/bash
root@fe32ea420460:/# mysql -uroot
# (9). Áгödatabase
mysql>show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec) |
ÕâÀïÎÒÃÇ¿ÉÒÔ¿´µ½Ð´´½¨µÄÈÝÆ÷²¢Ã»Óаüº¬ÎÒÃÇÏÈǰ´´½¨µÄ mydb Êý¾Ý¿â£¬ÕâÊÇÒòΪ·ÇÖ´¾Ã»¯µÄÈÝÆ÷ËùÓÐÊý¾Ý¶¼ÔÚÄÚ´æÖУ¬Êý¾Ý»áËæ×ÅÈÝÆ÷µÄɾ³ýÒ»Æðɾ³ý¡£
³Ö¾Ã»¯ MYSQL Êý¾Ý¿âÈÝÆ÷
ÏÂÃæÎÒÃÇÔÙÓà GlusterFS ¾íÀ´ÊµÏÖÊý¾Ý³Ö¾Ã»¯µÄЧ¹û¡£
Çåµ¥6. ´´½¨³Ö¾Ã»¯ MYSQL Êý¾Ý¿âÈÝÆ÷
# (1). ´´½¨Volume curl -X POST http://root:root@192.168.1.101/api/1.0/volume/gluster_volume -d \ "bricks=bricksserver1:/exports/bricks/gluster_volume,bricksserver2: /exports/bricks/ gluster_volume&start=1&replica=2&limit=1"a=2"
# (2). ´´½¨mysql_3
docker run --name mysql_3 --volume-driver glusterfs
\
--volume gluster_volume:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=password -d -p 3306:3306
mysql
# (3). 怬mysql_3
docker exec -it mysql_1 /bin/bash
root@b3f71265a066:/# mysql -u root
# (4). ´´½¨database
mysql> create database mydb;
Query OK, 1 row affected (0.00 sec)
# (5). Áгödatabase
mysql>show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydb |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.00 sec)
# (6). Í˳ömysql¼°ÈÝÆ÷
mysql>exit
root@b3f71265a066:/# exit
# (7). ɾ³ýÈÝÆ÷
docker stop mysql_3 && docker rm mysql_3
# (8). ´´½¨msqyl_4
docker run --name mysql_4 --volume-driver glusterfs
\
--volume gluster_volume:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=password -d -p 3306:3306
mysql
# (9). 怬mysql_4
docker exec -it mysql_4 /bin/bash
root@1aafc1734abb:/# mysql -u root
# (10). Áгödatabase
Mysql > show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydb |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.02 sec) |
ÕâÀïÎÒÃÇ¿ÉÒÔ¿´µ½Ð´´½¨µÄÈÝÆ÷°üº¬ÁË֮ǰ´´½¨µÄÊý¾Ý¿â mydb£¬Ò²¾ÍʵÏÖÁËÎÒÃÇ˵µÄÊý¾Ý³Ö¾Ã»¯Ð§¹û¡£
С½á
GlusterFS ×÷ΪһÖÖ¿ªÔ´·Ö²¼Ê½´æ´¢×é¼þ£¬¾ßÓзdz£Ç¿´óµÄÀ©Õ¹ÄÜÁ¦£¬Í¬Ê±Ò²ÌṩÁ˷dz£·á¸»µÄ¾íÀàÐÍ£¬Äܹ»ÇáËÉʵÏÖPB¼¶µÄÊý¾Ý´æ´¢¡£±¾ÎÄ»ùÓÚ
docker glusterfs volume ²å¼þºÍ gluster-rest API ·â×°£¬ÊµÏÖÁËÈÝÆ÷µÄ¼¯Èº·Ö²¼Ê½´æ´¢¹¦ÄÜ¡£Docker
±¾ÉíÌṩÁ˱¾µØ´æ´¢µÄ·½°¸£¬µ«ÎÞ·¨¿çÔ½Ö÷»ú£¬Òò´ËÈÝÆ÷Ò»µ©±»Ïú»Ùºó£¬Èç¹û²»ÊÇÂäÔÚÏÈǰµÄËÞÖ÷»úÉÏÔËÐÐÒ²¾ÍÒâζ×ÅÊý¾Ý¶ªÊ§¡£±¾ÎÄʵÏÖµÄ
GlusterFS ´æ´¢·½°¸£¬¾íÐÅÏ¢²»Ëæ Docker ËÞÖ÷»úµÄ±ä¸ü¶ø·¢Éú±ä»¯£¬Òò´ËÄܹ»·½±ãʵÏÖ Docker
¼¯ÈºµÄºáÏòÀ©Õ¹¡£±¾ÎÄΪ Docker ¼¯ÈºÌṩ³Ö¾Ã»¯µÄ¹¦ÄÜ£¬ÀýÈç¹ØÏµÐÍÊý¾Ý¡¢Îļþ·þÎñµÈ£¬ÌṩÁ˷dz£ÓмÛÖµµÄ²Î¿¼¡£ |