ceph 分散ストレージのデプロイメント
ceph 分散ストレージのデプロイメント
ceph-deploy をインストールするための ceph リポジトリを追加します
ubuntu
1.リリースキーを追加する
wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
2. ceph ソフトウェア パッケージをウェアハウスに追加します
echo deb https://download.ceph.com/debian-{
ceph-stable-release}/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
国内镜像
## echo deb https://mirrors.aliyun.com/ceph/debian-mimic/$(lsb_release -sc)main|sudo tee /etc/apt/sources.list.d/ceph/list
echo deb https://mirrors.aliyun.com/ceph/debian-nautilus/ $(lsb_release -sc ) main | sudo tee /etc/apt/sources.list.d/ceph.list
- 必ず国内ミラーリングを使用してください。そうしないと、速度が非常に遅くなります。
3. ウェアハウスを更新し、ceph-deploy をインストールします。
sudo apt update
sudo apt install ceph-deploy
セントス7
1. ターゲット マシンに登録しsubscription-manager
、サブスクリプションを確認し、パッケージ依存関係の「Extras」リポジトリを有効にします。
sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
2. Enterprise Linux Additional Packages (EPEL) リポジトリをインストールして有効化します。
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
3./etc/yum.repos.d/ceph.repo
次のコマンドを使用して、Ceph リポジトリを yum 構成ファイルに追加します。{ceph-stable-release}
安定した Ceph バージョンに置き換えます(例luminous
: )
cat << EOM > /etc/yum.repos.d/ceph.repo
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-{
ceph-stable-release}/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
EOM
4. リポジトリを更新してインストールしますceph-deploy
yum update
yum install ceph-deploy
ceph ノードの設定
管理ノードには、Ceph ノードへのパスワードなしの SSH アクセスが必要です。ceph-deploy がユーザーとして Ceph ノードにログインする場合、その特定のユーザーはパスワードなしのsudo
権限を持っている必要があります
プラグインの準備
クロックドリフトによって引き起こされる問題を防ぐために、Ceph ノード (特に Ceph Monitor ノード) に NTP をインストールすることをお勧めします。
apt-get install -y ntp ntpdate ntp-doc
ntpdate 0.us.pool.ntp.org #同步时间
hwclock --systohc
systemctl enable ntp #将ntp服务添加到开机启动
systemctl start ntp #启动ntp服务
- 時刻同期に失敗した場合は、ntp サービスを停止し
systemctl stop ntp
、時刻同期完了後に ntp サービスを再起動してください。
Cephデプロイメントユーザーを作成する
1. ceph ノードごとに新しいユーザーを作成します
useradd -m -s /bin/bash cephuser
passwd cephuser
ceph
という名前のユーザーを作成してはなりません
2.新しく追加したユーザーにsudo権限を付与します。
echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser
sudo chmod 0440 /etc/sudoers.d/cephuser
各ノードのホスト名を変更します(それぞれ、node1、node2、node3)。
hostnamectl set-hostname node1
パスワードレスを使用した ssh
ceph-deploy
パスワードの入力は求められないため、管理ノードで SSH キーを生成し、公開キーを各 Ceph ノードに配布する必要があります。ceph-deploy
初期モニター用の SSH キーの生成を試みます
1. SSHキーを生成する
ssh-keygen
Generating public/private key pair.
Enter file in which to save the key (/ceph-admin/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /ceph-admin/.ssh/id_rsa.
Your public key has been saved in /ceph-admin/.ssh/id_rsa.pub.
2. キーを各 Ceph ノードにコピーし{username}
、「Ceph デプロイメント ユーザーの作成」で作成したユーザー名に置き換えます。
ssh-copy-id cephuser@node1
ssh-copy-id cephuser@node2
ssh-copy-id cephuser@node3
3. (推奨) 管理ノードの /root/.ssh/config を変更します。文件,
ceph-deploy 以便
ceph-deploy 可以以创建的用户身份登录到Ceph节点,而无需您指定每次执行的时间。这具有简化和使用的额外好处 。替换为您创建的用户名:
–username {username} ceph-deploy
ssh scp
{username}`
Host node1
Hostname node1
User cephuser
Host node2
Hostname node2
User cephuser
Host node3
Hostname node3
User cephuser
各ノードにcephをインストールする
1. 国内ミラーリングを使用する
国内ミラーを使用してubuntuをインストールする
export CEPH_DEPLOY_REPO_URL=https://mirrors.aliyun.com/ceph/debian-mimic/
export CEPH_DEPLOY_GPG_URL=https://mirrors.aliyun.com/ceph/keys/release.asc
centos7は国内ミラーリングを使用します
export CEPH_DEPLOY_REPO_URL=https://mirrors.163.com/ceph/rmp-mimic/el7
export CEPH_DEPLOY_GPG_URL=https://mirrors.163.com/ceph/keys/release.asc
vi /etc/profile
source /etc/profile
2. 各ポイントに python-minimal をインストールします (インストールされていない場合はエラーが報告されます)
apt install python-minimal
yum install python-setuptools
3. クラスターを作成します (このステップは ceph-deploy ホストでのみ実行する必要があります)
ceph-deploy new node1 node2 node3
4. 各ノードに ceph ソフトウェア パッケージをインストールします (この手順は ceph-deploy ホストでのみ実行する必要があります)。
ceph-deploy install node1 node2 node3
5. 初期 mon (モニター) のデプロイとキーの収集
ceph-deploy mon create-initial
完了すると、ローカル ディレクトリには次のキーリングが作成されます。
-
ceph.bootstrap-mds.keyring
-
ceph.bootstrap-osd.keyring
-
ceph.client.admin.キーリング
-
ceph.bootstrap-mgr.keyring
-
ceph.bootstrap-rgw.keyring
-
ceph.mon.キーリング
6. 設定ファイルと管理キーを使用して管理ノードと Ceph ノードにコピーすると、毎回モニター アドレスを指定してコマンドを実行しなくても CLIceph-deploy
を使用できるようになります。ceph
ceph.client.admin.keyring
ceph-deploy admin node1 node2 node3
7. デプロイメントマネージャーデーモン (mgr)
ceph-deploy mgr create node1 node2 node3
8. 3 つの OSD を追加します。この手順では、各ノードに という名前の未使用のディスクがあることを前提としています/dev/sda
。デバイスが現在使用されておらず、重要なデータが含まれていないことを確認してください。
ceph-deploy disk zap node1 /dev/sda
ceph-deploy osd create --data /dev/sda node1
ceph-deploy osd create --data /dev/sda node2
ceph-deploy osd create --data /dev/sda node3
使用する必要があるコマンドが発生する場合があります
# 用deploy 把这个配置推到其他节点
ceph-deploy --overwrite-conf config push
# 如果有必要先删除原来安装的
ceph-deploy mon destroy k8s02
ceph-deploy mon add k8s03
# 加入osd时,如果以前此节点上有过osd要先删除
ceph-deploy disk zap k8s02 /dev/sdb
# 如果报磁盘忙,则可能挂在系统中,先到节点上执行下面命令
vgdisplay #看一下lvm名称
vgremove ceph-fb95a3c5-cb15-48d1-a2fa-5b444d493f53
# 列出节点上可用磁盘
ceph-deploy disk list node1
# Ceph部署出错后的回滚
ceph-deploy purge {
ceph-node} [{
ceph-node}]
ceph-deploy purgedata {
ceph-node} [{
ceph-node}]
ceph-deploy forgetkeys
rm ceph.*
9.プールの作成
ceph osd pool create k8s 64
k8s ユーザーを作成する
ceph auth get-or-create client.k8s mon 'allow r' osd 'allow rwx pool=k8s' -o ceph.client.k8s.keyring
ceph クラスター上に postgresql 用のブロック デバイス ストレージを作成する
rbd create k8s/pgdata-image -s 200G --image-feature layering
k8s ユーザー キーを取得し、base64 でエンコードします。
上記で取得した秘密キーを使用して、k8s Secrete cat ceph-k8s-secret.yaml を作成し、
rbd
テストを作成します。クラスターのホストで実行します。
rbd map k8s/pgdata-image
# 如果出现错误
rbd: sysfs write failed
In some cases useful info is found in syslog - try "dmesg | tail".
rbd: map failed: (110) Connection timed out
# 查看/var/log/syslog, 有以下错误信息
Jan 3 14:56:51 node1 kernel: [16817.926622] libceph: mon1 124.108.9.46:6789 feature set mismatch, my 106b84a842a42 < server's
40106b84a842a42, missing 400000000000000
Jan 3 14:56:51 node1 kernel: [16817.926740] libceph: mon1 124.108.9.46:6789 missing required protocol features
# 是因为pool的特性在挂载节点上不完全技持,解决方法:运行以下命令
ceph osd crush tunables hammer
塩ビと塩ビ
## pv-pgdata.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pgdata
namespace: default
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
rbd:
monitors:
- 192.168.1.2:6789
- 192.168.1.5:6789
- 192.168.1.7:6789
pool: k8s
image: pgdata-image
user: k8s
secretRef:
name: ceph-k8s-secret
persistentVolumeReclaimPolicy: Retain
## pvc-pgdata.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pgdata
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
volumeName: pgdata
## pod
apiVersion: v1
kind: Pod
metadata:
name: ceph-rbd-pvc-busybox2
spec:
containers:
- image: busybox
name: ceph-rbd-pvc-busybox2-rw
command: ["sleep", "60000"]
volumeMounts:
- name: pgdata-rdb
mountPath: /mnt
volumes:
- name: pgdata-rdb
persistentVolumeClaim:
claimName: pgdata
apiVersion: v1
kind: Pod
metadata:
name: nginx-pvc
labels:
name: nginx-pvc
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- name: web
containerPort: 80
volumeMounts:
- name: pgdata-rdb
mountPath: /usr/share/nginx/html
volumes:
- name: pgdata-rdb
persistentVolumeClaim:
claimName: pgdata
kubectl create -f pv-pgdata.yaml
kubectl create -f pvc-pgdata.yaml
Cephfs の作成と cephfs のマウント
ceph-common をインストールする
各ワーカーノードには ceph-common をインストールする必要があります
yum -y install ceph-common
yum -y install librbd1 && modprobe rbd
ceph 設定を k8s ワーカー ノードにコピーします。
ceph.conf ,ceph.client.admin.keyring 至 /etc/ceph/ 目录
テスト ポッドを作成し、busyboxまたは nginxに基づいて
ポッドに入り、有効かどうかを確認します。
kubectl exec -it ceph-rbd-pvc-busybox2 sh
grep key ceph.client.k8s.keyring | awk '{printf "%s", $NF}' | base64
VBGFaeN3OWJYdUZPSHhBQTNrU2E2QlUyaEF5UUV0SnNPRHdXeRT8PQ==
也可以用以下命令获取
ceph auth get-key client.k8s | base64
apiVersion: v1
kind: Secret
metadata:
name: ceph-k8s-secret
type: "kubernetes.io/rbd"
data:
key: QVFCZzduNWRxUmZKT0JBQUE3UG8wNGIvSWdTK2JKNUlDNXpHVkE9PQo=
rbd create k8s/pgdata-image -s 10G --image-feature layering
rbd info k8s/pgdata-image
rbd map k8s/pgdata-image
/dev/rbd0
root@node1:~# rbd showmapped
id pool image snap device
0 k8s pgdata-image - /dev/rbd0
然后可以对此块设备做磁盘操作,如格式化
mke2fs /dev/rbd0
mount /dev/rbd0 /mnt
mount /dev/rbd0 /mnt
cd /mnt/
root@node1:/mnt# rm -fr lost+found/
最后记得umount退出
umount /mnt
rbd unmap k8s/pgdata-image
セフフス山
Ceph File System (Ceph FS) は、Ceph ストレージ クラスターを使用してデータを保存する POSIX 準拠のファイル システムです。Ceph ファイル システムには、Ceph ストレージ クラスター内に少なくとも 1 つの Ceph メタデータ サーバーが必要です。
1. 前回の記事から引き続き MDS を追加します。ここでは、ceph01 ノードをメタデータ サーバー MDS として使用します。
#ceph-deploy mds create ceph01
#netstat -tnlp | grep mds
tcp 0 0 0.0.0.:6804 0.0.0.0:* LISTEN 12787/ceph-mds
2. 2 つのストレージ プールを作成します。MDS では、データを保存するプールとメタデータを保存するプールの 2 つのプールを使用する必要があります。
#ceph osd pool create fs_data 32
#ceph osd pool create fs_metadata 32
#rados lspools
3. Cephf を作成する
#ceph fs new cephfs fs_metadata fs_data
#ceph fs ls
name: cephfs, metadata pool: fs_metadata, data pools: [fs_data ]
4. データシートのステータスを確認する
#ceph mds stat
e5: 1/1/1 up {
0=ceph01=up:active}
挂载Cephfs
CephFS有不同的挂载方式,这里只说其中一种,后面结合k8s使用的时候会用到该种方式。
1. rbd カーネルモジュールをロードします
#modprobe rbd
#lsmod | grep rbd
rbd 83938 0
libceph 287066 2 rbd,ceph
2. 管理者キーの取得
#cat ceph.client.admin.keyring
[client.admin]
key = AQDchXhYTtjwHBAAk2/H1Ypa23WxKv4jA1NFWw==
caps mds = "allow *"
caps mon = "allow *"
caps osd = "allow *"
3. マウント ポイントを作成し、ローカルにマウントしてみます。
#mkdir /cephfs_test
#mount -t ceph 0.0.0.0:6789:/ /cephfs_test -o name=admin,secret=AQDchXhYTtjwHBAAk2/H1Ypa23WxKv4jA1NFWw==
#df -hT
0.0.0.0:/ ceph 60G 104M 60G 1% /cephfs_test
4. mon ノードが複数ある場合は、複数のノードをマウントして CephFS の高可用性を確保でき、1 つのノードがダウンしてもデータの読み取りと書き込みには影響しません。
#mount -t ceph 0,1,2:6789:/ /cephfs_test -o name=admin,secret=AQDchXhYTtjwHBAAk2/H1Ypa23WxKv4jA1NFWw==
#df -hT
0,1,2:6789:/ ceph 60G 104M 60G 1% /cephfs_test