タスク目標#
- ceph クラスタの展開を完了する
タスクプラットフォーム#
- 物理デバイス --
- オペレーティングシステム:openEuler 22.03 LTS SP2
展開ガイド#
タスク 1:設定準備#
- ホスト名の変更
# 10.10.3.117のホスト名をfuture-ceph-node0に変更
hostnamectl set-hostname future-ceph-node0 && bash
# 10.10.3.118のホスト名をfuture-ceph-node1に変更
hostnamectl set-hostname future-ceph-node1 && bash
# 10.10.3.119のホスト名をfuture-ceph-node2に変更
hostnamectl set-hostname future-ceph-node2 && bash
# 10.10.3.120のホスト名をfuture-ceph-node3に変更
hostnamectl set-hostname future-ceph-node3 && bash
- インストール前の設定変更
# ファイアウォールを停止
systemctl stop firewalld
systemctl disable firewalld
firewall-cmd --state
# selinuxを永久に無効化
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
cat /etc/selinux/config
# hostsの追加
cat >> /etc/hosts << EOF
10.10.3.117 future-ceph-node0
10.10.3.118 future-ceph-node1
10.10.3.119 future-ceph-node2
10.10.3.120 future-ceph-node3
EOF
#確認
cat /etc/hosts
# 時間の同期
yum install ntp -y
systemctl start ntpd
systemctl enable ntpd
yum install chrony -y
systemctl start chronyd
systemctl enable chronyd
# 設定を変更し、内容を追加
echo "
server 10.10.3.70 iburst
allow 10.10.3.0/24
" >> /etc/chrony.conf
timedatectl set-ntp true
systemctl restart chronyd
timedatectl status
date
ノード間のSSH通信を追加
ssh-keygen -t rsa
ssh-copy-id 10.10.3.118
ssh-copy-id 10.10.3.119
ssh-copy-id 10.10.3.120
タスク 2:Ceph を分散ストレージとして展開#
設定ダウンロードソース
echo "[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/x86_64/
gpgcheck=0
priority=1
[ceph-noarch]
name=cephnoarch
baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/
gpgcheck=0
priority=1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/SRPMS/
enabled=0
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
" >/etc/yum.repos.d/ceph.repo
python2 をダウンロード
- zlibライブラリをインストールしないと、pip をインストールする際にエラーが発生します(再コンパイルが必要です)
yum -y install zlib*
- GCC パッケージをインストールします。GCC がインストールされていない場合は、以下のコマンドを使用してインストールしてください。
yum -y install gcc openssl-devel bzip2-devel
- Python-2.7.18 をダウンロード
cd /usr/src
yum -y install wget
wget https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz
tar xzf Python-2.7.18.tgz
- コンパイルの前に、インストールソースファイルの Modules/Setup.dist ファイルを修正し、コメントを外します。
#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
- Python-2.7.18 をコンパイルします(
make altinstall
はデフォルトの python バイナリファイル /usr/bin/python を置き換えないようにします)。
cd /usr/src/Python-2.7.18
./configure --enable-optimizations
yum install -y make
make altinstall
元の Python バイナリファイルを上書きしたりリンクしたりしないでください。これによりシステムが壊れる可能性があります。
- 環境変数を設定します。
vi /etc/profile
export PYTHON_HOME=/usr/local/
PATH=$PATH:$PYTHON_HOME/bin
source /etc/profile
- pip のインストールスクリプトをダウンロードします。
curl "https://bootstrap.pypa.io/pip/2.7/get-pip.py" -o "get-pip.py"
- インストールスクリプトを実行してダウンロードします。
python2.7 get-pip.py
ceph をダウンロード
# future-ceph-node0でダウンロード
pip2 install ceph-deploy
yum install -y ceph ceph-radosgw
# 他のノードでダウンロード
yum install -y ceph ceph-radosgw
# インストールパッケージが完全であるか確認
rpm -qa |egrep -i "ceph|rados|rbd"
ceph クラスタの展開#
管理ノード#
Monitor の展開
- 設定ファイルディレクトリを作成し、設定ファイルを作成します。
mkdir /etc/ceph/
touch /etc/ceph/ceph.conf
- クラスタの FSDI を生成します:
uuidgen
38ac0084-40b7-4c93-b561-a16d6a6478c5
- クラスタのためにキーリングを作成し、Monitor サービスのためにキーを生成します:
ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
- 管理者キーリングを作成し、client.admin ユーザーを生成し、このユーザーをキーリングに追加します:
ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'
- bootstrap-osd キーリングを作成し、client.bootstrap-osd ユーザーをこのキーリングに追加します:
ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd'
- 生成されたキーを ceph.mon.keyring に追加します。
ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
- ホスト名と IP アドレス、FSID を使用して monitor マップを生成します:
monmaptool --create --add future-ceph-node0 10.10.3.117 --fsid 79fd2206-39ca-4ec4-9cd2-96e065c6361e /tmp/monmap
- mon のディレクトリを作成し、
クラスタ名-ホスト名
の形式を使用します:
mkdir /var/lib/ceph/mon/ceph-future-ceph-node0
- 最初の mon デーモンの情報を入力します:
ceph-mon --mkfs -i future-ceph-node0 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
- /etc/ceph/ceph.conf ファイルを設定します:
cat /etc/ceph/ceph.conf
################################################
[global]
fsid = 79fd2206-39ca-4ec4-9cd2-96e065c6361e # 生成されたFSID
mon initial members =future-ceph-node0
mon host = 10.10.3.117
public network = 10.10.3.0/24
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
osd journal size = 1024
osd pool default size = 3
osd pool default min size = 2
osd pool default pg num = 333
osd pool default pgp num = 333
osd crush chooseleaf type = 1
################################################
- root で操作しているため、権限を ceph に設定する必要があります(systemd の起動ファイルを変更して ceph ユーザーを root に変更することもできます)、そして Monitor を起動します。
chown -R ceph:ceph /var/lib/ceph
systemctl start [email protected]
systemctl enable [email protected]
- サービスが正常に起動していることを確認します:
ceph -s
yum install -y net-tools
netstat -lntp|grep ceph-mon
Manager の展開
ceph-mon サービスを設定した後、ceph-mgr サービスを設定する必要があります。
- 認証キーを生成します(ceph-mgr はカスタム名です):
# 10.10.3.117
ceph auth get-or-create mgr.ceph-mgr mon 'allow profile mgr' osd 'allow *' mds 'allow *'
[mgr.ceph-mgr]
key = AQBMNTZl5adxEhAAk6Jk/CKNWUyNb2DoKXUPvQ==
# 10.10.3.118
ceph auth get-or-create mgr.ceph-mgr1 mon 'allow profile mgr' osd 'allow *' mds 'allow *'
[mgr.ceph-mgr1]
key = AQDbRTZlgjXWBBAAGew4Xta+t9vgIWPCWC8EVg==
- このキーを保存するファイルのディレクトリを作成します。
# 10.10.3.117
sudo -u ceph mkdir /var/lib/ceph/mgr/ceph-ceph-mgr
# 生成されたキーをこのディレクトリに保存し、keyringと名付けます。
vi /var/lib/ceph/mgr/ceph-ceph-mgr/keyring
[mgr.ceph-mgr]
key = AQBMNTZl5adxEhAAk6Jk/CKNWUyNb2DoKXUPvQ==
# 10.10.3.118
sudo -u ceph mkdir /var/lib/ceph/mgr/ceph-ceph-mgr1
# 生成されたキーをこのディレクトリに保存し、keyringと名付けます。
vi /var/lib/ceph/mgr/ceph-ceph-mgr1/keyring
[mgr.ceph-mgr1]
key = AQDbRTZlgjXWBBAAGew4Xta+t9vgIWPCWC8EVg==
- ceph-mgr サービスを起動します。
ceph-mgr -i ceph-mgr
ceph-mgr -i ceph-mgr1
systemctl enable ceph-mgr@future-ceph-node0
systemctl enable ceph-mgr@future-ceph-node1
# サービスが起動しているか確認し、cephの状態を確認します。
ceph -s
# 現在のmgrで利用可能なモジュールを確認します。
ceph mgr module ls
OSD の作成
ceph-volume lvm create --data /dev/sdb
# 現在のlvm論理ボリュームを確認します。
ceph-volume lvm list
# cephの状態を確認します。
ceph -s
Ceph-dashboard のインストールと設定
- dashboard 機能を有効にします。
ceph mgr module enable dashboard
- 証明書を作成します。
ceph dashboard create-self-signed-cert
- web ログインのユーザー名とパスワードを設定します。
# /etc/ceph/dashboard.keyを作成し、パスワードを書き込みます。
echo "パスワード" >/etc/ceph/dashboard.key
ceph dashboard ac-user-create k8s administrator -i /etc/ceph/dashboard.key
- dashboard のデフォルトポートを変更します(オプション)
ポートを設定します。デフォルトポートは 8443 で、18443 に変更します。変更後、mgr を再起動する必要があります。ポートが有効になります。
ceph config set mgr mgr/dashboard/server_port 18443
systemctl restart ceph-mgr.target
- サービスアドレスを確認し、ログインします。
ceph mgr services
{
"dashboard": "https://future-ceph-node0:8443/"
}
node ノード#
Monitor の拡張
- マスターノードの設定を変更します。
vi /etc/ceph/ceph.conf
[global]
fsid = 79fd2206-39ca-4ec4-9cd2-96e065c6361e # 生成されたFSID
mon initial members =future-ceph-node0,future-ceph-node1,future-ceph-node2,future-ceph-node3 # ホスト名
mon host = 10.10.3.117,10.10.3.118,10.10.3.119,10.10.3.120 # 対応するIP
public network = 10.10.3.0/24
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
osd journal size = 1024
osd pool default size = 3
osd pool default min size = 2
osd pool default pg num = 333
osd pool default pgp num = 333
osd crush chooseleaf type = 1
[mon]
mon allow pool delete = true
[mds.future-ceph-node0]
host = future-ceph-node0
- 設定とキーリングファイルを他のノードに配布します(マスターノード)。
# 公開鍵を生成し、nodeノードのホストにコピーします。
ssh-keygen -t rsa
ssh-copy-id 10.10.3.118
ssh-copy-id 10.10.3.119
ssh-copy-id 10.10.3.120
# 認証キーをコピーします。
scp /etc/ceph/* 10.10.3.118:/etc/ceph/
scp /etc/ceph/* 10.10.3.119:/etc/ceph/
scp /etc/ceph/* 10.10.3.120:/etc/ceph/
- node ノードで ceph 関連のディレクトリを作成し、権限を追加します:
mkdir -p /var/lib/ceph/{bootstrap-mds,bootstrap-mgr,bootstrap-osd,bootstrap-rbd,bootstrap-rgw,mds,mgr,mon,osd}
chown -R ceph:ceph /var/lib/ceph
sudo -u ceph mkdir /var/lib/ceph/mon/ceph-future-ceph-node1
sudo -u ceph mkdir /var/lib/ceph/mon/ceph-future-ceph-node2
sudo -u ceph mkdir /var/lib/ceph/mon/ceph-future-ceph-node3
- node ノードの設定ファイルを変更します。node1 の例(他のノードも同様)。
[global]
fsid = 79fd2206-39ca-4ec4-9cd2-96e065c6361e # 生成されたFSID
mon initial members =future-ceph-node0,future-ceph-node1,future-ceph-node2,future-ceph-node3 # ホスト名
mon host = 10.10.3.117,10.10.3.118,10.10.3.119,10.10.3.120 # 対応するIP
public network = 10.10.3.0/24
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
osd journal size = 1024
osd pool default size = 3
osd pool default min size = 2
osd pool default pg num = 333
osd pool default pgp num = 333
osd crush chooseleaf type = 1
[mon]
mon allow pool delete = true
[mon.future-ceph-node1]
mon_addr = 10.10.3.118:6789
host = future-ceph-node1
- クラスタ内のキーとマップを取得します。node1 の例(他のノードも同様)。
ceph auth get mon. -o /tmp/monkeyring
ceph mon getmap -o /tmp/monmap
- 既存のキーとマップを使用して新しい Monitor を追加し、ホスト名を指定します。node1 の例(他のノードも同様)。
sudo -u ceph ceph-mon --mkfs -i future-ceph-node1 --monmap /tmp/monmap --keyring /tmp/monkeyring
- サービスを起動します。node1 の例(他のノードも同様)。
systemctl start ceph-mon@future-ceph-node1
systemctl enable ceph-mon@future-ceph-node1
# monの状態を確認します。
ceph -s
ceph mon stat
OSD の追加
既存の osd のマスターノードから初期化されたキーリングファイルをコピーします。
scp -p /var/lib/ceph/bootstrap-osd/ceph.keyring 10.10.3.118:/var/lib/ceph/bootstrap-osd/
scp -p /var/lib/ceph/bootstrap-osd/ceph.keyring 10.10.3.119:/var/lib/ceph/bootstrap-osd/
scp -p /var/lib/ceph/bootstrap-osd/ceph.keyring 10.10.3.120:/var/lib/ceph/bootstrap-osd/
node ノードに osd を追加します。
ceph-volume lvm create --data /dev/sdb
systemctl restart ceph-osd@future-ceph-node1
systemctl enable ceph-osd@future-ceph-node1
# 状態を確認します。
ceph -s
Mds の追加#
# ディレクトリを作成します。
sudo -u ceph mkdir -p /var/lib/ceph/mds/ceph-future-ceph-node0
# キーを作成します。
ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-future-ceph-node0/keyring --gen-key -n mds.future-ceph-node0
# キーをインポートし、capsを設定します。
ceph auth add mds.future-ceph-node0 osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-future-ceph-node0/keyring
# 手動でサービスを起動します。
ceph-mds --cluster ceph -i future-ceph-node0 -m future-ceph-node0:6789
chown -R ceph:ceph /var/lib/ceph/mds/
systemctl start ceph-mds@future-ceph-node0
systemctl enable ceph-mds@future-ceph-node0
# サービスが起動しているか確認します。
ps -ef|grep ceph-mds
# cephクラスタの状態を確認します。
ceph -s
CephFS の作成#
プールを作成します。
# データを保存します。
ceph osd pool create cephfs_data 64
# メタデータを保存します。
ceph osd pool create cephfs_metadata 64
# cephfsファイルシステムを有効にします。
ceph fs new cephfs cephfs_metadata cephfs_data
# ファイルシステムの状態を確認します。
ceph fs ls
ceph mds stat
- cephfs をマウントします。
カーネルドライバでマウントします。
# 依存関係をインストールします。
yum install -y ceph-common
# マウントポイントを作成します。
mkdir /data
# ストレージキーを取得します(管理ノード)。
cat /etc/ceph/ceph.client.admin.keyring
# 117の/dataを他のホストの/dataにマウントします。
mount -t ceph 10.10.3.117:6789:/ /data -o name=admin,secret=AQBLfS9l612IGhAAOF1iJqT6+rHJPCxqQegqCA==
# アンマウントします。
umount /data
ユーザー制御でマウントします。
yum install ceph-fuse -y
# 他のホストにマウントします。
ceph-fuse -m 10.10.3.117:6789 /data
# マウント設定を確認します。
df -h |grep code
# アンマウントします。
fusermount -u /mnt/cephfs
rbd プールの作成#
# rbdプールを作成します。
ceph osd pool create rbd-k8s 64 64
# 有効にします。
ceph osd pool application enable rbd-k8s rbd
# 初期化します。
rbd pool init rbd-k8s
# 確認します。
ceph osd lspools
# イメージを確認します。
rbd ls rbd-k8s
# イメージ情報を確認します。
rbd info --pool rbd-k8s --image mars-c09bb992-963e-43dd-8e5c-e3a1d723b1c8
# イメージをマッピングします。
rbd map --pool rbd-k8s --image mars-c09bb992-963e-43dd-8e5c-e3a1d723b1c8
# フォーマットします。
mkfs.ext4 /dev/rbd0
# ローカルにマウントします。
mount /dev/rbd0 /data/code
# 確認します。
lsblk
# アンマウントします。
umount /dev/rbd0
# マッピングを解除します。
rbd unmap /dev/rbd0