一 前期準備1.1 前置條件至少有三個不同的主機運行monitor (MON)節點;至少三個直接存儲(非外部SAN硬體)的OSD節點主;至少兩個不同的manager (MGR)節點;如果使用CephFS,則至少有兩個完全相同配置的MDS節點;如果使用Ceph對象網關,則至少有兩個不同的RADOSGW... ...
一 前期準備
1.1 前置條件
- 至少有三個不同的主機運行monitor (MON)節點;
- 至少三個直接存儲(非外部SAN硬體)的OSD節點主;
- 至少兩個不同的manager (MGR)節點;
- 如果使用CephFS,則至少有兩個完全相同配置的MDS節點;
- 如果使用Ceph對象網關,則至少有兩個不同的RADOSGW節點。
- 一個部署節點,可以使用ceph-ansible包中的Ansible劇本來部署和配置集群。
1.2 準備工作
- 具備相同操作系統的集群節點,建議RHEL7;
- 配置軟體倉庫(centos epel源、ubuntu apt源、redhat使用subscription-manager命令註冊系統);
- 所有節點配置網路及NTP時間同步;
- 關閉selinux與防火牆,或放通所有相關流量和埠;
- 在部署節點安裝ansbile;
- 添加hosts,並確保能正確解析到所有主機;
- 配置部署節點使用Ansible任務的用戶到其他所有節點可以ssh免密登錄;
- 驗證部署節點能夠在集群節點上能正常運行ansible任務。
1.3 其他註意事項
- OSD磁碟不建議使用RAID,Ceph使用複製或糾刪碼來保護數據
- 在生產環境部署Ceph集群,為便於管理,OSD主機應儘量使用統一的硬體。儘可能配置數量、大小和名稱都相同的磁碟,有助於確保性能一致,並且簡化故障排除;
- 需要確認每個OSD主機提供的OSD的數量。密度較小的存儲集群意味著osd守護進程分佈到更多的主機上,分發工作負載。密度較高的存儲意味著重平衡和數據恢復需要更高的流量
附一:組件埠說明
Monitor 6789/TCP:Communication within the Ceph cluster Manager 7000/TCP:Communication with the Ceph Manager dashboard 8003/TCP:Communication with the Ceph Manager RESTful API via HTTPS 9283/TCP:Communication with the Ceph Manager Prometheus plug-in OSD 6800-7300/TCP:Each OSD uses three ports in this range: one for communicating with clients and monitors over the public network; one for sending data to other OSDs over a cluster network,or over the public network if the former does not exist; and another for exchanging heartbeat packets over a cluster network or over the public network if the former does not exists. RADOS Gateway 7480/TCP:RADOS Gateway uses port 7480/TCP,but you can change it, for example to port 80/TCP,or to port 443/TCP if using the SSL/TLS service.二 部署相關知識點
2.1 Ansible介紹
略,具體Ansible操作見本博客Ansible文章。2.2 Ansible部署Ceph相關yml
/usr/share/ceph-ansible/group_vars/all.yml:所有節點相關yml配置; /usr/share/ceph-ansible/group_vars/osds.yml:所有OSD節點的yml配置; /usr/share/ceph-ansible/group_vars/client.yml:客戶端節點的yml配置。 /usr/share/ceph-ansible:運行Ansible部署的主目錄。2.3 yml主要相關參數
- all.yml參數
- osds.ym
2.4 客戶端相關命令
2.5 對象object相關命令
三 正式部署
3.1 部署節點配置主機名
1 [root@servera ~]# vi /etc/hosts 2 172.25.250.10 servera 3 172.25.250.12 serverc 4 172.25.250.13 serverd 5 172.25.250.14 servere
提示:主機名應該能正確解析主機名,若管理節點同時也是一個Ceph節點,也要確認能正確解析自己的主機名和IP地址。本實驗環境此3.1步驟可省略。
3.2 創建相關用戶
1 [root@servera ~]# useradd student 2 [root@servera ~]# echo student | passwd --stdin student #創建非root的管理用戶 3 [root@servera ~]# for i in {a..e}; do echo "====server${i}====";ssh root@server${i} 'useradd -d /home/student -m student; echo "student" | passwd --stdin student'; done #所有OSD server節點創建student用戶 5 [root@servera ~]# for i in {a..e}; do echo "====server${i}====";ssh root@server${i} 'useradd -d /home/ceph -m ceph; echo "redhat" | passwd --stdin ceph'; done 6 [root@servera ~]# for i in {a..e}; do echo "====server${i}====";ssh root@server${i} 'echo "student ALL = (root) NOPASSWD:ALL" > /etc/sudoers'; done 7 [root@servera ~]# for i in {a..e}; do echo "====server${i}====";ssh root@server${i} 'chmod 0440 /etc/sudoers'; done
3.3 配置部署節點免密鑰
1 [root@servera ~]# su - student 2 [student@servera ~]$ ssh-keygen -f ~/.ssh/id_rsa -N '' 3 [student@servera ~]$ for i in {a..e}; do echo "====server${i}====";ssh-copy-id student@server$i;ssh-copy-id ceph@server$i; done
3.4 配置Ansible Inventory
1 [student@servera ~]$ sudo vi /usr/share/ceph-ansible/ansible.cfg 2 log_path = /tmp/ansible.log #修改日誌路徑為student用戶可寫入的/tmp路徑 3 deprecation_warnings = False #禁用在ansible-playbook輸出結果相關必須要警告
提示:Ansible預設使用/etc/ansible/hosts作為Inventory文件,也可使用-f參數手動指定其他文件。
1 [student@servera ~]$ sudo vi /etc/ansible/hosts 2 [mons] 3 server[c:e] 4 5 [mgrs] 6 server[c:e] 7 [student@servera ~]$ ansible mons -m ping #測試mons組節點通信 8 [student@servera ~]$ ansible mgrs -m ping #測試mgrs組節點通信 9 [student@servera ~]$ ansible mons -m command -a id #通過命令測試mons組節點 10 [student@servera ~]$ ansible mgrs -m command -a id #通過命令測試mgrs組節點
提示:ceph ansible playbook為每種Ceph節點類型使用一個主機組:monitors節點使用mons, osds節點使用osds,managers節點使用mgrs,MDSs使用mdss, Ceph客戶端使用clients, RADOS網關節點使用raws, iSCSI網關使用iscsi-gws,啟用RBD mirroring使用rd-mirror。 因此需要需要根據Ceph主機的角色將它們在對應的Inventory文件中配置為對應的組。
3.5 創建site.yml
1 [student@servera ~]$ cd /usr/share/ceph-ansible/ 2 [student@servera ceph-ansible]$ sudo cp site.yml.sample site.yml 3 [student@servera ceph-ansible]$ sudo vi site.yml 4 #…… 5 - hosts: osds 6 gather_facts: false 7 become: True 8 serial: 1 #在osd(80行左右)添加此行
提示:添加serial: 1添,會減慢了OSD的部署,但是使我們更有可能預測哪個OSD編號被分配給哪個OSD主機,以便將來的實驗室練習。
3.6 創建all.yml
1 [student@servera ~]$ cd /usr/share/ceph-ansible/group_vars/ 2 [student@servera group_vars]$ sudo cp all.yml.sample all.yml 3 [student@servera group_vars]$ sudo vi all.yml 4 --- 5 dummy: 6 ntp_service_enabled: false #本實驗採用chrony進行時鐘同步 7 ceph_origin: repository 8 ceph_repository: rhcs 9 ceph_rhcs_version: "3" 10 ceph_repository_type: cdn 11 rbd_cache: "true" #開啟RBD回寫緩存 12 rbd_cache_writethrough_until_flush: "false" #在切換回寫之前,不從寫透開始。 13 rbd_client_directories: false #不要創建客戶機目錄(它們應該已經存在)。 14 monitor_interface: eth0 15 journal_size: 1024 #本環境存儲設備很小,OSD日誌比通常建議的要小 16 public_network: 172.25.250.0/24 17 cluster_network: "{{ public_network }}" 18 ceph_conf_overrides: 19 global: 20 mon_osd_allow_primary_affinity: 1 21 mon_clock_drift_allowed: 0.5 #允許MON時鐘間隔最多0.5秒 22 osd_pool_default_size: 2 23 osd_pool_default_min_size: 1 #降低存儲池複製大小的預設設置 24 mon_pg_warn_min_per_osd: 0 #見提示一 25 mon_pg_warn_max_per_osd: 0 #見提示二 26 mon_pg_warn_max_object_skew: 0 #見提示三 27 client: 28 rbd_default_features: 1 #僅為以後的練習啟用一組特定的客戶機功能
提示一:根據每個OSD的pg數量關閉集群健康警告。通常,第一個變數被設置為30,如果OSD中的每個“in”平均少於30個pg,集群就會發出警告。 提示二:此變數預設值為300,如果OSD中的每個“in”平均超過300個pg,集群就會發出警告,在本實驗的小集群中可能沒有很多pg,因此採用禁用。 提示三:根據某個池中對象的數量大於集群中一組池中對象的平均數量,關閉集群健康警告。同樣,我們有一個非常小的集群,這避免了通常指示我們需要調優集群的額外警告。
3.7 正式部署Ceph集群
1 [student@servera ~]$ cd /usr/share/ceph-ansible/ 2 [student@servera ceph-ansible]$ ansible-playbook site.yml
提示:若部署成功,則對於每個MON節點,前面的命令輸出應該顯示failed=0。在playbook執行過程中,可能會有許多非致命的警告,它們不會被當做“失敗”任務,可以忽略。
3.8 確認驗證Ceph集群
1 [student@servera ~]$ ssh ceph@serverc ceph -s
1 [student@servera ~]$ ssh ceph@serverc cat /etc/ceph/ceph.conf
1 [student@servera ~]$ ssh ceph@serverc ps aux | grep ceph-mon
3.9 創建osds.yml
1 [student@servera ~]$ cd /usr/share/ceph-ansible/group_vars/ 2 [student@servera group_vars]$ sudo cp osds.yml.sample osds.yml 3 [student@servera group_vars]$ sudo vi osds.yml 4 --- 5 dummy: 6 osd_scenario: "collocated" #OSD使用併列的OSD形式 7 devices: 8 - /dev/vdb #使用/dev/vdb作為後端存儲設備