├── README.md ├── docs ├── knowledge_base │ ├── bluestore_vs_filestore.md │ ├── ceph-authen.md │ ├── ceph-flag.md │ ├── ceph-mds.md │ ├── ceph-mgr.md │ ├── ceph-mon.md │ ├── ceph-osd.md │ ├── ceph-overview.md │ ├── ceph-pg-status.md │ ├── ceph-rados.md │ ├── ceph-radosgw.md │ ├── ceph-rbd.md │ ├── crush.md │ ├── mon.md │ ├── osd.md │ ├── paxos.md │ ├── pg.md │ └── rados.md ├── monitor │ ├── README.md │ ├── check_mk │ │ ├── README.md │ │ └── plugins │ │ │ ├── ceph │ │ │ └── smart │ ├── grafana │ │ ├── README.md │ │ ├── images │ │ │ ├── grafana001.png │ │ │ ├── grafana002.png │ │ │ └── grafana003.png │ │ └── tools │ │ │ └── CEPH_Bandwidth.json │ ├── influxdb │ │ └── README.md │ ├── prometheus │ │ ├── README.md │ │ └── images │ │ │ └── prom_ceph_001.png │ └── zabbix │ │ ├── README.md │ │ └── ceph_zabbix.xml ├── operating │ ├── bluestore-blockwall.md │ ├── ceph-cheat-sheet.md │ ├── ceph-hardware-crash.md │ ├── ceph-module-balancer.md │ ├── ceph-vs-client-linux.md │ ├── ceph-vs-openstack.md │ └── note.md ├── other │ ├── Ceph.Cookbook.2nd.Edition.1788391063.pdf │ ├── Cephalocon_Barcelona_Optimize_Ceph.pdf │ ├── IP-Planning.xlsx │ └── weil-crush-sc06.pdf └── setup │ ├── ceph-dashboard.md │ ├── ceph-luminous-aio.md │ ├── ceph-luminous.md │ ├── ceph-mimic.md │ ├── ceph-nautilus.md │ └── ceph-radosgw.md ├── images ├── ceph-mds.png ├── ceph-osd.png ├── ceph-radosgw.png ├── ceph_auth.png ├── ceph_authfolow.png ├── ceph_createuser.png ├── ceph_request.png ├── ceph_stack.png ├── ceph_users.png ├── cephaio │ └── resource.png ├── dashboard-cephdash.png ├── dashboard-l.png ├── dashboard-m.png ├── dashboard-n.png ├── dashboard-n │ ├── Ip_planning.png │ ├── cluster_host.png │ ├── cluster_host_prom.png │ ├── grafana01.png │ ├── grafana02.png │ ├── grafana03.png │ ├── grafana04.png │ ├── grafana05.png │ ├── grafana06.png │ ├── grafana07.png │ ├── grafana08.png │ ├── metrics.png │ └── topo.png ├── filestore-vs-bluestore.png ├── ip-planning.png ├── ip-planning1.png ├── ip-planning2.png ├── journal.png ├── mohinh-ops-ceph.png ├── monitor │ ├── check_mk_ceph.png │ ├── check_mk_disk.png │ └── zabbix029.png ├── pg.png ├── pg_calc.png ├── rados.png ├── radosgw │ ├── bucket01.png │ ├── dns.png │ ├── nginx.png │ ├── nginx1.png │ ├── nginx2.png │ ├── nginx3.png │ ├── nginx_cert.png │ ├── nginx_proxy.jpeg │ ├── nginx_rr.gif │ ├── s3cmd2.gif │ └── s3cmd_https.gif ├── rbdmap.png ├── topo.png └── topol.png └── scripts ├── MegaCli8.07.14.zip ├── backy2_2.9.17_all.deb ├── ceph.py └── rbd_new.py └── rbd.py /README.md: -------------------------------------------------------------------------------- 1 | # Storage cơ bản 2 | 3 | [Các note ghi chép liên quan đến Storage](https://github.com/uncelvel/storage) 4 | 5 | # Lý thuyết Ceph Storage 6 | 7 | [Ceph - Overview](docs/knowledge_base/ceph-overview.md) 8 | 9 | # Các services, thành phần của Ceph 10 | 11 | - [Ceph RADOS](docs/knowledge_base/ceph-rados.md) 12 | - [CRUSH](docs/knowledge_base/crush.md) 13 | - [Ceph Storage Backend](docs/knowledge_base/bluestore_vs_filestore.md) 14 | - [Ceph MON - Monitor (ceph-mon)](docs/knowledge_base/ceph-mon.md) 15 | - [Ceph OSD - Object Storage Device (ceph-osd)](docs/knowledge_base/ceph-osd.md) 16 | - [Ceph RBD - RADOS Block Device](docs/knowledge_base/ceph-rbd.md) 17 | - [Ceph MDS - Metadata Server (ceph-mds)](docs/knowledge_base/ceph-mds.md) 18 | - [Ceph RADOSGW - Object Gateway(ceph-radosgw)](docs/knowledge_base/ceph-radosgw.md) 19 | - [Ceph MGR - Manager (ceph-mgr)](docs/knowledge_base/ceph-mgr.md) 20 | - [Thuật toán PAXOS](docs/knowledge_base/paxos.md) 21 | - [Cơ chế xác thực của Ceph](docs/knowledge_base/ceph-authen.md) 22 | - [Các flag của Cluster Ceph](docs/knowledge_base/ceph-flag.md) 23 | - [Các trạng thái của PG](docs/knowledge_base/ceph-pg-status.md) 24 | 25 | # Tài liệu cài đặt 26 | 27 | [Cài đặt CephAIO bản Luminous sử dụng scripts](https://github.com/uncelvel/script-ceph-lumi-aio) 28 | 29 | [Cài đặt CephAIO bản Luminous manual-cephuser](docs/setup/ceph-luminous-aio.md) 30 | 31 | [Cài đặt Ceph bản Luminous](docs/setup/ceph-luminous.md) 32 | 33 | [Cài đặt Ceph bản Mimic](docs/setup/ceph-mimic.md) 34 | 35 | [Cài đặt Ceph bản Nautilus](docs/setup/ceph-nautilus.md) 36 | 37 | [Cài đặt Ceph-RadosGW HA bản Nautilus](docs/setup/ceph-radosgw.md) 38 | 39 | # Tài liệu tích hợp 40 | 41 | [Tích hợp Linux Client sử dụng RBD Ceph](docs/operating/ceph-vs-client-linux.md) 42 | 43 | [Sử dụng CephFS (File Storage) cơ bản](docs/operating/ceph-vs-client-linux.md) 44 | 45 | [Sử dụng RBD (Block Storage) cơ bản]() 46 | 47 | [Sử dụng RGW (Object Storage) cơ bản]() 48 | 49 | [Tích hợp Ceph với OpenStack](docs/operating/ceph-vs-openstack.md) 50 | 51 | # Tài liệu vận hành 52 | 53 | ## CheatSheet thao tác 54 | 55 | [Ceph Cheat sheet](docs/operating/ceph-cheat-sheet.md) 56 | 57 | ## Module của MGR 58 | 59 | [Ceph Module Balancer](docs/operating/ceph-module-balancer.md) 60 | 61 | # Benchmark & Troubleshooting 62 | 63 | - [Node Ceph hỏng](docs/operating/ceph-hardware-crash.md) 64 | 65 | - [Note case vận hành](docs/operating/note.md) -------------------------------------------------------------------------------- /docs/knowledge_base/bluestore_vs_filestore.md: -------------------------------------------------------------------------------- 1 | # Ceph Storage Backend 2 | 3 |

4 | 5 |

6 | 7 | 8 | - Trong ceph osd daemon có một module quan trọng được gọi là ObjectStore, chịu trách nhiệm về cách thức lưu trữ object và quản lý object 9 | - Ceph được thiết kế để hỗ trợ nhiều công cụ lưu trữ bằng cách đăng ký chúng như là các backend khác nhau cho ObjectStore. 10 | - Đối với Ceph có 3 loại backend: FileStore, KStore và BlueStore 11 | 12 | ## FileStore 13 | - Trong FileStore, các object được lưu với một file riêng lẻ. 14 | - Sử dụng FileStore, ceph yêu cầu sử dụng journal bên ngoài để đảm bảo tính nhất quán. 15 | - Ceph đảm bảo tính nhất quán cao giữa các bản sao dữ liệu, tất cả các thao tác ghi được xem như đơn vị transaction. 16 | - Các transactions được ghi vào journal trước. Sau khi được ghi xong vào journal, FileStore daemon thực hiện ghi xuống disk để lưu trữ. 17 | 18 | ## KStore 19 | - KStore đang được dùng để thí nghiệm storage backend trong phiên bản Jewel (Không còn sử dụng) 20 | 21 | ## BlueStore 22 | - Được sử dụng từ bản Luminous 23 | - BlueStore ra đời để tránh các hạn chế của FileStore. 24 | - Với FileStore, object phải ghi 2 lần: 1 lần vào journal và 1 lần vào disk. BlueStore ghi trực tiếp object lên disk và quản lý metada bằng RocksDB. 25 | - Vì RocksDB yêu cầu sử dụng file system, BlueStore sử dụng file system với tên là BlueFS 26 | 27 | -------------------------------------------------------------------------------- /docs/knowledge_base/ceph-authen.md: -------------------------------------------------------------------------------- 1 | # Ceph authentication. 2 | 3 | - Ceph là một hệ thống lưu trữ phân tán. Trên đó được cài đặt các daemon monitors, metadata server (MDs), và OSD. Các daemon được triển khai trên nhiều server. Ceph clients như là CephFS, Ceph Block device, và Ceph Gateway tương tác với Ceph object store. Tất cả Ceph object store clients sử dụng thư viện `librados` để tương tác với ceph object store. Hình sau đây minh họa cho tổ chức stack của ceph 4 | 5 |

6 | 7 |

8 | 9 | - Người dùng, có thể là end user hoặc là dịch vụ hệ thống như là các ứng dụng, sử dụng Ceph clients để tương tác với các Ceph server daemon. 10 | 11 |

12 | 13 |

14 | 15 | ## Ceph authentication 16 | - Xác thực mật mã mất vài chi phí cho việc tính toán, tuy nhiên chúng khá là thấp. Nếu môi trường kết nối mạng giữa client và server trong cluster của bạn rất an toàn và bạn không cho xác thực thì bạn có thể sử dụng tùy chọn để tắt cơ chế xác thực. Việc làm này không được khuyến khích. 17 | - Ceph tránh việc tập trung interface tới ceph object store, có nghĩa là ceph clients phải được tương tác trực tiếp với OSDs. Để bảo vệ dữ liệu, ceph cung cấp một hệ thống xác thực `cephx`, hệ thống để các thực users. 18 | - Users yêu cầu ceph client liên hệ với một monitor. Mỗi monitor đều có khả năng xác thực người dùng và phân phối key, do vậy không có "single point of failure" hoặc bottleneck khi sử dụng cephx. Monitor trả về một bộ dữ liệu xác thực gọi là ticket chứa session key để sử dụng các service của ceph. Session key được mã hóa với các tham số bí mật của user, do vậy chỉ có user mới có thể yêu cầu dịch vụ từ ceph monitor. Client sử dụng session key này để yêu cầu dịch vụ từ monitor, và monitor cung cấp cho user một ticket, ticket này sẽ xác thực người dùng để sử dụng osd. Monitor và osd chia sẻ một bí mật, do đó client có thể sử dụng ticket đã được monitor cung cấp với bất kỳ osd hay là mds. Ticket này có giới hạn thời gian. 19 | - Để sử dụng cephx, trước hết quản trị viên phải cấu hình các users. Trong hình dưới đây, user `client.admin` sẽ sử dụng lệnh `ceph auth get-or-create-key` để sinh ra username và khóa bí mật. Hệ thống sẽ sinh ra một username và khóa bí mật, lưu một bản sao lại cho mons và chuyển khóa bí mật lại cho user `client.admin`. Đây có nghĩa là client và mon chia sẻ khóa bí mật. 20 | 21 |

22 | 23 |

24 | 25 | - Để xác thực với mons, người dùng cung cấp username cho mon, mon sẽ sinh ra một session key và mã hóa nó với khóa bí mật đã liên kết với tên người dùng. Sau đó mon sẽ gửi session key này lại cho người dùng. Sau đó người dùng sẽ giả mã bằng khóa chia sẻ đã nhận được từ bước trước. Session key này dùng để định danh người dùng ở phiên hiện tại. Sau đó người dùng sẽ yêu cầu một ticket đại diện cho người dùng được ký bởi session key. Monitor sinh ra một ticket, mã hóa nó với khóa bí mật của người dùng và chuyển nó lại cho người dùng. Người dùng giải mã ticket và dùng nó để ký lên yêu cầu gửi lên OSD và MDS. 26 | 27 |

28 | 29 |

30 | 31 | - Giao thức xác thực cephx truyền thông giữa client và ceph server. Mỗi thông điệp được gửi giữa client và server được ký bởi ticket mà các monitor, OSD, MDS có thể xác thực bằng key chia sẻ: 32 | 33 |

34 | 35 |

36 | 37 | - Toàn bộ quá trình được mô tả trong hình sau: 38 | 39 | ![](../images/ceph_authfolow.png) 40 |

41 | 42 |

43 | 44 | - Thứ tự các bước như sau: 45 | - 1. Một user muốn sử dụng dịch vụ lưu trữ ceph sẽ gửi một yêu cầu tạo user cho người quản trị 46 | - 2. admin của hệ thống ceph, là client.admin user, sử dụng lệnh đề tạo user trên hệ thống. 47 | - 3. Khi admin gọi lệnh tạo user, monitor sẽ tạo ra một secret key. Key này sẽ được monitor lưu lại, sau đó chuyển key này về cho admin và đồng thời chia sẽ cho các daemon trong hệ thống. Định dạng key như sau 48 | 49 | ```sh 50 | [client.user1] 51 | key = AQAxTExa7LLVCxAAciEex6+YOOoneg5y7i822g== 52 | ``` 53 | 54 | - 4. admin nhận được key sẽ phải xuất ra dạng file để chuyển key này cho user (người yêu cầu sử dụng dịch vụ). 55 | - 5. user sẽ sự dụng key này để tương tác với hệ thống. User được sử dụng những quyền gì trong hệ thống sẽ do admin cấp phát. 56 | 57 | ## Các lệnh thao tác xác thực trên Ceph 58 | 59 | - Hiển thị toàn bộ các key authen của cụm Ceph 60 | ```sh 61 | ceph auth list 62 | ``` 63 | 64 | Kết quả tương tự 65 | ```sh 66 | installed auth entries: 67 | 68 | osd.0 69 | key: AQBvb/dcCEvGCxAAvpcVxXl6gICThtvefxnMkA== 70 | caps: [mgr] allow profile osd 71 | caps: [mon] allow profile osd 72 | caps: [osd] allow * 73 | osd.1 74 | key: AQCEb/dcZ4OPLRAAvnIW2/IZ4Xc8AGDlVkUc2Q== 75 | caps: [mgr] allow profile osd 76 | caps: [mon] allow profile osd 77 | caps: [osd] allow * 78 | osd.2 79 | key: AQCab/dcde53CxAAnY7ZoCwvEfdgrNACGC6Tiw== 80 | caps: [mgr] allow profile osd 81 | caps: [mon] allow profile osd 82 | caps: [osd] allow * 83 | client.admin 84 | key: AQAhI/dcEbhkFhAAkrwC+4q/GmSkcw+7poH/Dw== 85 | caps: [mds] allow * 86 | caps: [mgr] allow * 87 | caps: [mon] allow * 88 | caps: [osd] allow * 89 | client.bootstrap-mds 90 | key: AQAhI/dcdxplFhAAA6sxx7GukIRfKjRiBvIAeQ== 91 | caps: [mon] allow profile bootstrap-mds 92 | client.bootstrap-mgr 93 | key: AQAhI/dcaWRlFhAA6ntAB8FaetAnjgSkNctRUQ== 94 | caps: [mon] allow profile bootstrap-mgr 95 | client.bootstrap-osd 96 | key: AQAhI/dc7KxlFhAAOD5Ou+exuyyTiV9V5AO9nw== 97 | caps: [mon] allow profile bootstrap-osd 98 | client.bootstrap-rbd 99 | key: AQAhI/dcovZlFhAABlFFaRi4KlwrGuPIFrRB3Q== 100 | caps: [mon] allow profile bootstrap-rbd 101 | client.bootstrap-rbd-mirror 102 | key: AQAhI/dc2z1mFhAASkA6rv/kdMQ7qW30TKVUZA== 103 | caps: [mon] allow profile bootstrap-rbd-mirror 104 | client.bootstrap-rgw 105 | key: AQAhI/dc4YZmFhAAPzH58U35Fu12EVx+fn/FFQ== 106 | caps: [mon] allow profile bootstrap-rgw 107 | mgr.cephaio 108 | key: AQBKI/dcPGZ4IhAAUWgVpADZL0lR8FYmaHiL3w== 109 | caps: [mds] allow * 110 | caps: [mon] allow profile mgr 111 | caps: [osd] allow * 112 | ``` 113 | 114 | - Create hoặc get key 115 | ```sh 116 | ceph auth get-or-create {key-name} mon {permission} osd {permission} mds {permission} > {key-name}.keyring 117 | ``` 118 | 119 | > ## Các caps chính là permision của key trên từng service 120 | 121 | - Cập nhật permission key đã có 122 | ```sh 123 | ceph auth caps {key-name} mon {permission} osd {permission} mds {permission} 124 | ``` 125 | 126 | - Xóa key 127 | ```sh 128 | ceph auth delete {key-name} 129 | ``` 130 | 131 | ## Tài liệu tham khảo 132 | Link: http://docs.ceph.com/docs/firefly/rados/operations/auth-intro/ -------------------------------------------------------------------------------- /docs/knowledge_base/ceph-flag.md: -------------------------------------------------------------------------------- 1 | ## Ceph Flag Cluster 2 | Thường việc cập nhật trạng thái cụm Ceph được thực hiện tự động và theo setting sẵn có. Nếu chúng ta cần thực hiện một vài thay đổi thì việc set flag (set cờ) cho cụm Ceph sẽ giúp chúng ta tăng tính chủ động trong việc quản trị cụm Ceph 3 | 4 | Thao tác apply cho toàn Cluster 5 | ``` 6 | ceph osd set 7 | ceph osd unset 8 | ``` 9 | 10 | - full - Set flag full chúng ta sẽ không thể ghi dữ liệu mới vào được cluster 11 | - pauserd, pausewr - Tạm dừng thao tác read hoặc write trên cụm 12 | - noup - Khi set flag sẽ tạm ngưng thông báo khi có OSD up trong hệ thống 13 | - nodown - Khi set flag sẽ tạm ngưng thông báo khi có OSD down trong hệ thống 14 | - noin - Đối với các OSD đã down trước đó thì việc set flag này sẽ không tự động set OSD in và không cho phép OSD join vào CRUSHMAP khi OSD này start 15 | - noout - Khi OSD down hệ thống sẽ không tự động set OSD out ra khỏi cluster (Thường là 10m) cho đến khi chúng ta gỡ flag 16 | - nobackfill, norecover, norebalance - Suppend thao tác recovery và data rebalancing 17 | - noscrub, nodeep_scrub - Disable scrubbing 18 | - notieragent - Suppend cache tiering đang hoạt động 19 | 20 | 21 | Thao tác set chỉ định OSD 22 | ```sh 23 | ceph osd add- 24 | ceph osd rm- 25 | ``` 26 | 27 | Đối với OSD chỉ định chỉ apply được các tham số 28 | 29 | - noup 30 | - nodown 31 | - noin 32 | - noout 33 | 34 | ## Các ngữ cảnh sử dụng Flag 35 | - Down node Ceph bảo trì 36 | - Không cho phép thực hiện 1 task nào đó (scrub) trên cụm Ceph 37 | - ... 38 | -------------------------------------------------------------------------------- /docs/knowledge_base/ceph-mds.md: -------------------------------------------------------------------------------- 1 | # Ceph MDS (Metadata Server) 2 | 3 | Ceph MDS là daemon cho Ceph filesystem (CephFS). Ceph MDS cho phép Client mount 1 POSIX filesystem ở bất cứ kích thước nào. MDS không đưa dữ liệu tới người dùng, OSD làm việc đó. MDS cung cấp một filesystem chia sẻ với lớp cache thông minh;, giảm đáng kể lượng đọc và ghi. 4 | 5 | MDS là thành phần duy nhất trong ceph chưa production, hiện chỉ 1 ceph MDS daemon hoạt động tại 1 thời điểm. MDS không lưu dữ liệu local. Nếu 1 MDS daemon lỗi, ta có thể tạo lại trên bất cứ hệ thống nào mà cluster có thể truy cập. Các metadata server daemon được cấu hình là active-passive. Primary MDS là acive, còn các node khác chạy standby. 6 | 7 |

8 | 9 |

10 | 11 | ## 1. Ceph filesystem 12 | 13 | CephFS cung cấp một filesystem tương thích POSIX nằm trên RADOS. Nó dùng MDS daemon để quản lý metadata tách biệt khỏi data. CephFS kế thừa các tính năng từ RADOS và cung cấp cân bằng tải cho dữ liệu. 14 | 15 | Thư viện `libcephfs` đóng vai trò quan trọng trong việc hỗ trợ nhiều người dùng. Nó hỗ trợ Linux kernel driver, do vậy người dùng có thể dùng phương thức mounting filesystem truyền thống thông qua lệnh `mount`. Nó tích hợp chặt chẽ với SAMBA và hỗ trợ CIFS và SMB. CephFS hỗ trợ filesystem in userspace(FUSE) dùng module `cephfuse`. Nó cũng hỗ trợ ứng dụng tương tác trực tiếpvới RADOS cluster dùng thư viện libcephfs. 16 | 17 | CephFS có khả năng thay thế Hadoop HDFS. HDFS chỉ chạy trên node đơn, ảnh hưởng tới khả năng mở rộng và tạo SPOF. Không như HDFS, CephFS có thể triển khai nhiều MDS chạy active-active, do vậy có khả năng giãn nở cao, hiệu năng tốt, không có SPOF. -------------------------------------------------------------------------------- /docs/knowledge_base/ceph-mgr.md: -------------------------------------------------------------------------------- 1 | # Ceph MGR (Ceph Manager Daemon) 2 | 3 | Ceph Manager (ceph-mgr) chạy song song cùng với hệ thống và làm nền giám sát chính, nhằm cung cấp hệ thống giám sát và giao diện bổ sung cho các hệ thống quản lý và giám sát bên ngoài. 4 | 5 | Kể từ khi phát hành Ceph 12.x (Luminous), dịch vụ `ceph-mgr` được yêu cầu cài đặt luôn sau khi cài hệ thống, là một service cần thiết cho các hoạt động của cụm Ceph. 6 | 7 | Theo mặc định, ceph-mgr không yêu cầu cấu hình bổ sung, ngoài việc đảm bảo service mgr hoạt động. Nếu không có service mgr nào đang chạy,chúng ta sẽ thấy cảnh báo về HEALTH của cụm Ceph. 8 | 9 | Ceph-mgr cung cấp các module bổ sung như `Dashboard`, `ResfullAPI`, `Zabbix`, `Prometheus` chủ yếu tập trung vào collect metrics toàn bộ cụm và có thể thao tác với cụm Ceph trên Dashboard(Từ bản Nautilous 14.2.x) 10 | 11 | Ceph-mgr có thể triển khai dựa vào ceph-ansible, ceph-deploy... 12 | 13 | 14 | # Tài liệu tham khảo 15 | - http://docs.ceph.com/docs/master/mgr/ 16 | -------------------------------------------------------------------------------- /docs/knowledge_base/ceph-mon.md: -------------------------------------------------------------------------------- 1 | # Ceph Monitor (MON) 2 | 3 | Ceph monitor chịu trách nhiệm giám sát tình trạng của toàn hệ thống. Nó hoạt động như các daemon duy trì sự kết nối trong cluster bằng cách chứa các thông tin cơ bản về cluster, tình trạng các node lưu trữ và thông tin cấu hình cluster. Ceph monitor thực hiện điều này bằng cách duy trì các cluster map. Các cluster map này bao gồm monitor, OSD, PG, CRUSH và MDS map. 4 | 5 | ## 1. Các map trong MON 6 | - **Monitor map**: map này lưu giữ thông tin về các node monitor, gồm CEPH Cluster ID, monitor hostname, địa chỉ IP và số port. Nó cũng giữ epoch (phiên bản map tại một thời điểm) hiện tại để tạo map và thông tin về lần thay đổi map cuối cùng. Có thể kiểm tra bằng câu lệnh: 7 | ``` 8 | ceph mon dump 9 | ``` 10 | 11 | - **OSD map**: map này lưu giữ các trường như cluster ID, epoch cho việc tạo map OSD và lần thay đổi cuối., và thông tin liên quan đến pool như tên, ID, loại, mức nhân bản và PG. Nó cũng lưu các thông tin OSD như tình trạng, trọng số, thông tin host OSD. Có thể kiểm tra OSD map bằng câu lệnh: 12 | ``` 13 | ceph osd dump 14 | ``` 15 | 16 | - **PG map**: map này lưu giữ các phiên bản của PG (thành phần quản lý các object trong ceph), timestamp, bản OSD map cuối cùng, tỉ lệ đầy và gần đầy dung lượng. Nó cũng lưu các ID của PG, object count, tình trạng hoạt động và srub (hoạt động kiểm tra tính nhất quán của dữ liệu lưu trữ). Kiểm tra PG map bằng lệnh: 17 | ``` 18 | ceph pg dump 19 | ``` 20 | 21 | - **CRUSH map**: map này lưu các thông tin của các thiết bị lưu trữ trong Cluster, các rule cho tưng vùng lưu trữ. Kiểm tra CRUSH map bằng lệnh: 22 | ``` 23 | ceph osd crush dump 24 | ``` 25 | 26 | - **MDS map**: lưu thông tin về thời gian tạo và chỉnh sửa, dữ liệu và metadata pool ID, cluster MDS count, tình trạng hoạt động của MDS, epoch của MDS map hiện tại. Kiểm tra MDS map bằng lệnh: 27 | ``` 28 | ceph mds dump 29 | ``` 30 | 31 | ## 2. Hướng triển khai MON 32 | - Ceph monitor không lưu trữ dữ liệu, thay vào đó, nó gửi các bản update cluster map cho client và các node khác trong cluster. Client và các node khác định kỳ check các cluster map với monitor node. 33 | 34 | - Monitor là lightweight daemon không yêu cầu nhiều tài nguyên tính toán. Một Server thuộc dòng entry-server, CPU, RAM vừa phải và card mạng 1 GbE là đủ. Monitor node cần có đủ không gian lưu trữ để chứa các cluster logs, gồm OSD, MDS và monitor log. Một cluster ổn định sinh ra lượng log từ vài MB đến vài GB. Tuy nhiên, dung lượng cho log có thể tăng lên khi mức độ debug bị thay đổi, có thể lên đến một vài GB. 35 | 36 | - Cần đặt ra các policy cho log và các giải pháp monitor dung lượng lưu trữ, trên các node monitor tăng mức debug, lượng log có thể lên tới 1GB/1h. 37 | 38 | - Mô hình Ceph nhiều node Mon đưa ra khái niệm quorum bằng cách sử dụng thuật toán [PAXOS](paxos.md). Số monitor trong hệ thống nên là số lẻ, ít nhất là 1 node, và khuyến nghị là 3 node. VÌ hoạt động trong quorum, hơn một nửa số lượng monitor node cần đảm bảo sẵn sàng để tránh rơi vào trạng thái "split-brain". Một monitor node sẽ là leader, và các node còn lại sẽ đưa đưa lên làm leader nếu node ban đầu bị lỗi. 39 | 40 | - Nếu hạn chế về tài chính, monitor daemon có thể chạy cùng trên OSD node. Tuy nhiên, cần trang bị nhiều CPU, RAM và ổ cứng hơn để lưu monitor logs. 41 | 42 | - Đối với các hệ thống lớn, nên sử dụng node monitor chuyên dụng. Đặt các node montior trên các rack riêng biệt với switch và nguồn điện riêng biệt. Nếu có nhiều datacenter với đường mạng tốc độ cao, có thể đặt monitor node trên nhiều DC. 43 | 44 | - Các node monitor thường khuyến cáo sử dụng ổ SSD để lưu trữ phân vùng `/var/lib/ceph/ceph-mon` nhằm tăng tốc độ xử lý cho cụm 45 | 46 | ## 3. Monitor Commands 47 | 48 | - Kiểm tra trạng thái service, dùng câu lệnh: 49 | ``` 50 | service ceph status mon 51 | ``` 52 | 53 | - Các câu lệnh đẻ kiểm tra trạng thái các node monitor: 54 | ``` 55 | ceph mon stat 56 | ceph mon_status 57 | ceph mon dump 58 | ``` -------------------------------------------------------------------------------- /docs/knowledge_base/ceph-osd.md: -------------------------------------------------------------------------------- 1 | # Ceph OSD (Object Storage Device) 2 | CEPH OSD lưu dữ liệu thực trên các ổ đĩa vật lý dưới dạng các object. Một Ceph cluster có rất nhiều OSD. Với bẩt cứ tác vụ đọc hoặc ghi nào, client gửi yêu cầu về cluster map tới node monitor, và sau đó tương tác trực tiếp với OSD cho các tác vụ đọc ghi, mà không cần sự can thiệp của node monitor. Điều này giúp việc chuyển tải dữ liệu nhanh chóng khi client có thể ghi trực tiếp vào các OSD mà không cần lớp xử lý dữ liệu trung gian. Cơ chế lưu trữ này là đôc nhất trên Ceph khi so với các phương thức lưu trữ khác. 3 | 4 | Ceph nhân bản mỗi object nhiều lần trên tất cả các node, nâng cao tính sẵn sàng và khả năng chống chịu lỗi. Mỗi object trong OSD có một primary copy và nhiều secondary copy, được đặt tại các OSD khác. Bởi Ceph là hệ thống phân tán và object được phân tán trên nhiều OSD, mỗi OSD đóng vai trò là primary OSD cho một số object, và là secondary OSD cho các object khác. khi một ổ đĩa bị lỗi, Ceph OSD daemon tương tác với các OSD khác để thực hiện việc khôi phục. Trong quá trình này, secondary OSD giữ bản copy được đưa lên thành primary, và một secondary object được tạo, tất cả đều trong suốt với người dùng. Điều này làm Ceph Cluster tin cậy và nhất quán. Thông thường, một OSD daemon đặt trên mọt ổ đĩa vật lý , tuy nhiên có thể đặt OSD daemon trên một host, hoặc 1 RAID. Ceph Cluster thường được triển khai trong môi trường JBOD, mỗi OSD daemon trên 1 ổ đĩa. 5 | 6 | ## 1. Ceph OSD File System 7 | 8 |

9 | 10 |

11 | 12 | Ceph OSD gồm 1 ổ cứng vật lý, Linux filesystem trên nó, và sau đó là Ceph OSD Service. Linux filesystem của Ceph cần hỗ trợ *extended attribute (XATTRs)*. Các thuộc tính của filesystem này cung cấp các thông tin về trạng thái object, metadata, snapshot và ACL cho Ceph OSD daemon, hỗ trợ việc quản lý dữ liêu. 13 | Ceph OSD hoạt động trên ổ đĩa vật lý có phân vùng Linux. Phân vùng Linux có thể là Btrfs, XFS hay Ext4. Sự khác nhau giữa các filesystem này như sau: 14 | 15 | - `Btrfs`: filesystem này cung cấp hiệu năng tốt nhất khi so với XFS hay ext4. Các ưu thế của Btrfs là hỗ trợ copy-on-write và writable snapshot, rất thuận tiện khi cung cấp VM và clone. Nó cũng hỗ trợ nén và checksum, và khả năng quản lý nhiều thiết bị trên cùng môt filesystem. Btrfs cũng hỗ trợ XATTRs, cung cấp khả năng quản lý volume hợp nhất gồm cả SSD, bổ xung tính năng fsck online. Tuy nhiên, btrfs vẫn chưa sẵn sàng để production. 16 | - `XFS`: Đây là filesystem đã hoàn thiện và rất ổn định, và được khuyến nghị làm filesystem cho Ceph khi production. Tuy nhiên, XFS không thế so sánh về mặt tính năng với Btrfs. XFS có vấn đề về hiệu năng khi mở rộng metadata, và XFS là một journaling filesystem, có nghĩa, mỗi khi client gửi dữ liệu tới Ceph cluster, nó sẽ được ghi vào journal trước rồi sau đó mới tới XFS filesystem. Nó làm tăng khả năng overhead khi dữ liệu được ghi 2 lần, và làm XFS chậm hơn so với Btrfs, filesystem không dùng journal. 17 | - `Ext4`: đây cũng là một filesystem dạng journaling và cũng có thể sử dụng cho Ceph khi production; tuy nhiên, nó không phôt biến bằng XFS. Ceph OSD sử dụng *extended attribute* của filesystem cho các thông tin của object và metadata. XATTRs cho phép lưu các thông tin liên quan tới object dưới dạng `xattr_name` và `xattr_value`, do vậy cho phép *tagging* object với nhiều thông tin metadata hơn. ext4 file system không cung cấp đủ dung lượng cho XATTRs do giới hạn về dung lượng bytes cho XATTRs. XFS có kích thước XATTRs lớn hơn. 18 | 19 | ## 2. Ceph OSD Journal 20 | 21 | Có thể hiểu đơn giản Journal disk chính là phân vùng cached để lưu trữ dữ liệu, Tăng tốc độ ghi dữ liệu. Sau đó Ceph sẽ flush dần data này xuống lưu trữ dưới HDD 22 | 23 |

24 | 25 |

26 | 27 | Ceph dùng các journaling filesystem là XFS cho OSD. Trước khi commit dữ liệu vào backing store, Ceph ghi dữ liệu vào một vùng lưu trữ tên là journal trước, vùng này hoạt động như là một phân vùng đệm (buffer), journal nằm cùng hoặc khác đĩa với OSD, trên một SSD riêng hoặc một phân vùng, thậm chí là một file riêng trong filesystem. Với cơ chế này, Ceph ghi mọi thứ vào journal, rồi mới ghi vào backing storage. 28 | 29 | Một dữ liệu ghi vào journal sẽ được lưu tại đây trong lúc syncs xuống backing store, mặc định là 5 giây chạy 1 lần. 10 GB là dung lượng phổ biến của journal, tuy nhiên journal càng lớn càng tốt. Ceph dùng journal để tăng tốc và đảm bảo tính nhất quán. Journal cho phép Ceph OSD thực hiện các tác vụ ghi nhỏ nhanh chóng; một tác vụ ghi ngẫu nhiên sẽ được ghi xuống journal theo kiểu tuần tự, sau đó được *flush* xuống filesystem. Điều này cho phép filesystem có thời gian để gộp các tác vụ ghi vào ổ đĩa. Hiệu năng sẽ tăng lên rõ rệt khi journal được tạo trên SSD. 30 | 31 | Khuyến nghị, không nên vượt quá tỉ lệ 5 OSD / 1 journal đisk khi dùng SSD làm journal, vượt quá tỉ lệ này có thể gây nên thắt cổ chai trên cluster. Và khi SSD làm journal bị lỗi, toàn bộ các OSD có journal trên SSD đó sẽ bị lỗi. 32 | Với Btrfs, việc này sẽ không xảy ra, bởi Btrfs hỗ trợ copy-on-write, chỉ ghi xuống các dữ liệu thay đổi, mà không tác động vào dữ liệu cũ, khi journal bị lỗi, dữ liệu trên OSD vẫn tồn tại. 33 | 34 | > Đối với hệ thống lưu trữ dữ liệu [BlueStore](bluestore_vs_filestore.md) thì không còn sử dụng Journal disk 35 | 36 | ## 3. Ceph disk 37 | Không nên sử dụng RAID cho Ceph Cluster: 38 | - Mặc định Ceph đã có khả năng nhân bản để bảo vệ dữ liệu, do đó không cần làm RAID với các dữ liệu đã được nhân bản đó. Với RAID group, nếu mất 1 ổ đĩa, việc phục hồi sẽ yêu cầu một ổ đĩa dự phòng, tiếp đó là chờ cho dữ liệu từ đĩa bị hỏng được ghi lên đĩa mới, do đó việc sử dụng RAID sẽ gây mất nhiều thời gian khi khôi phục cũng như giảm hiệu năng khi so với giải pháp lưu trữ phân tán. Tuy nhiên, nếu hệ thống có RAID controller, ta sẽ đặt mỗi ổ đĩa trong một RAID 0. 39 | - Phương pháp nhân bản dữ liệu của Ceph khong yêu câu một ổ cứng trống cùng dung lượng ổ hỏng. Nó dùng đường truyền mạng để khôi phục dữ liệu trên ổ cứng lỗi từ nhiều node khác. Trong quá trình khôi phục dữ liệu, dựa vào tỉ lệ nhân bản và số PGs, hầu như toàn bộ các node sẽ tham gia vào quá trình khôi phục, giúp quá trình này diễn ra nhanh hơn. 40 | - Sẽ có vấn đề về hiệu năng trên Ceph Cluster khi I/O ngẫu nhiên trên RAID 5 và 6 rất chậm. 41 | 42 | ## 4. Ceph volume 43 | 44 | Ở phiên bản từ 11.x khái niệm ceph-volume được xuất hiện thay thế dần và tiến tới thay thế hoàn toàn cho `ceph-disk` 45 | 46 | ## 5. OSD commands 47 | Một số câu lênh phổ biến để thao tác với OSD 48 | 49 | - Lệnh để kiểm tra tình trạng OSD trên 1 node: 50 | ``` 51 | service ceph status osd 52 | ``` 53 | 54 | - Lệnh kiểm tra tình trạng OSD trên tất cả các node (lưu ý thông tin về tất cả OSD phải được khai báo trong `ceph.conf`): 55 | ``` 56 | service ceph -a status osd 57 | ``` 58 | 59 | - Lệnh kiểm tra OSD ID: 60 | ``` 61 | ceph osd ls 62 | ``` 63 | 64 | - Lệnh kiểm tra OSD map: 65 | ``` 66 | ceph osd stat 67 | ``` 68 | 69 | - Lệnh kiểm tra OSD tree: 70 | ``` 71 | ceph osd tree 72 | ``` -------------------------------------------------------------------------------- /docs/knowledge_base/ceph-overview.md: -------------------------------------------------------------------------------- 1 | # Ceph Overview 2 | 3 | Ceph là một phần mềm mã nguồn mở với cộng đồng sử dụng và phát triển rất đông. Nó được thiết kế để chạy trên các nền tảng phần cứng thông thường, với quan điểm thiết kế các hệ thống lưu trữ – mở rộng đến hàng petabyte nhưng với chi phí rẻ, hợp lý. 4 | 5 | Hệ thống lưu trữ Ceph có thể được sử dụng với các mục đích khác nhau và cung cấp nhiều hình thức lưu trữ như: 6 | - Ceph Object Storage, 7 | - Ceph Block Storage 8 | - Ceph FileSystem, hoặc cho bất kỳ mục đích nào liên quan đến lưu trữ. 9 | 10 | > Object và Block của Ceph thường thấy trong các nền tảng điện toán đám mây như OpenStack 11 | 12 | Việc Ceph phổ biến là do Ceph là một 13 | Một Cluster Ceph được tạo thành từ việc kết nối các node Ceph lại với nhau nó cần ít nhất 1 Ceph Monitor và 2 Ceph OSD Daemons. 14 | 15 | Ceph OSDs: Ceph OSD daemon (Ceph OSD) lưu trữ data, xử lý việc đồng bộ dữ liệu, recovery, rebalancing và cung cấp thông tin liên quan đến monitoring đến cho Ceph monitoring bằng cách kiểm tra các Ceph OSD daemons khác thông qua heartbeat. Một ceph storage cluster cần ít nhất 2 ceph OSD daemons để hướng tới trạng thái active + clean, lúc này hệ thống sẽ có 02 bản copy của data (default của Ceph là 3 bản). 16 | 17 | Monitors: ceph monitor sẽ theo dõi trạng thái của cluster, bao gồm việc theo dõi các monitor map, OSD map, placement group (PG) map, và CRUSH map. Ceph lưu thông tin lịch sử (trong ceph gọi là “epoch” của mỗi trạng thái thay đổi của Ceph Monitors, Ceph OSD Daemons, và PGs. 18 | 19 | MDSs: một Ceph Metadata Server (MDS) lưu trữ thông tin về metadata của hệ thống Ceph FileSystem (ceph block device và object storage không sử dụng MDS). 20 | 21 | Ceph lưu trữ dữ liệu của client dưới dạng các objects trong các pool lưu trữ. Ceph sử dụng thuật toán CRUSH, trong đó Ceph sẽ tính toán placement group nào sẽ lưu trữ object, và tính toán Ceph OSD Daemon nào sẽ lưu trữ placement group. CRUSH algorithm cho phép Ceph Storage cluster khả năng mở rộng, tự cân bằng (rebalance), và recovery tự động. 22 | 23 | CPU 24 | Ceph MDS cần nhiều CPU hơn các thành phần khác trong hệ thống, khuyến cáo sử dụng quad core hoặc CPU tốt hơn. Ceph OSDs chạy RADOS service, tính toán data placement với thuật toán CRUSH, đồng bộ dữ liệu, và duy trì bản copy của cluster map. Vì vậy, OSDs cũng cần 1 lượng CPU nhất định, khuyến nghị sử dụng dual core processors. Monitor hoạt động không cần nhiều CPU. Cần lưu ý trong trường hợp máy chủ chạy dịch vụ tính toán trên các OSD, ví dụ mô hình hoạt động của OpenStack – kết hợp giữa compute node và storage node, cần thiết kế CPU để bảo đảm đủ năng lực dành riêng cho Ceph daemons. Khuyến cáo nên tách riêng các chức năng để bảo đảm hoạt động. 25 | 26 | RAM 27 | Metadata servers và monitors hoạt động liên tục để phục vụ cho dữ liệu, vì vậy cần số lượng RAM kha khá, thông thường 1Gb RAM cho mỗi instance daemon. OSD không cần nhiều RAM cho các hoạt động của nó, thông thường vào khoảng 500Mb cho mỗi instance daemon. Tuy nhiên, trong quá trình recovery sẽ cần nhiều RAM, thường 1Gb cho mỗi 1Tb lưu trữ trên mỗi daemon. Nhìn chung, càng nhiều RAM càng tốt, nhất là khi RAM là tài nguyên rẻ nhất hiện nay đối với máy tính, máy chủ. 28 | 29 | Data Storage 30 | Đây là yếu tố quan trọng nhất, cần cân nhắc thật kỹ giữa vấn đề chi phí và năng lực hệ thống. 31 | 32 | OSDs có thể là SSD, HDD hoặc NVME sử dụng để lưu trữ data. Khuyến cáo sử dụng các đĩa cứng từ 1Tb trở lên. Cần quan tâm đến cách tính chi phí cho mỗi 1Gb lưu trữ. Ví dụ xài các đĩa cứng 1Tb ($75) thì chi phí ra sao ($0.07/1Gb) so với xài 1 đĩa cứng 3Tb ($150) thì chi phí như thế nào ($0.05/1Gb). Tuy nhiên, cần lưu ý khi dung lượng lưu trữ lớn, Ceph OSD Daemon cần thêm RAM, đặc biệt trong quá trình rebalancing, backfilling, và recovery. Khuyến cáo: 1Gb RAM cho 1 Tb không gian lưu trữ. 33 | 34 | Các điểm quan trọng cần lưu ý khi triển khai đó là cần tách biệt các disk cho HĐH (OS) với các Ceph OSD Daemon, tránh việc chạy chung nhiều Ceph OSD daemon trên 1 disk, cũng như tránh chạy Ceph OSD trên MDS hay monitoring trên cùng 1 disk. Ngoài ra, OS, OSD Data, và OSD Journals nên được đặt trên các disk khác nhau, trong đó Journals sử dụng các đĩa cứng SSD để tăng tốc độ truy xuất dữ liệu cho các node lưu trữ OSD. 35 | 36 | Việc thiết kế, sử dụng các đĩa cứng trong hệ thống CEPH thực tế như thế nào tùy thuộc vào nhu cầu của từng hệ thống. -------------------------------------------------------------------------------- /docs/knowledge_base/ceph-pg-status.md: -------------------------------------------------------------------------------- 1 | # Ceph PG status 2 | 3 | Toàn bộ data của Ceph được lưu trữ dưới dạng Object và được phân bố trong các Placement Group hay còn gọi là PG. Bình thường CRUSH sẽ tự động tính toán việc lưu trữ data, khôi phục dữ liệu, nhân bản dữ liệu trên từng PG và từng Object ... Hệ thống sẽ dựa trên các `map` của từng service để kiểm tra trạng thái thay đổi của cụm Ceph, Service monitor sẽ đảm nhiệm vấn đề này. 4 | 5 |

6 | 7 |

8 | 9 | Ceph sử dụng một khái niệm gọi là PG status để cho người dùng biết được là trạng thái dữ liệu trên cụm đang như thế nào đối với từng PG 10 | 11 | Thao tác để kiểm tra thường là ceph -s hoặc ceph -w hoặc có thể là trên Dashboad. Trạng thái tối ưu và hoàn hảo nhất cho toàn bộ PG là `active+clean` dưới đây là 1 ví dụ 12 | 13 | ```sh 14 | cluster: 15 | id: 3f59d96e-2725-4b0c-b726-baae012b3928 16 | health: HEALTH_OK 17 | 18 | services: 19 | mon: 1 daemons, quorum cephaio (age 30h) 20 | mgr: cephaio(active, since 30h) 21 | osd: 3 osds: 3 up (since 37h), 3 in (since 7d) 22 | 23 | data: 24 | pools: 1 pools, 512 pgs 25 | objects: 116 objects, 137 MiB 26 | usage: 3.3 GiB used, 144 GiB / 147 GiB avail 27 | pgs: 512 active+clean 28 | 29 | ``` 30 | 31 | Chúng ta có thể thấy trạng thái cụm Ceph là HEALTH_OK và toàn bộ PG của cụm là 512 đều ở trạng thái là `active+clean` 32 | 33 | Ngoài ra Ceph còn có các trạng thái khác như sau 34 | 35 | |Trạng thái|Thông tin chi tiết | 36 | |----------|-----------------------------------------------| 37 | |`creating`| PG đang trong trạng thái khởi tạo | 38 | |`activating`| PG khởi tạo xong đang trong trạng thái active hoăc chờ sử dụng| 39 | |`active` | PG active sẵn sàng xử lý các request của client đọc ghi cập nhật ... | 40 | |`clean` | Các bản ghi replicate đúng vị trí và đủ số lượng| 41 | |`down` | Một bản sao có thiết bị hỏng và PG không sẵn sàng xử lý các request| 42 | |`scrubbing`| Ceph kiểm tra metadata của PG không nhất quán giữa các bản replica| 43 | |`deep` | Ceph kiểm tra data trên các PG bằng cách kiểm tra checksums data | 44 | |`degraded`| Chưa replica đủ số bản ghi (x2 x3) theo cấu hình | 45 | |`inconsistent`| Kiểm tra sự không nhất quán của dữ liệu (sai vị trí thiếu bản ghi hoặc bản ghi không nhất quán)| 46 | |`peering` | PG đang trong quá trình chuẩn bị xử lý | 47 | |`repair` | Kiểm tra và sửa các PG có trạng thái `inconsistent` nếu nó thấy | 48 | |`recovering`| Hệ thống đang di chuyển đồng bộ các object đúng đủ bản sao của nó | 49 | |`forced_recovery`| Ưu tiên phục hồi PG bởi người dùng | 50 | |`recovery_wait`| PG đang trong hàng đợi chờ để `recover` | 51 | |`recovery_toofull`| PG đang chờ để recover nhưng đã vượt qua ngưỡng lưu trữ | 52 | |`backfilling`| Ceph đang quét và đồng bộ hóa toàn bộ nội dung của một PG thay vì suy ra nội dung nào cần được đồng bộ hóa từ nhật ký của các hoạt động gần đây. `backfilling` là một trường hợp đặc biệt của `recover`.| 53 | |`forced_backfill`| Ưu tiên backfill PG bởi người dùng | 54 | |`backfill_wait`| PG đang trong hàng đợi chờ `backfill` | 55 | |`backfill_toofull`| PG đang trong hàng đợi chờ `backfill` nhưng đã vượt quá dung lượng lưu trữ của cụm| 56 | |`backfill_unfound`| PG dừng quá trình backfill vì không đối chiếu kiểm tra được dữ liệu của PG| 57 | |`incomplete`| Hệ thống kiểm tra thấy PG thiếu thông tin về dữ liệu của nó hoặc không có bản sao nào chắc chắn đúng. Cần thử start lại OSD đã hỏng nào có data đúng hoặc giảm `min_size` để cho phép khôi phục| 58 | |`stale` | Trạng thái không xác định có thể chưa nhận được cập nhật từ lần thay đổi pg_map lần cuối cùng | 59 | |`remapped`| PG được lưu trữ ánh xạ qua 1 vị trí trên OSD khác theo sự chỉ định của CRUSH| 60 | |`undersized`| Có ít bản sao hơn so với cấu hình của pool | 61 | |`peered` | Đã chuẩn bị xử lý nhưng chưa phục vụ các thao tác IO của client do ko đủ bản sao theo min_size | 62 | |`snaptrim`| Dọn dẹp bản snapshot | 63 | |`snaptrim_wait`| PG vào hàng đợi chờ dọn dẹp snapshot | 64 | |`snaptrim_error`| Lỗi trong quá trình dọn dẹp snapshot | 65 | -------------------------------------------------------------------------------- /docs/knowledge_base/ceph-rados.md: -------------------------------------------------------------------------------- 1 | # RADOS (Reliable Autonomic Distributed Object Store) 2 | 3 | Lớp RADOS giữ vai trò đặc biệt quan trọng trong kiến trúc Ceph, là trái tim của hệ thống lưu trữ CEPH,. RADOS cung cấp tất cả các tính năng của Ceph: 4 | - Lưu trữ object phân tán 5 | - Sẵn sàng cao 6 | - Tin cậy 7 | - Không có SPOF (Single point of failure) 8 | - Tự sửa lỗi 9 | - Tự quản lý 10 | - ... 11 | 12 | Các phương thức truy xuất Ceph, như RBD, CephFS, RADOSGW và librados, đều hoạt động trên lớp RADOS. 13 | 14 |

15 | 16 |

17 | 18 | Khi Ceph cluster nhận một yêu cầu ghi từ người dùng, thuật toán CRUSH tính toán vị trí và thiết bị mà dữ liệu sẽ được ghi vào. Các thông tin này được đưa lên lớp RADOS để xử lý. Dựa vào quy tắc của CRUSH, RADOS phân tán dữ liệu lên tất cả các node dưới dạng các object, phân chia lưu trữ dưới các [PG](pg.md). Cuối cùng ,các object này được lưu tại các OSD. 19 | 20 | RADOS, khi cấu hình với số nhân bản nhiều hơn hai, sẽ chịu trách nhiệm về độ tin cậy của dữ liệu. Nó sao chép object, tạo các bản sao và lưu trữ tại các zone khác nhau, do đó các bản ghi giống nhau không nằm trên cùng 1 zone. RADOS đảm bảo có nhiều hơn một bản copy của object trong RADOS cluster. 21 | 22 | RADOS cũng đảm bảo object luôn nhất quán. Trong trường hợp object không nhất quán, tiến trình khôi phục sẽ chạy. Tiến trình này chạy tự động và trong suốt với người dùng, do đó mang lại khả năng tự sửa lỗi và tự quẩn lý cho Ceph. RADOS có 2 phần: phần thấp không tương tác trực tiếp với giao diện người dùng, và phần cao hơn có tất cả giao diện người dùng. 23 | 24 | RADOS lưu dữ liệu dưới trạng thái các object trong pool. 25 | 26 | Để liệt kê danh sách các pool: 27 | ```sh 28 | rados lspools 29 | ``` 30 | 31 | Để liệt kê các object trong pool: 32 | ```sh 33 | rados -p {pool-name} ls 34 | ``` 35 | 36 | Để kiểm tra tài nguyên sử dụng: 37 | ```sh 38 | rados df 39 | ``` 40 | 41 | Lớp `LibRADOS` là thư viện C cho phép ứng dụng làm việc trực tiếp với RADOS, bypass qua các lớp khác để tương tác với Ceph Cluste.librados là thư viện cho RADOS, cung cấp các hàm API, giúp ứng dụng tương tác trực tiếp và truy xuất song song vào cluster.Ứng dụng có thể mở rộng các giao thức của nó để truy cập vào RADOS bằng cách sử dụng librados. Các thư viện tương tự cũng sẵn sàng cho C++, Java, Python, Ruby, PHP. librados là nền tảng cho các service giao diện khác chạy bên trên, gồm Ceph block device, Ceph filesystem, Ceph RADOS Gateway. librados cung cấp rất nhiều API, các phương thức lưu trữ key/value trong object. API hỗ trợ *atomic-single-object* bằng cách update dữ liệu, key và các thuộc tính. 42 | 43 | Tương tác trực tiếp với RADOS Cluster qua thư viện librados giúp tăng hiệu năng của ứng dụng. librados mang lại sự thuận lợi khi cung cấp PaaS và SaaS. 44 | 45 | RADOS có 2 thành phần lõi: [Monitor](ceph-mon.md) và [OSD](osd.md) -------------------------------------------------------------------------------- /docs/knowledge_base/ceph-radosgw.md: -------------------------------------------------------------------------------- 1 | # Ceph Object Gateway (Ceph RADOSGW) 2 | 3 |

4 | 5 |

6 | 7 | 8 | Ceph Object Gateway, hay RADOS Gateway, là một proxy chuyển các request HTTP thành các RADOS request và ngược lại, cung cấp RESTful object storage, tương thích với S3 và Swift. Ceph Object Storage sử dụng Ceph Object Gateway Daemon (radosgw) để tương tác với librgw và Ceph cluster, librados. Nó sử dụng một module FastCGI là libfcgi, và có thể sử dụng với bất cứ Server web tương thích với FASTCGI nào. Ceph Object Store hỗ trợ 3 giao diện sau: 9 | 10 | - **S3**: Cung cấp Amazon S3 RESTful API. 11 | - **Swift**: Cung cấp OpenStack Swift API. Ceph Object Gateway có thể thay thê Swift. 12 | - **Admin**: Hỗ trợ quản trị Ceph Cluster thông qua HTTP RESTful API. 13 | 14 | Ceph Object Gateway có phương thức quản lý người dùng riêng. Cả S3 và Swift API chia sẻ cùng một namespace chung trong Ceph cluster, do đó có thể ghi dữ liệu từ một API và lấy từ một API khác. Để xử lý nhanh, nó có thể dừng RAM làm cache metadata. Có thể dùng nhiều Gateway và sử dụng Load balancer để cân bằng tải vào Object Storage. Hiệu năng được cải thiện thông qua việc cắt nhỏ các REST object thành các RADOS object. Bên cạnh S3 và Swift API. Ứng dụng có thể bypass qua RADOS gateway và truy xuất trực tiếp tới librados, thường được sử dụng trong các ưgs dụng doanh nghiệp đòi hỏi hiệu năng cao. Ceph cho phép truy xuất trực tiếp tới cluster, điều khác biệt so với các hệ thống lưu trữ khác vốn giới hạn về các interface giao tiếp. -------------------------------------------------------------------------------- /docs/knowledge_base/ceph-rbd.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/docs/knowledge_base/ceph-rbd.md -------------------------------------------------------------------------------- /docs/knowledge_base/crush.md: -------------------------------------------------------------------------------- 1 | # CRUSH (Controlled, Scalable, Decentralized Placement of Replicated Data) 2 | 3 | # Tài liệu tham khảo 4 | 5 | - https://ceph.com/wp-content/uploads/2016/08/weil-crush-sc06.pdf -------------------------------------------------------------------------------- /docs/knowledge_base/mon.md: -------------------------------------------------------------------------------- 1 | # Ceph Monitor (MON) 2 | 3 | Ceph monitor chịu trách nhiệm giám sát tình trạng của toàn hệ thống. Nó hoạt động như các daemon duy trì sự kết nối trong cluster bằng cách chứa các thông tin cơ bản về cluster, tình trạng các node lưu trữ và thông tin cấu hình cluster. Ceph monitor thực hiện điều này bằng cách duy trì các cluster map. Các cluster map này bao gồm monitor, OSD, PG, CRUSH và MDS map. 4 | 5 | ## 1. Các map trong MON 6 | - **Monitor map**: map này lưu giữ thông tin về các node monitor, gồm CEPH Cluster ID, monitor hostname, địa chỉ IP và số port. Nó cũng giữ epoch (phiên bản map tại một thời điểm) hiện tại để tạo map và thông tin về lần thay đổi map cuối cùng. Có thể kiểm tra bằng câu lệnh: 7 | ``` 8 | ceph mon dump 9 | ``` 10 | 11 | - **OSD map**: map này lưu giữ các trường như cluster ID, epoch cho việc tạo map OSD và lần thay đổi cuối., và thông tin liên quan đến pool như tên, ID, loại, mức nhân bản và PG. Nó cũng lưu các thông tin OSD như tình trạng, trọng số, thông tin host OSD. Có thể kiểm tra OSD map bằng câu lệnh: 12 | ``` 13 | ceph osd dump 14 | ``` 15 | 16 | - **PG map**: map này lưu giữ các phiên bản của PG (thành phần quản lý các object trong ceph), timestamp, bản OSD map cuối cùng, tỉ lệ đầy và gần đầy dung lượng. Nó cũng lưu các ID của PG, object count, tình trạng hoạt động và srub (hoạt động kiểm tra tính nhất quán của dữ liệu lưu trữ). Kiểm tra PG map bằng lệnh: 17 | ``` 18 | ceph pg dump 19 | ``` 20 | 21 | - **CRUSH map**: map này lưu các thông tin của các thiết bị lưu trữ trong Cluster, các rule cho tưng vùng lưu trữ. Kiểm tra CRUSH map bằng lệnh: 22 | ``` 23 | ceph osd crush dump 24 | ``` 25 | 26 | - **MDS map**: lưu thông tin về thời gian tạo và chỉnh sửa, dữ liệu và metadata pool ID, cluster MDS count, tình trạng hoạt động của MDS, epoch của MDS map hiện tại. Kiểm tra MDS map bằng lệnh: 27 | ``` 28 | ceph mds dump 29 | ``` 30 | 31 | ## 2. Hướng triển khai MON 32 | - Ceph monitor không lưu trữ dữ liệu, thay vào đó, nó gửi các bản update cluster map cho client và các node khác trong cluster. Client và các node khác định kỳ check các cluster map với monitor node. 33 | 34 | - Monitor là lightweight daemon không yêu cầu nhiều tài nguyên tính toán. Một Server thuộc dòng entry-server, CPU, RAM vừa phải và card mạng 1 GbE là đủ. Monitor node cần có đủ không gian lưu trữ để chứa các cluster logs, gồm OSD, MDS và monitor log. Một cluster ổn định sinh ra lượng log từ vài MB đến vài GB. Tuy nhiên, dung lượng cho log có thể tăng lên khi mức độ debug bị thay đổi, có thể lên đến một vài GB. 35 | 36 | - Cần đặt ra các policy cho log và các giải pháp monitor dung lượng lưu trữ, trên các node monitor tăng mức debug, lượng log có thể lên tới 1GB/1h. 37 | 38 | - Mô hình Ceph nhiều node Mon đưa ra khái niệm quorum bằng cách sử dụng thuật toán [PAXOS](paxos.md). Số monitor trong hệ thống nên là số lẻ, ít nhất là 1 node, và khuyến nghị là 3 node. VÌ hoạt động trong quorum, hơn một nửa số lượng monitor node cần đảm bảo sẵn sàng để tránh rơi vào trạng thái "split-brain". Một monitor node sẽ là leader, và các node còn lại sẽ đưa đưa lên làm leader nếu node ban đầu bị lỗi. 39 | 40 | - Nếu hạn chế về tài chính, monitor daemon có thể chạy cùng trên OSD node. Tuy nhiên, cần trang bị nhiều CPU, RAM và ổ cứng hơn để lưu monitor logs. 41 | 42 | - Đối với các hệ thống lớn, nên sử dụng node monitor chuyên dụng. Đặt các node montior trên các rack riêng biệt với switch và nguồn điện riêng biệt. Nếu có nhiều datacenter với đường mạng tốc độ cao, có thể đặt monitor node trên nhiều DC. 43 | 44 | - Các node monitor thường khuyến cáo sử dụng ổ SSD để lưu trữ phân vùng `/var/lib/ceph/ceph-mon` nhằm tăng tốc độ xử lý cho cụm 45 | 46 | ## 3. Monitor Commands 47 | 48 | - Kiểm tra trạng thái service, dùng câu lệnh: 49 | ``` 50 | service ceph status mon 51 | ``` 52 | 53 | - Các câu lệnh đẻ kiểm tra trạng thái các node monitor: 54 | ``` 55 | ceph mon stat 56 | ceph mon_status 57 | ceph mon dump 58 | ``` -------------------------------------------------------------------------------- /docs/knowledge_base/osd.md: -------------------------------------------------------------------------------- 1 | # Ceph OSD (Object Storage Device) 2 | CEPH OSD lưu dữ liệu thực trên các ổ đĩa vật lý dưới dạng các object. Một Ceph cluster có rất nhiều OSD. Với bẩt cứ tác vụ đọc hoặc ghi nào, client gửi yêu cầu về cluster map tới node monitor, và sau đó tương tác trực tiếp với OSD cho các tác vụ đọc ghi, mà không cần sự can thiệp của node monitor. Điều này giúp việc chuyển tải dữ liệu nhanh chóng khi client có thể ghi trực tiếp vào các OSD mà không cần lớp xử lý dữ liệu trung gian. Cơ chế lưu trữ này là đôc nhất trên Ceph khi so với các phương thức lưu trữ khác. 3 | 4 | Ceph nhân bản mỗi object nhiều lần trên tất cả các node, nâng cao tính sẵn sàng và khả năng chống chịu lỗi. Mỗi object trong OSD có một primary copy và nhiều secondary copy, được đặt tại các OSD khác. Bởi Ceph là hệ thống phân tán và object được phân tán trên nhiều OSD, mỗi OSD đóng vai trò là primary OSD cho một số object, và là secondary OSD cho các object khác. khi một ổ đĩa bị lỗi, Ceph OSD daemon tương tác với các OSD khác để thực hiện việc khôi phục. Trong quá trình này, secondary OSD giữ bản copy được đưa lên thành primary, và một secondary object được tạo, tất cả đều trong suốt với người dùng. Điều này làm Ceph Cluster tin cậy và nhất quán. Thông thường, một OSD daemon đặt trên mọt ổ đĩa vật lý , tuy nhiên có thể đặt OSD daemon trên một host, hoặc 1 RAID. Ceph Cluster thường được triển khai trong môi trường JBOD, mỗi OSD daemon trên 1 ổ đĩa. 5 | 6 | ## 1. Ceph OSD File System 7 | ![Ceph OSD](http://image.prntscr.com/image/9377716ced4c4b7d862ce7faacd0b530.png) 8 | 9 | Ceph OSD gồm 1 ổ cứng vật lý, Linux filesystem trên nó, và sau đó là Ceph OSD Service. Linux filesystem của Ceph cần hỗ trợ *extended attribute (XATTRs)*. Các thuộc tính của filesystem này cung cấp các thông tin về trạng thái object, metadata, snapshot và ACL cho Ceph OSD daemon, hỗ trợ việc quản lý dữ liêu. 10 | Ceph OSD hoạt động trên ổ đĩa vật lý có phân vùng Linux. Phân vùng Linux có thể là Btrfs, XFS hay Ext4. Sự khác nhau giữa các filesystem này như sau: 11 | 12 | - `Btrfs`: filesystem này cung cấp hiệu năng tốt nhất khi so với XFS hay ext4. Các ưu thế của Btrfs là hỗ trợ copy-on-write và writable snapshot, rất thuận tiện khi cung cấp VM và clone. Nó cũng hỗ trợ nén và checksum, và khả năng quản lý nhiều thiết bị trên cùng môt filesystem. Btrfs cũng hỗ trợ XATTRs, cung cấp khả năng quản lý volume hợp nhất gồm cả SSD, bổ xung tính năng fsck online. Tuy nhiên, btrfs vẫn chưa sẵn sàng để production. 13 | - `XFS`: Đây là filesystem đã hoàn thiện và rất ổn định, và được khuyến nghị làm filesystem cho Ceph khi production. Tuy nhiên, XFS không thế so sánh về mặt tính năng với Btrfs. XFS có vấn đề về hiệu năng khi mở rộng metadata, và XFS là một journaling filesystem, có nghĩa, mỗi khi client gửi dữ liệu tới Ceph cluster, nó sẽ được ghi vào journal trước rồi sau đó mới tới XFS filesystem. Nó làm tăng khả năng overhead khi dữ liệu được ghi 2 lần, và làm XFS chậm hơn so với Btrfs, filesystem không dùng journal. 14 | - `Ext4`: đây cũng là một filesystem dạng journaling và cũng có thể sử dụng cho Ceph khi production; tuy nhiên, nó không phôt biến bằng XFS. Ceph OSD sử dụng *extended attribute* của filesystem cho các thông tin của object và metadata. XATTRs cho phép lưu các thông tin liên quan tới object dưới dạng `xattr_name` và `xattr_value`, do vậy cho phép *tagging* object với nhiều thông tin metadata hơn. ext4 file system không cung cấp đủ dung lượng cho XATTRs do giới hạn về dung lượng bytes cho XATTRs. XFS có kích thước XATTRs lớn hơn. 15 | 16 | ## 2. Ceph OSD Journal 17 | 18 | Có thể hiểu đơn giản Journal disk chính là phân vùng cached để lưu trữ dữ liệu, Tăng tốc độ ghi dữ liệu. Sau đó Ceph sẽ flush dần data này xuống lưu trữ dưới HDD 19 | 20 |

21 | 22 |

23 | 24 | Ceph dùng các journaling filesystem là XFS cho OSD. Trước khi commit dữ liệu vào backing store, Ceph ghi dữ liệu vào một vùng lưu trữ tên là journal trước, vùng này hoạt động như là một phân vùng đệm (buffer), journal nằm cùng hoặc khác đĩa với OSD, trên một SSD riêng hoặc một phân vùng, thậm chí là một file riêng trong filesystem. Với cơ chế này, Ceph ghi mọi thứ vào journal, rồi mới ghi vào backing storage. 25 | 26 | Một dữ liệu ghi vào journal sẽ được lưu tại đây trong lúc syncs xuống backing store, mặc định là 5 giây chạy 1 lần. 10 GB là dung lượng phổ biến của journal, tuy nhiên journal càng lớn càng tốt. Ceph dùng journal để tăng tốc và đảm bảo tính nhất quán. Journal cho phép Ceph OSD thực hiện các tác vụ ghi nhỏ nhanh chóng; một tác vụ ghi ngẫu nhiên sẽ được ghi xuống journal theo kiểu tuần tự, sau đó được *flush* xuống filesystem. Điều này cho phép filesystem có thời gian để gộp các tác vụ ghi vào ổ đĩa. Hiệu năng sẽ tăng lên rõ rệt khi journal được tạo trên SSD. 27 | 28 | Khuyến nghị, không nên vượt quá tỉ lệ 5 OSD / 1 journal đisk khi dùng SSD làm journal, vượt quá tỉ lệ này có thể gây nên thắt cổ chai trên cluster. Và khi SSD làm journal bị lỗi, toàn bộ các OSD có journal trên SSD đó sẽ bị lỗi. 29 | Với Btrfs, việc này sẽ không xảy ra, bởi Btrfs hỗ trợ copy-on-write, chỉ ghi xuống các dữ liệu thay đổi, mà không tác động vào dữ liệu cũ, khi journal bị lỗi, dữ liệu trên OSD vẫn tồn tại. 30 | 31 | > Đối với hệ thống lưu trữ dữ liệu [BlueStore](bluestore_vs_filestore.md) thì không còn sử dụng Journal disk 32 | 33 | ## 3. Ceph disk 34 | Không nên sử dụng RAID cho Ceph Cluster: 35 | - Mặc định Ceph đã có khả năng nhân bản để bảo vệ dữ liệu, do đó không cần làm RAID với các dữ liệu đã được nhân bản đó. Với RAID group, nếu mất 1 ổ đĩa, việc phục hồi sẽ yêu cầu một ổ đĩa dự phòng, tiếp đó là chờ cho dữ liệu từ đĩa bị hỏng được ghi lên đĩa mới, do đó việc sử dụng RAID sẽ gây mất nhiều thời gian khi khôi phục cũng như giảm hiệu năng khi so với giải pháp lưu trữ phân tán. Tuy nhiên, nếu hệ thống có RAID controller, ta sẽ đặt mỗi ổ đĩa trong một RAID 0. 36 | - Phương pháp nhân bản dữ liệu của Ceph khong yêu câu một ổ cứng trống cùng dung lượng ổ hỏng. Nó dùng đường truyền mạng để khôi phục dữ liệu trên ổ cứng lỗi từ nhiều node khác. Trong quá trình khôi phục dữ liệu, dựa vào tỉ lệ nhân bản và số PGs, hầu như toàn bộ các node sẽ tham gia vào quá trình khôi phục, giúp quá trình này diễn ra nhanh hơn. 37 | - Sẽ có vấn đề về hiệu năng trên Ceph Cluster khi I/O ngẫu nhiên trên RAID 5 và 6 rất chậm. 38 | 39 | ## 4. Ceph volume 40 | 41 | Ở phiên bản từ 11.x khái niệm ceph-volume được xuất hiện thay thế dần và tiến tới thay thế hoàn toàn cho `ceph-disk` 42 | 43 | ## 5. OSD commands 44 | Một số câu lênh phổ biến để thao tác với OSD 45 | 46 | - Lệnh để kiểm tra tình trạng OSD trên 1 node: 47 | ``` 48 | service ceph status osd 49 | ``` 50 | 51 | - Lệnh kiểm tra tình trạng OSD trên tất cả các node (lưu ý thông tin về tất cả OSD phải được khai báo trong `ceph.conf`): 52 | ``` 53 | service ceph -a status osd 54 | ``` 55 | 56 | - Lệnh kiểm tra OSD ID: 57 | ``` 58 | ceph osd ls 59 | ``` 60 | 61 | - Lệnh kiểm tra OSD map: 62 | ``` 63 | ceph osd stat 64 | ``` 65 | 66 | - Lệnh kiểm tra OSD tree: 67 | ``` 68 | ceph osd tree 69 | ``` -------------------------------------------------------------------------------- /docs/knowledge_base/paxos.md: -------------------------------------------------------------------------------- 1 | # Thuật toán PAXOS 2 | 3 | ## Giới thiệu 4 | - Trong một mạng, để đánh giá xem một process failure cần dựa trên kết quả đánh giá của đa số processes khác. 5 | - Giao thức PAXOS ra đời để giải quyết vấn đề đánh giá này. 6 | - Một process được coi là failure khi có nhiều hơn một nửa các processes nhận thấy rằng process đó đã failure (lý do có thể do mất kết nối, không running, etc) 7 | 8 | ## Các định nghĩa 9 | - Có 3 roles mà các process có thể có: `proposer`, `acceptor` và `learner`. 10 | - `proposer`: là process đề xuất các giá trị. Đa số thời gian, chỉ có một process đóng vai trò `proposer`, như vậy nó cũng được gọi là leader 11 | - `acceptor`: `acceptor` có thể accept các giá trị đề xuất. Một tập hợp các chấp nhận đại diện cho đa số được gọi là quorum. Khi một đề xuất đã được chấp nhận bởi quorum, chúng ta nói rằng đề xuất này đã được chọn. Có nghĩa là khi một đề xuất được accept bởi đa số các processes (hơn một nửa) thì đề xuất đó đã được chọn. 12 | - `learner`: sau khi đề xuất được chọn, `proposer` thông báo giá trị đến xuất đến cho các processes, các processes đó được gọi là `learner`. 13 | 14 | ## Giao thức 15 | - Các giá trị đề xuất có nhãn duy nhất, nhãn là các số tự nhiên được sử dụng để sắp xếp các đề xuất. 16 | - Giao thức paxos có 2 pha. Trong pha đầu, leader sẽ lắng nghe nếu có bất kỳ giá trị nào được đồng ý bởi các `acceptors`. Sau đó nó sẽ chọn một giá trị đó sẽ đảm bảo sự chính xác của thuật toán. Trong pha thứ hai, giá trị đề xuất được chọn từ giai đoạn 1 đến được đẩy đến cho `acceptor`. Sau khi một số lượng lớn các acceptor thừa nhận leader cho rằng giá trị đề xuất được chấp nhận, leader có thể thông báo cho `learner`. 17 | - Cụ thể hơn, giao thức như sau: 18 | - pha 1, chuẩn bị: 19 | - `proposer`: Thứ nhất, `proposer` chọn một số duy nhất và quảng bá yêu cầu với nhãn `n` chuẩn bị cho `acceptors`. 20 | - `acceptor`: Khi một `acceptor` nhận một yêu cầu chuẩn bị với nhãn `n`, nó sẽ bỏ qua nếu nó đã nhận được yêu cầu chuẩn bị với nhãn cao hơn. Nếu không, nó sẽ không nhận bất kỳ yêu cầu nào có nhãn thấp hơn kể từ bây giờ (ngay sau khi nhận được nhãn). 21 | - pha 2, đồng ý: 22 | - `proposer`: Nếu `proposer` nhận được phản hồi từ số quorum của `acceptors`, nó sẽ lựa chọn, trong số tất cả các đề nghị trả lại, đề nghị đó có nhãn cao nhất. `v` là giá trị của đề xuất đó. `Proposer` sau đó sẽ gửi yêu cầu chấp nhận cho `acceptor` có giá trị v, và nhãn n. nếu không nhận được trả lời từ đa số `acceptors`, nó sẽ quay lại pha 1. 23 | - `Acceptor`: Nếu một `acceptor` nhận được một yêu cầu chấp nhận có giá trị v và nhãn n, nó chấp nhận yêu cầu này, trừ khi nó đã đáp ứng một số yêu cầu chuẩn bị khác với nhãn cao hơn n. Nếu `acceptor` chấp nhận yêu cầu, nó sẽ gửi một phản hồi thông báo cho proposer. Nếu `proposer` nhận được một xác nhận quorum, thì bây giờ nó có thể quảng bá giá trị cho `learner`. 24 | 25 | ## Tài liệu tham khảo 26 | 27 | - https://en.wikipedia.org/wiki/Paxos_(computer_science) -------------------------------------------------------------------------------- /docs/knowledge_base/pg.md: -------------------------------------------------------------------------------- 1 | # PG (Placement Group) -------------------------------------------------------------------------------- /docs/knowledge_base/rados.md: -------------------------------------------------------------------------------- 1 | # RADOS (Reliable Autonomic Distributed Object Store) 2 | 3 | Lớp RADOS giữ vai trò đặc biệt quan trọng trong kiến trúc Ceph, là trái tim của hệ thống lưu trữ CEPH,. RADOS cung cấp tất cả các tính năng của Ceph: 4 | - Lưu trữ object phân tán 5 | - Sẵn sàng cao 6 | - Tin cậy 7 | - Không có SPOF (Single point of failure) 8 | - Tự sửa lỗi 9 | - Tự quản lý 10 | - ... 11 | 12 | Các phương thức truy xuất Ceph, như RBD, CephFS, RADOSGW và librados, đều hoạt động trên lớp RADOS. 13 | 14 |

15 | 16 |

17 | 18 | Khi Ceph cluster nhận một yêu cầu ghi từ người dùng, thuật toán CRUSH tính toán vị trí và thiết bị mà dữ liệu sẽ được ghi vào. Các thông tin này được đưa lên lớp RADOS để xử lý. Dựa vào quy tắc của CRUSH, RADOS phân tán dữ liệu lên tất cả các node dưới dạng các object, phân chia lưu trữ dưới các [PG](pg.md). Cuối cùng ,các object này được lưu tại các OSD. 19 | 20 | RADOS, khi cấu hình với số nhân bản nhiều hơn hai, sẽ chịu trách nhiệm về độ tin cậy của dữ liệu. Nó sao chép object, tạo các bản sao và lưu trữ tại các zone khác nhau, do đó các bản ghi giống nhau không nằm trên cùng 1 zone. RADOS đảm bảo có nhiều hơn một bản copy của object trong RADOS cluster. 21 | 22 | RADOS cũng đảm bảo object luôn nhất quán. Trong trường hợp object không nhất quán, tiến trình khôi phục sẽ chạy. Tiến trình này chạy tự động và trong suốt với người dùng, do đó mang lại khả năng tự sửa lỗi và tự quẩn lý cho Ceph. RADOS có 2 phần: phần thấp không tương tác trực tiếp với giao diện người dùng, và phần cao hơn có tất cả giao diện người dùng. 23 | 24 | RADOS lưu dữ liệu dưới trạng thái các object trong pool. 25 | 26 | Để liệt kê danh sách các pool: 27 | ```sh 28 | rados lspools 29 | ``` 30 | 31 | Để liệt kê các object trong pool: 32 | ```sh 33 | rados -p {pool-name} ls 34 | ``` 35 | 36 | Để kiểm tra tài nguyên sử dụng: 37 | ```sh 38 | rados df 39 | ``` 40 | 41 | Lớp `LibRADOS` là thư viện C cho phép ứng dụng làm việc trực tiếp với RADOS, bypass qua các lớp khác để tương tác với Ceph Cluste.librados là thư viện cho RADOS, cung cấp các hàm API, giúp ứng dụng tương tác trực tiếp và truy xuất song song vào cluster.Ứng dụng có thể mở rộng các giao thức của nó để truy cập vào RADOS bằng cách sử dụng librados. Các thư viện tương tự cũng sẵn sàng cho C++, Java, Python, Ruby, PHP. librados là nền tảng cho các service giao diện khác chạy bên trên, gồm Ceph block device, Ceph filesystem, Ceph RADOS Gateway. librados cung cấp rất nhiều API, các phương thức lưu trữ key/value trong object. API hỗ trợ *atomic-single-object* bằng cách update dữ liệu, key và các thuộc tính. 42 | 43 | Tương tác trực tiếp với RADOS Cluster qua thư viện librados giúp tăng hiệu năng của ứng dụng. librados mang lại sự thuận lợi khi cung cấp PaaS và SaaS. 44 | 45 | RADOS có 2 thành phần lõi: [Monitor](ceph-mon.md) và [OSD](osd).md) -------------------------------------------------------------------------------- /docs/monitor/README.md: -------------------------------------------------------------------------------- 1 | # Monitor Ceph 2 | 3 | - Grafana 4 | - Zabbix 5 | - CephMGR 6 | - Prometheus 7 | - ceph-collector 8 | - Telegraf 9 | - InfluxDB 10 | - RunDeck 11 | 12 | # Monitor Ceph RadosGW 13 | https://arthurchiao.github.io/blog/monitoring-ceph-obj-storage/ 14 | -------------------------------------------------------------------------------- /docs/monitor/check_mk/README.md: -------------------------------------------------------------------------------- 1 | # Cài đặt check_mk 2 | 3 | 4 | # Bổ sung agent check_mk ceph 5 | 6 | ```sh 7 | cd /usr/lib/check_mk_agent/plugins 8 | wget https://raw.githubusercontent.com/uncelvel/tutorial-ceph/master/docs/monitor/check_mk/plugins/ceph 9 | chmod +x ceph 10 | ./ceph 11 | ``` 12 | 13 | ![](../../../images/monitor/check_mk_ceph.png) 14 | 15 | # Bổ sung agent check_mk check disk 16 | 17 | ```sh 18 | yum install smartmontools -y && sudo apt-get install smartmontools 19 | cd /usr/lib/check_mk_agent/plugins 20 | wget https://raw.githubusercontent.com/uncelvel/tutorial-ceph/master/docs/monitor/check_mk/plugins/smart 21 | chmod +x smart 22 | ./smart 23 | ``` 24 | 25 | Kiểm tra bằng tay 26 | ```sh 27 | sudo smartctl -i /dev/sda 28 | ``` 29 | 30 | Discovery trên `check_mk` 31 | ![](../../../images/monitor/check_mk_disk.png) 32 | 33 | Các tham số chi tiết hiển thị trên Check_mk 34 | 35 | ```sh 36 | OK - Powered on: 7856 hours, Power cycles: 15, Reallocated sectors: 4, Pending sectors: 0, End-to-End errors: 0, Uncorrectable errors: 0, UDMA CRC errors: 0 37 | ``` 38 | ![](https://i.imgur.com/BBc6XGp.jpg) 39 | 40 | 41 | - **Powered on:** Số giờ disk đã chạy https://kb.acronis.com/content/9109 42 | - **Power cycles:** Số lần bật tắt nguồn của ổ https://kb.acronis.com/content/9112 43 | - **Reallocated sectors:** Số lượng sector bị bad hệ thống phát hiện và đã di chuyển dữ liệu sang sector khác https://kb.acronis.com/content/9105 44 | - **Pending sectors:** Số lượng sector không ổn định đang chờ để map lại sector khác https://kb.acronis.com/content/9133 45 | - **End-to-End errors:** Số lượng dữ liệu tham chiếu giữa bộ đệm RAM và disk không khớp https://kb.acronis.com/content/9119 46 | - **Uncorrectable errors:** Số lượng lỗi ổ cứng không thể phục hồi bằng chức năng ECC (error-correcting code) https://kb.acronis.com/content/9122 47 | - **UDMA_CRC_Error_Count:** Số lượng lỗi trong quá trình truyền dữ liệu (Có thể do dây SAS, card RAID, hoặc là bộ phận điều khiển trên Disk) https://kb.acronis.com/content/9135 -------------------------------------------------------------------------------- /docs/monitor/check_mk/plugins/ceph: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # (c) 2014 Heinlein Support GmbH 4 | # Robert Sander 5 | 6 | # This is free software; you can redistribute it and/or modify it 7 | # under the terms of the GNU General Public License as published by 8 | # the Free Software Foundation in version 2. This file is distributed 9 | # in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- 10 | # out even the implied warranty of MERCHANTABILITY or FITNESS FOR A 11 | # PARTICULAR PURPOSE. See the GNU General Public License for more de- 12 | # ails. You should have received a copy of the GNU General Public 13 | # License along with GNU Make; see the file COPYING. If not, write 14 | # to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, 15 | # Boston, MA 02110-1301 USA. 16 | 17 | if [ -x /usr/bin/ceph ]; then 18 | if [ $(ceph version | cut -f 3 -d " " | cut -f 1 -d .) -lt 10 ]; then 19 | echo '<<>>' 20 | /usr/bin/ceph -s 21 | echo '<<>>' 22 | /usr/bin/ceph df 23 | else 24 | echo '<<>>' 25 | /usr/bin/ceph -f json status 26 | 27 | echo '<<>>' 28 | /usr/bin/ceph -f json df detail 29 | 30 | echo '<<>>' 31 | echo '{ "df": ' 32 | /usr/bin/ceph -f json osd df 33 | echo ', "perf": ' 34 | /usr/bin/ceph -f json osd perf 35 | echo ', "nodes": ' 36 | /usr/bin/ceph -f json node ls osd 37 | echo '}' 38 | fi 39 | fi -------------------------------------------------------------------------------- /docs/monitor/check_mk/plugins/smart: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # +------------------------------------------------------------------+ 3 | # | ____ _ _ __ __ _ __ | 4 | # | / ___| |__ ___ ___| | __ | \/ | |/ / | 5 | # | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / | 6 | # | | |___| | | | __/ (__| < | | | | . \ | 7 | # | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ | 8 | # | | 9 | # | Copyright Mathias Kettner 2014 mk@mathias-kettner.de | 10 | # +------------------------------------------------------------------+ 11 | # 12 | # This file is part of Check_MK. 13 | # The official homepage is at http://mathias-kettner.de/check_mk. 14 | # 15 | # check_mk is free software; you can redistribute it and/or modify it 16 | # under the terms of the GNU General Public License as published by 17 | # the Free Software Foundation in version 2. check_mk is distributed 18 | # in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- 19 | # out even the implied warranty of MERCHANTABILITY or FITNESS FOR A 20 | # PARTICULAR PURPOSE. See the GNU General Public License for more de- 21 | # tails. You should have received a copy of the GNU General Public 22 | # License along with GNU Make; see the file COPYING. If not, write 23 | # to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, 24 | # Boston, MA 02110-1301 USA. 25 | 26 | 27 | 28 | 29 | # This will be called on LSI based raidcontrollers and accesses 30 | # the SMART data of SATA disks attached to a SAS Raid HBA via 31 | # SCSI protocol interface. 32 | megaraid_info() 33 | { 34 | #PDINFO=$(MegaCli -PDlist -a0) 35 | if [ -z "$1" ]; then 36 | PDINFO=$(megacli -PDlist -a0 -NoLog) 37 | else 38 | PDINFO=$($1 -PDlist -a0 -NoLog) 39 | fi 40 | 41 | echo "$PDINFO" | \ 42 | while read line ; do 43 | case "$line" in 44 | # FIRST LINE 45 | "Enclosure Device ID"*) #Enclosure Device ID: 252 46 | ENC=$( echo "$line" | awk '{print $4}') 47 | unset SLOT LOG_DEV_ID VEND MODEL 48 | ;; 49 | "Slot Number"*) #Slot Number: 7 50 | SLOT=$( echo "$line" | awk '{print $3}') 51 | ;; 52 | # Identify the logical device ID. smartctl needs it to access the disk. 53 | "Device Id"*) #Device Id: 19 54 | LOG_DEV_ID=$( echo "$line" | awk '{print $3}') 55 | ;; 56 | "PD Type"*) #PD Type: SATA 57 | VEND=$( echo "$line" | awk '{print $3}') 58 | ;; 59 | # This is the last value, generate output here 60 | "Inquiry Data"*) 61 | #Inquiry Data: WD-WCC1T1035197WDC WD20EZRX-00DC0B0 80.00A80 62 | # $4 seems to be better for some vendors... wont be possible to get this perfect. 63 | MODEL=$( echo "$line" | awk '{print $3}') 64 | 65 | # /dev/sdc ATA SAMSUNG_SSD_830 5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 66 | smartctl -d megaraid,${LOG_DEV_ID} -v 9,raw48 -A /dev/sg0 | \ 67 | grep Always | egrep -v '^190(.*)Temperature(.*)' | \ 68 | sed "s|^|Enc${ENC}/Slot${SLOT} $VEND $MODEL |" 69 | ;; 70 | esac 71 | done 72 | } 73 | 74 | 75 | # Only handle always updated values, add device path and vendor/model 76 | if which smartctl > /dev/null 2>&1 ; then 77 | # 78 | # if the 3ware-utility is found 79 | # get the serials for all disks on the controller 80 | # 81 | if which tw_cli > /dev/null 2>&1 ; then 82 | # support for only one controller at the moment 83 | TWAC=$(tw_cli show | awk 'NR < 4 { next } { print $1 }' | head -n 1) 84 | 85 | # - add a trailing zero to handle case of unused slot 86 | # trailing zeros are part of the device links in /dev/disk/by-id/... anyway 87 | # - only the last 9 chars seem to be relevant 88 | # (hopefully all this doesn't change with new kernels...) 89 | eval `tw_cli /$TWAC show drivestatus | grep -E '^p[0-9]' | awk '{print $1 " " $7 "0"}' | while read twaminor serial ; do 90 | twaminor=${twaminor#p} 91 | serial=${serial:(-9)} 92 | serial=AMCC_${serial}00000000000 93 | echo "$serial=$twaminor" 94 | done` 95 | else: 96 | echo "tw_cli not found" >&2 97 | fi 98 | echo '<<>>' 99 | SEEN= 100 | for D in /dev/disk/by-id/{scsi,ata}-*; do 101 | [ "$D" != "${D%scsi-\*}" ] && continue 102 | [ "$D" != "${D%ata-\*}" ] && continue 103 | [ "$D" != "${D%-part*}" ] && continue 104 | N=$(readlink $D) 105 | N=${N##*/} 106 | if [ -r /sys/block/$N/device/vendor ]; then 107 | VEND=$(tr -d ' ' < /sys/block/$N/device/vendor) 108 | else 109 | # 2012-01-25 Stefan Kaerst CDJ - in case $N does not exist 110 | VEND=ATA 111 | fi 112 | if [ -r /sys/block/$N/device/model ]; then 113 | MODEL=$(sed -e 's/ /_/g' -e 's/_*$//g' < /sys/block/$N/device/model) 114 | else 115 | MODEL=$(smartctl -a $D | grep -i "device model" | sed -e "s/.*:[ ]*//g" -e "s/\ /_/g") 116 | fi 117 | # Excluded disk models for SAN arrays or certain RAID luns that are also not usable.. 118 | if [ "$MODEL" = "iSCSI_Disk" -o "$MODEL" = "LOGICAL_VOLUME" ]; then 119 | continue 120 | fi 121 | # Avoid duplicate entries for same device 122 | if [ "${SEEN//.$N./}" != "$SEEN" ] ; then 123 | continue 124 | fi 125 | SEEN="$SEEN.$N." 126 | # strip device name for final output 127 | DNAME=${D#/dev/disk/by-id/scsi-} 128 | DNAME=${DNAME#/dev/disk/by-id/ata-} 129 | # 2012-01-25 Stefan Kaerst CDJ - special option in case vendor is AMCC 130 | CMD= 131 | if [ "$VEND" == "AMCC" -a -n "$TWAC" ]; then 132 | DNAME=${DNAME#1} 133 | [ -z "${!DNAME}" ] && continue 134 | CMD="smartctl -d 3ware,${!DNAME} -v 9,raw48 -A /dev/twa0" 135 | # create nice device name including model 136 | MODEL=$(tw_cli /$TWAC/p${!DNAME} show model | head -n 1 | awk -F= '{ print $2 }') 137 | MODEL=${MODEL## } 138 | MODEL=${MODEL// /-} 139 | DNAME=${DNAME#AMCC_} 140 | DNAME="AMCC_${MODEL}_${DNAME%000000000000}" 141 | elif [ "$VEND" != "ATA" ] ; then 142 | TEMP= 143 | # create temperature output as expected by checks/smart 144 | # this is a hack, TODO: change checks/smart to support SCSI-disks 145 | eval `smartctl -a $D | while read a b c d e ; do 146 | [ "$a" == Serial ] && echo SN=$c 147 | [ "$a" == Current -a "$b" == Drive -a "$c" == Temperature: ] && echo TEMP=$d 148 | done` 149 | [ -n "$TEMP" ] && CMD="echo 194 Temperature_Celsius 0x0000 000 000 000 Old_age Always - $TEMP (0 0 0 0)" 150 | DNAME="${VEND}_${MODEL}_${SN}" 151 | else 152 | CMD="smartctl -a -v 9,raw48 -A $D" 153 | fi 154 | [ -n "$CMD" ] && $CMD | grep Always | egrep -v '^190(.*)Temperature(.*)' | sed "s|^|$DNAME $VEND $MODEL |" 155 | done 2>/dev/null 156 | # Call MegaRaid submodule if conditions are met 157 | if type MegaCli >/dev/null 2>&1; then 158 | MegaCli_bin="MegaCli" 159 | elif type MegaCli64 >/dev/null 2>&1; then 160 | MegaCli_bin="MegaCli64" 161 | elif type megacli >/dev/null 2>&1; then 162 | MegaCli_bin="megacli" 163 | else 164 | MegaCli_bin="unknown" 165 | fi 166 | if [ "$MegaCli_bin" != "unknown" ]; then 167 | megaraid_info "$MegaCli_bin" 168 | fi 169 | else 170 | echo "ERROR: smartctl not found" >&2 171 | fi -------------------------------------------------------------------------------- /docs/monitor/grafana/README.md: -------------------------------------------------------------------------------- 1 | # Cài đặt cấu hình Grafafa 2 | 3 | Cài đặt 4 | ```sh 5 | wget https://dl.grafana.com/oss/release/grafana-6.3.6-1.x86_64.rpm 6 | sudo yum localinstall grafana-6.3.6-1.x86_64.rpm 7 | ``` 8 | 9 | Khởi động 10 | ```sh 11 | systemctl enable --now grafana-server 12 | ``` 13 | 14 | ![](images/grafana001.png) 15 | 16 | > Tài khoản mặc định `admin/admin` 17 | 18 | Change passwd mới 19 | 20 | ![](images/grafana002.png) 21 | 22 | Màn hình ban đầu 23 | 24 | ![](images/grafana003.png) 25 | 26 | Allow firewall 27 | ```sh 28 | firewall-cmd --add-port=3000/tcp --permanent 29 | firewall-cmd --reload 30 | ``` 31 | 32 | # Các cấu hình cơ bản 33 | 34 | 35 | # Các Data Source thường dùng 36 | 37 | - Zabbix 38 | - Prometheus 39 | - InfluxDB 40 | 41 | # Monitor Ceph RBD - OPS 42 | 43 | File [Json](tools/CEPH_Bandwidth.json) 44 | 45 | # Monitor Ceph RadosGW 46 | 47 | 48 | # Tài liệu tham khảo 49 | [1. https://grafana.com/grafana/download](https://grafana.com/grafana/download) -------------------------------------------------------------------------------- /docs/monitor/grafana/images/grafana001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/docs/monitor/grafana/images/grafana001.png -------------------------------------------------------------------------------- /docs/monitor/grafana/images/grafana002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/docs/monitor/grafana/images/grafana002.png -------------------------------------------------------------------------------- /docs/monitor/grafana/images/grafana003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/docs/monitor/grafana/images/grafana003.png -------------------------------------------------------------------------------- /docs/monitor/grafana/tools/CEPH_Bandwidth.json: -------------------------------------------------------------------------------- 1 | { 2 | "annotations": { 3 | "list": [ 4 | { 5 | "builtIn": 1, 6 | "datasource": "-- Grafana --", 7 | "enable": true, 8 | "hide": true, 9 | "iconColor": "rgba(0, 211, 255, 1)", 10 | "name": "Annotations & Alerts", 11 | "type": "dashboard" 12 | } 13 | ] 14 | }, 15 | "editable": true, 16 | "gnetId": null, 17 | "graphTooltip": 0, 18 | "id": 9, 19 | "links": [], 20 | "panels": [ 21 | { 22 | "aliasColors": {}, 23 | "bars": false, 24 | "dashLength": 10, 25 | "dashes": false, 26 | "datasource": "Zabbix", 27 | "fill": 1, 28 | "gridPos": { 29 | "h": 11, 30 | "w": 24, 31 | "x": 0, 32 | "y": 0 33 | }, 34 | "id": 4, 35 | "legend": { 36 | "alignAsTable": true, 37 | "avg": true, 38 | "current": true, 39 | "max": true, 40 | "min": true, 41 | "show": true, 42 | "total": false, 43 | "values": true 44 | }, 45 | "lines": true, 46 | "linewidth": 1, 47 | "links": [], 48 | "nullPointMode": "null", 49 | "percentage": false, 50 | "pointradius": 5, 51 | "points": false, 52 | "renderer": "flot", 53 | "seriesOverrides": [], 54 | "spaceLength": 10, 55 | "stack": false, 56 | "steppedLine": false, 57 | "targets": [ 58 | { 59 | "application": { 60 | "filter": "Ceph" 61 | }, 62 | "functions": [], 63 | "group": { 64 | "filter": "CEPH_Public" 65 | }, 66 | "host": { 67 | "filter": "NH_CEPH_SSD002" 68 | }, 69 | "item": { 70 | "filter": "Ceph Read bandwidth" 71 | }, 72 | "mode": 0, 73 | "options": { 74 | "showDisabledItems": false, 75 | "skipEmptyValues": false 76 | }, 77 | "refId": "A", 78 | "resultFormat": "time_series", 79 | "table": { 80 | "skipEmptyValues": false 81 | }, 82 | "triggers": { 83 | "acknowledged": 2, 84 | "count": true, 85 | "minSeverity": 3 86 | } 87 | }, 88 | { 89 | "application": { 90 | "filter": "Ceph" 91 | }, 92 | "functions": [], 93 | "group": { 94 | "filter": "CEPH_Public" 95 | }, 96 | "host": { 97 | "filter": "NH_CEPH_SSD002" 98 | }, 99 | "item": { 100 | "filter": "Ceph Write bandwidth" 101 | }, 102 | "mode": 0, 103 | "options": { 104 | "showDisabledItems": false, 105 | "skipEmptyValues": false 106 | }, 107 | "refId": "B", 108 | "resultFormat": "time_series", 109 | "table": { 110 | "skipEmptyValues": false 111 | }, 112 | "triggers": { 113 | "acknowledged": 2, 114 | "count": true, 115 | "minSeverity": 3 116 | } 117 | } 118 | ], 119 | "thresholds": [], 120 | "timeFrom": null, 121 | "timeRegions": [], 122 | "timeShift": null, 123 | "title": "Ceph Read/Write bandwidth", 124 | "tooltip": { 125 | "shared": true, 126 | "sort": 0, 127 | "value_type": "individual" 128 | }, 129 | "type": "graph", 130 | "xaxis": { 131 | "buckets": null, 132 | "mode": "time", 133 | "name": null, 134 | "show": true, 135 | "values": [] 136 | }, 137 | "yaxes": [ 138 | { 139 | "format": "Bps", 140 | "label": null, 141 | "logBase": 1, 142 | "max": null, 143 | "min": null, 144 | "show": true 145 | }, 146 | { 147 | "format": "short", 148 | "label": null, 149 | "logBase": 1, 150 | "max": null, 151 | "min": null, 152 | "show": true 153 | } 154 | ], 155 | "yaxis": { 156 | "align": false, 157 | "alignLevel": null 158 | } 159 | }, 160 | { 161 | "aliasColors": {}, 162 | "bars": false, 163 | "dashLength": 10, 164 | "dashes": false, 165 | "datasource": "Zabbix", 166 | "fill": 1, 167 | "gridPos": { 168 | "h": 10, 169 | "w": 24, 170 | "x": 0, 171 | "y": 11 172 | }, 173 | "id": 2, 174 | "legend": { 175 | "alignAsTable": true, 176 | "avg": true, 177 | "current": true, 178 | "max": true, 179 | "min": true, 180 | "show": true, 181 | "total": false, 182 | "values": true 183 | }, 184 | "lines": true, 185 | "linewidth": 1, 186 | "links": [], 187 | "nullPointMode": "null", 188 | "percentage": false, 189 | "pointradius": 5, 190 | "points": false, 191 | "renderer": "flot", 192 | "seriesOverrides": [], 193 | "spaceLength": 10, 194 | "stack": false, 195 | "steppedLine": false, 196 | "targets": [ 197 | { 198 | "application": { 199 | "filter": "Ceph" 200 | }, 201 | "functions": [], 202 | "group": { 203 | "filter": "CEPH_Public" 204 | }, 205 | "host": { 206 | "filter": "NH_CEPH_SSD002" 207 | }, 208 | "item": { 209 | "filter": "Ceph Read operations" 210 | }, 211 | "mode": 0, 212 | "options": { 213 | "showDisabledItems": false, 214 | "skipEmptyValues": false 215 | }, 216 | "refId": "A", 217 | "resultFormat": "time_series", 218 | "table": { 219 | "skipEmptyValues": false 220 | }, 221 | "triggers": { 222 | "acknowledged": 2, 223 | "count": true, 224 | "minSeverity": 3 225 | } 226 | }, 227 | { 228 | "application": { 229 | "filter": "Ceph" 230 | }, 231 | "functions": [], 232 | "group": { 233 | "filter": "CEPH_Public" 234 | }, 235 | "host": { 236 | "filter": "NH_CEPH_SSD002" 237 | }, 238 | "item": { 239 | "filter": "Ceph Write operations" 240 | }, 241 | "mode": 0, 242 | "options": { 243 | "showDisabledItems": false, 244 | "skipEmptyValues": false 245 | }, 246 | "refId": "B", 247 | "resultFormat": "time_series", 248 | "table": { 249 | "skipEmptyValues": false 250 | }, 251 | "triggers": { 252 | "acknowledged": 2, 253 | "count": true, 254 | "minSeverity": 3 255 | } 256 | } 257 | ], 258 | "thresholds": [], 259 | "timeFrom": null, 260 | "timeRegions": [], 261 | "timeShift": null, 262 | "title": "Ceph Read/Write IOPS", 263 | "tooltip": { 264 | "shared": true, 265 | "sort": 0, 266 | "value_type": "individual" 267 | }, 268 | "type": "graph", 269 | "xaxis": { 270 | "buckets": null, 271 | "mode": "time", 272 | "name": null, 273 | "show": true, 274 | "values": [] 275 | }, 276 | "yaxes": [ 277 | { 278 | "format": "short", 279 | "label": null, 280 | "logBase": 1, 281 | "max": null, 282 | "min": null, 283 | "show": true 284 | }, 285 | { 286 | "format": "short", 287 | "label": null, 288 | "logBase": 1, 289 | "max": null, 290 | "min": null, 291 | "show": true 292 | } 293 | ], 294 | "yaxis": { 295 | "align": false, 296 | "alignLevel": null 297 | } 298 | } 299 | ], 300 | "refresh": "15m", 301 | "schemaVersion": 18, 302 | "style": "dark", 303 | "tags": [], 304 | "templating": { 305 | "list": [] 306 | }, 307 | "time": { 308 | "from": "now-6h", 309 | "to": "now" 310 | }, 311 | "timepicker": { 312 | "refresh_intervals": [ 313 | "5s", 314 | "10s", 315 | "30s", 316 | "1m", 317 | "5m", 318 | "15m", 319 | "30m", 320 | "1h", 321 | "2h", 322 | "1d" 323 | ], 324 | "time_options": [ 325 | "5m", 326 | "15m", 327 | "1h", 328 | "6h", 329 | "12h", 330 | "24h", 331 | "2d", 332 | "7d", 333 | "30d" 334 | ] 335 | }, 336 | "timezone": "", 337 | "title": "CEPH I/O Bandwidth", 338 | "uid": "2R0qVhomk", 339 | "version": 5 340 | } -------------------------------------------------------------------------------- /docs/monitor/influxdb/README.md: -------------------------------------------------------------------------------- 1 | # Cài đặt 2 | 3 | ```sh 4 | yum install wwget -y 5 | wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.8.x86_64.rpm 6 | sudo yum localinstall influxdb-1.7.8.x86_64.rpm 7 | 8 | 9 | systemctl enable --now influxdb 10 | 11 | 12 | firewall-cmd --permanent --add-port=8086/tcp 13 | firewall-cmd --permanent --add-port=8088/tcp 14 | firewall-cmd --reload 15 | ``` 16 | 17 | # Tài liệu tham khảo 18 | [](https://computingforgeeks.com/how-to-install-influxdb-on-rhel-8-centos-8/) 19 | 20 | -------------------------------------------------------------------------------- /docs/monitor/prometheus/README.md: -------------------------------------------------------------------------------- 1 | # Cài đặt 2 | 3 | Dash board for Ceph 4 | 5 | https://grafana.com/grafana/dashboards/2842 6 | 7 | ![](images/prom_ceph_001.png)) 8 | 9 | 10 | 11 | # Tài liệu tham khảo 12 | 13 | [](https://www.fosslinux.com/10398/how-to-install-and-configure-prometheus-on-centos-7.htm) 14 | 15 | [](https://github.com/prometheus/prometheus/wiki/Default-port-allocations) 16 | 17 | [itforvn.com](https://itforvn.com/monitoring-tu-a-z-cai-dat-prometheus-va-grafana.html/) 18 | 19 | 20 | -------------------------------------------------------------------------------- /docs/monitor/prometheus/images/prom_ceph_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/docs/monitor/prometheus/images/prom_ceph_001.png -------------------------------------------------------------------------------- /docs/monitor/zabbix/README.md: -------------------------------------------------------------------------------- 1 | # Ghi chép một số bước monitor CEPH bằng phần mềm zabbix - grafana 2 | 3 | ### Mục lục 4 | 5 | [1. Mô hình](#mohinh)
6 | [2. IP Planning](#planning)
7 | [3. Thao tác trên node CEPH](#nodeceph)
8 | [4. Thao tác trên node zabbix](#nodezabbix)
9 | [5. Test](#test)
10 | [6. Import graph grafana](#grafana)
11 | 12 | 13 | ## 1. Mô hình triển khai 14 | 15 | Mô hình triển khai gồm 16 | 17 | + 01 cụm CEPH (192.168.90.51)
18 | + 01 zabbix server (192.168.90.110)
19 | + 01 grafana server(192.168.90.111)
20 | 21 | ![](../images/img-ceph-zabbix/topo.png) 22 | 23 | 24 | ## 2. IP Planning 25 | 26 | 27 | 28 | ## 3. Thao tác trên node CEPH 29 | 30 | Thực hiện trên node CEPH cài service monitor của cụm CEPH 31 | 32 | ![](../images/img-ceph-zabbix/Screenshot_365.png) 33 | 34 | ### Cài zabbix-sender 35 | 36 | ``` 37 | yum install zabbix-sender -y 38 | ``` 39 | 40 | Check 41 | 42 | ``` 43 | [root@nhcephssd1 ~]# which zabbix_sender 44 | /usr/bin/zabbix_sender 45 | ``` 46 | 47 | ### Setup module ceph-zabbix 48 | 49 | + Enable module ceph-zabbix 50 | 51 | ``` 52 | ceph mgr module enable zabbix 53 | ``` 54 | 55 | + Set zabbix server 56 | 57 | ``` 58 | ceph zabbix config-set zabbix_host 192.168.90.110 59 | ``` 60 | 61 | + Set ceph-server 62 | 63 | ``` 64 | ceph zabbix config-set identifier CEPH_01 65 | ``` 66 | 67 | **Lưu ý**: Tên định danh `CEPH_01` phải trùng với tên `Host name` khi add host trên zabbix. 68 | 69 | + Set zabbix_sender 70 | 71 | Lấy đường dẫn 72 | ``` 73 | which zabbix_sender 74 | ``` 75 | 76 | ``` 77 | ceph zabbix config-set zabbix_sender /usr/bin/zabbix_sender 78 | ``` 79 | 80 | + Set port 81 | 82 | ``` 83 | ceph zabbix config-set zabbix_port 10051 84 | ``` 85 | 86 | + Set interval time 87 | 88 | ``` 89 | ceph zabbix config-set interval 60 90 | ``` 91 | 92 | + Show lại config 93 | 94 | ``` 95 | ceph zabbix config-show 96 | ``` 97 | 98 | ![](../images/img-ceph-zabbix/Screenshot_366.png) 99 | 100 | 101 | 102 | ## 4. Thao tác trên node zabbix 103 | 104 | + Import zabbix_temaplte.xml 105 | 106 | Download template tại đây! 107 | 108 | ![](../images/img-ceph-zabbix/Screenshot_367.png) 109 | 110 | ![](../images/img-ceph-zabbix/Screenshot_369.png) 111 | 112 | ![](../images/img-ceph-zabbix/Screenshot_368.png) 113 | 114 | 115 | + Add host CEPH trên zabbix (nếu đã add rồi thì bỏ qua), add template ceph-zabbix vừa import ở trên cho node CEPH mon. 116 | 117 | ![](../images/img-ceph-zabbix/Screenshot_370.png) 118 | 119 | 120 | ### Config database zabbix 121 | 122 | + Kết nối tới database zabbix 123 | 124 | ``` 125 | mysql -u root -p 126 | ``` 127 | 128 | ![](../images/img-ceph-zabbix/Screenshot_371.png) 129 | 130 | + Sử dụng database zabbix 131 | 132 | ``` 133 | show databases; 134 | ``` 135 | 136 | ``` 137 | use zabbix_db; 138 | ``` 139 | 140 | ![](../images/img-ceph-zabbix/Screenshot_372.png) 141 | 142 | + Xác định ID template zabbix-ceph trong database 143 | 144 | ``` 145 | select hostid from hosts where name='ceph-mgr Zabbix module'; 146 | ``` 147 | 148 | => `10269` 149 | 150 | ![](../images/img-ceph-zabbix/Screenshot_373.png) 151 | 152 | ``` 153 | select itemid, name, key_, type, trapper_hosts from items where hostid=10269; 154 | ``` 155 | 156 | ![](../images/img-ceph-zabbix/Screenshot_374.png) 157 | 158 | + Define allow host zabbix, ceph mon. 159 | 160 | ``` 161 | update items set trapper_hosts='192.168.90.110,192.168.90.51' where hostid=10269; 162 | ``` 163 | 164 | Check lại update trapper_hosts 165 | 166 | ![](../images/img-ceph-zabbix/Screenshot_375.png) 167 | 168 | 169 | ## 5. Đặt crontab, check 170 | 171 | ### Ceph cron job trên CEPH server 172 | 173 | ``` 174 | vi /etc/cron.d/ceph 175 | ``` 176 | 177 | Chỉnh sửa 178 | 179 | ``` 180 | */1 * * * * root ceph zabbix send 181 | ``` 182 | 183 | ## Check 184 | 185 | ``` 186 | ceph zabbix send 187 | ``` 188 | 189 | ![](../images/img-ceph-zabbix/Screenshot_376.png) 190 | 191 | 192 | ![](../images/img-ceph-zabbix/Screenshot_377.png) 193 | 194 | 195 | ## 6. Import graph grafana 196 | 197 | + Enable datasource zabbix-grafana 198 | 199 | ``` 200 | grafana-cli plugins install alexanderzobnin-zabbix-app 201 | ``` 202 | 203 | ![](../images/img-ceph-zabbix/Screenshot_378.png) 204 | 205 | ![](../images/img-ceph-zabbix/Screenshot_379.png) 206 | 207 | + Connet zabbix - grafana 208 | 209 | ``` 210 | URL : http://192.168.90.110/zabbix/api_jsonrpc.php 211 | ``` 212 | 213 | ![](../images/img-ceph-zabbix/Screenshot_380.png) 214 | 215 | ![](../images/img-ceph-zabbix/Screenshot_381.png) 216 | 217 | + Download json dashboard basic `ceph-zabbix-grafana` mẫu tại đây (có thể tự tạo dashboard mới tùy theo yêu cầu monitor). 218 | 219 | + Import dashboard 220 | 221 | ![](../images/img-ceph-zabbix/Screenshot_382.png) 222 | 223 | **Lưu ý**: Edit datasource về đúng địa chỉ IP theo hệ thống của bạn. 224 | 225 | ![](../images/img-ceph-zabbix/Screenshot_383.png) 226 | 227 | 228 | => Kết quả grafana monitor IOPS, I/O bandwidth cụm CEPH 229 | 230 | ![](../images/img-ceph-zabbix/Screenshot_384.png) 231 | 232 | ### Link tham khảo 233 | 234 | https://blog.csdn.net/signmem/article/details/78667569 235 | 236 | http://kb.nhanhoa.com/display/NHKB01/Monitor+CEPH+with+ZABBIX 237 | 238 | -------------------------------------------------------------------------------- /docs/operating/bluestore-blockwall.md: -------------------------------------------------------------------------------- 1 | # Sử dụng Cached trên SSD lưu BlockDB và WALL cho OSD 2 | 3 | - Ví dụ ta có 2 ổ là `sdb` dùng để lưu block db + service pools và `sdc` để lưu data 4 | 5 | - Lấy key bootstrap OSD 6 | 7 | `ceph auth get client.bootstrap-osd -o /var/lib/ceph/bootstrap-osd/ceph.keyring` 8 | 9 | - Kiểm tra 10 | 11 | `ceph-volume lvm list` 12 | 13 | - Tạo volume group cho block data 14 | 15 | `vgcreate ceph-block-0 /dev/sdc` 16 | 17 | - Tạo logical volume cho block data 18 | 19 | `lvcreate -l 100%FREE -n block-0 ceph-block-0` 20 | 21 | - Tạo volume group cho block db. 22 | 23 | `vgcreate ceph-db-0 /dev/sdb` 24 | 25 | - Tạo logical volume để lưu block db 26 | 27 | `lvcreate -L 40GB -n db-0 ceph-db-0` 28 | 29 | - Tạo logical volume để lưu services pool 30 | 31 | `lvcreate -L 40GB -n index-0 ceph-db-0` 32 | 33 | - Tạo osd lưu data 34 | 35 | `ceph-volume lvm create --bluestore --data ceph-block-0/block-0 --block.db ceph-db-0/db-0` 36 | 37 | - Tạo osd lưu service pool 38 | 39 | `ceph-volume lvm create --bluestore --data ceph-db-0/index-0` 40 | -------------------------------------------------------------------------------- /docs/operating/ceph-cheat-sheet.md: -------------------------------------------------------------------------------- 1 | ![](https://i.imgur.com/oNi9e15.png) 2 | --- 3 | 4 | # Các lệnh cơ bản 5 | 6 | ## ceph-deploy 7 | 8 | - Install Ceph trên Client 9 | ```sh 10 | ceph-deploy install {client} 11 | ``` 12 | 13 | - Khởi tạo cụm 14 | ```sh 15 | ceph-deploy mon create-initial 16 | ``` 17 | 18 | - Copy key admin và config 19 | ```sh 20 | ceph-deploy --overwrite-conf admin {host} 21 | ``` 22 | 23 | - Tạo mới OSD 24 | ```sh 25 | # Zapdisk 26 | ceph-deploy disk zap {host} /dev/{disk} 27 | # Create OSD (BlueStore) 28 | ceph-deploy osd create --data /dev/{disk} {host} 29 | ``` 30 | 31 | - Tạo mới Node Mon 32 | ```sh 33 | ceph-deploy new {host} 34 | ``` 35 | 36 | - Xóa Node Mon 37 | ```sh 38 | # Remove trong config và restart service mon 39 | ``` 40 | 41 | - Tạo mới Node MGR 42 | ```sh 43 | ceph-deploy mgr create {host} 44 | ``` 45 | 46 | - Xóa node MGR 47 | ```sh 48 | # 49 | ``` 50 | 51 | - Push config mới qua các node client 52 | ```sh 53 | ceph-deploy --overwrite-conf config push {host} 54 | ``` 55 | 56 | - Tạo mới node RGW 57 | ```sh 58 | ceph-deploy rgw create {host} 59 | ``` 60 | 61 | - Push key qua client 62 | 63 | - Xóa node 64 | ```sh 65 | # Xóa data trong `/var/lib/ceph` 66 | ceph-deploy purgedata {host} [{host2} {host3}] 67 | 68 | # Xóa data và remove package Ceph 69 | ceph-deploy purge {host} [{host2} {host3}] 70 | ``` 71 | 72 | 73 | ## Restart Service Ceph 74 | 75 | - Mon 76 | ```sh 77 | systemctl restart ceph-mon@$(hostname) 78 | ``` 79 | 80 | - OSD 81 | ```sh 82 | systemctl restart ceph-osd@{osd-id} 83 | ``` 84 | 85 | - MDS 86 | ```sh 87 | systemctl restart ceph-mds@$(hostname) 88 | ``` 89 | 90 | - RGW 91 | ```sh 92 | systemctl status ceph-radosgw@rgw.$(hostname).service 93 | ``` 94 | 95 | - MGR 96 | ```sh 97 | systemctl restart ceph-mgr@$(hostname) 98 | ``` 99 | 100 | ## Kiểm tra trạng thái hệ thống 101 | 102 | - Hiển thị trạng thái cụm Ceph 103 | ```sh 104 | ceph health 105 | ``` 106 | 107 | - Hiển thị chi tiết trạng thái Warning, Error 108 | ```sh 109 | ceph health detail 110 | ``` 111 | 112 | - Hiển thị chi tiết trạng thái cụm Ceph 113 | ```sh 114 | ceph -s 115 | ``` 116 | 117 | - Hiển thị trạng thái cụm Ceph theo giờ gian thực 118 | ```sh 119 | ceph -w 120 | ``` 121 | 122 | - Kiểm tra trạng thái sử dụng disk của mỗi pool 123 | ```sh 124 | ceph df 125 | ``` 126 | 127 | - Kiểm tra trạng thái sử dụng disk của mỗi pool theo Object 128 | ```sh 129 | rados df 130 | ``` 131 | 132 | ## Các lệnh thao tác với MGR 133 | 134 | - Kiểm tra thông tin các module của MGR 135 | ```sh 136 | [root@ceph1 ~]# ceph mgr dump 137 | { 138 | "epoch": 20171, 139 | "active_gid": 94098, 140 | "active_name": "ceph1", 141 | "active_addr": "10.10.10.33:6806/1561", 142 | "available": true, 143 | "standbys": [], 144 | "modules": [ 145 | "balancer", 146 | "restful", 147 | "status" 148 | ], 149 | "available_modules": [ 150 | "balancer", 151 | "dashboard", 152 | "influx", 153 | "localpool", 154 | "prometheus", 155 | "restful", 156 | "selftest", 157 | "status", 158 | "zabbix" 159 | ], 160 | "services": {} 161 | } 162 | [root@ceph1 ~]# 163 | ``` 164 | 165 | - Enable các module MGR (zabbix, dashboard,...) 166 | ```sh 167 | ceph mgr module enable {module} 168 | ``` 169 | 170 | ## Các lệnh thao tác với OSD 171 | 172 | - Kiểm tra OSD được create từ BlockDevice lvm nào 173 | ```sh 174 | ceph-volume lvm list 175 | ``` 176 | 177 | > Output 178 | ```sh 179 | ====== osd.1 ======= 180 | 181 | [block] /dev/ceph-3622c3ad-e4e5-4bdb-9399-1934becdae8f/osd-block-7e929d2e-5026-4590-8abd-c596d7e3e2e0 182 | 183 | type block 184 | osd id 1 185 | cluster fsid 7d3f2102-face-4012-a616-372615f2f54f 186 | cluster name ceph 187 | osd fsid 7e929d2e-5026-4590-8abd-c596d7e3e2e0 188 | encrypted 0 189 | cephx lockbox secret 190 | block uuid BYR5va-JZrp-qfWV-rngf-iazj-CEdN-A3SShX 191 | block device /dev/ceph-3622c3ad-e4e5-4bdb-9399-1934becdae8f/osd-block-7e929d2e-5026-4590-8abd-c596d7e3e2e0 192 | vdo 0 193 | crush device class None 194 | devices /dev/sdc 195 | ``` 196 | 197 | - Hiển thị trạng thái các OSD trong cụm 198 | ```sh 199 | [root@ceph1 ~]# ceph osd stat 200 | 9 osds: 9 up, 9 in 201 | ``` 202 | 203 | - Hiển thị tình trạng used, r/w, state của các osd 204 | ```sh 205 | [root@ceph1 ~]# ceph osd status 206 | +----+-------+-------+-------+--------+---------+--------+---------+-----------+ 207 | | id | host | used | avail | wr ops | wr data | rd ops | rd data | state | 208 | +----+-------+-------+-------+--------+---------+--------+---------+-----------+ 209 | | 0 | ceph1 | 3896M | 138G | 0 | 0 | 0 | 0 | exists,up | 210 | | 1 | ceph1 | 3511M | 146G | 0 | 0 | 0 | 0 | exists,up | 211 | | 2 | ceph1 | 3158M | 146G | 0 | 0 | 0 | 0 | exists,up | 212 | | 3 | ceph2 | 3750M | 146G | 0 | 0 | 0 | 0 | exists,up | 213 | | 4 | ceph2 | 3444M | 146G | 0 | 0 | 0 | 0 | exists,up | 214 | | 5 | ceph2 | 4023M | 146G | 0 | 0 | 0 | 0 | exists,up | 215 | | 6 | ceph3 | 3662M | 146G | 0 | 0 | 0 | 0 | exists,up | 216 | | 7 | ceph3 | 3741M | 146G | 0 | 0 | 0 | 0 | exists,up | 217 | | 8 | ceph3 | 3244M | 146G | 0 | 2457 | 0 | 0 | exists,up | 218 | +----+-------+-------+-------+--------+---------+--------+---------+-----------+ 219 | ``` 220 | 221 | - Hiển thị Crushmap OSD 222 | ```sh 223 | ceph osd tree 224 | ceph osd crush tree 225 | ceph osd crush tree --show-shadow 226 | ``` 227 | 228 | - Kiểm tra chi tiết location của 1 OSD 229 | ```sh 230 | ceph osd find {osd-id} 231 | ``` 232 | 233 | - Kiểm tra chi tiết metadata của 1 OSD 234 | ```sh 235 | ceph osd metadata {osd-id} 236 | ``` 237 | 238 | - Benchmark osd 239 | ```sh 240 | ceph tell osd.{osd-id} bench 241 | ``` 242 | 243 | - Hiển thị trạng thái sử dụng của các OSD 244 | ```sh 245 | ceph osd df 246 | ceph osd df tree 247 | ``` 248 | 249 | - Hiển thị latency Aplly, Commit data trên các OSD 250 | ```sh 251 | ceph osd perf 252 | ``` 253 | 254 | - Xóa 1 osd ra khỏi cụm Ceph (Thực hiện trên host của OSD đó) 255 | ```sh 256 | i={osd-id} 257 | ceph osd out osd.$i 258 | ceph osd down osd.$i 259 | systemctl stop ceph-osd@$i 260 | ceph osd crush rm osd.$i 261 | ceph osd rm osd.$i 262 | ceph auth del osd.$i 263 | ``` 264 | 265 | ## Các lệnh thao tác trên pool 266 | 267 | - Create 1 pool 268 | ```sh 269 | ceph osd pool create {pool-name} {pg-num} [{pgp-num}] [replicated] \ 270 | [crush-ruleset-name] [expected-num-objects] 271 | ``` 272 | 273 | - Set Application cho pool 274 | ```sh 275 | osd pool application enable {pool-name} {application} 276 | ``` 277 | 278 | - Hiển thị toàn bộ tham số của các pool 279 | ```sh 280 | ceph osd pool ls detail 281 | ``` 282 | 283 | - Hiện thị tham số của 1 pool 284 | ```sh 285 | ceph osd pool get {pool-name} all 286 | ``` 287 | 288 | - Điều chỉnh lại giá trị của pool 289 | ```sh 290 | ceph osd pool set {pool-name} {key} {value} 291 | ``` 292 | 293 | - Xóa pool 294 | ```sh 295 | ceph osd pool delete {pool-name} {pool-name} --yes-i-really-really-mean-it 296 | ``` 297 | 298 | ## Các lệnh thao tác xác thực trên Ceph 299 | 300 | - Hiển thị toàn bộ các key authen của cụm Ceph 301 | ```sh 302 | ceph auth list 303 | ``` 304 | 305 | - Create hoặc get key 306 | ```sh 307 | ceph auth get-or-create {key-name} mon {permission} osd {permission} mds {permission} > {key-name}.keyring 308 | ``` 309 | 310 | - Cập nhật permission key đã có 311 | ```sh 312 | ceph auth caps {key-name} mon {permission} osd {permission} mds {permission} 313 | ``` 314 | 315 | - Xóa key 316 | ```sh 317 | ceph auth delete {key-name} 318 | ``` 319 | 320 | ## Các lệnh thao tác đối với RBD 321 | 322 | - Hiển thị các images trong pool 323 | ```sh 324 | rbd ls {pool-name} 325 | ``` 326 | 327 | - Create 1 images 328 | ```sh 329 | rbd create {pool-name}/{images} --size {size}G 330 | ``` 331 | 332 | - Hiển thị chi tiết images 333 | ```sh 334 | rbd info {pool-name}/{images} 335 | ``` 336 | 337 | - Hiển thị dung lượng thực tế của images 338 | ```sh 339 | rbd diff {pool-name}/{images} | awk '{SUM += $2} END {print SUM/1024/1024 " MB"}' 340 | ``` 341 | 342 | - Điều chỉnh dung lượng images 343 | ```sh 344 | rbd resize {pool-name}/{images} --size {size}G 345 | ``` 346 | 347 | - Hiển thị images đang được mapped (Trên Client) 348 | ```sh 349 | rbd showmapped 350 | ``` 351 | 352 | - Xóa images 353 | ```sh 354 | rbd rm {pool-name}/{images} 355 | ``` 356 | 357 | - Export volume thành file 358 | ```sh 359 | rbd export --rbd-concurrent-management-ops 20 --pool={pool-name} {images} {images}.img 360 | ``` 361 | 362 | - Import volume từ file (Lưu ý định dạng file `raw` nếu là VM disk) 363 | ```sh 364 | rbd import --image-format 2 {images}.img {pool-name}/{images} 365 | ``` 366 | 367 | - Đổi tên volume 368 | ```sh 369 | rbd rename {pool-name}/{images_oldname} {pool-name}/{images_newname} 370 | ``` 371 | 372 | - Create snapshot 373 | ```sh 374 | rbd snap create {pool-name}/{images}@{snap-name} 375 | ``` 376 | 377 | - Protect bản snapshot 378 | ```sh 379 | rbd snap protect {pool-name}/{images}@{snap-name} 380 | ``` 381 | 382 | - Kiểm tra tất cả các bản snapshot của 1 volume 383 | ```sh 384 | rbs snap ls {pool-name}/{images} 385 | ``` 386 | 387 | - Roolback snapshot 388 | ```sh 389 | rbd snap rollback {pool-name}/{images}@{snap-name} 390 | ``` 391 | 392 | - Clone snapshot thành 1 images mới 393 | ```sh 394 | rbd clone {pool-name}/{images}@{snap-name} {pool-name}/{child-images} 395 | ``` 396 | 397 | - Kiểm tra các images được clone từ snapshot 398 | ```sh 399 | rbd children {pool-name}/{images}@{snap-name} 400 | ``` 401 | 402 | - Tách hẳn images mới ra khỏi images parent 403 | ```sh 404 | rbd flatten {pool-name}/{child-images} 405 | ``` 406 | 407 | - Unprotect bản snapshot 408 | ```sh 409 | rbd snap unprotect {pool-name}/{images}@{snap-name} 410 | ``` 411 | 412 | - Xóa 1 bản snapshot 413 | ```sh 414 | rbd snap rm {pool-name}/{images}@{snap-name} 415 | ``` 416 | 417 | - Xóa toàn bộ snapshot của 1 volume 418 | ```sh 419 | rbd snap purge {pool-name}/{images} 420 | ``` 421 | 422 | ## Các lệnh thao tác đối với Object 423 | 424 | - Show toàn bộ pool name 425 | ```sh 426 | rados lspools 427 | ``` 428 | 429 | - Show toàn bộ Object trên cụm 430 | ```sh 431 | rados -p {pool-name} ls 432 | ``` 433 | 434 | - Upload Object lên cụm Ceph 435 | ```sh 436 | rados -p {pool-name} put {object-file} 437 | ``` 438 | 439 | - Download Object từ cụm Ceph 440 | ```sh 441 | rados -p {pool-name} get {object-file} 442 | ``` 443 | 444 | - Xóa 1 Object cụm Ceph 445 | ```sh 446 | rados -p {pool-name} rm {object-file} 447 | ``` 448 | 449 | - Kiểm tra các client kết nối đến Object 450 | ```sh 451 | rados -p {pool-name} listwatchers {object-file} 452 | ``` 453 | 454 | - Benchmark Object bằng rados bench 455 | ```sh 456 | rados -p {pool-name} listwatchers {object-file} 457 | ``` 458 | 459 | ## Các lệnh thao tác với CephFS 460 | 461 | - Create pool cho cephfs 462 | ```sh 463 | osd pool create {} {replicated|erasure}{} {} create pool {} 464 | ceph osd pool create cephfs_data 128 465 | ceph osd pool create cephfs_metadata 128 466 | ``` 467 | 468 | - Khởi tạo cephfs 469 | ```sh 470 | ceph fs new cephfs cephfs_metadata cephfs_data 471 | ``` 472 | 473 | - Kiểm tra các cephfs trên cụm 474 | ```sh 475 | ceph fs ls 476 | ceph mds stat 477 | ``` 478 | 479 | - Enable nhiều cephfs trên cụm 480 | ```sh 481 | ceph fs flag set enable_multiple true --yes-i-really-mean-it 482 | ``` 483 | 484 | ## Thao tác trên PG 485 | 486 | - Dump toàn bộ thông tin PG trên cụm 487 | ```sh 488 | ceph pg dump [--format ] 489 | ``` 490 | 491 | - Dump thông tin cụ thể của PG_stuck 492 | ```sh 493 | ceph pg dump_stuck inactive|unclean|state|undersized|degraded 494 | ``` 495 | 496 | - Query thông tin của 1 PG 497 | ```sh 498 | ceph pg {pg-id} query 499 | ``` 500 | 501 | - List các pg missing 502 | ```sh 503 | ceph pg {pg-id} list-missing 504 | ``` 505 | 506 | 507 | ceph pg scrub {pg-id} 508 | ceph deep-scrub {pg-id} 509 | 510 | - Chủ động khôi phục pg gặp sự cố 511 | ```sh 512 | ceph pg repair {pg-id} 513 | ``` 514 | 515 | # Các lệnh nâng cao 516 | 517 | ## Thao tác với flag của Ceph 518 | 519 | Thao tác apply cho toàn Cluster 520 | ``` 521 | ceph osd set 522 | ceph osd unset 523 | ``` 524 | 525 | - full - Set flag full chúng ta sẽ không thể ghi dữ liệu mới vào được cluster 526 | - pauserd, pausewr - Tạm dừng thao tác read hoặc write trên cụm 527 | - noup - Khi set flag sẽ tạm ngưng thông báo khi có OSD up trong hệ thống 528 | - nodown - Khi set flag sẽ tạm ngưng thông báo khi có OSD down trong hệ thống 529 | - noin - Đối với các OSD đã down trước đó thì việc set flag này sẽ không tự động set OSD in và không cho phép OSD join vào CRUSHMAP khi OSD này start 530 | - noout - Khi OSD down hệ thống sẽ không tự động set OSD out ra khỏi cluster (Thường là 10m) cho đến khi chúng ta gỡ flag 531 | - nobackfill, norecover, norebalance - Suppend thao tác recovery và data rebalancing 532 | - noscrub, nodeep_scrub - Disable scrubbing 533 | - notieragent - Suppend cache tiering đang hoạt động 534 | 535 | 536 | Thao tác set chỉ định OSD 537 | ```sh 538 | ceph osd add- 539 | ceph osd rm- 540 | ``` 541 | 542 | Đối với OSD chỉ định chỉ apply được các tham số 543 | 544 | - noup 545 | - nodown 546 | - noin 547 | - noout 548 | 549 | - Thực hiện add thêm ổ đối với cụm Ceph đang chạy 550 | ```sh 551 | ceph osd reweight osd.{osd-id} {weight1} 552 | ceph osd crush reweight osd.{osd-id} {weight2} 553 | ``` 554 | Trong đó: 555 | 556 | - `{weight1}`: Recommend là % sử dụng của cụm tương ứng với %use mà chúng ta muốn đẩy vào ổ mới 557 | - `{weight2}`: Là dung lượng thực tế của ổ tính theo TiB, Ceph sẽ dựa trên tham số này để định lượng data đẩy vào OSD sau này 558 | 559 | ## Show config ceph 560 | 561 | 562 | Kiểm tra các config-key được setup cho `MGR` 563 | ```sh 564 | ceph config-key dump 565 | ``` 566 | 567 | Ví dụ: 568 | ```sh 569 | root@Ceph01:~# ceph config-key dump 570 | { 571 | "mgr/zabbix/identifier": "Ceph01", 572 | "mgr/zabbix/interval": "60", 573 | "mgr/zabbix/zabbix_host": "192.168.0.15", 574 | "mgr/zabbix/zabbix_port": "10051", 575 | "mgr/zabbix/zabbix_sender": "/usr/bin/zabbix_sender" 576 | } 577 | ``` 578 | 579 | Kiểm tra features 580 | ```sh 581 | ceph features 582 | ``` 583 | 584 | Ví dụ: 585 | ```sh 586 | root@Ceph01:~# ceph features 587 | { 588 | "mon": { 589 | "group": { 590 | "features": "0x3ffddff8eeacfffb", 591 | "release": "luminous", 592 | "num": 3 593 | } 594 | }, 595 | "osd": { 596 | "group": { 597 | "features": "0x3ffddff8eeacfffb", 598 | "release": "luminous", 599 | "num": 80 600 | } 601 | }, 602 | "client": { 603 | "group": { 604 | "features": "0x1ffddff8eea4fffb", 605 | "release": "luminous", 606 | "num": 466 607 | }, 608 | "group": { 609 | "features": "0x3ffddff8eeacfffb", 610 | "release": "luminous", 611 | "num": 405 612 | } 613 | } 614 | } 615 | ``` 616 | 617 | Kiểm tra versions các services trên cụm 618 | ```sh 619 | ceph versions 620 | ``` 621 | 622 | Ví dụ: 623 | ```sh 624 | root@Ceph01:~# ceph versions 625 | { 626 | "mon": { 627 | "ceph version 12.2.12 (1436006594665279fe734b4c15d7e08c13ebd777) luminous (stable)": 3 628 | }, 629 | "mgr": { 630 | "ceph version 12.2.12 (1436006594665279fe734b4c15d7e08c13ebd777) luminous (stable)": 2 631 | }, 632 | "osd": { 633 | "ceph version 12.2.12 (1436006594665279fe734b4c15d7e08c13ebd777) luminous (stable)": 6 634 | }, 635 | "mds": {}, 636 | "overall": { 637 | "ceph version 12.2.12 (1436006594665279fe734b4c15d7e08c13ebd777) luminous (stable)": 10 638 | } 639 | } 640 | ``` 641 | 642 | Show config trong file ceph.conf của Ceph 643 | ```sh 644 | ceph-conf --show-conf 645 | ``` 646 | 647 | Show toàn bộ config của Ceph 648 | ```sh 649 | ceph-conf --show-config 650 | ``` 651 | 652 | Kiểm tra dung lượng của các images hiện có 653 | ```sh 654 | for i in $(rbd ls {pool-name}); 655 | do 656 | echo {pool-name}/$i 657 | Size: $(rbd diff {pool-name}/$i | awk '{SUM += $2} END {print SUM/1024/1024 " MB"}'); 658 | done 659 | ``` 660 | 661 | ## Thao tác với CRUSHMAP 662 | 663 | Các thao tác với crushmap file 664 | 665 | - Get Crushmap 666 | ```sh 667 | ceph osd getcrushmap -o crushmap 668 | ``` 669 | 670 | - Decompile crushmap file 671 | ```sh 672 | crushtool -d crushmap -o crushmap.decom 673 | ``` 674 | 675 | - Sau khi chỉnh sửa crushmap tiến hành Compile lại 676 | ```sh 677 | crushtool -c crushmap.decom -o crushmap.new 678 | ``` 679 | 680 | - Test apply crushmap mới cho cụm 681 | ```sh 682 | crushtool --test -i crushmap.new --show-choose-tries --rule 2 --num-rep=2 683 | ``` 684 | 685 | - Apply crushmap cho cụm 686 | ```sh 687 | ceph osd setcrushmap -i crushmap.new 688 | ``` 689 | 690 | Các thao tác với Crushmap trên câu lệnh 691 | 692 | - Set lại class của 1 OSD 693 | ```sh 694 | # Remove class cũ 695 | ceph osd crush rm-device-class osd.{osd-id} 696 | # Add lại class mới cho osd 697 | ceph osd crush set-device-class ssd osd.{osd-id} 698 | ``` 699 | 700 | - List danh sách class của osd 701 | ```sh 702 | ceph osd crush class ls 703 | ``` 704 | 705 | - List danh sách osd theo class 706 | ```sh 707 | ceph osd crush class ls-osd {class} 708 | ``` 709 | 710 | - Kiểm tra rules hiện có của cụm 711 | ```sh 712 | ceph osd crush rule ls 713 | ``` 714 | 715 | - Kiểm tra chi tiết của 1 rule 716 | ```sh 717 | ceph osd crush rule dump 718 | ``` 719 | 720 | - Create rule mới 721 | ```sg 722 | ceph osd crush rule create-replicated 723 | ``` 724 | 725 | ## EC pool 726 | - Create rule cho ensure code 727 | ```sh 728 | ceph osd erasure-code-profile set {profileEC} k=4 m=2 crush-device-class=ssd crush-failure-domain=host 729 | ``` 730 | 731 | - Create ecpool 732 | ```sh 733 | ceph osd pool create {ecpool-name} {pg_size} {pgp_size} erasure {profileEC} 734 | ``` 735 | 736 | - Set ecpool cho phép lưu trữ RBD 737 | ```sh 738 | ceph osd pool set {ecpool-name} allow_ec_overwrites true 739 | ceph osd pool application enable {ecpool-name} rbd 740 | ``` 741 | 742 | - Create images 743 | ```sg 744 | rbd create {ecpool-name}/{images} --size {size} 745 | ``` 746 | 747 | ## Tùy chỉnh OSD trên Crushmap 748 | 749 | - Tùy chỉnh cụ thể osd trên Crushmap 750 | ```sh 751 | ceph osd crush set osd.0 1.0 root=default datacenter=dc1 room=room1 row=foo rack=bar host=foo-bar-1 752 | ``` 753 | > VD trên set osd.0 có weight =1 và nằm dưới `/root/dc1/roomm1/foo/bar/foor-bar-1` 754 | 755 | - Xóa 1 bucket 756 | ```sh 757 | ceph osd crush rm {bucket-name} 758 | ``` 759 | 760 | ## Ví dụ tùy chỉnh 761 | ```sh 762 | # Add host node4 763 | ceph osd crush add-bucket node4 host 764 | # Move node4 to root default 765 | ceph osd crush move node4 root=default 766 | # Add disktype node4hdd, node4ssd 767 | ceph osd crush add-bucket node4hdd disktype 768 | ceph osd crush add-bucket node4ssd disktype 769 | # Move disktype node4hdd, node4ssd to host node4 770 | ceph osd crush move node4ssd host=node4 771 | ceph osd crush move node4hdd host=node4 772 | # Add osd to disktype 773 | ceph osd crush set osd.11 0.00999 disktype=node4ssd 774 | ceph osd crush set osd.12 0.00999 disktype=node4hdd 775 | ``` 776 | 777 | ## Rebalance dữ liệu trên các OSD 778 | 779 | Rebalance các ổ có `VAR` > 120% default 780 | ```sh 781 | ceph osd reweight-by-utilization [percentage] 782 | ``` 783 | 784 | Điều chỉnh bằng tay 785 | ```sh 786 | ceph osd reweight osd.{osd-id} {weight1} 787 | ``` 788 | 789 | Enable module `balancer` 790 | 791 | `https://forum.proxmox.com/threads/ceph-balancing-osd-distribution-new-in-luminous.43328/` 792 | 793 | ## Tổng hợp thông tin PG của cụm 794 | ```sh 795 | ceph pg dump | awk ' 796 | BEGIN { IGNORECASE = 1 } 797 | /^PG_STAT/ { col=1; while($col!="UP") {col++}; col++ } 798 | /^[0-9a-f]+\.[0-9a-f]+/ { match($0,/^[0-9a-f]+/); pool=substr($0, RSTART, RLENGTH); poollist[pool]=0; 799 | up=$col; i=0; RSTART=0; RLENGTH=0; delete osds; while(match(up,/[0-9]+/)>0) { osds[++i]=substr(up,RSTART,RLENGTH); up = substr(up, RSTART+RLENGTH) } 800 | for(i in osds) {array[osds[i],pool]++; osdlist[osds[i]];} 801 | } 802 | END { 803 | printf("\n"); 804 | printf("pool :\t"); for (i in poollist) printf("%s\t",i); printf("| SUM \n"); 805 | for (i in poollist) printf("--------"); printf("----------------\n"); 806 | for (i in osdlist) { printf("osd.%i\t", i); sum=0; 807 | for (j in poollist) { printf("%i\t", array[i,j]); sum+=array[i,j]; sumpool[j]+=array[i,j] }; printf("| %i\n",sum) } 808 | for (i in poollist) printf("--------"); printf("----------------\n"); 809 | printf("SUM :\t"); for (i in poollist) printf("%s\t",sumpool[i]); printf("|\n"); 810 | }' 811 | ``` 812 | 813 | ## Lấy thông tin sử dụng thực tế và đã cấp của pool 814 | ```sh 815 | pool="volumes" 816 | echo > size.txt 817 | for vol in $(rbd ls $pool) 818 | do 819 | real=$(rbd diff $pool/$vol | awk '{SUM += $2} END {print SUM/1024/1024 }') 820 | capa=$(rbd info $pool/$vol | grep size | awk '{print $2}' | cut -d 'G' -f1) 821 | echo "$pool/$vol $real $capa" >> size.txt 822 | done 823 | sum_real=$(cat size.txt| awk '{SUM += $2} END {print SUM/1024} MB') 824 | sum_capa=$(cat size.txt| awk '{SUM += $3} END {print SUM} GB') 825 | echo -e "SUM_REAL:$sum_real GB\nSUM_CAPACITY:$sum_capa GB" 826 | ``` 827 | 828 | ## Map Image RBD trên Client 829 | 830 | Map rbd như 1 Block Device 831 | ```sh 832 | # Trên client cài đặt cephclient 833 | yum install ceph-common -y 834 | 835 | # Download ceph.conf và key về /etc/ceph/ 836 | scp root@cephnode:/etc/ceph/ceph.conf /etc/ceph/ 837 | scp root@cephnode:/etc/ceph/{key-name}.keyring /etc/ceph/ 838 | 839 | # Add config vào rbdmap 840 | echo "{pool-name}/{images} id=admin,keyring=/etc/ceph/ceph.client.admin.keyring" >> /etc/ceph/rbdmap 841 | 842 | # Kiểm tra 843 | sudo modprobe rbd 844 | rbd feature disable {pool-name}/{images} exclusive-lock object-map fast-diff deep-flatten 845 | systemctl start rbdmap && systemctl enable rbdmap 846 | 847 | # Bổ sung fstab 848 | echo "UUID=bfdf0e00-1d73-4bd9-a43e-32c408dbfdc9 /data ext4 noauto 0 0" >> /etc/fstab 849 | 850 | # Nếu là sử dụng lvm thì bổ sung vào lvm.conf 851 | types = [ "rbd", 1024 ] 852 | ``` 853 | 854 | Force unmount folder 855 | ```sh 856 | rbd unmap -o force $DEV 857 | ``` 858 | 859 | ## Map cephfs trên Client 860 | 861 | Map cephfs như 1 NFS folder 862 | ```sh 863 | sudo mount -t ceph 192.168.0.1:6789:/ /mnt/mycephfs -o name=admin,secretfile=/etc/ceph/admin.secret 864 | 865 | sudo mkdir /home/usernname/cephfs 866 | sudo ceph-fuse -m 192.168.0.1:6789 /home/username/cephfs 867 | 868 | # Cấu hình trên fstab 869 | 10.10.10.10:6789:/ /mnt/ceph ceph name=admin,secretfile=/etc/ceph/secret.key,noatime,_netdev 0 2 870 | ``` 871 | 872 | # Cấu hình ceph.conf tham khảo 873 | ```sh 874 | [global] 875 | # Requirement Config 876 | fsid = 7d3f2102-face-4012-a616-372615f2f54f 877 | mon_initial_members = ceph1 878 | mon_host = 10.10.10.33 879 | auth_cluster_required = cephx 880 | auth_service_required = cephx 881 | auth_client_required = cephx 882 | 883 | # Network 884 | public_network = 172.16.4.0/24 885 | cluster_network = 10.0.0.0/24 886 | 887 | # Debug config 888 | debug_lockdep = 0/0 889 | debug_context = 0/0 890 | debug_crush = 0/0 891 | debug_mds = 0/0 892 | debug_mds_balancer = 0/0 893 | debug_mds_locker = 0/0 894 | debug_mds_log = 0/0 895 | debug_mds_log_expire = 0/0 896 | debug_mds_migrator = 0/0 897 | debug_buffer = 0/0 898 | debug_timer = 0/0 899 | debug_filer = 0/0 900 | debug_objecter = 0/0 901 | debug_rados = 0/0 902 | debug_rbd = 0/0 903 | debug_journaler = 0/0 904 | debug_objectcacher = 0/0 905 | debug_client = 0/0 906 | debug_osd = 0/0 907 | debug_optracker = 0/0 908 | debug_objclass = 0/0 909 | debug_filestore = 0/0 910 | debug_journal = 0/0 911 | debug_ms = 0/0 912 | debug_mon = 0/0 913 | debug_monc = 0/0 914 | debug_paxos = 0/0 915 | debug_tp = 0/0 916 | debug_auth = 0/0 917 | debug_finisher = 0/0 918 | debug_heartbeatmap = 0/0 919 | debug_perfcounter = 0/0 920 | debug_rgw = 0/0 921 | debug_hadoop = 0/0 922 | debug_asok = 0/0 923 | debug_throttle = 0/0 924 | rbd_default_format = 2 925 | 926 | # Choose a reasonable crush leaf type 927 | # 0 for a 1-node cluster. 928 | # 1 for a multi node cluster in a single rack 929 | # 2 for a multi node, multi chassis cluster with multiple hosts in a chassis 930 | # 3 for a multi node cluster with hosts across racks, etc. 931 | osd_crush_chooseleaf_type = 1 932 | 933 | # Choose reasonable numbers for number of replicas and placement groups. 934 | # Write an object 2 times 935 | osd_pool_default_size = 2 936 | # Allow writing 1 copy in a degraded state 937 | osd_pool_default_min_size = 1 938 | osd_pool_default_pg_num = 256 939 | osd_pool_default_pgp_num = 256 940 | 941 | # --> Allow delete pool -- NOT RECOMMEND 942 | mon_allow_pool_delete = false 943 | 944 | # Journal size Jewel-release 945 | # osd journal size = 20480 ; journal size, in megabytes 946 | 947 | rbd_cache = true 948 | bluestore_block_db_size = 5737418240 949 | bluestore_block_wal_size = 2737418240 950 | 951 | # Disable auto update crush => Modify Crushmap OSD tree 952 | osd_crush_update_on_start = false 953 | 954 | # Backfilling and recovery 955 | osd_max_backfills = 1 956 | osd_recovery_max_active = 1 957 | osd_recovery_max_single_start = 1 958 | osd_recovery_op_priority = 1 959 | 960 | # Osd recovery threads = 1 961 | osd_backfill_scan_max = 16 962 | osd_backfill_scan_min = 4 963 | mon_osd_backfillfull_ratio = 0.95 964 | 965 | # Scrubbing 966 | osd_max_scrubs = 1 967 | osd_scrub_during_recovery = false 968 | # osd scrub begin hour = 22 969 | # osd scrub end hour = 4 970 | 971 | # Max PG / OSD 972 | mon_max_pg_per_osd = 500 973 | ``` 974 | -------------------------------------------------------------------------------- /docs/operating/ceph-hardware-crash.md: -------------------------------------------------------------------------------- 1 | # Môi trường giả định Node hỏng vật lý 2 | 3 | Gắn các OSD từ node hỏng sang node mới và thực hiện 4 | ``` 5 | ceph-volume lvm activate --all 6 | ``` 7 | 8 | Điều kiện 9 | - Có node vật lý mới thay thế 10 | - IP planning giống như node vừa hỏng 11 | - Hostname giống như node vừa hỏng 12 | - Cài đặt ceph version giống như node vừa hỏng (Chưa kiểm chứng vụ khác version) 13 | - Copy ceph.conf của cụm sang node mới 14 | - Tiến hành active các lvm trên các ổ 15 | 16 | Thông tin metadata của OSD cần phải gần khớp với node hỏng 17 | ```sh 18 | { 19 | "id": 4, 20 | "arch": "x86_64", 21 | "back_addr": "192.168.83.79:6802/12775", 22 | "back_iface": "eth2", 23 | "bluefs": "1", 24 | "bluefs_db_access_mode": "blk", 25 | "bluefs_db_block_size": "4096", 26 | "bluefs_db_dev": "252:1", 27 | "bluefs_db_dev_node": "dm-1", 28 | "bluefs_db_driver": "KernelDevice", 29 | "bluefs_db_model": "", 30 | "bluefs_db_partition_path": "/dev/dm-1", 31 | "bluefs_db_rotational": "1", 32 | "bluefs_db_size": "21470642176", 33 | "bluefs_db_type": "hdd", 34 | "bluefs_single_shared_device": "1", 35 | "bluestore_bdev_access_mode": "blk", 36 | "bluestore_bdev_block_size": "4096", 37 | "bluestore_bdev_dev": "252:1", 38 | "bluestore_bdev_dev_node": "dm-1", 39 | "bluestore_bdev_driver": "KernelDevice", 40 | "bluestore_bdev_model": "", 41 | "bluestore_bdev_partition_path": "/dev/dm-1", 42 | "bluestore_bdev_rotational": "1", 43 | "bluestore_bdev_size": "21470642176", 44 | "bluestore_bdev_type": "hdd", 45 | "ceph_version": "ceph version 12.2.12 (1436006594665279fe734b4c15d7e08c13ebd777) luminous (stable)", 46 | "cpu": "Intel Xeon E312xx (Sandy Bridge, IBRS update)", 47 | "default_device_class": "hdd", 48 | "distro": "centos", 49 | "distro_description": "CentOS Linux 7 (Core)", 50 | "distro_version": "7", 51 | "front_addr": "192.168.82.79:6802/12775", 52 | "front_iface": "eth1", 53 | "hb_back_addr": "192.168.83.79:6803/12775", 54 | "hb_front_addr": "192.168.82.79:6803/12775", 55 | "hostname": "ceph3-test", 56 | "journal_rotational": "1", 57 | "kernel_description": "#1 SMP Wed Jun 5 14:26:44 UTC 2019", 58 | "kernel_version": "3.10.0-957.21.2.el7.x86_64", 59 | "mem_swap_kb": "2097148", 60 | "mem_total_kb": "1882080", 61 | "os": "Linux", 62 | "osd_data": "/var/lib/ceph/osd/ceph-4", 63 | "osd_objectstore": "bluestore", 64 | "rotational": "1" 65 | } 66 | ``` 67 | 68 | Đã được kiểm chứng : 2019-06-15 CanhDX Nhân Hòa Cloud Team 69 | 70 | Môi trường 71 | - CentOS 7 1810 cùng version 72 | - Ceph 12.2.12 cùng version 73 | - Interface name giống nhau 74 | - IP planning giống nhau 75 | - .. -------------------------------------------------------------------------------- /docs/operating/ceph-module-balancer.md: -------------------------------------------------------------------------------- 1 | # Module Balancer 2 | 3 | Module Balancer là module được tích hợp vào Ceph từ bản 12.x.x . Từ bản này thì module này mới hoạt động ổn định 4 | 5 | Các OSD lưu trữ dữ liệu không đều 6 | 7 | Việc add ổ vào làm dữ liệu lưu trữ càng lệch 8 | 9 | Các câu lệnh 10 | ```sh 11 | 12 | ``` 13 | 14 | ```sh 15 | 16 | ``` 17 | 18 | > Không giải quyết được dứt điểm vấn đề đồng bộ dữ liệu 19 | 20 | # Các bước thực hiện 21 | 22 | 23 | 24 | # Tài liệu tham khảo 25 | [Balancer Ceph trên Proxmox](https://forum.proxmox.com/threads/ceph-balancing-osd-distribution-new-in-luminous.43328/) -------------------------------------------------------------------------------- /docs/operating/ceph-vs-client-linux.md: -------------------------------------------------------------------------------- 1 | ## Mount và sử dụng RBD images 2 | 3 | Mục tiêu: 4 | - Kết nối được Client vào cụm Ceph 5 | - Thao tác cơ bản với extend dung lượng disk 6 | 7 | ## Chuẩn bị và môi trường LAB (4 Node) 8 | 9 | - 1 cụm cài đặt Ceph 3 node 10 | - Phiên bản cài đặt trong bài lab : [Ceph luminous](https://github.com/uncelvel/tutorial-ceph/blob/master/docs/setup/ceph-luminous-cephuser.md) 11 | - 1 Node Ceph Client Cài đặt CentOS7 12 | 13 | ## Mô hình 14 | 15 | - Sử dụng mô hình 16 |

17 | 18 |

19 | 20 | 21 | ## IP Planning 22 | 23 | - Phân hoạch IP cho các máy chủ trong mô hình trên 24 |

25 | 26 |

27 | 28 | 29 | ## Chuẩn bị đấu nối 30 | 31 | Trên node Ceph cài đặt Ceph-Client 32 | ```sh 33 | yum install ceph-common -y 34 | ``` 35 | 36 | > Yêu cầu Client có đấu nối trực tiếp vào network `ceph-public` 37 | 38 | Đứng trên node Ceph, copy key và config sang node Client 39 | ```sh 40 | cd /ceph-deploy 41 | scp ceph.conf root@10.10.10.64:/etc/ceph/ 42 | scp ceph.client.admin.keyring root@10.10.10.64:/etc/ceph/ 43 | ``` 44 | > ## Key admin là chúng ta sử dụng tạm thời 45 | 46 | Đứng trên Node Client kiểm tra kết nối Ceph 47 | ```sh 48 | ceph -s 49 | ``` 50 | 51 | ## Tạo pool và images 52 | 53 | Khỏi tạo pool cho cụm Ceph sử dụng [Công cụ](https://ceph.com/pgcalc/) 54 | 55 | ![](../../images/pg_calc.png) 56 | 57 | Sẽ gen ra 1 câu lệnh create như sau 58 | ```sh 59 | ## Note: The 'while' loops below pause between pools to allow all 60 | ## PGs to be created. This is a safety mechanism to prevent 61 | ## saturating the Monitor nodes. 62 | ## ------------------------------------------------------------------- 63 | 64 | ceph osd pool create images 1024 65 | ceph osd pool set images size 2 66 | while [ $(ceph -s | grep creating -c) -gt 0 ]; do echo -n .;sleep 1; done 67 | ``` 68 | 69 | Kiểm tra 70 | ```sh 71 | ceph df 72 | ``` 73 | 74 | Tạo images tên là `volume01` trong pool `images` 75 | ```sh 76 | rbd create images/volume01 --size 50G 77 | rbd info images/volume01 78 | ``` 79 | 80 | ## Cấu hình và start dịch vụ rbdmap 81 | 82 | Đứng trên node `ceph01` thực hiện bỏ các feature của image 83 | ```sh 84 | rbd feature disable images/volume01 exclusive-lock object-map fast-diff deep-flatten 85 | ``` 86 | 87 | Quay lại node `Client` bổ sung config rbdmap 88 | ```sh 89 | echo "images/volume01 id=admin,keyring=/etc/ceph/ceph.client.admin.keyring" >> /etc/ceph/rbdmap 90 | ``` 91 | 92 | Enable mode hỗ trợ rbd 93 | ```sh 94 | sudo modprobe rbd 95 | ``` 96 | 97 | Khởi động dịch vụ rbdmap 98 | ```sh 99 | systemctl start rbdmap && systemctl enable rbdmap 100 | ``` 101 | 102 | Kiểm tra images được mount theo câu lệnh 103 | ```sh 104 | lsblk 105 | ``` 106 | 107 | ## Sử dụng Block RBD được mount 108 | 109 | Đối với block `rbd0` được tạo chúng ta có thể sử dụng nó như một ổ đĩa bình thường 110 | 111 | - Format ext4 112 | - Format lvm 113 | - ... 114 | 115 | VD: Sử dụng `ext4` 116 | 117 | Tạo thư mục để lưu trữ 118 | ```sh 119 | mkdir -p /data 120 | ``` 121 | 122 | Format disk 123 | ```sh 124 | mkfs.ext4 -F /dev/rbd0 125 | ``` 126 | 127 | Mount `/dev/rbd0` vào folder vừa tạo 128 | ```sh 129 | mount /dev/rbd0 /data 130 | ``` 131 | 132 | Lấy ID của device `rbd0` 133 | ```sh 134 | blkid 135 | ``` 136 | 137 | Bổ sung `fstab` để tự động mount lúc khởi động 138 | ```sh 139 | echo "UUID=bfdf0e00-1d73-4bd9-a43e-32c408dbfdc9 /data ext4 noauto 0 0" >> /etc/fstab 140 | ``` 141 | 142 | > ## Lưu ý: chế độ để là `noauto` vì service rbdmap cần phải start OK thì mới thấy được ổ đĩa để mount 143 | 144 | Nếu sử dụng LVM thì cần bổ sung vào `lvm.conf` như sau 145 | ```sh 146 | # By default we accept every block device: 147 | types = [ "rbd", 1024 ] 148 | ``` 149 | 150 | ## Hoàn tất bài lab 151 | Chúng ta có thể sử dụng thêm các thao tác với images như snapshot.... -------------------------------------------------------------------------------- /docs/operating/ceph-vs-openstack.md: -------------------------------------------------------------------------------- 1 | # OpenStack tích hợp với Ceph 2 | 3 | [1. Chuẩn bị mô hình](#1) 4 | 5 | [2. Tích hợp Glance(Images)](#2) 6 | 7 | [3. Tích hợp Cinder(Volumes)](#3) 8 | 9 | [4. Tích hợp Nova(Compute)](#4) 10 | 11 | Mô hình cụm Ceph kết nối OpenStack đầy đủ sẽ bao gồm cụm Ceph và Cụm OpenStack HA và Monitor node 12 | 13 | ![](../../images/mohinh-ops-ceph.png) 14 | 15 | Đối với OpenStack có 3 thành phần có thể kết nối được với Ceph. 16 | 17 | - Images: OpenStack Glance quản lý các image cho các VM, lưu trữ các images dưới dạng nhị phân. 18 | - Volumes: Các Block Devices được sử dụng để boot các VM hoặc là các ổ đĩa đính kèm thêm cho VM 19 | - Guest Disk: Mặc định khi tạo VM từ images thì disk của nó được lưu trữ dưới dạng filesystems (thường là /var/lib/nova/instances/uuid/). 20 | 21 | Từ bản sau Hanava thì có thể khởi động mọi VM lưu trữ trực tiếp trong Ceph mà không cần sử dụng Cinder. Điều này thuận tiện cho việc di chuyển các VM từ node compute này sang node compute khác gần như tức thì. Chúng ta có thể sử dụng Glance để lưu trữ các images trên Ceph Block Device, và chúng ta có thể khởi động 1 VM bằng cách sử dụng 1 bản sao của 1 images. 22 | 23 | ## 1. Mô hình của Ceph hiện tại 24 | Cài đặt theo 1 trong các cách sau 25 | - Cụm node hoàn chỉnh (Gần giống với môi trường Product) 26 | - CephAIO (Chỉ để LAB ko khuyến cáo môi trường Product) 27 | 28 | [Cài đặt Ceph](https://github.com/uncelvel/tutorial-ceph) 29 | 30 | ## 2. Mô hình của OpenStack hiện tại 31 | Cài đặt theo 1 trong các cách sau 32 | - Cụm cài đặt Pacstack 33 | - Cụm cài đặt Manual 2node 34 | - Cụm cài đặt HA 35 | 36 | [Cài đặt OPS](https://github.com/uncelvel/tutorial-openstack/#c%C3%A0i-%C4%91%E1%BA%B7t-openstack) 37 | 38 | ## 3. Môi trường chuẩn bị 39 | 40 | Yêu cầu: Có cụm Ceph và OpenStack được cài đặt theo 2 tutorial trước đó (Trong tutorial này sử dụng Ceph 3 node + OpenStack manual 3 node) 41 | 42 | - Cụm OpenStack 43 | ```sh 44 | Controller: 45 | - Manager_api_horizon_network: 10.10.10.71 46 | - Provider: 10.10.11.71 47 | - Data_VM: 10.0.12.71 48 | - Ceph-Com: 10.0.13.71 49 | 50 | Compute1: 51 | - Manager_api_horizon_network: 10.10.10.72 52 | - Provider: 10.10.11.72 53 | - Data_VM: 10.0.12.72 54 | - Ceph-Com: 10.0.13.72 55 | 56 | Compute2: 57 | - Manager_api_horizon_network: 10.10.10.73 58 | - Provider: 10.10.11.73 59 | - Data_VM: 10.0.12.73 60 | - Ceph-Com: 10.0.13.73 61 | ``` 62 | 63 | - Cụm Ceph 64 | ```sh 65 | Ceph1: 66 | - Manager_network: 10.10.10.61 67 | - Public_network(Ceph-Com): 10.10.13.61 68 | - Cluster_network(Ceph-Rep): 10.10.14.61 69 | 70 | Ceph2: 71 | - Manager_network: 10.10.10.62 72 | - Public_network(Ceph-Com): 10.10.13.62 73 | - Cluster_network(Ceph-Rep): 10.10.14.62 74 | 75 | Ceph3: 76 | - Manager_network: 10.10.10.63 77 | - Public_network(Ceph-Com): 10.10.13.63 78 | - Cluster_network(Ceph-Rep): 10.10.14.63 79 | ``` 80 | 81 | ## Cài đặt lib ceph python cho các node `Compute` và `Controller` 82 | 83 | Update repo 84 | ``` 85 | cat < /etc/yum.repos.d/ceph.repo 86 | [ceph] 87 | name=Ceph packages for $basearch 88 | baseurl=https://download.ceph.com/rpm-luminous/el7/x86_64/ 89 | enabled=1 90 | priority=2 91 | gpgcheck=1 92 | gpgkey=https://download.ceph.com/keys/release.asc 93 | 94 | [ceph-noarch] 95 | name=Ceph noarch packages 96 | baseurl=https://download.ceph.com/rpm-luminous/el7/noarch 97 | enabled=1 98 | priority=2 99 | gpgcheck=1 100 | gpgkey=https://download.ceph.com/keys/release.asc 101 | 102 | [ceph-source] 103 | name=Ceph source packages 104 | baseurl=https://download.ceph.com/rpm-luminous/el7/SRPMS 105 | enabled=0 106 | priority=2 107 | gpgcheck=1 108 | gpgkey=https://download.ceph.com/keys/release.asc 109 | EOF 110 | ``` 111 | 112 | Cài đặt `ceph-common` 113 | ``` 114 | yum update -y 115 | yum install -y python-rbd ceph-common 116 | ``` 117 | 118 | ## Tạo pool trên Ceph 119 | 120 | > Lưu ý: Có thể tính toán trước số PG khi tạo các pool bằng cách sử dụng công cụ tính toán có sẵn trên trang chủ http://ceph.com/pgcalc 121 | 122 | ```sh 123 | ceph osd pool create volumes 128 128 124 | ceph osd pool create vms 128 128 125 | ceph osd pool create images 128 128 126 | ceph osd pool create backups 128 128 127 | ``` 128 | 129 | - Khởi tạo ban đầu trước khi sử dụng pool 130 | ```sh 131 | rbd pool init volumes 132 | rbd pool init vms 133 | rbd pool init images 134 | rbd pool init backups 135 | ``` 136 | 137 | - Thực hiện copy cấu hình qua các node Controller, Compute 138 | ```sh 139 | ssh 10.10.10.71 sudo tee /etc/ceph/ceph.conf < /etc/ceph/ceph.conf 140 | ssh 10.10.10.72 sudo tee /etc/ceph/ceph.conf < /etc/ceph/ceph.conf 141 | ssh 10.10.10.73 sudo tee /etc/ceph/ceph.conf < /etc/ceph/ceph.conf 142 | ``` 143 | > Việc copy `ceph.conf` có thể sử dụng `ceph-deploy` 144 | 145 | ## 4. Cấu hình CEPH làm backend cho Glance-Images 146 | 147 | ### 4.1 Thực hiện trên Node Ceph 148 | 149 | - Tạo key `glance` 150 | ```sh 151 | cd /ceph-deploy 152 | ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images' > ceph.client.glance.keyring 153 | ``` 154 | 155 | - Chuyển key glance sang node glance (Ở đây Glance cài trên Controller) 156 | ```sh 157 | ceph auth get-or-create client.glance | ssh 10.10.10.71 sudo tee /etc/ceph/ceph.client.glance.keyring 158 | ``` 159 | 160 | ### 4.2 Thực hiện trên Node Controller 161 | 162 | - Set quyền cho các key 163 | ```sh 164 | sudo chown glance:glance /etc/ceph/ceph.client.glance.keyring 165 | 166 | sudo chmod 0640 /etc/ceph/ceph.client.glance.keyring 167 | ``` 168 | 169 | - Thêm cấu hinh `/etc/glance/glance-api.conf ` trên node Controller 170 | ```sh 171 | [DEFAULT] 172 | show_image_direct_url = True 173 | ... 174 | 175 | [glance_store] 176 | #stores = file,http 177 | #default_store = file 178 | #filesystem_store_datadir = /var/lib/glance/images/ 179 | default_store = rbd 180 | stores = file,http,rbd 181 | rbd_store_pool = images 182 | rbd_store_user = glance 183 | rbd_store_ceph_conf = /etc/ceph/ceph.conf 184 | rbd_store_chunk_size = 8 185 | ``` 186 | 187 | - Restart lại dịch vụ glance trên cả node Controller 188 | ```sh 189 | systemctl restart openstack-glance-* 190 | ``` 191 | 192 | - Source credential 193 | ```sh 194 | source admin-openrc 195 | ``` 196 | 197 | - Tạo thử images 198 | ```sh 199 | wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img 200 | openstack image create "cirros-ceph" \ 201 | --file cirros-0.3.4-x86_64-disk.img \ 202 | --disk-format qcow2 --container-format bare \ 203 | --public 204 | ``` 205 | 206 | ### 4.3 Quay lại kiểm tra trên node Ceph 207 | 208 | - Kiểm tra trên node ceph 209 | ```sh 210 | rbd -p images ls 211 | ``` 212 | 213 | ## 5. Cấu hình CEPH làm backend cho Cinder-Volume và Cinder-backup 214 | 215 | ### 5.1 Thao tác trên Node Ceph 216 | - Di chuyển vào ceph-deploy folder 217 | ```sh 218 | cd ceph-deploy 219 | ``` 220 | 221 | - Tạo key `cinder` 222 | ```sh 223 | ceph auth get-or-create client.cinder mon 'allow r, allow command "osd blacklist", allow command "blacklistop"' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=images' > ceph.client.cinder.keyring 224 | ``` 225 | 226 | - Tạo key `cinder-backup` 227 | ```sh 228 | ceph auth get-or-create client.cinder-backup mon 'profile rbd' osd 'profile rbd pool=backups' > ceph.client.cinder-backup.keyring 229 | ``` 230 | 231 | - Chuyển key `cinder` và key `cinder-backup` sang các node cài đặt Cinder(Ở đây là các node Controller) 232 | ```sh 233 | ceph auth get-or-create client.cinder | ssh 10.10.10.71 sudo tee /etc/ceph/ceph.client.cinder.keyring 234 | 235 | ceph auth get-or-create client.cinder-backup | ssh 10.10.10.71 sudo tee /etc/ceph/ceph.client.cinder-backup.keyring 236 | ``` 237 | 238 | - Chuyển key cinder sang các node Compute 239 | ```sh 240 | ceph auth get-or-create client.cinder | ssh 10.10.10.72 sudo tee /etc/ceph/ceph.client.cinder.keyring 241 | ceph auth get-or-create client.cinder | ssh 10.10.10.73 sudo tee /etc/ceph/ceph.client.cinder.keyring 242 | 243 | ceph auth get-key client.cinder | ssh 10.10.10.72 tee /root/client.cinder 244 | ceph auth get-key client.cinder | ssh 10.10.10.73 tee /root/client.cinder 245 | ``` 246 | 247 | ### 5.2 Thao tác trên Node Controller 248 | 249 | - Set quyền cho các key 250 | ```sh 251 | sudo chown cinder:cinder /etc/ceph/ceph.client.cinder* 252 | 253 | sudo chmod 0640 /etc/ceph/ceph.client.cinder* 254 | ``` 255 | 256 | ### 5.3 Thao tác trên Node Compute 257 | 258 | - Khởi tạo 1 `uuid` mới cho Cinder 259 | ```sh 260 | uuidgen 261 | ``` 262 | > Output 263 | ```sh 264 | 414ba151-4068-40c6-9d7b-84998ce6a5a6 265 | ``` 266 | > Lưu ý UUID này sẽ sử dụng chung cho các Compute nên chỉ cần tạo lần đầu tiên 267 | 268 | - Tạo file xml cho phép Ceph RBD (Rados Block Device) xác thực với libvirt thông qua `uuid` vừa tạo 269 | ```sh 270 | cat > ceph-secret.xml < 272 | 414ba151-4068-40c6-9d7b-84998ce6a5a6 273 | 274 | client.cinder secret 275 | 276 | 277 | EOF 278 | 279 | sudo virsh secret-define --file ceph-secret.xml 280 | ``` 281 | > Output 282 | ```sh 283 | Secret 414ba151-4068-40c6-9d7b-84998ce6a5a6 created 284 | ``` 285 | 286 | - Gán giá trị của `client.cinder` cho `uuid` 287 | ```sh 288 | virsh secret-set-value --secret 414ba151-4068-40c6-9d7b-84998ce6a5a6 --base64 $(cat /root/client.cinder) 289 | ``` 290 | > Output 291 | ```sh 292 | Secret value set 293 | ``` 294 | 295 | ### 5.4 Quay lại node Controller 296 | - Bổ sung thêm cấu hinh `/etc/cinder/cinder.conf` tren cac node controller 297 | > Mục [DEFAULT] bổ sung thêm, Mục [ceph] thêm mới 298 | ```sh 299 | [DEFAULT] 300 | notification_driver = messagingv2 301 | enabled_backends = ceph 302 | glance_api_version = 2 303 | backup_driver = cinder.backup.drivers.ceph 304 | backup_ceph_conf = /etc/ceph/ceph.conf 305 | backup_ceph_user = cinder-backup 306 | backup_ceph_chunk_size = 134217728 307 | backup_ceph_pool = backups 308 | backup_ceph_stripe_unit = 0 309 | backup_ceph_stripe_count = 0 310 | restore_discard_excess_bytes = true 311 | host=ceph 312 | 313 | [ceph] 314 | volume_driver = cinder.volume.drivers.rbd.RBDDriver 315 | volume_backend_name = ceph 316 | rbd_pool = volumes 317 | rbd_ceph_conf = /etc/ceph/ceph.conf 318 | rbd_flatten_volume_from_snapshot = false 319 | rbd_max_clone_depth = 5 320 | rbd_store_chunk_size = 4 321 | rados_connect_timeout = -1 322 | rbd_user = cinder 323 | rbd_secret_uuid = 414ba151-4068-40c6-9d7b-84998ce6a5a6 324 | report_discard_supported = true 325 | ``` 326 | 327 | - Enable cinder-backup và restart dịch vụ cinder 328 | ```sh 329 | systemctl enable openstack-cinder-backup.service 330 | systemctl start openstack-cinder-backup.service 331 | ``` 332 | 333 | - Restart lại dịch vụ trên Node Controller 334 | ```sh 335 | systemctl restart openstack-cinder-api.service openstack-cinder-volume.service openstack-cinder-scheduler.service openstack-cinder-backup.service 336 | ``` 337 | 338 | - Source credential 339 | ```sh 340 | source admin-openrc 341 | ``` 342 | 343 | - Tạo volume type node controller 344 | ```sh 345 | cinder type-create ceph 346 | cinder type-key ceph set volume_backend_name=ceph 347 | ``` 348 | 349 | ### 5.5 Restart lai dich vu nova-compute trên node Compute 350 | ```sh 351 | systemctl restart openstack-nova-compute 352 | ``` 353 | 354 | ## 6. Cấu hình CEPH làm backend cho Nova-Compute 355 | 356 | Mặc định các VM được tạo từ Images sẽ lưu file disk ngay chính trên Compute, Việc tích hợp này cho phép file disk này được tạo 1 symlink lưu trữ dưới Ceph thay vì lưu local. 357 | 358 | ### 6.1 Thao tác trên Node Ceph 359 | - Tạo keyring cho nova 360 | ```sh 361 | ceph auth get-or-create client.nova mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=vms, allow rx pool=images' -o /etc/ceph/ceph.client.nova.keyring 362 | ``` 363 | 364 | - Copy key `nova` sang các node Compute 365 | ```sh 366 | ceph auth get-or-create client.nova | ssh 10.10.10.72 sudo tee /etc/ceph/ceph.client.nova.keyring 367 | ceph auth get-or-create client.nova | ssh 10.10.10.73 sudo tee /etc/ceph/ceph.client.nova.keyring 368 | 369 | ceph auth get-key client.nova | ssh 10.10.10.72 tee /root/client.nova 370 | ceph auth get-key client.nova | ssh 10.10.10.73 tee /root/client.nova 371 | ``` 372 | 373 | ### 6.2 Thao tác trên Node Compute 374 | - Set quyền trên node COM 375 | ```sh 376 | chgrp nova /etc/ceph/ceph.client.nova.keyring 377 | 378 | chmod 0640 /etc/ceph/ceph.client.nova.keyring 379 | ``` 380 | 381 | - Genkey UUID 382 | ```sh 383 | uuidgen 384 | ``` 385 | > Output 386 | ```sh 387 | 805b9716-7fe8-45dd-8e1e-5dfdeff8b9be 388 | ``` 389 | > Lưu ý UUID này sẽ sử dụng chung cho các Compute nên chỉ cần tạo lần đầu tiên 390 | 391 | - Tạo file xml cho phép Ceph RBD (Rados Block Device) xác thực với libvirt thông qua `uuid` vừa tạo 392 | ```sh 393 | cat << EOF > nova-ceph.xml 394 | 395 | 805b9716-7fe8-45dd-8e1e-5dfdeff8b9be 396 | 397 | client.nova secret 398 | 399 | 400 | EOF 401 | 402 | sudo virsh secret-define --file nova-ceph.xml 403 | ``` 404 | > Output 405 | ```sh 406 | Secret 805b9716-7fe8-45dd-8e1e-5dfdeff8b9be created 407 | ``` 408 | 409 | - Gán giá trị của `client.nova` cho `uuid` 410 | ```sh 411 | virsh secret-set-value --secret 805b9716-7fe8-45dd-8e1e-5dfdeff8b9be --base64 $(cat /root/client.nova) 412 | ``` 413 | > Output 414 | ```sh 415 | Secret value set 416 | ``` 417 | 418 | - Chỉnh sửa nova.conf trên COM `/etc/nova/nova.conf` 419 | > Bổ sung nội dung phần config [libvirt] 420 | ```sh 421 | [libvirt] 422 | images_rbd_pool=vms 423 | images_type=rbd 424 | rbd_secret_uuid=805b9716-7fe8-45dd-8e1e-5dfdeff8b9be 425 | rbd_user=nova 426 | images_rbd_ceph_conf = /etc/ceph/ceph.conf 427 | ``` 428 | 429 | - Restart service 430 | ```sh 431 | systemctl restart openstack-nova-compute 432 | ``` 433 | 434 | - Tạo máy ảo (Tạo boot từ images) và kiểm tra 435 | ```sh 436 | rbd -p vms ls 437 | rbd -p compute info c0f90bd2-9f8a_disk 438 | ``` 439 | 440 | # Tài liệu tham khảo 441 | 442 | [1. Nguyên tắc sao lưu dữ liệu của Cinder int32bit's Blog](http://int32bit.me/2017/03/30/Cinder%E6%95%B0%E6%8D%AE%E5%8D%B7%E5%A4%87%E4%BB%BD%E5%8E%9F%E7%90%86%E5%92%8C%E5%AE%9E%E8%B7%B5/) 443 | 444 | [2. OpenStack backup Sebatian-han](https://www.sebastien-han.fr/blog/2015/02/17/openstack-and-backup/) 445 | 446 | [3. OpenStack backup Sebatian-han2](https://www.sebastien-han.fr/blog/2015/10/05/openstack-nova-snapshots-on-ceph-rbd/) 447 | 448 | [4. Ceph Type trong libvirt](https://libvirt.org/formatsecret.html#CephUsageType) 449 | 450 | [4.2 Set Quota cho VM2](https://wiki.openstack.org/wiki/InstanceResourceQuota) 451 | -------------------------------------------------------------------------------- /docs/operating/note.md: -------------------------------------------------------------------------------- 1 | # Note các case vận hành Ceph 2 | 3 | [Sử dụng cached WALL & DB trên SSD cho OSD](bluestore-blockwall.md) -------------------------------------------------------------------------------- /docs/other/Ceph.Cookbook.2nd.Edition.1788391063.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/docs/other/Ceph.Cookbook.2nd.Edition.1788391063.pdf -------------------------------------------------------------------------------- /docs/other/Cephalocon_Barcelona_Optimize_Ceph.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/docs/other/Cephalocon_Barcelona_Optimize_Ceph.pdf -------------------------------------------------------------------------------- /docs/other/IP-Planning.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/docs/other/IP-Planning.xlsx -------------------------------------------------------------------------------- /docs/other/weil-crush-sc06.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/docs/other/weil-crush-sc06.pdf -------------------------------------------------------------------------------- /docs/setup/ceph-dashboard.md: -------------------------------------------------------------------------------- 1 | # Thông tin Ceph-Dashboard 2 | 3 | Ceph Dashboard là một module trong services `MGR` của Ceph, mục đích ban đầu của modules này là cung cấp một giao diện trực quan để monitor trực quan hệ thống Ceph. Module này được quan tâm và phát triển khá nhanh theo từng giai đoạn 4 | 5 | ### **Trước bản Karen, Jewel ..** 6 | 7 | https://www.virtualtothecore.com/en/monitor-a-ceph-cluster-with-ceph-dash/ 8 | 9 | Cách 1: Chạy script file 10 | ```sh 11 | mkdir /cephdash 12 | cd /cephdash/ 13 | ls 14 | git clone https://github.com/Crapworks/ceph-dash.git 15 | yum install -y python-pip 16 | easy_install Jinja2 17 | ./ceph-dash/ceph-dash.py 18 | ``` 19 | > Chúng ta có thể dùng Supervisord để chạy service này 20 | 21 | Cách 1: Chạy như một virtualhost 22 | ```sh 23 | yum -y install httpd mod_wsgi mod_ssl 24 | systemctl start httpd 25 | systemctl enable httpd 26 | cd /var/www/html 27 | git clone https://github.com/Crapworks/ceph-dash.git 28 | vi /etc/httpd/conf.d/cephdash.conf 29 | 30 | ServerName ceph.cloudconnect.local 31 | 32 | RewriteEngine On 33 | RewriteCond %{REQUEST_URI} !^/server-status 34 | RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [R,L] 35 | 36 | 37 | 38 | ServerName ceph.cloudconnect.local 39 | 40 | WSGIDaemonProcess cephdash user=apache group=apache processes=1 threads=5 41 | WSGIScriptAlias / /var/www/html/ceph-dash/contrib/wsgi/cephdash.wsgi 42 | WSGIPassAuthorization On 43 | 44 | SSLEngine on 45 | SSLCertificateFile /etc/httpd/ssl/apache.crt 46 | SSLCertificateKeyFile /etc/httpd/ssl/apache.key 47 | 48 | 49 | WSGIProcessGroup cephdash 50 | WSGIApplicationGroup %{GLOBAL} 51 | Order allow,deny 52 | Allow from all 53 | 54 | 55 | mkdir /etc/httpd/ssl/ 56 | openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/ssl/apache.key -out /etc/httpd/ssl/apache.crt 57 | systemctl restart httpd.service 58 | ``` 59 | 60 | Bổ sung quyền read cho file keyring 61 | ```sh 62 | chmod +r /etc/ceph/ceph.client.admin.keyring 63 | ``` 64 | 65 |

66 | 67 |

68 | 69 | ### **Bản Luminous:** 70 | Ở bản Luminous thì Services `Ceph-mgr` cũng là một serivce yêu cầu cài đặt khi khởi tạo cụm Ceph. Dashboard ở bản Ceph Luminous thường được gọi là `Dashboard v1` được tích hợp Stable trong service MGR chúng ta chỉ việc enable lên và sử dụng 71 | 72 | Enable module dashboard 73 | ```sh 74 | ceph mgr module enable dashboard 75 | ceph mgr services 76 | ``` 77 | 78 | Thông tin đường link đăng nhập 79 | ```sh 80 | http://:7000 81 | ``` 82 |

83 | 84 |

85 | 86 | ### **Bản Mimic: ** 87 | Hay còn gọi là `Dashboard v2` ở bản này CephDashboard đã kế thừa bộ Dashboard `openATTIC` từ SUSE tích hợp thêm phần require login 88 | 89 | Enable module dashboard 90 | ```sh 91 | ceph mgr module enable dashboard 92 | ceph dashboard create-self-signed-cert 93 | ceph dashboard set-login-credentials 94 | ceph mgr services 95 | ``` 96 | 97 | Thông tin đường link đăng nhập 98 | ```sh 99 | https://:8443 100 | ``` 101 |

102 | 103 |

104 | 105 | ### **Bản Nautilus:** 106 | 107 | Cài đặt và enable module dashboard 108 | ```sh 109 | yum install ceph-mgr-dashboard -y 110 | ceph mgr module enable dashboard 111 | ceph dashboard create-self-signed-cert 112 | ceph dashboard set-login-credentials 113 | ceph mgr services 114 | ``` 115 | 116 | Thông tin đường link đăng nhập 117 | ```sh 118 | https://:8443 119 | ``` 120 |

121 | 122 |

123 | 124 | ## Các cập nhật mới trong bản Dashboard Nautilus 125 | 126 | - Multi users/roles 127 | - SSO (SAML v2) 128 | - Auditing 129 | - New landing page 130 | - I18N 131 | - Swagger REST API 132 | - OSD management 133 | - Config settings editor 134 | - Ceph pool management 135 | - EC Pool management 136 | - RBD mirroring configuration 137 | - Embedded Grafana Dashboard 138 | - CRUSH map viewer 139 | - NFS Ganesha management 140 | - ISCSI target management 141 | - RBD QoS configuration 142 | - Prometheus Alert Management 143 | - Ceph Manager Module Management 144 | 145 | ## Enable các tính năng trong trên Dashboard Nautilus 146 | 147 | ## Cluster 148 | 149 |

150 | 151 |

152 | 153 | Enable module prometheus trên node MGR 154 | ```sh 155 | ceph mgr module enable prometheus 156 | ``` 157 | 158 | Kiểm tra 159 | ```sh 160 | ceph mgr services 161 | ``` 162 |

163 | 164 |

165 | 166 | Truy cập exporter 167 |

168 | 169 |

170 | 171 | Để hiển thị được biểu đồ trên Dashboard thì chúng ta bổ sung thêm 1 node Grafana để collect và hiển thị toàn bộ metrics từ exporter này 172 | 173 |

174 | 175 |

176 | 177 |

178 | 179 |

180 | 181 | Cài đặt Grafana [TẠI ĐÂY](https://github.com/uncelvel/monitor/blob/master/grafana/docs/install.md) 182 | 183 | Cấu hình trên node Ceph để 184 | ```sh 185 | ceph dashboard set-grafana-api-url http://192.168.80.77:3000 186 | ``` 187 |

188 | 189 |

190 | 191 | 192 | Login vào Grafana và chọn `Add datasource` 193 |

194 | 195 |

196 | 197 | Chọn Datasource là `Prometheus` 198 |

199 | 200 |

201 | 202 | Điền thông tin exporter Prometheus của node Ceph và chọn `Save & Test` 203 |

204 | 205 |

206 | 207 | Hoàn tất add Datasource 208 |

209 | 210 |

211 | 212 | Đăng nhập SSH vào node Grafana và cài đặt thêm Plugins 213 | ```sh 214 | grafana-cli plugins install vonage-status-panel 215 | grafana-cli plugins install grafana-piechart-panel 216 | ``` 217 |

218 | 219 |

220 | 221 | 222 | Cấu hình `/etc/grafana/grafana.ini` bật chế độ `anonymous` 223 | ```sh 224 | [auth.anonymous] 225 | enabled = true 226 | org_name = Main Org. 227 | org_role = Viewer 228 | ``` 229 |

230 | 231 |

232 | 233 | Restart grafana-server 234 | ```sh 235 | systemctl restart grafana-server 236 | ``` 237 | 238 | Clone các file json cấu hình Dashboard từ trang chủ 239 | ```sh 240 | https://github.com/ceph/ceph/tree/master/monitoring/grafana/dashboards 241 | ``` 242 | 243 | Quay lại Grafana Dashboard tiến hành import cấu hình Dashboard 244 |

245 | 246 |

247 | 248 | 249 | Templating init failed{"err":{"data":null,"status":-1,"config":{"method":"GET","transformRequest":[null],"transformResponse":[null],"jsonpCallbackParam":"callback","silent":true,"url":"http://192.168.80.76:9283/api/v1/series?match[]=ceph_health_status&start=1561929086&end=1561950686","headers":{"Accept":"application/json, text/plain, */*"},"retry":0},"statusText":"","xhrStatus":"error"},"cancelled":true} 250 | 251 | ## Tài liệu tham khảo 252 | 253 | http://docs.ceph.com/docs/nautilus/mgr/dashboard/#enabling-the-embedding-of-grafana-dashboards 254 | 255 | 256 | ACC015642 257 | 103.101.160.82 258 | 259 | 260 | 103.28.39.217 -------------------------------------------------------------------------------- /docs/setup/ceph-luminous-aio.md: -------------------------------------------------------------------------------- 1 | ## Hướng dẫn cài đặt CEPHAIO sử dụng `ceph-deploy` 2 | 3 | ### Mục tiêu LAB 4 | - Mô hình này sử dụng 1 server cài đặt CephAIO 5 | - Host `cephaio` cài đặt `ceph-deploy`, `ceph-mon`,` ceph-osd`, `ceph-mgr` 6 | 7 | ## Chuẩn bị và môi trường LAB 8 | 9 | - OS 10 | - CentOS7 - 64 bit 11 | - 05: HDD, trong đó: 12 | - `sda`: sử dụng để cài OS 13 | - `sdb`,`sdc`,`sdd`: sử dụng làm OSD (nơi chứa dữ liệu) 14 | - 03 NICs: 15 | - `eth0`: dùng để ssh và tải gói cài đặt 16 | - `eth1`: dùng để các trao đổi thông tin giữa các node Ceph, cũng là đường Client kết nối vào 17 | - `eth2`: dùng để đồng bộ dữ liệu giữa các OSD 18 | 19 | - Phiên bản cài đặt : Ceph luminous 20 | 21 | 22 | ## Mô hình 23 | - Sử dụng mô hình 24 | 25 | ![](../../images/topol_aio.png) 26 | 27 | 28 | ## IP Planning 29 | - Phân hoạch IP cho các máy chủ trong mô hình trên 30 | 31 | ![](../../images/ip-planning1_aio.png) 32 | 33 | 34 | ## Các bước chuẩn bị 35 | 36 | - Cài đặt NTPD 37 | ```sh 38 | yum install chrony -y 39 | ``` 40 | 41 | - Enable NTPD 42 | ```sh 43 | systemctl enable --now chronyd 44 | ``` 45 | 46 | - Kiểm tra chronyd hoạt động 47 | ```sh 48 | chronyc sources -v 49 | ``` 50 | 51 | - Set hwclock 52 | ```sh 53 | hwclock --systohc 54 | ``` 55 | 56 | 57 | - Đặt hostname 58 | ```sh 59 | hostnamectl set-hostname cephaio 60 | ``` 61 | 62 | - Đặt IP cho các node 63 | ```sh 64 | systemctl disable NetworkManager 65 | systemctl enable network 66 | systemctl start network 67 | 68 | echo "Setup IP eth0" 69 | nmcli c modify eth0 ipv4.addresses 10.10.10.61/24 70 | nmcli c modify eth0 ipv4.gateway 10.10.10.1 71 | nmcli c modify eth0 ipv4.dns 8.8.8.8 72 | nmcli c modify eth0 ipv4.method manual 73 | nmcli con mod eth0 connection.autoconnect yes 74 | 75 | echo "Setup IP eth1" 76 | nmcli c modify eth1 ipv4.addresses 10.10.13.61/24 77 | nmcli c modify eth1 ipv4.method manual 78 | nmcli con mod eth1 connection.autoconnect yes 79 | 80 | echo "Setup IP eth2" 81 | nmcli c modify eth2 ipv4.addresses 10.10.14.61/24 82 | nmcli c modify eth2 ipv4.method manual 83 | nmcli con mod eth2 connection.autoconnect yes 84 | ``` 85 | 86 | - Cài đặt epel-relese và update OS 87 | ```sh 88 | yum install epel-release -y 89 | yum update -y 90 | ``` 91 | 92 | - Cài đặt CMD_log 93 | ```sh 94 | curl -Lso- https://raw.githubusercontent.com/nhanhoadocs/scripts/master/Utilities/cmdlog.sh | bash 95 | ``` 96 | 97 | - Vô hiệu hóa Selinux 98 | ```sh 99 | sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux 100 | sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 101 | ``` 102 | 103 | - Mở port cho Ceph trên Firewalld 104 | ```sh 105 | #ceph-admin 106 | systemctl start firewalld 107 | systemctl enable firewalld 108 | sudo firewall-cmd --zone=public --add-port=80/tcp --permanent 109 | sudo firewall-cmd --zone=public --add-port=2003/tcp --permanent 110 | sudo firewall-cmd --zone=public --add-port=4505-4506/tcp --permanent 111 | sudo firewall-cmd --reload 112 | 113 | # mon 114 | sudo systemctl start firewalld 115 | sudo systemctl enable firewalld 116 | sudo firewall-cmd --zone=public --add-port=6789/tcp --permanent 117 | sudo firewall-cmd --reload 118 | 119 | # osd 120 | sudo systemctl start firewalld 121 | sudo systemctl enable firewalld 122 | sudo firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent 123 | sudo firewall-cmd --reload 124 | ``` 125 | 126 | - Hoặc có thể disable firewall 127 | ```sh 128 | sudo systemctl disable firewalld 129 | sudo systemctl stop firewalld 130 | ``` 131 | 132 | - Bổ sung file hosts 133 | ```sh 134 | cat << EOF >> /etc/hosts 135 | 10.10.13.61 cephaio 136 | EOF 137 | ``` 138 | > Lưu ý network setup trong /etc/hosts chính là đường `eth1` dùng để các trao đổi thông tin giữa các node Ceph, cũng là đường Client kết nối vào 139 | 140 | - Kiểm tra kết nối 141 | ```sh 142 | ping -c 10 cephaio 143 | ``` 144 | 145 | - Khởi động lại máy 146 | ```sh 147 | init 6 148 | ``` 149 | 150 | - Bổ sung user `cephuser` 151 | ```sh 152 | sudo useradd -d /home/cephuser -m cephuser 153 | sudo passwd cephuser 154 | ```` 155 | 156 | - Cấp quyền sudo cho `cephuser` 157 | ```sh 158 | echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser 159 | sudo chmod 0440 /etc/sudoers.d/cephuser 160 | ``` 161 | 162 | ## Cài đặt Ceph thực hiện trên cephaio 163 | 164 | Bổ sung repo 165 | ```sh 166 | cat < /etc/yum.repos.d/ceph.repo 167 | [ceph] 168 | name=Ceph packages for $basearch 169 | baseurl=https://download.ceph.com/rpm-luminous/el7/x86_64/ 170 | enabled=1 171 | priority=2 172 | gpgcheck=1 173 | gpgkey=https://download.ceph.com/keys/release.asc 174 | 175 | [ceph-noarch] 176 | name=Ceph noarch packages 177 | baseurl=https://download.ceph.com/rpm-luminous/el7/noarch 178 | enabled=1 179 | priority=2 180 | gpgcheck=1 181 | gpgkey=https://download.ceph.com/keys/release.asc 182 | 183 | [ceph-source] 184 | name=Ceph source packages 185 | baseurl=https://download.ceph.com/rpm-luminous/el7/SRPMS 186 | enabled=0 187 | priority=2 188 | gpgcheck=1 189 | gpgkey=https://download.ceph.com/keys/release.asc 190 | EOF 191 | 192 | yum update -y 193 | ``` 194 | 195 | - Cài đặt `python-setuptools` 196 | ```sh 197 | yum install python-setuptools -y 198 | ``` 199 | 200 | - Cài đặt `ceph-deploy` 201 | ```sh 202 | yum install ceph-deploy -y 203 | ``` 204 | 205 | - Kiểm tra cài đặt 206 | ```sh 207 | ceph-deploy --version 208 | ``` 209 | >Kết quả như sau là đã cài đặt thành công ceph-deploy 210 | ```sh 211 | 2.0.1 212 | ``` 213 | 214 | - Tạo ssh key 215 | ```sh 216 | ssh-keygen 217 | ``` 218 | > Bấm ENTER khi có requirement 219 | 220 | 221 | - Cấu hình user ssh cho ceph-deploy 222 | ```sh 223 | cat < /root/.ssh/config 224 | Host cephaio 225 | Hostname cephaio 226 | User cephuser 227 | EOF 228 | ``` 229 | 230 | - Copy ssh key sang 231 | ```sh 232 | ssh-copy-id cephaio 233 | ``` 234 | 235 | - Tạo các thư mục `ceph-deploy` để thao tác cài đặt vận hành Cluster 236 | ```sh 237 | mkdir /ceph-deploy && cd /ceph-deploy 238 | ``` 239 | 240 | - Khởi tại file cấu hình cho cụm với node quản lý là `cephaio` 241 | ```sh 242 | ceph-deploy new cephaio 243 | ``` 244 | 245 | - Kiểm tra lại thông tin folder `ceph-deploy` 246 | ```sh 247 | [cephuser@cephaio ceph-deploy]# ls -lah 248 | total 12K 249 | drwxr-xr-x 2 root root 75 Jan 31 16:31 . 250 | dr-xr-xr-x. 18 root root 243 Jan 31 16:29 .. 251 | -rw-r--r-- 1 root root 2.9K Jan 31 16:31 ceph-deploy-ceph.log 252 | -rw-r--r-- 1 root root 195 Jan 31 16:31 ceph.conf 253 | -rw------- 1 root root 73 Jan 31 16:31 ceph.mon.keyring 254 | [cephuser@cephaio ceph-deploy]# 255 | ``` 256 | Trong đó: 257 | 258 | + `ceph.conf` : file config được tự động khởi tạo 259 | + `ceph-deploy-ceph.log` : file log của toàn bộ thao tác đối với việc sử dụng lệnh `ceph-deploy` 260 | + `ceph.mon.keyring` : Key monitoring được ceph sinh ra tự động để khởi tạo Cluster 261 | 262 | 263 | - Chúng ta sẽ bổ sung thêm vào file `ceph.conf` một vài thông tin cơ bản như sau: 264 | > Chú ý: Public network là đường Ceph-Com trong file quy hoạch 265 | > - Public network là đường Ceph-Com trong file quy hoạch 266 | > - Cluster network là đường Ceph-Replicate trong file quy hoạch 267 | 268 | ```sh 269 | cat << EOF >> ceph.conf 270 | osd pool default size = 2 271 | osd pool default min size = 1 272 | osd pool default pg num = 128 273 | osd pool default pgp num = 128 274 | 275 | osd crush chooseleaf type = 0 276 | 277 | public network = 10.10.13.0/24 278 | cluster network = 10.10.14.0/24 279 | EOF 280 | ``` 281 | - Bổ sung thêm định nghĩa 282 | + `public network` : Đường trao đổi thông tin giữa các node Ceph và cũng là đường client kết nối vào 283 | + `cluster network` : Đường đồng bộ dữ liệu 284 | - Bổ sung thêm `default size replicate` 285 | - Bổ sung thêm `default pg num` 286 | 287 | 288 | - Cài đặt ceph trên toàn bộ các node ceph 289 | ```sh 290 | ceph-deploy install --release luminous cephaio 291 | ``` 292 | 293 | - Kiểm tra sau khi cài đặt 294 | ```sh 295 | sudo ceph -v 296 | ``` 297 | > Kết quả như sau là đã cài đặt thành công ceph trên node 298 | ```sh 299 | ceph version 12.2.9 (9e300932ef8a8916fb3fda78c58691a6ab0f4217) luminous (stable) 300 | ``` 301 | 302 | - Khởi tạo cluster với các node `mon` (Monitor-quản lý) dựa trên file `ceph.conf` 303 | ```sh 304 | ceph-deploy mon create-initial 305 | ``` 306 | 307 | - Sau khi thực hiện lệnh phía trên sẽ sinh thêm ra 05 file : `ceph.bootstrap-mds.keyring`, `ceph.bootstrap-mgr.keyring`, `ceph.bootstrap-osd.keyring`, `ceph.client.admin.keyring` và `ceph.bootstrap-rgw.keyring`. Quan sát bằng lệnh `ll -alh` 308 | 309 | ```sh 310 | [cephuser@cephaio ceph-deploy]# ls -lah 311 | total 348K 312 | drwxr-xr-x 2 root root 244 Feb 1 11:40 . 313 | dr-xr-xr-x. 18 root root 243 Feb 1 11:29 .. 314 | -rw-r--r-- 1 root root 258K Feb 1 11:40 ceph-deploy-ceph.log 315 | -rw------- 1 root root 113 Feb 1 11:40 ceph.bootstrap-mds.keyring 316 | -rw------- 1 root root 113 Feb 1 11:40 ceph.bootstrap-mgr.keyring 317 | -rw------- 1 root root 113 Feb 1 11:40 ceph.bootstrap-osd.keyring 318 | -rw------- 1 root root 113 Feb 1 11:40 ceph.bootstrap-rgw.keyring 319 | -rw------- 1 root root 151 Feb 1 11:40 ceph.client.admin.keyring 320 | -rw-r--r-- 1 root root 195 Feb 1 11:29 ceph.conf 321 | -rw------- 1 root root 73 Feb 1 11:29 ceph.mon.keyring 322 | ``` 323 | 324 | - Để node `cephaio` có thể thao tác với cluster chúng ta cần gán cho node `cephaio` với quyền admin bằng cách bổ sung cho node này `admin.keying` 325 | ```sh 326 | ceph-deploy admin cephaio 327 | ``` 328 | > Kiểm tra bằng lệnh 329 | ```sh 330 | [cephuser@cephaio ceph-deploy]# sudo ceph -s 331 | cluster: 332 | id: 39d1a369-bf54-8907-d49b-490a771ac0e2 333 | health: HEALTH_OK 334 | 335 | services: 336 | mon: 1 daemons, quorum cephaio 337 | mgr: no daemons active 338 | osd: 0 osds: 0 up, 0 in 339 | 340 | data: 341 | pools: 0 pools, 0 pgs 342 | objects: 0 objects, 0 B 343 | usage: 0 B used, 0 B / 0 B avail 344 | pgs: 345 | ``` 346 | 347 | ## Khởi tạo MGR 348 | 349 | Ceph-mgr là thành phần cài đặt yêu cầu cần khởi tạo từ bản Luminous, có thể cài đặt trên nhiều node hoạt động theo cơ chế `Active-Passive` 350 | 351 | - Cài đặt ceph-mgr trên cephaio 352 | ```sh 353 | ceph-deploy mgr create cephaio 354 | ``` 355 | 356 | - Kiểm tra cài đặt 357 | ```sh 358 | [cephuser@cephaio ceph-deploy]# sudo ceph -s 359 | cluster: 360 | id: 39d1a369-bf54-8907-d49b-490a771ac0e2 361 | health: HEALTH_OK 362 | 363 | services: 364 | mon: 1 daemons, quorum cephaio 365 | mgr: cephaio(active) 366 | osd: 0 osds: 0 up, 0 in 367 | 368 | data: 369 | pools: 0 pools, 0 pgs 370 | objects: 0 objects, 0 B 371 | usage: 0 B used, 0 B / 0 B avail 372 | pgs: 373 | ``` 374 | 375 | - Ceph-mgr hỗ trợ dashboard để quan sát trạng thái của cluster, Enable mgr dashboard trên host cephaio 376 | 377 | ```sh 378 | sudo ceph mgr module enable dashboard 379 | sudo ceph mgr services 380 | ``` 381 | 382 | - Truy cập vào mgr dashboard với username và password vừa đặt ở phía trên để kiểm tra 383 | ```sh 384 | http://:7000 385 | ``` 386 | ![](../../images/dashboard-l-aio.png) 387 | 388 | 389 | ## Khởi tạo OSD 390 | 391 | Tạo OSD thông qua ceph-deploy tại host cephaio 392 | 393 | - Trên cephaio, dùng ceph-deploy để partition ổ cứng OSD, thay `cephaio` bằng hostname của host chứa OSD 394 | ```sh 395 | ceph-deploy disk zap cephaio /dev/sdb 396 | ``` 397 | 398 | - Tạo OSD với ceph-deploy 399 | ```sh 400 | ceph-deploy osd create --data /dev/sdb cephaio 401 | ``` 402 | 403 | - Kiểm tra osd vừa tạo bằng lệnh 404 | ```sh 405 | sudo ceph osd tree 406 | ``` 407 | 408 | - Kiểm tra ID của OSD bằng lệnh 409 | ```sh 410 | lsblk 411 | ``` 412 | 413 | Kết quả: 414 | ```sh 415 | sdb 8:112 0 39G 0 disk 416 | └─ceph--42804049--4734--4a87--b776--bfad5d382114-osd--data--e6346e12--c312--4ccf--9b5f--0efeb61d0144 253:5 0 39G 0 lvm /var/lib/ceph/osd/ceph-0 417 | ``` 418 | 419 | - Thực hiện thao tác trên tương tự cho ổ `sdc` và `sdd` 420 | 421 | - Điều chỉnh Crushmap để có thể Replicate trên OSD thay vì trên HOST 422 | ```sh 423 | cd /home/cephuser/ceph-deploy/ 424 | sudo ceph osd getcrushmap -o crushmap 425 | sudo crushtool -d crushmap -o crushmap.decom 426 | sudo sed -i 's|step choose firstn 0 type osd|step chooseleaf firstn 0 type osd|g' crushmap.decom 427 | sudo crushtool -c crushmap.decom -o crushmap.new 428 | sudo ceph osd setcrushmap -i crushmap.new 429 | ``` 430 | 431 | ## Kiểm tra 432 | Thực hiện trên cephaio 433 | - Kiểm tra trạng thái của CEPH sau khi cài 434 | ```sh 435 | sudo ceph -s 436 | ``` 437 | 438 | - Kết quả của lệnh trên như sau: 439 | ```sh 440 | cephuser@cephaio:~/my-cluster$ sudo ceph -s 441 | cluster: 442 | id: 39d1a369-bf54-8907-d49b-490a771ac0e2 443 | health: HEALTH_OK 444 | 445 | services: 446 | mon: 1 daemons, quorum cephaio 447 | mgr: cephaio(active) 448 | osd: 3 osds: 3 up, 3 in 449 | 450 | data: 451 | pools: 0 pools, 0 pgs 452 | objects: 0 objects, 0 bytes 453 | usage: 3180 MB used, 116 GB / 119 GB avail 454 | pgs: 455 | ``` 456 | 457 | - Nếu có dòng `health HEALTH_OK` thì việc cài đặt đã ok. 458 | -------------------------------------------------------------------------------- /docs/setup/ceph-luminous.md: -------------------------------------------------------------------------------- 1 | ## Hướng dẫn cài đặt CEPH sử dụng `ceph-deploy` 2 | 3 | ### Mục tiêu LAB 4 | - Mô hình này sử dụng 3 server, trong đó: 5 | - Host `ceph01` cài đặt `ceph-deploy`, `ceph-mon`,` ceph-osd`, `ceph-mgr` 6 | - Host `ceph02` cài đặt `ceph-osd` 7 | - Host `ceph03` cài đặt `ceph-osd` 8 | - Mô hình khá cơ bản cho việc áp dụng vào môi trường Product 9 | 10 | ## Chuẩn bị và môi trường LAB (3 Node) 11 | 12 | - OS 13 | - CentOS7 - 64 bit 14 | - 05: HDD, trong đó: 15 | - `sda`: sử dụng để cài OS 16 | - `sdb`,`sdc`,`sdd`: sử dụng làm OSD (nơi chứa dữ liệu) 17 | - 03 NICs: 18 | - `eth0`: dùng để ssh và tải gói cài đặt 19 | - `eth1`: dùng để các trao đổi thông tin giữa các node Ceph, cũng là đường Client kết nối vào 20 | - `eth2`: dùng để đồng bộ dữ liệu giữa các OSD 21 | 22 | - Phiên bản cài đặt : Ceph luminous 23 | 24 | 25 | ## Mô hình 26 | - Sử dụng mô hình 27 | 28 | ![](../../images/topol.png) 29 | 30 | 31 | ## IP Planning 32 | - Phân hoạch IP cho các máy chủ trong mô hình trên 33 | 34 | ![](../../images/ip-planning1.png) 35 | 36 | 37 | ## Các bước chuẩn bị trên từng Server 38 | 39 | - Cài đặt NTPD 40 | ```sh 41 | yum install chrony -y 42 | ``` 43 | 44 | - Enable NTPD 45 | ```sh 46 | systemctl enable --now chronyd 47 | ``` 48 | 49 | - Kiểm tra chronyd hoạt động 50 | ```sh 51 | chronyc sources -v 52 | ``` 53 | 54 | - Set hwclock 55 | ```sh 56 | hwclock --systohc 57 | ``` 58 | 59 | - Đặt hostname 60 | ```sh 61 | hostnamectl set-hostname ceph01 62 | ``` 63 | 64 | - Đặt IP cho các node 65 | ```sh 66 | systemctl disable NetworkManager 67 | systemctl enable network 68 | systemctl start network 69 | 70 | echo "Setup IP eth0" 71 | nmcli c modify eth0 ipv4.addresses 10.10.10.61/24 72 | nmcli c modify eth0 ipv4.gateway 10.10.10.1 73 | nmcli c modify eth0 ipv4.dns 8.8.8.8 74 | nmcli c modify eth0 ipv4.method manual 75 | nmcli con mod eth0 connection.autoconnect yes 76 | 77 | echo "Setup IP eth1" 78 | nmcli c modify eth1 ipv4.addresses 10.10.13.61/24 79 | nmcli c modify eth1 ipv4.method manual 80 | nmcli con mod eth1 connection.autoconnect yes 81 | 82 | echo "Setup IP eth2" 83 | nmcli c modify eth2 ipv4.addresses 10.10.14.61/24 84 | nmcli c modify eth2 ipv4.method manual 85 | nmcli con mod eth2 connection.autoconnect yes 86 | ``` 87 | 88 | - Cài đặt epel-relese và update OS 89 | ```sh 90 | yum install epel-release -y 91 | yum update -y 92 | ``` 93 | 94 | - Cài đặt CMD_log 95 | ```sh 96 | curl -Lso- https://raw.githubusercontent.com/nhanhoadocs/scripts/master/Utilities/cmdlog.sh | bash 97 | ``` 98 | 99 | - Bổ sung user `cephuser` 100 | ```sh 101 | sudo useradd -d /home/cephuser -m cephuser 102 | sudo passwd cephuser 103 | ``` 104 | 105 | - Cấp quyền sudo cho `cephuser` 106 | ```sh 107 | echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser 108 | sudo chmod 0440 /etc/sudoers.d/cephuser 109 | ``` 110 | 111 | - Vô hiệu hóa Selinux 112 | ```sh 113 | sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux 114 | sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 115 | ``` 116 | 117 | - Mở port cho Ceph trên Firewalld 118 | ```sh 119 | #ceph-admin 120 | systemctl start firewalld 121 | systemctl enable firewalld 122 | sudo firewall-cmd --zone=public --add-port=80/tcp --permanent 123 | sudo firewall-cmd --zone=public --add-port=2003/tcp --permanent 124 | sudo firewall-cmd --zone=public --add-port=4505-4506/tcp --permanent 125 | sudo firewall-cmd --reload 126 | 127 | # mon 128 | sudo systemctl start firewalld 129 | sudo systemctl enable firewalld 130 | sudo firewall-cmd --zone=public --add-port=6789/tcp --permanent 131 | sudo firewall-cmd --reload 132 | 133 | # osd 134 | sudo systemctl start firewalld 135 | sudo systemctl enable firewalld 136 | sudo firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent 137 | sudo firewall-cmd --reload 138 | ``` 139 | 140 | - Hoặc có thể disable firewall 141 | ```sh 142 | sudo systemctl disable firewalld 143 | sudo systemctl stop firewalld 144 | ``` 145 | 146 | - Bổ sung file hosts 147 | ```sh 148 | cat << EOF >> /etc/hosts 149 | 10.10.13.61 ceph01 150 | 10.10.13.62 ceph02 151 | 10.10.13.63 ceph03 152 | EOF 153 | ``` 154 | > Lưu ý network setup trong /etc/hosts chính là đường `eth1` dùng để các trao đổi thông tin giữa các node Ceph, cũng là đường Client kết nối vào 155 | 156 | - Kiểm tra kết nối 157 | ```sh 158 | ping -c 10 ceph01 159 | ``` 160 | 161 | - Khởi động lại máy 162 | ```sh 163 | init 6 164 | ``` 165 | 166 | > Các server ceph02 và ceph03 thực hiện tương tự 167 | 168 | ## Cài đặt Ceph 169 | 170 | Bổ sung repo cho ceph trên tất cả các node 171 | ```sh 172 | cat < /etc/yum.repos.d/ceph.repo 173 | [ceph] 174 | name=Ceph packages for $basearch 175 | baseurl=https://download.ceph.com/rpm-luminous/el7/x86_64/ 176 | enabled=1 177 | priority=2 178 | gpgcheck=1 179 | gpgkey=https://download.ceph.com/keys/release.asc 180 | 181 | [ceph-noarch] 182 | name=Ceph noarch packages 183 | baseurl=https://download.ceph.com/rpm-luminous/el7/noarch 184 | enabled=1 185 | priority=2 186 | gpgcheck=1 187 | gpgkey=https://download.ceph.com/keys/release.asc 188 | 189 | [ceph-source] 190 | name=Ceph source packages 191 | baseurl=https://download.ceph.com/rpm-luminous/el7/SRPMS 192 | enabled=0 193 | priority=2 194 | gpgcheck=1 195 | gpgkey=https://download.ceph.com/keys/release.asc 196 | EOF 197 | 198 | yum update -y 199 | ``` 200 | 201 | Các bước ở dưới được thực hiện toàn toàn trên Node `ceph01` 202 | 203 | - Cài đặt `python-setuptools` 204 | ```sh 205 | yum install python-setuptools -y 206 | ``` 207 | 208 | - Cài đặt `ceph-deploy` 209 | ```sh 210 | yum install ceph-deploy -y 211 | ``` 212 | 213 | - Kiểm tra cài đặt 214 | ```sh 215 | ceph-deploy --version 216 | ``` 217 | >Kết quả như sau là đã cài đặt thành công ceph-deploy 218 | ```sh 219 | 2.0.1 220 | ``` 221 | 222 | - Tạo ssh key 223 | ```sh 224 | ssh-keygen 225 | ``` 226 | > Bấm ENTER khi có requirement 227 | 228 | 229 | - Cấu hình user ssh cho ceph-deploy 230 | ```sh 231 | cat < /root/.ssh/config 232 | Host ceph01 233 | Hostname ceph01 234 | User cephuser 235 | Host ceph02 236 | Hostname ceph02 237 | User cephuser 238 | Host ceph03 239 | Hostname ceph03 240 | User cephuser 241 | EOF 242 | ``` 243 | 244 | - Copy ssh key sang các node khác 245 | ```sh 246 | ssh-copy-id ceph01 247 | ssh-copy-id ceph02 248 | ssh-copy-id ceph03 249 | ``` 250 | 251 | - Tạo các thư mục `ceph-deploy` để thao tác cài đặt vận hành Cluster 252 | ```sh 253 | mkdir /ceph-deploy && cd /ceph-deploy 254 | ``` 255 | 256 | - Khởi tại file cấu hình cho cụm với node quản lý là `ceph01` 257 | ```sh 258 | ceph-deploy new ceph01 ceph02 ceph03 259 | ``` 260 | 261 | - Kiểm tra lại thông tin folder `ceph-deploy` 262 | ```sh 263 | [root@ceph01 ceph-deploy]# ls -lah 264 | total 12K 265 | drwxr-xr-x 2 root root 75 Jan 31 16:31 . 266 | dr-xr-xr-x. 18 root root 243 Jan 31 16:29 .. 267 | -rw-r--r-- 1 root root 2.9K Jan 31 16:31 ceph-deploy-ceph.log 268 | -rw-r--r-- 1 root root 195 Jan 31 16:31 ceph.conf 269 | -rw------- 1 root root 73 Jan 31 16:31 ceph.mon.keyring 270 | [root@ceph01 ceph-deploy]# 271 | ``` 272 | - `ceph.conf` : file config được tự động khởi tạo 273 | - `ceph-deploy-ceph.log` : file log của toàn bộ thao tác đối với việc sử dụng lệnh `ceph-deploy` 274 | - `ceph.mon.keyring` : Key monitoring được ceph sinh ra tự động để khởi tạo Cluster 275 | 276 | - Chúng ta sẽ bổ sung thêm vào file `ceph.conf` một vài thông tin cơ bản như sau: 277 | ```sh 278 | cat << EOF >> /ceph-deploy/ceph.conf 279 | osd pool default size = 2 280 | osd pool default min size = 1 281 | osd pool default pg num = 128 282 | osd pool default pgp num = 128 283 | 284 | osd crush chooseleaf type = 1 285 | 286 | public network = 10.10.13.0/24 287 | cluster network = 10.10.14.0/24 288 | EOF 289 | ``` 290 | - Bổ sung thêm định nghĩa 291 | + `public network` : Đường trao đổi thông tin giữa các node Ceph và cũng là đường client kết nối vào 292 | + `cluster network` : Đường đồng bộ dữ liệu 293 | - Bổ sung thêm `default size replicate` 294 | - Bổ sung thêm `default pg num` 295 | 296 | 297 | - Cài đặt ceph trên toàn bộ các node ceph 298 | ```sh 299 | ceph-deploy install --release luminous ceph01 ceph02 ceph03 300 | ``` 301 | 302 | - Kiểm tra sau khi cài đặt 303 | ```sh 304 | ceph -v 305 | ``` 306 | > Kết quả như sau là đã cài đặt thành công ceph trên node 307 | ```sh 308 | ceph version 12.2.9 (9e300932ef8a8916fb3fda78c58691a6ab0f4217) luminous (stable) 309 | ``` 310 | 311 | - Khởi tạo cluster với các node `mon` (Monitor-quản lý) dựa trên file `ceph.conf` 312 | ```sh 313 | ceph-deploy mon create-initial 314 | ``` 315 | 316 | - Sau khi thực hiện lệnh phía trên sẽ sinh thêm ra 05 file : `ceph.bootstrap-mds.keyring`, `ceph.bootstrap-mgr.keyring`, `ceph.bootstrap-osd.keyring`, `ceph.client.admin.keyring` và `ceph.bootstrap-rgw.keyring`. Quan sát bằng lệnh `ll -alh` 317 | 318 | ```sh 319 | [root@ceph01 ceph-deploy]# ls -lah 320 | total 348K 321 | drwxr-xr-x 2 root root 244 Feb 1 11:40 . 322 | dr-xr-xr-x. 18 root root 243 Feb 1 11:29 .. 323 | -rw-r--r-- 1 root root 258K Feb 1 11:40 ceph-deploy-ceph.log 324 | -rw------- 1 root root 113 Feb 1 11:40 ceph.bootstrap-mds.keyring 325 | -rw------- 1 root root 113 Feb 1 11:40 ceph.bootstrap-mgr.keyring 326 | -rw------- 1 root root 113 Feb 1 11:40 ceph.bootstrap-osd.keyring 327 | -rw------- 1 root root 113 Feb 1 11:40 ceph.bootstrap-rgw.keyring 328 | -rw------- 1 root root 151 Feb 1 11:40 ceph.client.admin.keyring 329 | -rw-r--r-- 1 root root 195 Feb 1 11:29 ceph.conf 330 | -rw------- 1 root root 73 Feb 1 11:29 ceph.mon.keyring 331 | ``` 332 | 333 | - Để node `ceph01` có thể thao tác với cluster chúng ta cần gán cho node `ceph01` với quyền admin bằng cách bổ sung cho node này `admin.keying` 334 | ```sh 335 | ceph-deploy admin ceph01 336 | ``` 337 | > Kiểm tra bằng lệnh 338 | ```sh 339 | [root@ceph01 ceph-deploy]# ceph -s 340 | cluster: 341 | id: 39d1a369-bf54-8907-d49b-490a771ac0e2 342 | health: HEALTH_OK 343 | 344 | services: 345 | mon: 1 daemons, quorum ceph01 346 | mgr: no daemons active 347 | osd: 0 osds: 0 up, 0 in 348 | 349 | data: 350 | pools: 0 pools, 0 pgs 351 | objects: 0 objects, 0 B 352 | usage: 0 B used, 0 B / 0 B avail 353 | pgs: 354 | ``` 355 | 356 | ## Khởi tạo MGR 357 | 358 | Ceph-mgr là thành phần cài đặt yêu cầu cần khởi tạo từ bản Luminous, có thể cài đặt trên nhiều node hoạt động theo cơ chế `Active-Passive` 359 | 360 | - Cài đặt ceph-mgr trên ceph01 361 | ```sh 362 | ceph-deploy mgr create ceph01 363 | ``` 364 | 365 | - Kiểm tra cài đặt 366 | ```sh 367 | [root@ceph01 ceph-deploy]# ceph -s 368 | cluster: 369 | id: 39d1a369-bf54-8907-d49b-490a771ac0e2 370 | health: HEALTH_OK 371 | 372 | services: 373 | mon: 1 daemons, quorum ceph01 374 | mgr: ceph01(active) 375 | osd: 0 osds: 0 up, 0 in 376 | 377 | data: 378 | pools: 0 pools, 0 pgs 379 | objects: 0 objects, 0 B 380 | usage: 0 B used, 0 B / 0 B avail 381 | pgs: 382 | ``` 383 | 384 | - Ceph-mgr hỗ trợ dashboard để quan sát trạng thái của cluster, Enable mgr dashboard trên host ceph01 385 | 386 | ```sh 387 | ceph mgr module enable dashboard 388 | ceph mgr services 389 | ``` 390 | 391 | - Truy cập vào mgr dashboard với username và password vừa đặt ở phía trên để kiểm tra 392 | ```sh 393 | http://:7000 394 | ``` 395 | ![](../../images/dashboard-l.png) 396 | 397 | 398 | ## Khởi tạo OSD 399 | 400 | Tạo OSD thông qua ceph-deploy tại host ceph01 401 | 402 | - Trên ceph01, dùng ceph-deploy để partition ổ cứng OSD, thay `ceph01` bằng hostname của host chứa OSD 403 | ```sh 404 | ceph-deploy disk zap ceph01 /dev/sdb 405 | ``` 406 | 407 | - Tạo OSD với ceph-deploy 408 | ```sh 409 | ceph-deploy osd create --data /dev/sdb ceph01 410 | ``` 411 | 412 | - Kiểm tra osd vừa tạo bằng lệnh 413 | ```sh 414 | ceph osd tree 415 | ``` 416 | 417 | - Kiểm tra ID của OSD bằng lệnh 418 | ```sh 419 | lsblk 420 | ``` 421 | 422 | Kết quả: 423 | ```sh 424 | sdb 8:112 0 39G 0 disk 425 | └─ceph--42804049--4734--4a87--b776--bfad5d382114-osd--data--e6346e12--c312--4ccf--9b5f--0efeb61d0144 253:5 0 39G 0 lvm /var/lib/ceph/osd/ceph-0 426 | ``` 427 | 428 | ## Kiểm tra 429 | Thực hiện trên ceph01 430 | - Kiểm tra trạng thái của CEPH sau khi cài 431 | ```sh 432 | ceph -s 433 | ``` 434 | 435 | - Kết quả của lệnh trên như sau: 436 | ```sh 437 | ceph-deploy@ceph01:~/my-cluster$ ceph -s 438 | cluster: 439 | id: 39d1a369-bf54-8907-d49b-490a771ac0e2 440 | health: HEALTH_OK 441 | 442 | services: 443 | mon: 1 daemons, quorum ceph01 444 | mgr: ceph01(active) 445 | osd: 3 osds: 3 up, 3 in 446 | 447 | data: 448 | pools: 0 pools, 0 pgs 449 | objects: 0 objects, 0 bytes 450 | usage: 3180 MB used, 116 GB / 119 GB avail 451 | pgs: 452 | ``` 453 | 454 | - Nếu có dòng `health HEALTH_OK` thì việc cài đặt đã ok. 455 | -------------------------------------------------------------------------------- /docs/setup/ceph-mimic.md: -------------------------------------------------------------------------------- 1 | ## Hướng dẫn cài đặt CEPH sử dụng `ceph-deploy` 2 | 3 | ### Mục tiêu LAB 4 | - Mô hình này sử dụng 3 server, trong đó: 5 | - Host `mimic1` cài đặt `ceph-deploy`, `ceph-mon`,` ceph-osd`, `ceph-mgr` 6 | - Host `mimic2` cài đặt `ceph-osd` 7 | - Host `mimic3` cài đặt `ceph-osd` 8 | - Mô hình khá cơ bản cho việc áp dụng vào môi trường Product 9 | 10 | ## Chuẩn bị và môi trường LAB (3 Node) 11 | 12 | - OS 13 | - CentOS7 - 64 bit 14 | - 05: HDD, trong đó: 15 | - `sda`: sử dụng để cài OS 16 | - `sdb`,`sdc`,`sdd`: sử dụng làm OSD (nơi chứa dữ liệu) 17 | - 03 NICs: 18 | - `eth0`: dùng để ssh và tải gói cài đặt 19 | - `eth1`: dùng để các trao đổi thông tin giữa các node Ceph, cũng là đường Client kết nối vào 20 | - `eth2`: dùng để đồng bộ dữ liệu giữa các OSD 21 | 22 | - Phiên bản cài đặt : Ceph Mimic 23 | 24 | 25 | ## Mô hình 26 | - Sử dụng mô hình 27 | 28 | ![](../../images/topo.png) 29 | 30 | 31 | ## IP Planning 32 | - Phân hoạch IP cho các máy chủ trong mô hình trên 33 | 34 | ![](../../images/ip-planning.png) 35 | 36 | 37 | ## Các bước chuẩn bị trên từng Server 38 | 39 | - Cài đặt NTPD 40 | ```sh 41 | yum install chrony -y 42 | ``` 43 | 44 | - Enable NTPD 45 | ```sh 46 | systemctl enable --now chronyd 47 | ``` 48 | 49 | - Kiểm tra chronyd hoạt động 50 | ```sh 51 | chronyc sources -v 52 | ``` 53 | 54 | - Set hwclock 55 | ```sh 56 | hwclock --systohc 57 | ``` 58 | 59 | - Đặt hostname 60 | ```sh 61 | hostnamectl set-hostname mimic1 62 | ``` 63 | 64 | - Đặt IP cho các node 65 | ```sh 66 | systemctl disable NetworkManager 67 | systemctl enable network 68 | systemctl start network 69 | 70 | echo "Setup IP eth0" 71 | nmcli c modify eth0 ipv4.addresses 10.10.10.61/24 72 | nmcli c modify eth0 ipv4.gateway 10.10.10.1 73 | nmcli c modify eth0 ipv4.dns 8.8.8.8 74 | nmcli c modify eth0 ipv4.method manual 75 | nmcli con mod eth0 connection.autoconnect yes 76 | 77 | echo "Setup IP eth1" 78 | nmcli c modify eth1 ipv4.addresses 10.10.13.61/24 79 | nmcli c modify eth1 ipv4.method manual 80 | nmcli con mod eth1 connection.autoconnect yes 81 | 82 | echo "Setup IP eth2" 83 | nmcli c modify eth2 ipv4.addresses 10.10.14.61/24 84 | nmcli c modify eth2 ipv4.method manual 85 | nmcli con mod eth2 connection.autoconnect yes 86 | ``` 87 | 88 | - Cài đặt epel-relese và update OS 89 | ```sh 90 | yum install epel-release -y 91 | yum update -y 92 | ``` 93 | 94 | - Cài đặt CMD_log 95 | ```sh 96 | curl -Lso- https://raw.githubusercontent.com/nhanhoadocs/scripts/master/Utilities/cmdlog.sh | bash 97 | ``` 98 | 99 | - Bổ sung user `cephuser` 100 | ```sh 101 | sudo useradd -d /home/cephuser -m cephuser 102 | sudo passwd cephuser 103 | ``` 104 | 105 | - Cấp quyền sudo cho `cephuser` 106 | ```sh 107 | echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser 108 | sudo chmod 0440 /etc/sudoers.d/cephuser 109 | ``` 110 | 111 | - Vô hiệu hóa Selinux 112 | ```sh 113 | sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux 114 | sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 115 | ``` 116 | 117 | - Mở port cho Ceph trên Firewalld 118 | ```sh 119 | #ceph-admin 120 | systemctl start firewalld 121 | systemctl enable firewalld 122 | sudo firewall-cmd --zone=public --add-port=80/tcp --permanent 123 | sudo firewall-cmd --zone=public --add-port=2003/tcp --permanent 124 | sudo firewall-cmd --zone=public --add-port=4505-4506/tcp --permanent 125 | sudo firewall-cmd --reload 126 | 127 | # mon 128 | sudo systemctl start firewalld 129 | sudo systemctl enable firewalld 130 | sudo firewall-cmd --zone=public --add-port=6789/tcp --permanent 131 | sudo firewall-cmd --reload 132 | 133 | # osd 134 | sudo systemctl start firewalld 135 | sudo systemctl enable firewalld 136 | sudo firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent 137 | sudo firewall-cmd --reload 138 | ``` 139 | 140 | - Hoặc có thể disable firewall 141 | ```sh 142 | sudo systemctl disable firewalld 143 | sudo systemctl stop firewalld 144 | ``` 145 | 146 | - Bổ sung file hosts 147 | ```sh 148 | cat << EOF >> /etc/hosts 149 | 10.10.13.61 mimic1 150 | 10.10.13.62 mimic2 151 | 10.10.13.63 mimic3 152 | EOF 153 | ``` 154 | > Lưu ý network setup trong /etc/hosts chính là đường `eth1` dùng để các trao đổi thông tin giữa các node Ceph, cũng là đường Client kết nối vào 155 | 156 | - Kiểm tra kết nối 157 | ```sh 158 | ping -c 10 mimic1 159 | ``` 160 | 161 | - Khởi động lại máy 162 | ```sh 163 | init 6 164 | ``` 165 | 166 | > Các server Mimic2 và Mimic3 thực hiện tương tự 167 | 168 | ## Cài đặt Ceph 169 | 170 | Bổ sung repo cho ceph trên tất cả các node 171 | ```sh 172 | cat < /etc/yum.repos.d/ceph.repo 173 | [ceph] 174 | name=Ceph packages for $basearch 175 | baseurl=https://download.ceph.com/rpm-mimic/el7/x86_64/ 176 | enabled=1 177 | priority=2 178 | gpgcheck=1 179 | gpgkey=https://download.ceph.com/keys/release.asc 180 | 181 | [ceph-noarch] 182 | name=Ceph noarch packages 183 | baseurl=https://download.ceph.com/rpm-mimic/el7/noarch 184 | enabled=1 185 | priority=2 186 | gpgcheck=1 187 | gpgkey=https://download.ceph.com/keys/release.asc 188 | 189 | [ceph-source] 190 | name=Ceph source packages 191 | baseurl=https://download.ceph.com/rpm-mimic/el7/SRPMS 192 | enabled=0 193 | priority=2 194 | gpgcheck=1 195 | gpgkey=https://download.ceph.com/keys/release.asc 196 | EOF 197 | 198 | yum update -y 199 | ``` 200 | 201 | Các bước ở dưới được thực hiện toàn toàn trên Node `ceph01` 202 | 203 | - Cài đặt `python-setuptools` 204 | ```sh 205 | yum install python-setuptools -y 206 | ``` 207 | 208 | - Cài đặt `ceph-deploy` 209 | ```sh 210 | yum install ceph-deploy -y 211 | ``` 212 | 213 | - Kiểm tra cài đặt 214 | ```sh 215 | ceph-deploy --version 216 | ``` 217 | >Kết quả như sau là đã cài đặt thành công ceph-deploy 218 | ```sh 219 | 2.0.1 220 | ``` 221 | 222 | - Tạo ssh key 223 | ```sh 224 | ssh-keygen 225 | ``` 226 | > Bấm ENTER khi có requirement 227 | 228 | - Cấu hình user ssh cho ceph-deploy 229 | ```sh 230 | cat < /root/.ssh/config 231 | Host mimic1 232 | Hostname mimic1 233 | User cephuser 234 | Host mimic2 235 | Hostname mimic2 236 | User cephuser 237 | Host mimic3 238 | Hostname mimic3 239 | User cephuser 240 | EOF 241 | ``` 242 | 243 | - Copy ssh key sang các node khác 244 | ```sh 245 | ssh-copy-id mimic1 246 | ssh-copy-id mimic2 247 | ssh-copy-id mimic3 248 | ``` 249 | 250 | - Tạo các thư mục `ceph-deploy` để thao tác cài đặt vận hành Cluster 251 | ```sh 252 | mkdir /ceph-deploy && cd /ceph-deploy 253 | ``` 254 | 255 | - Khởi tại file cấu hình cho cụm với node quản lý là `mimic1` 256 | ```sh 257 | ceph-deploy new mimic1 mimic2 mimic3 258 | ``` 259 | 260 | - Kiểm tra lại thông tin folder `ceph-deploy` 261 | ```sh 262 | [root@mimic1 ceph-deploy]# ls -lah 263 | total 12K 264 | drwxr-xr-x 2 root root 75 Jan 31 16:31 . 265 | dr-xr-xr-x. 18 root root 243 Jan 31 16:29 .. 266 | -rw-r--r-- 1 root root 2.9K Jan 31 16:31 ceph-deploy-ceph.log 267 | -rw-r--r-- 1 root root 195 Jan 31 16:31 ceph.conf 268 | -rw------- 1 root root 73 Jan 31 16:31 ceph.mon.keyring 269 | [root@mimic1 ceph-deploy]# 270 | ``` 271 | - `ceph.conf` : file config được tự động khởi tạo 272 | - `ceph-deploy-ceph.log` : file log của toàn bộ thao tác đối với việc sử dụng lệnh `ceph-deploy` 273 | - `ceph.mon.keyring` : Key monitoring được ceph sinh ra tự động để khởi tạo Cluster 274 | 275 | - Chúng ta sẽ bổ sung thêm vào file `ceph.conf` một vài thông tin cơ bản như sau: 276 | ```sh 277 | cat << EOF >> /ceph-deploy/ceph.conf 278 | osd pool default size = 2 279 | osd pool default min size = 1 280 | osd pool default pg num = 128 281 | osd pool default pgp num = 128 282 | 283 | osd crush chooseleaf type = 1 284 | 285 | public network = 10.10.13.0/24 286 | cluster network = 10.10.14.0/24 287 | EOF 288 | ``` 289 | - Bổ sung thêm định nghĩa 290 | + `public network` : Đường trao đổi thông tin giữa các node Ceph và cũng là đường client kết nối vào 291 | + `cluster network` : Đường đồng bộ dữ liệu 292 | - Bổ sung thêm `default size replicate` 293 | - Bổ sung thêm `default pg num` 294 | 295 | 296 | - Cài đặt ceph trên toàn bộ các node ceph 297 | ```sh 298 | ceph-deploy install --release mimic mimic1 mimic2 mimic3 299 | ``` 300 | 301 | - Kiểm tra sau khi cài đặt 302 | ```sh 303 | ceph -v 304 | ``` 305 | > Kết quả như sau là đã cài đặt thành công ceph trên node 306 | ```sh 307 | ceph version 13.2.4 (b10be4d44915a4d78a8e06aa31919e74927b142e) mimic (stable) 308 | ``` 309 | 310 | - Khởi tạo cluster với các node `mon` (Monitor-quản lý) dựa trên file `ceph.conf` 311 | ```sh 312 | ceph-deploy mon create-initial 313 | ``` 314 | 315 | - Sau khi thực hiện lệnh phía trên sẽ sinh thêm ra 05 file : `ceph.bootstrap-mds.keyring`, `ceph.bootstrap-mgr.keyring`, `ceph.bootstrap-osd.keyring`, `ceph.client.admin.keyring` và `ceph.bootstrap-rgw.keyring`. Quan sát bằng lệnh `ll -alh` 316 | 317 | ```sh 318 | [root@mimic1 ceph-deploy]# ls -lah 319 | total 348K 320 | drwxr-xr-x 2 root root 244 Feb 1 11:40 . 321 | dr-xr-xr-x. 18 root root 243 Feb 1 11:29 .. 322 | -rw-r--r-- 1 root root 258K Feb 1 11:40 ceph-deploy-ceph.log 323 | -rw------- 1 root root 113 Feb 1 11:40 ceph.bootstrap-mds.keyring 324 | -rw------- 1 root root 113 Feb 1 11:40 ceph.bootstrap-mgr.keyring 325 | -rw------- 1 root root 113 Feb 1 11:40 ceph.bootstrap-osd.keyring 326 | -rw------- 1 root root 113 Feb 1 11:40 ceph.bootstrap-rgw.keyring 327 | -rw------- 1 root root 151 Feb 1 11:40 ceph.client.admin.keyring 328 | -rw-r--r-- 1 root root 195 Feb 1 11:29 ceph.conf 329 | -rw------- 1 root root 73 Feb 1 11:29 ceph.mon.keyring 330 | ``` 331 | 332 | - Để node `mimic1` có thể thao tác với cluster chúng ta cần gán cho node `mimic1` với quyền admin bằng cách bổ sung cho node này `admin.keying` 333 | ```sh 334 | ceph-deploy admin mimic1 335 | ``` 336 | > Kiểm tra bằng lệnh 337 | ```sh 338 | [root@mimic1 ceph-deploy]# ceph -s 339 | cluster: 340 | id: 691a39d3-0789-49db-bf54-c0e2a774901a 341 | health: HEALTH_OK 342 | 343 | services: 344 | mon: 1 daemons, quorum mimic1 345 | mgr: no daemons active 346 | osd: 0 osds: 0 up, 0 in 347 | 348 | data: 349 | pools: 0 pools, 0 pgs 350 | objects: 0 objects, 0 B 351 | usage: 0 B used, 0 B / 0 B avail 352 | pgs: 353 | ``` 354 | 355 | ## Khởi tạo MGR 356 | 357 | Ceph-mgr là thành phần cài đặt yêu cầu cần khởi tạo từ bản luminous, có thể cài đặt trên nhiều node hoạt động theo cơ chế `Active-Passive` 358 | 359 | - Cài đặt ceph-mgr trên mimic1 360 | ```sh 361 | ceph-deploy mgr create mimic1 362 | ``` 363 | 364 | - Kiểm tra cài đặt 365 | ```sh 366 | [root@mimic1 ceph-deploy]# ceph -s 367 | cluster: 368 | id: 691a39d3-0789-49db-bf54-c0e2a774901a 369 | health: HEALTH_OK 370 | 371 | services: 372 | mon: 1 daemons, quorum mimic1 373 | mgr: mimic1(active) 374 | osd: 0 osds: 0 up, 0 in 375 | 376 | data: 377 | pools: 0 pools, 0 pgs 378 | objects: 0 objects, 0 B 379 | usage: 0 B used, 0 B / 0 B avail 380 | pgs: 381 | ``` 382 | 383 | - Ceph-mgr hỗ trợ dashboard để quan sát trạng thái của cluster, Enable mgr dashboard trên host mimic1 384 | 385 | ```sh 386 | ceph mgr module enable dashboard 387 | ceph dashboard create-self-signed-cert 388 | ceph dashboard set-login-credentials 389 | ceph mgr services 390 | ``` 391 | 392 | - Truy cập vào mgr dashboard với username và password vừa đặt ở phía trên để kiểm tra 393 | ```sh 394 | https://:8443 395 | ``` 396 | ![](../../images/dashboard-m.png) 397 | 398 | 399 | ## Khởi tạo OSD 400 | 401 | Tạo OSD thông qua ceph-deploy tại host mimic1 402 | 403 | - Trên mimic1, dùng ceph-deploy để partition ổ cứng OSD, thay `mimic1` bằng hostname của host chứa OSD 404 | ```sh 405 | ceph-deploy disk zap mimic1 /dev/vdb 406 | ``` 407 | 408 | - Tạo OSD với ceph-deploy 409 | ```sh 410 | ceph-deploy osd create --data /dev/sdb mimic1 411 | ``` 412 | 413 | - Kiểm tra osd vừa tạo bằng lệnh 414 | ```sh 415 | ceph osd tree 416 | ``` 417 | 418 | - Kiểm tra ID của OSD bằng lệnh 419 | ```sh 420 | lsblk 421 | ``` 422 | 423 | Kết quả: 424 | ```sh 425 | sdb 8:112 0 39G 0 disk 426 | └─ceph--42804049--4734--4a87--b776--bfad5d382114-osd--data--e6346e12--c312--4ccf--9b5f--0efeb61d0144 253:5 0 39G 0 lvm /var/lib/ceph/osd/ceph-0 427 | ``` 428 | 429 | ## Kiểm tra 430 | Thực hiện trên mimic1 431 | - Kiểm tra trạng thái của CEPH sau khi cài 432 | ```sh 433 | ceph -s 434 | ``` 435 | 436 | - Kết quả của lệnh trên như sau: 437 | ```sh 438 | ceph-deploy@mimic1:~/my-cluster$ ceph -s 439 | cluster: 440 | id: 691a39d3-0789-49db-bf54-c0e2a774901a 441 | health: HEALTH_OK 442 | 443 | services: 444 | mon: 1 daemons, quorum mimic1 445 | mgr: mimic1(active) 446 | osd: 3 osds: 3 up, 3 in 447 | 448 | data: 449 | pools: 0 pools, 0 pgs 450 | objects: 0 objects, 0 bytes 451 | usage: 3180 MB used, 116 GB / 119 GB avail 452 | pgs: 453 | ``` 454 | 455 | - Nếu có dòng `health HEALTH_OK` thì việc cài đặt đã ok. 456 | -------------------------------------------------------------------------------- /docs/setup/ceph-nautilus.md: -------------------------------------------------------------------------------- 1 | ## Hướng dẫn cài đặt CEPH sử dụng `ceph-deploy` 2 | 3 | ### Mục tiêu LAB 4 | - Mô hình này sử dụng 3 server, trong đó: 5 | - Host `ceph01` cài đặt `ceph-deploy`, `ceph-mon`,` ceph-osd`, `ceph-mgr` 6 | - Host `ceph02` cài đặt `ceph-osd` 7 | - Host `ceph03` cài đặt `ceph-osd` 8 | - Mô hình khá cơ bản cho việc áp dụng vào môi trường Product 9 | 10 | ## Chuẩn bị và môi trường LAB (3 Node) 11 | 12 | - CentOS7 - 64 bit 13 | - 03: HDD, trong đó: 14 | - `sda`: sử dụng để cài OS 15 | - `vdb`,`vdc`: sử dụng làm OSD (nơi chứa dữ liệu) 16 | - 03 NICs: 17 | - `eth0`: dùng để ssh và tải gói cài đặt 18 | - `eth1`: dùng để các trao đổi thông tin giữa các node Ceph, cũng là đường Client kết nối vào 19 | - `eth2`: dùng để đồng bộ dữ liệu giữa các OSD 20 | - Phiên bản cài đặt : Ceph Nautilus 21 | 22 | 23 | ## Mô hình 24 | - Sử dụng mô hình 25 | 26 | ![](../../images/topo.png) 27 | 28 | 29 | ## IP Planning 30 | - Phân hoạch IP cho các máy chủ trong mô hình trên 31 | 32 | ![](../../images/ip-planning1.png) 33 | 34 | 35 | ## Các bước chuẩn bị trên từng Server 36 | 37 | - Cài đặt NTPD 38 | ```sh 39 | yum install chrony -y 40 | ``` 41 | 42 | - Enable NTPD 43 | ```sh 44 | systemctl start chronyd 45 | systemctl enable chronyd 46 | ``` 47 | 48 | - Kiểm tra chronyd hoạt động 49 | ```sh 50 | chronyc sources -v 51 | timedatectl 52 | ``` 53 | 54 | - Set hwclock 55 | ```sh 56 | hwclock --systohc 57 | ``` 58 | 59 | - Đặt hostname 60 | ```sh 61 | hostnamectl set-hostname ceph01 62 | ``` 63 | 64 | - Đặt IP cho các node 65 | ```sh 66 | echo "Setup IP eth0" 67 | nmcli c modify eth0 ipv4.addresses 10.10.10.61/24 68 | nmcli c modify eth0 ipv4.gateway 10.10.10.1 69 | nmcli c modify eth0 ipv4.dns 8.8.8.8 70 | nmcli c modify eth0 ipv4.method manual 71 | nmcli con mod eth0 connection.autoconnect yes 72 | 73 | echo "Setup IP eth1" 74 | nmcli c modify eth1 ipv4.addresses 10.10.13.61/24 75 | nmcli c modify eth1 ipv4.method manual 76 | nmcli con mod eth1 connection.autoconnect yes 77 | 78 | echo "Setup IP eth2" 79 | nmcli c modify eth2 ipv4.addresses 10.10.14.61/24 80 | nmcli c modify eth2 ipv4.method manual 81 | nmcli con mod eth2 connection.autoconnect yes 82 | 83 | systemctl disable NetworkManager 84 | systemctl enable network 85 | systemctl start network 86 | ``` 87 | 88 | - Cài đặt epel-relese và update OS 89 | ```sh 90 | yum install epel-release -y 91 | yum update -y 92 | ``` 93 | 94 | - Cài đặt CMD_log 95 | ```sh 96 | curl -Lso- https://raw.githubusercontent.com/nhanhoadocs/scripts/master/Utilities/cmdlog.sh | bash 97 | ``` 98 | 99 | - Bổ sung user `cephuser` 100 | ```sh 101 | sudo useradd -d /home/cephuser -m cephuser 102 | sudo passwd cephuser 103 | ```` 104 | 105 | - Cấp quyền sudo cho `cephuser` 106 | ```sh 107 | echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser 108 | sudo chmod 0440 /etc/sudoers.d/cephuser 109 | ``` 110 | 111 | - Vô hiệu hóa Selinux 112 | ```sh 113 | sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux 114 | sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 115 | ``` 116 | 117 | - Mở port cho Ceph trên Firewalld 118 | ```sh 119 | #ceph-admin 120 | systemctl start firewalld 121 | systemctl enable firewalld 122 | sudo firewall-cmd --zone=public --add-port=80/tcp --permanent 123 | sudo firewall-cmd --zone=public --add-port=2003/tcp --permanent 124 | sudo firewall-cmd --zone=public --add-port=4505-4506/tcp --permanent 125 | sudo firewall-cmd --reload 126 | 127 | # mon 128 | sudo systemctl start firewalld 129 | sudo systemctl enable firewalld 130 | sudo firewall-cmd --zone=public --add-port=6789/tcp --permanent 131 | sudo firewall-cmd --reload 132 | 133 | # osd 134 | sudo systemctl start firewalld 135 | sudo systemctl enable firewalld 136 | sudo firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent 137 | sudo firewall-cmd --reload 138 | ``` 139 | 140 | - Hoặc có thể disable firewall 141 | ```sh 142 | sudo systemctl disable firewalld 143 | sudo systemctl stop firewalld 144 | ``` 145 | 146 | - Bổ sung file hosts 147 | ```sh 148 | cat << EOF >> /etc/hosts 149 | 10.10.13.61 ceph01 150 | 10.10.13.62 ceph02 151 | 10.10.13.63 ceph03 152 | EOF 153 | ``` 154 | > Lưu ý network setup trong /etc/hosts chính là đường `eth1` dùng để các trao đổi thông tin giữa các node Ceph, cũng là đường Client kết nối vào 155 | 156 | - Kiểm tra kết nối 157 | ```sh 158 | ping -c 10 ceph01 159 | ``` 160 | 161 | - Khởi động lại máy 162 | ```sh 163 | init 6 164 | ``` 165 | 166 | > Các server ceph02 và ceph03 thực hiện tương tự 167 | 168 | ## Cài đặt Ceph 169 | 170 | Bổ sung repo cho ceph trên tất cả các node 171 | ```sh 172 | cat < /etc/yum.repos.d/ceph.repo 173 | [ceph] 174 | name=Ceph packages for $basearch 175 | baseurl=https://download.ceph.com/rpm-nautilus/el7/x86_64/ 176 | enabled=1 177 | priority=2 178 | gpgcheck=1 179 | gpgkey=https://download.ceph.com/keys/release.asc 180 | 181 | [ceph-noarch] 182 | name=Ceph noarch packages 183 | baseurl=https://download.ceph.com/rpm-nautilus/el7/noarch 184 | enabled=1 185 | priority=2 186 | gpgcheck=1 187 | gpgkey=https://download.ceph.com/keys/release.asc 188 | 189 | [ceph-source] 190 | name=Ceph source packages 191 | baseurl=https://download.ceph.com/rpm-nautilus/el7/SRPMS 192 | enabled=0 193 | priority=2 194 | gpgcheck=1 195 | gpgkey=https://download.ceph.com/keys/release.asc 196 | EOF 197 | 198 | yum update -y 199 | ``` 200 | 201 | Các bước ở dưới được thực hiện toàn toàn trên Node `ceph01` 202 | 203 | - Cài đặt `python-setuptools` 204 | ```sh 205 | yum install python-setuptools -y 206 | ``` 207 | 208 | - Cài đặt `ceph-deploy` 209 | ```sh 210 | yum install ceph-deploy -y 211 | ``` 212 | 213 | - Kiểm tra cài đặt 214 | ```sh 215 | ceph-deploy --version 216 | ``` 217 | >Kết quả như sau là đã cài đặt thành công ceph-deploy 218 | ```sh 219 | 2.0.1 220 | ``` 221 | 222 | - Tạo ssh key 223 | ```sh 224 | ssh-keygen 225 | ``` 226 | > Bấm ENTER khi có requirement 227 | 228 | - Cấu hình user ssh cho ceph-deploy 229 | ```sh 230 | cat < /root/.ssh/config 231 | Host ceph01 232 | Hostname ceph01 233 | User cephuser 234 | Host ceph02 235 | Hostname ceph02 236 | User cephuser 237 | Host ceph03 238 | Hostname ceph03 239 | User cephuser 240 | EOF 241 | ``` 242 | 243 | - Copy ssh key sang các node khác 244 | ```sh 245 | ssh-copy-id ceph01 246 | ssh-copy-id ceph02 247 | ssh-copy-id ceph03 248 | ``` 249 | > Nhập mật khẩu 250 | 251 | - Tạo các thư mục `ceph-deploy` để thao tác cài đặt vận hành Cluster 252 | ```sh 253 | mkdir /ceph-deploy && cd /ceph-deploy 254 | ``` 255 | 256 | - Khởi tại file cấu hình cho cụm với node quản lý là `ceph01` 257 | ```sh 258 | ceph-deploy new ceph01 ceph02 ceph03 259 | ``` 260 | 261 | - Kiểm tra lại thông tin folder `ceph-deploy` 262 | ```sh 263 | [root@ceph01 ceph-deploy]# ls -lah 264 | total 12K 265 | drwxr-xr-x 2 root root 75 Jan 31 16:31 . 266 | dr-xr-xr-x. 18 root root 243 Jan 31 16:29 .. 267 | -rw-r--r-- 1 root root 2.9K Jan 31 16:31 ceph-deploy-ceph.log 268 | -rw-r--r-- 1 root root 195 Jan 31 16:31 ceph.conf 269 | -rw------- 1 root root 73 Jan 31 16:31 ceph.mon.keyring 270 | [root@ceph01 ceph-deploy]# 271 | ``` 272 | - `ceph.conf` : file config được tự động khởi tạo 273 | - `ceph-deploy-ceph.log` : file log của toàn bộ thao tác đối với việc sử dụng lệnh `ceph-deploy` 274 | - `ceph.mon.keyring` : Key monitoring được ceph sinh ra tự động để khởi tạo Cluster 275 | 276 | - Chúng ta sẽ bổ sung thêm vào file `ceph.conf` một vài thông tin cơ bản như sau: 277 | ```sh 278 | cat << EOF >> ceph.conf 279 | osd pool default size = 2 280 | osd pool default min size = 1 281 | osd pool default pg num = 128 282 | osd pool default pgp num = 128 283 | 284 | osd crush chooseleaf type = 1 285 | 286 | public network = 10.10.13.0/24 287 | cluster network = 10.10.14.0/24 288 | EOF 289 | ``` 290 | - Bổ sung thêm định nghĩa 291 | + `public network` : Đường trao đổi thông tin giữa các node Ceph và cũng là đường client kết nối vào 292 | + `cluster network` : Đường đồng bộ dữ liệu 293 | - Bổ sung thêm `default size replicate` 294 | - Bổ sung thêm `default pg num` 295 | 296 | 297 | - Cài đặt ceph trên toàn bộ các node ceph 298 | ```sh 299 | ceph-deploy install --release nautilus ceph01 ceph02 ceph03 300 | ``` 301 | 302 | - Kiểm tra sau khi cài đặt trên cả 3 node 303 | ```sh 304 | ceph -v 305 | ``` 306 | > Kết quả như sau là đã cài đặt thành công ceph trên node 307 | ```sh 308 | ceph version 14.2.2 (4f8fa0a0024755aae7d95567c63f11d6862d55be) nautilus (stable) 309 | ``` 310 | 311 | - Khởi tạo cluster với các node `mon` (Monitor-quản lý) dựa trên file `ceph.conf` 312 | ```sh 313 | ceph-deploy mon create-initial 314 | ``` 315 | 316 | - Sau khi thực hiện lệnh phía trên sẽ sinh thêm ra 05 file : 317 | `ceph.bootstrap-mds.keyring`, `ceph.bootstrap-mgr.keyring`, `ceph.bootstrap-osd.keyring`, `ceph.client.admin.keyring` và `ceph.bootstrap-rgw.keyring`. Quan sát bằng lệnh `ll -alh` 318 | 319 | ```sh 320 | [root@ceph01 ceph-deploy]# ls -lah 321 | total 348K 322 | drwxr-xr-x 2 root root 244 Feb 1 11:40 . 323 | dr-xr-xr-x. 18 root root 243 Feb 1 11:29 .. 324 | -rw-r--r-- 1 root root 258K Feb 1 11:40 ceph-deploy-ceph.log 325 | -rw------- 1 root root 113 Feb 1 11:40 ceph.bootstrap-mds.keyring 326 | -rw------- 1 root root 113 Feb 1 11:40 ceph.bootstrap-mgr.keyring 327 | -rw------- 1 root root 113 Feb 1 11:40 ceph.bootstrap-osd.keyring 328 | -rw------- 1 root root 113 Feb 1 11:40 ceph.bootstrap-rgw.keyring 329 | -rw------- 1 root root 151 Feb 1 11:40 ceph.client.admin.keyring 330 | -rw-r--r-- 1 root root 195 Feb 1 11:29 ceph.conf 331 | -rw------- 1 root root 73 Feb 1 11:29 ceph.mon.keyring 332 | ``` 333 | 334 | - Để node `ceph01`, `ceph02`, `ceph03` có thể thao tác với cluster chúng ta cần gán cho node quyền admin bằng cách bổ sung key `admin.keying` cho node 335 | ```sh 336 | ceph-deploy admin ceph01 ceph02 ceph03 337 | ``` 338 | > Kiểm tra bằng lệnh 339 | ```sh 340 | [root@ceph01 ceph-deploy]# ceph -s 341 | cluster: 342 | id: ba7c7fa1-4e55-450b-bc40-4cf122b28c27 343 | health: HEALTH_OK 344 | 345 | services: 346 | mon: 3 daemons, quorum ceph01,ceph02,ceph03 (age 1.09337s) 347 | mgr: no daemons active 348 | osd: 0 osds: 0 up, 0 in 349 | 350 | data: 351 | pools: 0 pools, 0 pgs 352 | objects: 0 objects, 0 B 353 | usage: 0 B used, 0 B / 0 B avail 354 | pgs: 355 | ``` 356 | 357 | ## Khởi tạo MGR 358 | 359 | Ceph-mgr là thành phần cài đặt yêu cầu cần khởi tạo từ bản luminous, có thể cài đặt trên nhiều node hoạt động theo cơ chế `Active-Passive` 360 | 361 | - Cài đặt ceph-mgr trên ceph01 362 | ```sh 363 | ceph-deploy mgr create ceph01 ceph02 364 | ``` 365 | 366 | - Kiểm tra cài đặt 367 | ```sh 368 | [root@ceph01 ceph-deploy]# ceph -s 369 | cluster: 370 | id: ba7c7fa1-4e55-450b-bc40-4cf122b28c27 371 | health: HEALTH_OK 372 | 373 | services: 374 | mon: 3 daemons, quorum ceph01,ceph02,ceph03 (age 53s) 375 | mgr: ceph01(active, since 11s), standbys: ceph02 376 | osd: 0 osds: 0 up, 0 in 377 | 378 | data: 379 | pools: 0 pools, 0 pgs 380 | objects: 0 objects, 0 B 381 | usage: 0 B used, 0 B / 0 B avail 382 | pgs: 383 | ``` 384 | 385 | - Ceph-mgr hỗ trợ dashboard để quan sát trạng thái của cluster, Enable mgr dashboard trên host ceph01 386 | ```sh 387 | yum install ceph-mgr-dashboard -y 388 | ceph mgr module enable dashboard 389 | ceph dashboard create-self-signed-cert 390 | ceph dashboard set-login-credentials 391 | ceph mgr services 392 | ``` 393 | 394 | > Lưu ý cài đặt `yum install ceph-mgr-dashboard -y` trên cả `ceph01` và `ceph02` 395 | 396 | - Truy cập vào mgr dashboard với username và password vừa đặt ở phía trên để kiểm tra 397 | ```sh 398 | https://:8443 399 | ``` 400 | ![](../../images/dashboard-n.png) 401 | 402 | 403 | ## Khởi tạo OSD 404 | 405 | Tạo OSD thông qua ceph-deploy tại host `ceph01` 406 | 407 | - Thực hiện zapdisk 408 | ```sh 409 | ceph-deploy disk zap ceph01 /dev/vdb 410 | ceph-deploy disk zap ceph01 /dev/vdc 411 | ``` 412 | 413 | - Tạo OSD với ceph-deploy 414 | ```sh 415 | ceph-deploy osd create --data /dev/vdb ceph01 416 | ceph-deploy osd create --data /dev/vdc ceph01 417 | ``` 418 | 419 | - Thao tác với các ổ trên `ceph02` và `ceph03` tương tự. Vẫn thực hiện trên thư mục `ceph-deploy` trên `ceph01` 420 | ```sh 421 | # ceph02 422 | ceph-deploy disk zap ceph02 /dev/vdb 423 | ceph-deploy disk zap ceph02 /dev/vdc 424 | ceph-deploy osd create --data /dev/vdb ceph02 425 | ceph-deploy osd create --data /dev/vdc ceph02 426 | 427 | # ceph03 428 | ceph-deploy disk zap ceph03 /dev/vdb 429 | ceph-deploy disk zap ceph03 /dev/vdc 430 | ceph-deploy osd create --data /dev/vdb ceph03 431 | ceph-deploy osd create --data /dev/vdc ceph03 432 | ``` 433 | 434 | - Kiểm tra osd vừa tạo bằng lệnh 435 | ```sh 436 | ceph osd tree 437 | ``` 438 | - Kết quả 439 | ```sh 440 | [root@ceph01 ceph-deploy]# ceph osd tree 441 | ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF 442 | -1 0.16974 root default 443 | -3 0.05658 host ceph01 444 | 0 hdd 0.02829 osd.0 up 1.00000 1.00000 445 | 1 hdd 0.02829 osd.1 up 1.00000 1.00000 446 | -5 0.05658 host ceph02 447 | 2 hdd 0.02829 osd.2 up 1.00000 1.00000 448 | 3 hdd 0.02829 osd.3 up 1.00000 1.00000 449 | -7 0.05658 host ceph03 450 | 4 hdd 0.02829 osd.4 up 1.00000 1.00000 451 | 5 hdd 0.02829 osd.5 up 1.00000 1.00000 452 | ``` 453 | 454 | ## Kiểm tra 455 | Thực hiện trên ceph01 456 | - Kiểm tra trạng thái của CEPH sau khi cài 457 | ```sh 458 | ceph -s 459 | ``` 460 | 461 | - Kết quả của lệnh trên như sau: 462 | ```sh 463 | [root@ceph01 ceph-deploy]# ceph -s 464 | cluster: 465 | id: ba7c7fa1-4e55-450b-bc40-4cf122b28c27 466 | health: HEALTH_OK 467 | 468 | services: 469 | mon: 3 daemons, quorum ceph01,ceph02,ceph03 (age 10m) 470 | mgr: ceph01(active, since 7m), standbys: ceph02 471 | osd: 6 osds: 6 up (since 51s), 6 in (since 51s) 472 | 473 | data: 474 | pools: 0 pools, 0 pgs 475 | objects: 0 objects, 0 B 476 | usage: 6.0 GiB used, 168 GiB / 174 GiB avail 477 | pgs: 478 | ``` 479 | 480 | - Nếu có dòng `health HEALTH_OK` thì việc cài đặt đã ok. 481 | -------------------------------------------------------------------------------- /images/ceph-mds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/ceph-mds.png -------------------------------------------------------------------------------- /images/ceph-osd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/ceph-osd.png -------------------------------------------------------------------------------- /images/ceph-radosgw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/ceph-radosgw.png -------------------------------------------------------------------------------- /images/ceph_auth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/ceph_auth.png -------------------------------------------------------------------------------- /images/ceph_authfolow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/ceph_authfolow.png -------------------------------------------------------------------------------- /images/ceph_createuser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/ceph_createuser.png -------------------------------------------------------------------------------- /images/ceph_request.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/ceph_request.png -------------------------------------------------------------------------------- /images/ceph_stack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/ceph_stack.png -------------------------------------------------------------------------------- /images/ceph_users.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/ceph_users.png -------------------------------------------------------------------------------- /images/cephaio/resource.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/cephaio/resource.png -------------------------------------------------------------------------------- /images/dashboard-cephdash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/dashboard-cephdash.png -------------------------------------------------------------------------------- /images/dashboard-l.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/dashboard-l.png -------------------------------------------------------------------------------- /images/dashboard-m.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/dashboard-m.png -------------------------------------------------------------------------------- /images/dashboard-n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/dashboard-n.png -------------------------------------------------------------------------------- /images/dashboard-n/Ip_planning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/dashboard-n/Ip_planning.png -------------------------------------------------------------------------------- /images/dashboard-n/cluster_host.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/dashboard-n/cluster_host.png -------------------------------------------------------------------------------- /images/dashboard-n/cluster_host_prom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/dashboard-n/cluster_host_prom.png -------------------------------------------------------------------------------- /images/dashboard-n/grafana01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/dashboard-n/grafana01.png -------------------------------------------------------------------------------- /images/dashboard-n/grafana02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/dashboard-n/grafana02.png -------------------------------------------------------------------------------- /images/dashboard-n/grafana03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/dashboard-n/grafana03.png -------------------------------------------------------------------------------- /images/dashboard-n/grafana04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/dashboard-n/grafana04.png -------------------------------------------------------------------------------- /images/dashboard-n/grafana05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/dashboard-n/grafana05.png -------------------------------------------------------------------------------- /images/dashboard-n/grafana06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/dashboard-n/grafana06.png -------------------------------------------------------------------------------- /images/dashboard-n/grafana07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/dashboard-n/grafana07.png -------------------------------------------------------------------------------- /images/dashboard-n/grafana08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/dashboard-n/grafana08.png -------------------------------------------------------------------------------- /images/dashboard-n/metrics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/dashboard-n/metrics.png -------------------------------------------------------------------------------- /images/dashboard-n/topo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/dashboard-n/topo.png -------------------------------------------------------------------------------- /images/filestore-vs-bluestore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/filestore-vs-bluestore.png -------------------------------------------------------------------------------- /images/ip-planning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/ip-planning.png -------------------------------------------------------------------------------- /images/ip-planning1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/ip-planning1.png -------------------------------------------------------------------------------- /images/ip-planning2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/ip-planning2.png -------------------------------------------------------------------------------- /images/journal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/journal.png -------------------------------------------------------------------------------- /images/mohinh-ops-ceph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/mohinh-ops-ceph.png -------------------------------------------------------------------------------- /images/monitor/check_mk_ceph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/monitor/check_mk_ceph.png -------------------------------------------------------------------------------- /images/monitor/check_mk_disk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/monitor/check_mk_disk.png -------------------------------------------------------------------------------- /images/monitor/zabbix029.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/monitor/zabbix029.png -------------------------------------------------------------------------------- /images/pg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/pg.png -------------------------------------------------------------------------------- /images/pg_calc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/pg_calc.png -------------------------------------------------------------------------------- /images/rados.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/rados.png -------------------------------------------------------------------------------- /images/radosgw/bucket01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/radosgw/bucket01.png -------------------------------------------------------------------------------- /images/radosgw/dns.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/radosgw/dns.png -------------------------------------------------------------------------------- /images/radosgw/nginx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/radosgw/nginx.png -------------------------------------------------------------------------------- /images/radosgw/nginx1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/radosgw/nginx1.png -------------------------------------------------------------------------------- /images/radosgw/nginx2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/radosgw/nginx2.png -------------------------------------------------------------------------------- /images/radosgw/nginx3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/radosgw/nginx3.png -------------------------------------------------------------------------------- /images/radosgw/nginx_cert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/radosgw/nginx_cert.png -------------------------------------------------------------------------------- /images/radosgw/nginx_proxy.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/radosgw/nginx_proxy.jpeg -------------------------------------------------------------------------------- /images/radosgw/nginx_rr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/radosgw/nginx_rr.gif -------------------------------------------------------------------------------- /images/radosgw/s3cmd2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/radosgw/s3cmd2.gif -------------------------------------------------------------------------------- /images/radosgw/s3cmd_https.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/radosgw/s3cmd_https.gif -------------------------------------------------------------------------------- /images/rbdmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/rbdmap.png -------------------------------------------------------------------------------- /images/topo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/topo.png -------------------------------------------------------------------------------- /images/topol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/images/topol.png -------------------------------------------------------------------------------- /scripts/MegaCli8.07.14.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/scripts/MegaCli8.07.14.zip -------------------------------------------------------------------------------- /scripts/backy2_2.9.17_all.deb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nhanhoadocs/tutorial-ceph/bfefffa7cdf45aa091be70cebb2be7f43cdd9770/scripts/backy2_2.9.17_all.deb --------------------------------------------------------------------------------