一. 三台服务器准备
centos
192.168.0.151
192.168.0.180
192.168.0.156
二.三台服务器免密登陆设置,参考 https://blog.51cto.com/lihuansong/2172326
1.设置三台/etc/hosts
192.168.0.151 ceph-node1 192.168.0.180 ceph-node2 192.168.0.156 ceph-node3
2.在每个节点都执行:
ssh-keygen -t rsa
3.将ceph-node2,ceph-node3生成的公钥改名,拷贝到ceph-node1节点上
#节点node2
cp /root/.ssh/id_rsa.pub /root/.ssh/key_node2
scp /root/.ssh/key_node2 root@ceph-node1:/root/.ssh/
#节点node3
cp /root/.ssh/id_rsa.pub /root/.ssh/key_node3
scp /root/.ssh/key_node3 root@ceph-node1:/root/.ssh/
4.node0节点生成公钥也改名
cp /root/.ssh/id_rsa.pub /root/.ssh/key_node1
5.在节点node0上,把公钥导入到认证文件,执行如下命令:
cd /root/.ssh/ cat key_node1 >> authorized_keys cat key_node2 >> authorized_keys cat key_node3 >> authorized_keys chmod 700 /root/.ssh chmod 600 authorized_keys
6.把这个authorized_kesy文件分发到其它节点
scp authorized_keys root@ceph-node2:/root/.ssh
scp authorized_keys root@ceph-node3:/root/.ssh
7.测试SSH免密码登录
三.ntp时间同步 centos7 参考https://blog.51cto.com/lihuansong/2172270
centos8 参考 https://blog.whsir.com/post-4925.html
在CentOS8.0中默认不再支持ntp软件包,时间同步将由chrony来实现,像我这种习惯了ntp同步时间的,一时难以去适应chrony。
本文将通过wlnmp提供的源,来安装ntp服务
1.添加wlnmp源
rpm -ivh http://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm 或 把这个repo连接 换成
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.安装ntp
yum install wntp -y
3.时间同步
ntpdate ntp1.aliyun.com
四 安装docker ( 已部署跳过本条)
centos7
curl -fsSL https://get.docker.com/ | sh
或
yum install -y docker-ce
我们将使用dnf config-manager实用程序添加Docker存储库。为此,请打开一个终端窗口并发出命令:
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
或者设置为阿里云的存储库更加快速稳定
#centos7 yum-config-manager 依赖于 yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# centos8
dnf config-manager --add-repo=http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.如何找到Docker CE的可安装版本
截至目前,Red Hat已阻止docker-ce的安装,因此,如果您尝试运行命令sudo dnf install docker-ce,将运行失败。相反,您必须安装特定版本的Docker。要找出可用的版本,请发出以下命令:
dnf list docker-ce --showduplicates | sort -r
从该列表中,我们可以看到版本docker-ce-3:18.09.1-3.el7可用于安装。
3.如何安装Docker CE
要安装该版本,请发出命令:
sudo dnf install docker-ce-3:18.09.1-3.el7
为了强制DNS解析在Docker容器中起作用,必须禁用firewalld。为此,发出命令:
systemctl stop firewalld sudo systemctl disable firewalld
接下来,我们将使用以下命令启动并启用docker守护进程:
sudo systemctl enable --now docker
最后,使用以下命令将您的用户添加到docker组:
sudo usermod -aG docker $USER
docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
调整参数可以根据情况来调,正常一般不调也可以
#调整内核参数
cat >> /etc/sysctl.conf << EOF kernel.pid_max=4194303 vm.swappiness = 0 EOF
sysctl -p
# read_ahead, 通过数据预读并且记载到随机访问内存方式提高磁盘读操作,根据一些Ceph的公开分享,8192是比较理想的值
echo "8192" > /sys/block/sda/queue/read_ahead_kb
# I/O Scheduler,关于I/O Scheculder的调整,简单说SSD要用noop,SATA/SAS使用deadline。
echo "deadline" > /sys/block/sd[x]/queue/scheduler echo "noop" > /sys/block/sd[x]/queue/scheduler
五 下载镜像
docker pull ceph/daemon:latest (这个版本会更新,如果不行就使用阿里镜像) 或 docker pull registry.cn-hangzhou.aliyuncs.com/kenyon/ceph:v1.0 (阿里镜像)
六.创建文件夹三台都要创建
mkdir /home/ceph
mkdir /home/ceph/{admin,etc,lib,logs}
#docker内用户id是167,这里进行授权
chown -R 167:167 /home/ceph/ mkdir /home/ceph-data mkdir /home/ceph-data/data{1..3}
七创建启动脚本
1.创建mon启动脚本(mon ip 三个都要写,然后对应的网关)
vi /home/ceph/admin/start_mon.sh #!/bin/bash docker run -d --net=host --name=mon --restart=always -v /etc/localtime:/etc/localtime -v /home/ceph/etc:/etc/ceph -v /home/ceph/lib:/var/lib/ceph -v /home/ceph/logs:/var/log/ceph -e MON_IP=192.168.10.95,192.168.10.96,192.168.10.97 -e CEPH_PUBLIC_NETWORK=192.168.10.0/24 ceph/daemon:latest mon
2.创建osd启动脚本(要创建好对应的目录 mkdir /home/ceph-data/data{1..3})
vi /home/ceph/admin/start_osd.sh #!/bin/bash # 这里表示有1个分区,及从data1-data11,请根据实际情况修改: for i in {1..2};do docker ps | grep -w osd_data${i} && continue docker ps -a | grep -w osd_data${i} && docker rm -f osd_data${i} docker run -d --name=osd_data${i} --net=host --restart=always --privileged=true --pid=host -v /etc/localtime:/etc/localtime -v /home/ceph/etc:/etc/ceph -v /home/ceph/lib:/var/lib/ceph -v /home/ceph/logs:/var/log/ceph -v /home/ceph-data/data${i}/osd:/var/lib/ceph/osd ceph/daemon:latest osd_directory done
/home/ceph-data/data${i}/osd:/var/lib/ceph/osd
表示osd存储映射到指定文件夹
3.创建mds启动脚本(可不创建)
vi /home/ceph/admin/start_mds.sh #!/bin/bash docker run -d --net=host --name=mds --restart=always --privileged=true -v /etc/localtime:/etc/localtime -v /home/ceph/etc:/etc/ceph -v /home/ceph/lib/:/var/lib/ceph/ -v /home/ceph/logs/:/var/log/ceph/ -e CEPHFS_CREATE=0 -e CEPHFS_METADATA_POOL_PG=512 -e CEPHFS_DATA_POOL_PG=512 ceph/daemon:latest mds
#CEPHFS_CREATE 0表示不自动创建文件系统(推荐),1表示自动创建
4.创建mgr启动脚本
vi /home/ceph/admin/start_mgr.sh #!/bin/bash docker run -d --net=host --name=mgr --restart=always --privileged=true -v /etc/localtime:/etc/localtime -v /home/ceph/etc:/etc/ceph -v /home/ceph/lib:/var/lib/ceph -v /home/ceph/logs:/var/log/ceph ceph/daemon:latest mgr
vi /home/ceph/admin/start_rgw.sh #!/bin/bash docker run -d --net=host --name=rgw --restart=always --privileged=true -v /etc/localtime:/etc/localtime -v /home/ceph/etc:/etc/ceph -v /home/ceph/lib:/var/lib/ceph -v /home/ceph/logs:/var/log/ceph ceph/daemon:latest rgw
6.创建rbd启动脚本
vi /home/ceph/admin/start_rbd.sh #!/bin/bash docker run -d --net=host --name=rbd --restart=always --privileged=true -v /etc/localtime:/etc/localtime -v /home/ceph/etc:/etc/ceph -v /home/ceph/lib:/var/lib/ceph -v /home/ceph/logs:/var/log/ceph ceph/daemon:latest rbd_mirror
7.服务开启前将节点的hostname修改为ceph-node1-3,然后重新打开窗口
#节点1
sudo hostnamectl set-hostname ceph-node1
#节点2
sudo hostnamectl set-hostname ceph-node2
#节点3
sudo hostnamectl set-hostname ceph-node3
八 开始启动服务
1.mon启动
bash /home/ceph/admin/start_mon.sh
2.设置配置文件 osd容量自行调整编号根据osd容器启动的个数顺序从0开始自行编号
vi /home/ceph/etc/ceph.conf # 容忍更多的时钟误差 mon clock drift allowed = 2 mon clock drift warn backoff = 30 # 允许删除pool mon_allow_pool_delete = true [mgr] # 开启WEB仪表盘 mgr modules = dashboard #设置osd容器的存储大小1073741824000 1t 322122547200 300g #自行调整不设置默认10g 目前设置300g 每个服务两个osd 减轻压力 [osd.0] bluestore_block_size = 644245094400 [osd.1] bluestore_block_size = 644245094400 [osd.2] bluestore_block_size = 644245094400 #[osd.3] #bluestore_block_size = 644245094400 #[osd.4] #bluestore_block_size = 644245094400 #[osd.5] #bluestore_block_size = 644245094400 #[client.rgw.节点名] # 设置rgw网关的web访问端口 oss端口 默认7480 修改最好三台都修改 #rgw_frontends = "civetweb port=20003"
3.设置快捷键,其他命令也可以一一映射出来,具体操作自行调整
echo 'alias ceph="docker exec mon ceph"' >> /etc/profile source /etc/profile
4.将配置复制到其他两个节点
scp -r /home/ceph/* ceph-node2:/home/ceph scp -r /home/ceph/* ceph-node3:/home/ceph
#给其他两个节点的文件授权
chown -R 167:167 /home/ceph/
5.启动其他两台服务
ssh ceph-node2 bash /home/ceph/admin/start_mon.sh
ssh ceph-node3 bash /home/ceph/admin/start_mon.sh
6.查看是否启动成功
ceph -s docker ps
看到有三台就算成功了
7.osd启动
#每台都执行创建osdkey
docker exec -it mon ceph auth get client.bootstrap-osd -o /var/lib/ceph/bootstrap-osd/ceph.keyring
#运行脚本
bash /home/ceph/admin/start_osd.sh ssh ceph-node2 bash /home/ceph/admin/start_osd.sh ssh ceph-node3 bash /home/ceph/admin/start_osd.sh
8.启动mds(可跳过)
bash /home/ceph/admin/start_mds.sh ssh ceph-node2 bash /home/ceph/admin/start_mds.sh ssh ceph-node3 bash /home/ceph/admin/start_mds.sh 创建文件系统(可跳过) # 创建data pool ceph osd pool create cephfs_data 256 256 # 创建 metadata pool ceph osd pool create cephfs_metadata 64 64 # 创建 cephfs ceph fs new cephfs cephfs_metadata cephfs_data # 查看信息 ceph fs ls #name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
9.启动mgr
bash /home/ceph/admin/start_mgr.sh ssh ceph-node2 bash /home/ceph/admin/start_mgr.sh ssh ceph-node3 bash /home/ceph/admin/start_mgr.sh
10.激活仪表盘
ceph mgr module enable dashboard #设定管理端访问的用户名密码 ceph dashboard set-login-credentials admin admin@gp2OZ0 ceph config set mgr mgr/dashboard/server_addr 0.0.0.0 #指定为7000端口,这里可以自定义修改 ceph config set mgr mgr/dashboard/server_port 18080 #关闭https ceph config set mgr mgr/dashboard/ssl false
11、启动RGW
#这里需要每个节点都创建rgwkey docker exec mon ceph auth get client.bootstrap-rgw -o /var/lib/ceph/bootstrap-rgw/ceph.keyring bash /home/ceph/admin/start_rgw.sh ssh ceph-node2 bash /home/ceph/admin/start_rgw.sh ssh ceph-node3 bash /home/ceph/admin/start_rgw.sh
12、启动RBD
#这里需要每个节点都创建rbdkey docker exec mon ceph auth get client.bootstrap-rbd-mirror -o /var/lib/ceph/bootstrap-rbd-mirror/ceph.keyring bash /home/ceph/admin/start_rbd.sh ssh ceph-node2 bash /home/ceph/admin/start_rbd.sh ssh ceph-node3 bash /home/ceph/admin/start_rbd.sh
13.创建用户
创建s3访问用户
docker exec rgw radosgw-admin user create --uid=mgruser --display-name=mgruser --system
返回的记录下 access_key secret_key
{ "user_id": "mgruser", "display_name": "mgruser", "email": "", "suspended": 0, "max_buckets": 1000, "subusers": [], "keys": [ { "user": "mgruser", "access_key": "akhsanflasnvlajl", "secret_key": "skhsanflasnvlajl" } ], "swift_keys": [], "caps": [], "op_mask": "read, write, delete", "system": "true", "default_placement": "", "default_storage_class": "", "placement_tags": [], "bucket_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "user_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "temp_url_keys": [], "type": "rgw", "mfa_ids": [] }
将返回的ak sk 加入服务
docker exec mgr ceph dashboard set-rgw-api-access-key akhsanflasnvlajl docker exec mgr ceph dashboard set-rgw-api-secret-key skhsanflasnvlajl
修改mon重启失败问题
docker cp mon:/opt/ceph-container/bin/start_mon.sh . # 注释此行,直接将v2v1赋值为2,代表是走V2协议, 以指定IP方式加入集群 #v2v1=$(ceph-conf -c /etc/ceph/${CLUSTER}.conf 'mon host' | tr ',' ' ' | grep -c ${MON_IP}) v2v1=2 docker cp start_mon.sh mon:/opt/ceph-container/bin/start_mon.sh
至此对象存储的ceph服务搭建完成