特别注意:如果命令直接复制粘贴出现错误,则手动输入可解决
参考教程:
https://blog.csdn.net/qq_24916117/article/details/47909697
第一步~~~.准备 4个Ubuntu 16.04 Server 虚拟机(可以使用VMware或者VirtualBox)
配置好每个虚拟机的IP 以及hostname (很重要!)
我的四台虚拟机配置如下:(ip根据个人的网络环境配置,记得虚拟机网络选择桥接模式)
①虚拟机1 :
hostname:ceph ;
IP :192.168.93.146(用户名root1(199077));
这台虚拟机对应下图admin-node节点 用来安装ceph-deploy ,进行ceph部署使用,基本上大部分操作都在这台机器上。
②虚拟机2:
hostname:ceph1 ;
IP :192.168.93.145(用户名root2(199077));
这台虚拟机对应下图node1节点,用来安装monitor监控节点.
③虚拟机3:
hostname:ceph2 ;
IP :192.168.93.142(用户名root3(199077));
这台虚拟机对应下图node2节点,用来安装osd节点1。
④虚拟机4:
hostname:ceph3 ;
IP :192.168.93.143(用户名root4(199077));
这台虚拟机对应下图node3节点,用来安装osd节点2 .
配置好后ping www.baidu.com 看是否可以上网。
特别注意的是:再开始配置集群之前,要关闭各个节点上的防火墙:sudo ufw disable。
第二步~~~.在虚拟机1上也就是ceph(hostname是ceph)上执行以下三个命令安装cephdeploy:
(1)添加 release key :
wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
echo deb https://download.ceph.com/debian/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
sudo apt install ceph-deploy
sudo useradd -d /home/cephuser -m cephuser
sudo chmod 0440 /etc/sudoers.d/cephuser
passwd cephuser
chmod 0440 /etc/sudoers.d/cephuser
sed -i s'/Defaults requiretty/#Defaults requiretty'/g /etc/sudoers
sudo chmod 0440 /etc/sudoers.d/cephuser
ssh-copy-id ceph1
ssh-copy-id ceph2
ssh-copy-id ceph3
osd pool default size = 2
sudo service ceph restart ceph-mon
1. ceph-deploy mon create-initial
1. ceph-deploy osd prepare ceph2:/var/local/osd0 ceph3:/var/local/osd1
具体说明,以挂载/dev/sdb1为例:
<fs spec> :
分区定位,可以给UUID或LABEL,例如:UUID=6E9ADAC29ADA85CD或LABEL=software
<fs file> : 具体挂载点的位置,例如:/data
<fs vfstype> : 挂载磁盘类型,linux分区一般为ext4,windows分区一般为ntfs
<fs mntops> : 挂载参数,一般为defaults
<fs freq> : 磁盘检查,默认为0
<fs passno> : 磁盘检查,默认为0,不需要检查
(2)添加Ceph软件包源,用Ceph稳定版
(3)更新你的仓库,并安装 ceph-deploy :
sudo apt update
第三步~~~.在四台虚拟机上都安装ntp与openssh-server ,实现时间同步以及ceph 节点ssh访问ceph1 ceph2 ceph3节点,用cephuser用户。
四台虚拟机上都执行以下2个命令:
sudo apt-get install ntp
sudo apt-get install openssh-server
第四步~~~.在ceph ceph1 ceph2 ceph3 虚拟机上新建一个用户 (我在4台虚拟机上全是新建的cephuser用户,以后四台机器上的所有操作均在该用户下执行。直到整个配置过程结束!!)该用户具有sudo权限。
在4台机器上均执行:
passwd cephuser
echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser
或者执行:
useradd -m -s /bin/bash cephuser
echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser
也可以在虚拟机ceph上使用ssh链接ceph1 ceph2 ceph3虚拟机后再各自创建cephuser用户。
首先在虚拟机ceph里面配置好hosts:
在虚拟机ceph上执行:
sudo nano /etc/hosts
在后面添加
192.168.93.146 ceph
192.168.93.145 ceph1
192.168.93.142 ceph2
192.168.93.143 ceph3
在使用虚拟机ceph ssh链接ceph1 (root2是我建虚拟机ceph1的时候创建的默认用户,cephuser是我新建的用户)
执行:
ssh root2@ceph1
再执行:
sudo useradd -d /home/cephuser -m cephuser
passwd cephuser
echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser
链接ceph ceph2 ceph3 执行类似操作!
第五步~~~.在ceph虚拟机生成ssh-keygen 并复制到ceph1 ceph2 ceph3 节点上,实现ceph无密码访问其余节点。
在ceph上执行:(执行ssh-keygen后全部按回车键)
1. ssh-keygen
2. (全按回车键,默认)
修改 ~/.ssh/config
[plain] view plain copy
1. sudo nano ~/.ssh/config
在config里面加上:
Host ceph
Hostname ceph
User cephuser
Host ceph1
Hostname ceph1
User cephuser
Host ceph2
Hostname ceph2
User cephuser
Host ceph3
Hostname ceph3
User cephuser
然后,将配置文件的权限更改为644。
chmod 644 ~/.ssh/config
现在使用ssh-copy-id命令将密钥添加到所有节点。
ssh-keyscan ceph1 ceph2 ceph3 >> ~/.ssh/known_hosts
现在就可以在主节点ceph通过如下命令无密码访问其余节点,如:
ssh ceph1
因为我们用的是cephuser用户,而非root用户,所以执行上述ssh-copy-id 命令可能出现错误,可尝试执行如下命令:
1. ssh-copy-id cephuser@ceph1
2. ssh-copy-id cephuser@ceph2
3. ssh-copy-id cephuser@ceph3
第六步~~~. 在ceph(admin节点) 创建my-cluster 目录并进入
1. mkdir my-cluster
2. cd my-cluster
(注意下面所有的操作都在此目录下执行,直到整个配置过程结束,有些配置文件会生成在里面)
执行:
ceph-deploy new ceph1
会在my-cluster下生成三个文件
Ceph configuration file, a monitor secret keyring, and a log file
修改Ceph configuration file文件
sudo nano ceph.conf
并在后面加上 第一个参数2是副本数量,第二个2000是 日志大小约为2G
osd journal size = 2000
Public Network = 192.168.93.140/150
Cluster Network = 192.168.93.140/150
第七步~~~.在ceph,ceph1 ,ceph2 ,ceph3 四个节点上安装ceph
在ceph节点上执行:
ceph-deploy install ceph ceph1 ceph2 ceph3
(可能会报错,大部分是网络问题,继续重复执行就是!直到成功为止!可以选择一个节点一个节点的安装,即在ceph上分别执行:
ceph-deploy install ceph
ceph-deploy install ceph1
ceph-deploy install ceph2
ceph-deploy install ceph3
执行ceph-deploy install ceph1容易出现错误:
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
[mon][WARNIN] E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
[mon][ERROR ] RuntimeError: command returned non-zero exit status: 100
[ceph_deploy][ERROR] RuntimeError: Failed to execute command: env DEBIAN_FRONTEND=noninteractive DEBIAN_PRIORITY=critical apt-get --assume-yes -q --no-install-recommends install ca-certificates apt-transport-https
解决办法:
将监控节点ceph1重启,然后再在主节点ceph上再次执行ceph-deploy install ceph1
,直到成功。
必须确保四个节点上的ceph开启成功,在每个节点上执行:
systemctl status ceph.service
查看ceph是否处于active状态,不是的话执行:
启动ceph服务。
第八步~~~.在ceph上执行
如果出现错误:
RuntimeError: config file /etc/ceph/ceph.conf exists with different content; use --overwrite-conf to overwrite
可执行如下命令:
ceph-deploy --overwrite-conf mon create-initial
会在my-cluster目录下生成四个文件
{cluster-name}.client.admin.keyring
{cluster-name}.bootstrap-osd.keyring {cluster-name}.bootstrap-mds.keyring {cluster-name}.bootstrap-rgw.keyring
收集远程监控节点ceph1上的密钥到当前文件夹,
ceph-deploy gatherkeys ceph1
第九步~~~.
为了快速安装,这里我们使用文件夹形式来添加OSD而不是以硬盘,在ceph2 ceph3节点上创建osd 每个节点创建一个osd文件目录
[plain] view plain copy
1. ssh ceph2
2. sudo mkdir /var/local/osd0
3. exit
4. ssh ceph3
5. sudo mkdir /var/local/osd1
6. exit
// 因为ceph3上无足够空间,故改到ceph1:/var/local/osd1
如果osd节点出现错误,想要移除集群,则使用命令: ceph osd crush remove osd.1//osd.1是osd节点名。
第十步~~~. 继续在ceph上执行:
准备osd 命令:
[plain] view plain copy
执行准备命令时,出现错误:
ceph-deploy osd: error: argument subcommand: invalid choice: 'prepare' (choose from 'list', 'create')
解决办法:
重新换一个管理节点,从头来过。
激活osd命令:
[plain] view plain copy
1. ceph-deploy osd activate ceph2:/var/local/osd0 ceph3:/var/local/osd1
执行激活命令时,出现错误:
RuntimeError: Failed to execute command: /usr/sbin/ceph-disk -v activate --mark-init systemd --mount /var/local/osd0
ERROR: error creating empty object store in /var/local/osd0: (13) Permission denied
解决办法:在各个osd节点上给/var/local/osd0/和/var/local/osd1/添加权限
如下:
在ceph2上执行:
sudo chmod 777 /var/local/osd0/
在ceph3上执行:
sudo chmod 777 /var/local/osd1/
执行以下两条:
[plain] view plain copy
1. ceph-deploy admin ceph ceph1 ceph2 ceph3
2. sudo chmod +r /etc/ceph/ceph.client.admin.keyring
第十二步~~~.最后在ceph执行:ceph health 命令,不出意外就会输出HEALTH_OK ,恭喜你 ceph三节点的集群安装成功!
该步容易出现错误:
HEALTH_ERR 64 pgs are stuck inactive for more than 300 seconds; 64 pgs stuck inactive; 64 pgs stuck unclean
或者
HEALTH_WARN 64 pgs degraded; 64 pgs stuck degraded; 64 pgs stuck unclean; 64 pgs stuck undersized; 64 pgs undersized
解决办法:
先关闭各个节点的防火墙:
sudo ufw disable
然后在各个节点的配置文件/etc/ceph/ceph.conf中加入如下内容:
osd max object name len = 256
osd max object namespace len = 64
第十二步:增加上述四个节点的硬盘空间(4个节点上的操作均相同)
(1)先使用gparted软件增加硬盘空间。硬盘名称为:/dev/sda3,大小为20G,
(2)新建文件夹:sudo mkdir /home/sda3
(3)将新建的/dev/sda3硬盘挂载到目录/home/sda3中:
sudo mount -t ext4 /dev/sda3 /home/sda3
(4) 再将该硬盘设置为开机启动:
1) 格式化新硬盘:sudo mkfs.ext4 /home/sda3
2) 查看新硬盘的UUID:sudo blkid ,效果如下:
/dev/sda1: UUID="7aa7388d-277a-42e5-a301-d0d57eb48d4f" TYPE="ext4" PARTUUID="7c2a71eb-01"
/dev/sda3: UUID="49201ae9-d7e0-4b51-9e0c-d9d169cfc374" TYPE="ext4" PARTUUID="7c2a71eb-03"
/dev/sda5: UUID="e01871b9-4ee7-47d9-9066-f8782fe9f241" TYPE="swap" PARTUUID="7c2a71eb-05"
/dev/sr0: UUID="2017-08-01-11-51-33-00" LABEL="Ubuntu 16.04.3 LTS amd64" TYPE="iso9660" PTUUID="0d66cd15" PTTYPE="dos"
3)找到/dev/sda3的UUID,
4)将分区信息写入/etc/fstab文件中让它永久挂载:
Sudo nano /etc/fstab
在该文件中加入如下内容:
UUID=49201ae9-d7e0-4b51-9e0c-d9d169cfc374 /home/sda3 ext4 defaults 0 1
注:
<fs spec> <fs file> <fs vfstype> <fs mntops> <fs freq> <fs passno>
修改完/etc/fstab文件后,运行sudo mount -a命令验证一下配置是否正确。如果配置不正确可能会导致系统无法正常启动。
5)重启系统!执行df -h查看是否挂载成功。
第十三步:在ceph2 ceph3上增加monitor监控节点
第十四步: 分布式文件系统的挂载