Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
»ùÓÚ GlusterFS ʵÏÖ Docker ¼¯ÈºµÄ·Ö²¼Ê½´æ´¢
 
  À´Ô´£ºÍøÂç ·¢²¼ÓÚ 2017-5-3
  2894  次浏览      29
 

ÒÔ 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&quota=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&quota=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£ÓмÛÖµµÄ²Î¿¼¡£

   
2894 ´Îä¯ÀÀ       29
 
Ïà¹ØÎÄÕÂ

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
 
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
 
Ïà¹Ø¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

ר¼ÒÊӽǿ´ITÓë¼Ü¹¹
Èí¼þ¼Ü¹¹Éè¼Æ
ÃæÏò·þÎñÌåϵ¼Ü¹¹ºÍÒµÎñ×é¼þµÄ˼¿¼
ÈËÈËÍøÒÆ¶¯¿ª·¢¼Ü¹¹
¼Ü¹¹¸¯»¯Ö®ÃÕ
̸ƽ̨¼´·þÎñPaaS
Ïà¹ØÅàѵ¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
Windows Azure ÔÆ¼ÆËãÓ¦ÓÃ

ĦÍÐÂÞÀ­ ÔÆÆ½Ì¨µÄ¹¹½¨ÓëÓ¦ÓÃ
ͨÓù«Ë¾GE DockerÔ­ÀíÓëʵ¼ù
ijÑз¢ÖÐÐÄ Openstackʵ¼ù
ÖªÃûµç×Ó¹«Ë¾ ÔÆÆ½Ì¨¼Ü¹¹ÓëÓ¦ÓÃ
ijµçÁ¦ÐÐÒµ »ùÓÚÔÆÆ½Ì¨¹¹½¨ÔÆ·þÎñ
ÔÆ¼ÆËãÓëWindows AzureÅàѵ
±±¾© ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ