參考文檔:
- Install-guide:https://docs.openstack.org/install-guide/
- OpenStack High Availability Guide:https://docs.openstack.org/ha-guide/index.html
- 理解Pacemaker:http://www.cnblogs.com/sammyliu/p/5025362.html
- Ceph原理:https://www.cnblogs.com/kevingrace/p/8387999.html
十七.分布式存儲Ceph
1. 設置yum源
# 在全部控制與計算節點設置epel與ceph yum源(base yum源已更新),以controller01節點為例; # epel:http://mirrors.aliyun.com/repo/ [root@controller01 ~]# wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo # ceph:http://mirrors.aliyun.com/ceph/ # 編輯ceph.repo文件,使用luminous版本 [root@controller01 ~]# vim /etc/yum.repos.d/ceph.repo [ceph] name=ceph baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/ enabled=1 gpgcheck=1 type=rpm-md gpgkey=http://mirrors.aliyun.com/ceph/keys/release.asc [ceph-noarch] name=cephnoarch baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/ enabled=1 gpgcheck=1 type=rpm-md gpgkey=http://mirrors.aliyun.com/ceph/keys/release.asc [ceph-source] name=ceph-source baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS/ enabled=1 gpgcheck=1 type=rpm-md gpgkey=http://mirrors.aliyun.com/ceph/keys/release.asc# 重新加載yum源 [root@controller01 ~]# yum clean all [root@controller01 ~]# yum makecache # 查看yum源 [root@controller01 ~]# yum repolist
2. 環境
基礎環境,如hosts,時間同步ntp,開放端口iptables等相關操作,請見:https://www.cnblogs.com/netonline/p/9180299.html
3. 創建用戶
1)創建用戶
[root@controller01 ~]# useradd -d /home/ceph -m cephde [root@controller01 ~]# passwd cephde New password: storage_pass Retype new password: storage_pass # 修改visudo文件,使cephde用戶在sudo列表中; # 在92行” root ALL=(ALL) ALL”下新增一行:” cephde ALL=(ALL) ALL” [root@controller01 ~]# visudo 93 cephde ALL=(ALL) ALL
2)用戶賦權
# 設置cephde用戶具備無密碼sudo(root)權限; # 切換到cephde用戶下操作 [root@controller01 ~]# su - cephde [cephde@controller01 ~]$ echo "cephde ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephde [sudo] password for cephde:storage_pass [cephde@controller01 ~]$ sudo chmod 0440 /etc/sudoers.d/cephde
4. 設置ssh免密登陸
1)生成秘鑰
# ceph-deploy不支持密碼輸入,需要在管理控制節點生成ssh秘鑰,並將公鑰分發到各ceph節點; # 在用戶cephde下生成秘鑰,不能使用sudo或root用戶; # 默認在用戶目錄下生成~/.ssh目錄,含生成的秘鑰對; # “Enter passphrase”時,回車,口令為空; # 另外3個控制節點均設置為ceph管理節點,應該使3個控制管理節點都可以ssh免密登陸到其他所有控制與存儲節點 [root@controller01 ~]# su - cephde [cephde@controller01 ~]$ ssh-keygen -t rsa Enter file in which to save the key (/home/ceph/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again:
2)分發密鑰
# 前提是各控制與存儲節點已生成相關用戶; # 初次連接其他節點時需要確認; # 首次分發公鑰需要密碼; # 分發成功后,在~/.ssh/下生成known_hosts文件,記錄相關登陸信息; # 以controller01節點免密登陸controller02節點為例;另外3個控制節點均設置為ceph管理節點,應該使3各控制管理節點都可以ssh免密登陸到其他所有控制與存儲節點 [cephde@controller01 ~]$ ssh-copy-id cephde@controller02 Are you sure you want to continue connecting (yes/no)? yes cephde@controller02's password:
3)設置環境變量(optional)
# 在root賬號~目錄下,生成~/.ssh/config文件,這樣在控制管理節點上執行”ceph-deploy”時可不切換用戶或指定”--username {username}”; [root@controller01 ~]# cat ~/.ssh/config # ceph-deploy Host controller02 Hostname controller02 User cephde Host controller03 Hostname controller03 User cephde Host compute01 Hostname compute01 User cephde Host compute02 Hostname compute02 User cephde Host compute03 Hostname compute03 User cephde
5. 安裝ceph-deploy
# 在規划的全部控制管理節點安裝ceph-deploy工具,以controller01節點為例 [root@controller01 ~]# yum install ceph-deploy -y
6. 創建ceph集群
1)創建集群
# 在cephde賬戶下操作,切忌使用sudo操作; # 在管理節點上生成一個目錄用於存放集群相關配置文件; [root@controller01 ~]# su - cephde [cephde@controller01 ~]$ mkdir cephcluster # 后續ceph-deploy相關操作全部在所創建的目錄執行; # 將規划中的MON(monitor)節點納入集群,即創建集群 [cephde@controller01 ~]$ cd ~/cephcluster/ [cephde@controller01 cephcluster]$ ceph-deploy new controller01 controller02 controller03
2)修改集群配置文件(optional)
# 生成集群后在集群目錄下生成3個文件,其中ceph.conf即是配置文件; # 默認可不修改,為使服務按規划啟動,可做適當修改; # 以下紅色字體部分是在默認生成的conf文件上新增的配置 [cephde@controller01 cephcluster]$ cat ceph.conf [global] fsid = 9b606fef-1cde-4d4c-b269-90079d1d45dd mon_initial_members = controller01, controller02, controller03 mon_host = 172.30.200.31,172.30.200.32,172.30.200.33 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx # public network:前端mon網絡,client訪問網絡;確保public network與mon_host在相同網段,否則初始化時可能會有錯誤; # cluster network:后端osd心跳,數據/流復制恢復等網絡 public network = 172.30.200.0/24 cluster network = 10.0.0.0/24 # 默認的副本數為3,實驗環境變更為2 osd pool default size = 2 # 默認保護機制不允許刪除pool,根據情況設置 mon_allow_pool_delete = true
7. 安裝ceph
# 在全部控制管理與存儲節點安裝ceph; # 理論上在控制節點的ceph集群目錄使用ceph-deploy可統一安裝,命令:ceph-deploy install controller01 controller02 controller03 compute01 compute02 compute03; # 但由於網速原因大概率會失敗,可在各存儲節點獨立安裝ceph與ceph-radosgw,以controller01節點為例 [root@controller01 ~]# yum install -y ceph ceph-radosgw # 查看版本 [root@controller01 ~]# ceph -v
8. 初始化ceph_mon
# 在控制管理節點初始化monitor [cephde@controller01 cephcluster]$ ceph-deploy mon create-initial # 初始化完成后,在集群目錄下新增多個秘鑰文件 [cephde@controller01 cephcluster]$ ls -l
# 查看狀態 [cephde@controller01 cephcluster]$ sudo systemctl status ceph-mon@controller01
9. 分發ceph.conf與秘鑰
# 分發ceph配置文件與秘鑰到其他控制管理節點與存儲節點; # 注意分發節點本身也需要包含在內,默認沒有秘鑰文件,需要分發; # 如果被分發節點已經配置文件(統一變更配置文件場景),可以使用如下命令:ceph-deploy --overwrite-conf admin xxx
# 分發的配置文件與秘鑰在各節點/etc/ceph/目錄 [cephde@controller01 cephcluster]$ ceph-deploy admin controller01 controller02 controller03 compute01 compute02 compute03
10. 安裝ceph_mgr
1)安裝mgr
# luminous版本必須安裝mgr(dashboard) [cephde@controller01 cephcluster]$ ceph-deploy mgr create controller01:controller01_mgr controller02:controller02_mgr controller03:controller03_mgr
# 查看狀態; [cephde@controller01 cephcluster]$ systemctl status ceph-mgr@controller01_mgr
[cephde@controller01 cephcluster]$ sudo netstat -tunlp | grep mgr
2)啟動mgr
# 可查看mgr默認開啟的服務:(sudo) ceph mgr module ls; # 默認dashboard服務在可開啟列表中,但並未啟動,需要手工開啟 [cephde@controller01 cephcluster]$ sudo ceph mgr module enable dashboard # dashboard服務已開啟,默認監聽全部地址的tcp7000端口; # 如果需要設置dashboard的監聽地址與端口,如下: # 設置監聽地址:(sudo) ceph config-key put mgr/dashboard/server_addr x.x.x.x # 設置監聽端口:(sudo) ceph config-key put mgr/dashboard/server_port x [cephde@controller01 cephcluster]$ sudo netstat -tunlp | grep mgr
web登陸:http://172.30.200.31:7000/
11. 查看集群狀態
# 查看monitor狀態 [cephde@controller01 cephcluster]$ sudo ceph mon stat
# 查看ceph狀態:ceph health (detail),ceph -s,ceph -w等; # 狀態顯示mgr處於active-standby模式 [cephde@controller01 cephcluster]$ sudo ceph -s
# 可在各節點查看認證信息等 [cephde@controller01 cephcluster]$ sudo ceph auth list
# 檢查狀態:ceph quorum_status --format json-pretty # 查看集群詳細配置:ceph daemon mon.{CEPH-NODE} config show | more
# 查看mon詳細狀態:ceph daemon mon.{CEPH-NODE} mon_status
# 查看ceph log所在目錄:ceph-conf --name mon.{CEPH-NODE} --show-config-value log_fil
# 查看mon節點的admin socket:ceph-conf --name mon.ceph01 --show-config-value admin_socket
12. 創建osd(存儲)
1)創建osd
# osd位於存儲節點,可查看存儲節點磁盤狀況,以compute01節點為例; # 或在管理節點采用命令:ceph-deploy disk list NODE1 NODE2 … NODEN;
# 如果節點磁盤有數據,可通過命令初始化(謹慎):ceph-deploy disk zap {NODE} {DISK},這里{DISK}可以是物理盤符,也可是分區
[root@compute01 ~]# lsblk
# 實際創建osd時,可通過管理節點使用ceph-deploy創建;
# 參數"--data"指定數據盤,參數"--journal"指定journal日志盤,日志盤可以是logical volume(vg/lv)或GPT patition,是option操作; # 本例中有3個osd節點,每個osd節點可運行4個osd進程(在6800~7300端口范圍內,每進程監聽1個本地端口);
# 另有命令:ceph-deploy osd prepare {NODE}:{DISK}[:{/PATH/TO/JOURNAL}]; ceph-deploy osd activate {NODE}:{DISK}[:{/PATH/TO/JOURNAL}],其中[:{/PATH/TO/JOURNAL}]是option操作,可創建具有journal日志的osd守護進程(節點)
[cephde@controller01 cephcluster]$ ceph-deploy osd create compute01 --data /dev/sdb [cephde@controller01 cephcluster]$ ceph-deploy osd create compute01 --data /dev/sdc [cephde@controller01 cephcluster]$ ceph-deploy osd create compute01 --data /dev/sdd [cephde@controller01 cephcluster]$ ceph-deploy osd create compute01 --data /dev/sde [cephde@controller01 cephcluster]$ ceph-deploy osd create compute02 --data /dev/sdb [cephde@controller01 cephcluster]$ ceph-deploy osd create compute02 --data /dev/sdc [cephde@controller01 cephcluster]$ ceph-deploy osd create compute02 --data /dev/sdd [cephde@controller01 cephcluster]$ ceph-deploy osd create compute02 --data /dev/sde [cephde@controller01 cephcluster]$ ceph-deploy osd create compute03 --data /dev/sdb [cephde@controller01 cephcluster]$ ceph-deploy osd create compute03 --data /dev/sdc [cephde@controller01 cephcluster]$ ceph-deploy osd create compute03 --data /dev/sdd [cephde@controller01 cephcluster]$ ceph-deploy osd create compute03 --data /dev/sde
2)查看osd狀態
# 在管理節點查看 [cephde@controller01 cephcluster]$ ceph-deploy osd list compute01
# 在管理節點查看osd狀態等 [cephde@controller01 cephcluster]$ sudo ceph osd stat [cephde@controller01 cephcluster]$ sudo ceph osd tree
# 在管理節點查看容量及使用情況 [cephde@controller01 cephcluster]$ sudo ceph df
# 在osd節點查看 [root@compute01 ~]# lsblk
# ceph-osd進程,根據啟動順序,每個osd進程有特定的序號 [root@compute01 ~]# systemctl status ceph-osd@0
# osd進程端口號; # 或:ps aux | grep osd | grep -v grep [root@compute01 ~]# netstat -tunlp | grep osd
或登陸mgr_dashboard:http://172.30.200.31:7000