├── 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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
15 |
16 | > Tài khoản mặc định `admin/admin`
17 |
18 | Change passwd mới
19 |
20 | 
21 |
22 | Màn hình ban đầu
23 |
24 | 
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 | )
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 | 
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 | 
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 | 
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 | 
109 |
110 | 
111 |
112 | 
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 | 
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 | 
129 |
130 | + Sử dụng database zabbix
131 |
132 | ```
133 | show databases;
134 | ```
135 |
136 | ```
137 | use zabbix_db;
138 | ```
139 |
140 | 
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 | 
151 |
152 | ```
153 | select itemid, name, key_, type, trapper_hosts from items where hostid=10269;
154 | ```
155 |
156 | 
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 | 
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 | 
190 |
191 |
192 | 
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 | 
204 |
205 | 
206 |
207 | + Connet zabbix - grafana
208 |
209 | ```
210 | URL : http://192.168.90.110/zabbix/api_jsonrpc.php
211 | ```
212 |
213 | 
214 |
215 | 
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 | 
222 |
223 | **Lưu ý**: Edit datasource về đúng địa chỉ IP theo hệ thống của bạn.
224 |
225 | 
226 |
227 |
228 | => Kết quả grafana monitor IOPS, I/O bandwidth cụm CEPH
229 |
230 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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
--------------------------------------------------------------------------------