# 事前准备
以下操作在所有 Ceph 节点上进行操作。
## 升级内核
### 安装依赖包
#### Perl
需要安装 Perl,Perl 是内核的依赖包。
```bash
$ [ ! -f /usr/bin/perl ] && yum install perl -y
```
### 安装内核
> 以下两种安装方式选择其一即可。
#### 方式一:使用 Yum 安装
1) 导入 elrepo 的 key 并安装 elrepo yum 源,升级内核需要使用 elrepo 的 yum 源。
```bash
# 导入 elrepo key
$ rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# 安装 elrepo yum 源
$ rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
```
2)查看可用内核。
```bash
$ yum --disablerepo="*" --enablerepo="elrepo-kernel" list available --showduplicates
Available Packages
...
kernel-ml.x86_64 4.19.9-1.el7.elrepo elrepo-kernel
kernel-ml.x86_64 4.19.10-1.el7.elrepo elrepo-kernel
kernel-ml-devel.x86_64 4.19.9-1.el7.elrepo elrepo-kernel
kernel-ml-devel.x86_64 4.19.10-1.el7.elrepo elrepo-kernel
...
```
3)从可用内核中选择版本安装。
```bash
# 指定内核版本,该版本必须在可用内核列表中存在
$ export kernel_version=4.19.10-1
# 安装内核
$ yum --disablerepo="*" --enablerepo=elrepo-kernel install -y kernel-ml{,-devel}-${kernel_version}.el7.elrepo.x86_64
```
#### 方式二:自选内核版本安装
通过以下链接找到想要安装的内核版本。
REHL 7:[REHL 7 内核版本库](http://mirror.rc.usf.edu/compute_lock/elrepo/kernel/el7/x86_64/RPMS/)
安装自选版本的内核。
```bash
# 指定内核版本
$ export kernel_version=4.18.9-1
# 下载该版本内核
$ wget http://mirror.rc.usf.edu/compute_lock/elrepo/kernel/el7/x86_64/RPMS/kernel-ml{,-devel}-${kernel_vsersion}.el7.elrepo.x86_64.rpm
# 安装下载的内核
$ yum localinstall -y kernel-ml*
```
### 修改内核启动顺序
1)查看当前内核启动顺序。
```bash
$ grubby --default-kernel
/boot/vmlinuz-3.10.0-862.el7.x86_64
```
2)当前默认启动的内核为 3.10.0 ,修改为新版本内核。如果开机需要手动选择内核,此步骤可以忽略。
```bash
# 把当前内核启动顺序改为 0,并写入配置文件
$ grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg
# 检查默认启动内核是否为新版本内核
$ grubby --default-kernel
/boot/vmlinuz-4.18.9-1.el7.elrepo.x86_64
```
3)如果需要安装 Docker 并使用 Docker 运行服务,根据官方内核检查脚本建议,开启 `user_namespace` 功能。如果不需要安装 Docker,此步骤可以省略。
```bash
$ grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
```
4)重启系统,检查内核是否正常。
```bash
$ reboot
# 启动之后检查内核版本
$ uname -r
4.18.9-1.el7.elrepo.x86_64
```
## 添加 HOSTS 映射
在 /etc/hosts 文件中添加对各个节点的映射。
```bash
$ cat << EOF >> /etc/hosts
>
> # Ceph cluster node
> 10.10.113.15 ceph-node1
> 10.10.113.16 ceph-node2
> 10.10.113.17 ceph-node3
> EOF
```
## 防火墙配置
> 以下两种方式选择其一即可。
#### 方式一:永久关闭防火墙
```bash
$ systemctl disable --now firewalld
```
#### 方式二:配置防火墙开放端口
如果开启了防火墙,则需要开放 Ceph Monitor 使用的 6379 端口和 OSD 使用的 6800:7300 端口范围。
```bash
$ firewall-cmd --zone=public --add-port=6789/tcp --permanent
$ firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent
$ firewall-cmd --reload
# 检查防火墙端口是否已经开放
$ firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens192
sources:
services: ssh dhcpv6-client
ports: 6789/tcp 6800-7300/tcp
...
```
## SELINUX 配置
禁用 SELiunx。
```bash
# 临时禁用 SELinux
$ setenforce 0
# 永久禁用 SELinux
$ sed -ri '/^[^#]*SELINUX=/s#=.+$#=disabled#' /etc/selinux/config
```
## NTP 服务
Ceph 所有节点时间必须相同 (特别是 Ceph Monitor 节点),如果有需要可以使用 NTP 服务同步系统时间。
```bash
$ yum install -y ntp ntpdate ntp-doc
```
确保在各 Ceph 节点上启动了 NTP 服务,并且要使用同一个 NTP 服务器,可以参考 [NTP](http://www.ntp.org/)。
## 更新 YUM 版本库
可以更新 Yum 库,降低出现漏洞的可能性。
```bash
$ yum update -y
```
## 创建部署管理 CEPH 用户
Ceph 管理工具(ceph-deploy)必须以普通用户登录 Ceph 节点,且此用户必须拥有无密码的 sudo 权限。因为 Ceph 节点在安装软件以及配置文件在管理节点上进行,不会提示输出密码。
建议在集群内所有 Ceph 节点上为 Ceph 管理工具创建一个特定的用户。
**但不要使用 “ceph” 这个用户名**。因为用户名 “ceph” 保留给了 Ceph 守护进程。
**也不要使用常用的用户名**。因为黑客可能会用它做暴力破解(如 root、admin、ceph-deploy 等)。
按照以下步骤创建普通用户并分配 sudo 权限。
1)创建新用户。
```bash
$ useradd -d /home/ceph-operation -m ceph-operation
$ passwd ceph-operation
```
2)为此用户配置无密码的 sudo 权限。
```bash
$ echo "ceph-operation ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/ceph-operation
$ chmod 0440 /etc/sudoers.d/ceph-operation
```