我们在上一篇文章中已经学习了手动安装ceph和ceph的挂载使用
手动安装ceph和使用
本章记录我们在日常运维中经常遇到的场景,就是如何给这个集群扩容–增加节点。
假如我们新采购了一台服务器想融入到ceph集群中,步骤如下:
调整网络情况
ip地址需要与ceph集群在同一内网内
使用命令如下:
ifconfig -a #查看网卡情况
使用命令编辑网络配置
vi /etc/sysconfig/network-scripts/ifcfg-eth0
输入内容格式参考如下,ip地址需要与ceph集群在同一内网内:
DEVICE=eth1
HWADDR=00:0C:29:66:6B:7C
TYPE=Ethernet
UUID=af4a45e3-36eb-4bae-a2ec-5d35a988a4ae
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.199.84
NETMASK=255.255.255.0
GATEWAY=192.168.199.1
esc输入:wq回车保存退出
重启网络使新配置生效
/etc/init.d/network restart
新增用户
一般在服务器我们都不直接使用root来进行操作,所以最好增加一个有sudo权限的其他用户名,例如我这里增加用户zzq。
使用命令如下:
adduser zzq
passwd zzq
输入密码
增加ssh权限
使用命令编辑配置文件
vi /etc/ssh/sshd_config
在最后输入
AllowUsers [email protected] zzq
AllowUsers [email protected] root
esc输入:wq回车保存退出
增加sudo权限
使用命令进入sudo配置文件
visudo
在root ALL=(ALL) ALL后输入
zzq ALL=(ALL) ALL
esc输入:wq回车保存退出
磁盘空间准备
首先要准备好非系统盘的磁盘空间,磁盘分区可参考:
VMware虚拟机添加新硬盘以及对磁盘进行分区挂载
使用命令查看磁盘情况:
sudo df -h
sudo fdisk -l
关闭防火墙
centOS 7.0版本
sudo systemctl stop firewalld.service #停止firewall
sudo systemctl disable firewalld.service #禁止firewall开机启动
sudo firewall-cmd --state #查看防火墙状态
centOS 6.0版本
sudo service iptables stop #停止firewall
sudo chkconfig iptables off #禁止firewall开机启动
sudo service iptables status #查看防火墙状态
修改同步时区
centOS7
sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
sudo yum -y install ntp
sudo systemctl enable ntpd
sudo systemctl start ntpd
sudo ntpstat
CentOS6
sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
sudo yum -y install ntp
sudo /etc/init.d/ntpd stop
sudo /etc/init.d/ntpd start
sudo ntpstat
修改hosts(所有节点)
把新节点的host增加进去
sudo vi /etc/hosts
输入如下内容:
192.168.199.80 admin
192.168.199.81 ceph1
192.168.199.82 ceph2
192.168.199.83 ceph3
192.168.199.84 ceph4
使用命令分别修改新机子的hostname为ceph4
修改运行时Linux系统的hostname,即不需要重启系统
hostname命令可以设置系统的hostname
sudo hostname ceph4
ceph4即要设置的新的hostname,运行后立即生效,但是在系统重启后会丢失所做的修改,如果要永久更改系统的hostname,就要修改相关的设置文件。
永久更改Linux的hostname
如果要永久修改RedHat的hostname,就修改/etc/sysconfig/network文件,将里面的HOSTNAME这一行修改成HOSTNAME=NEWNAME,其中NEWNAME就是你要设置的hostname。
Debian发行版的hostname的配置文件是/etc/hostname。
我们这里使用命令
sudo vi /etc/sysconfig/network
修该配置文件后,重启系统就会读取配置文件设置新的hostname。
修改yum源
有时候CentOS默认的yum源不一定是国内镜像,导致yum在线安装及更新速度不是很理想。这时候需要将yum源设置为国内镜像站点。国内主要开源的开源镜像站点应该是网易和阿里云了。
更多源参考:
https://www.centos.org/download/mirrors/
如果报错-bash: wget: command not found则使用命令安装wget。
sudo yum -y install wget
或者
rpm 安装
rpm下载源地址:http://vault.centos.org/6.4/os/x86_64/Packages/
下载wget的RPM包:http://vault.centos.org/6.4/os/x86_64/Packages/wget-1.12-1.8.el6.x86_64.rpm
使用xftp上传到服务器中使用如下命令安装即可。
sudo rpm -i wget-1.12-1.8.el6.x86_64.rpm
网易
cd /etc/yum.repos.d
sudo mv CentOS-Base.repo CentOS-Base.repo.bk
sudo wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
sudo yum makecache
注意原链接http://mirrors.163.com 中很多6.4分支版本的已经没有源了。只能使用6分支中的源。
阿里云
cd /etc/yum.repos.d
sudo mv CentOS-Base.repo CentOS-Base.repo.bk
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
sudo yum makecache
安装epel仓库
使用命令
sudo yum install epel-release -y
或者
sudo rpm -i http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
sudo rpm -i http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
添加yum ceph仓库
sudo vi /etc/yum.repos.d/ceph.repo
把如下内容粘帖进去,用 Ceph 的最新主稳定版名字替换 {ceph-stable-release} (如 firefly ),用你的Linux发行版名字替换 {distro} (如 el6 为 CentOS 6 、 el7 为 CentOS 7 、 rhel6 为 Red Hat 6.5 、 rhel7 为 Red Hat 7 、 fc19 是 Fedora 19 、 fc20 是 Fedora 20 )。最后保存到 /etc/yum.repos.d/ceph.repo 文件中。
[ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-{ceph-release}/{distro}/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
例如我的是CentOS6版本则需要使用的是el6,千万别搞错,不然后面安装会报错很多版本不一致和You could try using –skip-broken to work around the problem。
安装ceph使用配置如下:
[ceph]
name=Ceph noarch packages
baseurl=http://mirrors.163.com/ceph/rpm-hammer/el6/x86_64/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=http://mirrors.163.com/ceph/keys/release.asc
安装ceph
ceph所有ceph节点都安装,ceph-deploy只需admin节点安装
sudo yum -y update
sudo yum -y install --release hammer ceph
允许无密码 SSH 登录(admin节点)
把公钥拷贝至所有节点
sudo ssh-copy-id root@ceph4
验证是否可以无密码SSH登录
sudo ssh ceph4
新增OSD节点
在admin节点上运行
sudo ssh ceph4
sudo mkdir /var/local/osd
exit
从 ceph-deploy 节点准备 OSD
sudo ceph-deploy osd prepare ceph4:/var/local/osd
激活 OSD
sudo ceph-deploy osd activate ceph4:/var/local/osd
一旦你新加了 OSD , Ceph 集群就开始重均衡,把归置组迁移到新 OSD 。可以用下面的 ceph 命令观察此过程:
ceph -w
我们能看到归置组状态从 active + clean 变为 active ,还有一些降级的对象;迁移完成后又会回到 active + clean 状态( Control-C 退出)。
添加元数据服务器
至少需要一个元数据服务器才能使用 CephFS ,执行下列命令创建元数据服务器:
sudo ceph-deploy mds create ceph4
注意,当前生产环境下的 Ceph 只能运行一个元数据服务器。你可以配置多个,但现在ceph还不会为多个元数据服务器的集群提供商业支持。
添加 MONITORS
Ceph 存储集群需要至少一个 Monitor 才能运行。为达到高可用,典型的 Ceph 存储集群会运行多个 Monitors,这样在单个 Monitor 失败时不会影响 Ceph 存储集群的可用性。Ceph 使用 PASOX 算法,此算法要求有多半 monitors(即 1 、 2:3 、 3:4 、 3:5 、 4:6 等 )形成法定人数。
新增监视器到 Ceph 集群。
sudo ceph-deploy mon add ceph4
如果报错[ceph_deploy][ERROR ] RuntimeError: mon keyring not found; run ‘new’ to create a new cluster
主要需要需要注意 配置文件和key的同步 以及编辑ceph.conf看看里面的配置是否正确。
ceph-deploy --overwrite-conf config push admin ceph4
ceph-deploy admin ceph4
如果报错
[ceph4][DEBUG ] === mon.ceph4 ===
[ceph4][DEBUG ] Starting Ceph mon.ceph4 on ceph4...
[ceph4][WARNIN] 2018-05-25 01:40:56.446526 7ffbbc5297a0 -1 no public_addr or public_network specified, and mon.ceph4 not present in monmap or ceph.conf
[ceph4][DEBUG ] failed: 'ulimit -n 32768; /usr/bin/ceph-mon -i ceph4 --pid-file /var/run/ceph/mon.ceph4.pid -c /etc/ceph/ceph.conf --cluster ceph '
[ceph4][ERROR ] RuntimeError: command returned non-zero exit status: 1
[ceph_deploy.mon][ERROR ] Failed to execute command: /sbin/service ceph -c /etc/ceph/ceph.conf start mon.ceph4
[ceph_deploy][ERROR ] GenericError: Failed to add monitor to host: ceph4
说明缺少public_network的配置
在admin节点找到ceph.conf
sudo vi ceph.conf
把新的mon节点的ip加入mon_host,把新mon节点的hostname加入mon_initial_members,同时加入public_network配置,public_network与自己的内网ip段对应。
例如:
public_network=192.168.199.0/24
我们的配置如下:
[global]
fsid = 5862afaf-4f46-4d6f-9d30-cb911ce335fc
mon_initial_members = ceph1, ceph2, ceph3,ceph4
mon_host = 192.168.199.81,192.168.199.82,192.168.199.83,192.168.199.84
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
public_network=192.168.199.0/24
osd pool default size = 2
osd pool default min size = 1
osd pool default pg num = 120
osd pool default pgp num = 120
osd crush chooseleaf type = 1
重新在admin节点运行
ceph-deploy --overwrite-conf config push admin ceph1 ceph2 ceph3 ceph4
sudo ceph-deploy --overwrite-conf mon add ceph4
新增 Monitor 后,Ceph 会自动开始同步并形成法定人数。你可以用下面的命令检查法定人数状态:
ceph quorum_status --format json-pretty
Tip 当你的 Ceph 集群运行着多个 monitor 时,各 monitor 主机上都应该配置 NTP ,而且要确保这些 monitor 位于 NTP 服务的同一级。
实在不行重新定义一个新集群
则使用以下命令重新声明monitor新集群
sudo ceph-deploy new ceph1 ceph2 ceph3 ceph4
sudo ceph-deploy --overwrite-conf mon create-initial