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-deployssh 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を使用できるようになります。cephceph.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

おすすめ

転載: blog.csdn.net/qq_36607860/article/details/115413680