1. DNS介紹
1.1什么是域名
域名(Domain Name) ,簡稱域名、網域,是由一串用點分隔的名字組成的Intemet上某一臺計算機或計算機組的名稱,用于在數據傳輸時標識計算機的電子方位。具有獨一無二,不可重復的特性。
1.2 什么是DNS?
域名系統(Domain Name System,縮寫: DNS)是互聯網的一項服務。域名解析是把域名指向網站空間IP,讓人們通過注冊的域名可以方便地訪問到網站的一種服務。IP地址是網絡上標識站點的數字地址,為了方便記憶,采用域名來代替IP地址標識站點地址。域名解析就是域名到IP地址的轉換過程。域名的解析工作由DNS服務器完成。可以理解為DNS就是翻譯官。
正向解析: 域名 --> IP地址
反向解析: IP地址 --> 域名 //郵件服務會用到。
1.3 域名的組成和分類
常見格式: www.baidu.com
完整格式: www.baidu.com.
. : 根域 ,可省略不寫 ,全球13臺 ,一臺主根 ,其他都是輔根
com : 頂級域, 由ICANN 組織指定和管理。
分類:
國家地區域名: cn (中國) 、hk (香港) 、sg (新加坡)等
通用頂級域名: com (商業機構) I org (非營利組織) 、edu (教育機構)等。
新通用頂級域名: red (紅色、熱情) 、top (頂級、高端)等
baidu:二級域(注冊域) ,可由個人或組織申請注冊。
www: 三級域(子域) ,服務器網站名代表。
主機名: s1.www.atguigu.com.中的s1就是主機名,一般用來表示具體某一臺主機。 //不常見
2. 域名解析過程
1. 客戶機首先查看查找本地hosts文件,如果有則返回,否則進行下一步
2. 客戶機查看本地緩存,是否存在本條目的緩存,如果有則直接返回,否則進行下一步。
3. 將請求轉發給指向的DNS服務器。
4. 查看域名是否本地解析,是則本地解析返回,否則進行下一步。
5. 本地DNS服務器首先在緩存中查找,有則返回,無則進行下一步。 \這里的緩存是從其他dns服務器學習來的
6. 向全球13個根域服務器發起DNS請求,根域返回org域的地址列表。
7. 使用某一個org域的IP地址,發起DNS請求, org域返回kernel域服務器地址列表。
8. 使用某一個kernel域IP地址,發起DNS請求, kernel域返回www.kernel.org主機的IP地址,本地DNS服務收到后,返回給客戶機,并在本地DNS服務器保存一份。
為了安全性,DNS服務器不是隨便搭建的,我們最多搭建一個簡單的DNS服務器。
3. DNS軟件信息
軟件名稱
bind
服務名稱
named
軟件端口
UDP 53 數據通信(域名解析)
TCP 53 數據同步 (主從同步)
配置文件:
主配置文件: /etc/nameed.conf (服務器運行參數)
區域配置文件: /etc/named.rfc1912.zones (服務器解析的區域配置,正反向區域定義信息)
數據配置文件: /var/named/xx.xx (主機名和IP地址的對應解析關系,及主從同步信息)
記錄類型:
A: | 地址記錄,用來指定域名的IPv4地址的記錄 |
CNAME: | 將域名指向另一個域名,再由另一個域名提供IP地址,就需要添加CNAME記錄 |
TXT: | 可填寫任何東西,長度限制255。絕大多數的TXT記錄是用來做SPF的(反垃圾郵件) |
NS: | 域名服務器記錄,如果需要把子域名教給其他DNS服務商解析,就需要添加NS記錄。 |
AAAA: | 地址記錄,用來指定域名的IPv6地址的記錄 |
MX: | 郵件交換記錄,如果需要設置郵箱,讓郵箱能收到郵件,就需要添加MX記錄。 |
4. DNS 實驗搭建
4.1 DNS基本服務搭建
環境準備
ip | 節點 | 主機名 |
10.30.59.193 | master | dns1 |
10.30.59.194 | 測試 | dns2 |
基礎準備
# 修改主機名
[root@localhost ~]# hostnamectl set-hostname dns1
[root@localhost ~]# bash
# 配置本地yum源
[root@dns1 ~]# mv /etc/yum.repos.d/* /media/
[root@dns1 ~]# vi /etc/yum.repos.d/local.repo
[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
[root@dns1 ~]# mkdir -p /opt/centos
[root@dns1 ~]# mount /dev/sr0 /opt/centos/
mount: /dev/sr0 is write-protected, mounting read-only
[root@dns1 ~]# yum repolist
Loaded plugins: fastestmirror
centos | 3.6 kB 00:00:00
(1/2): centos/group_gz | 155 kB 00:00:00
(2/2): centos/primary_db | 2.8 MB 00:00:00
Determining fastest mirrors
repo id repo name status
centos centos 3,723
repolist: 3,723
# 關閉防火墻
[root@dns1 ~]# systemctl stop firewalld
[root@dns1 ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
[root@dns1 ~]# setenforce 0
[root@dns1 ~]# vi /etc/selinux/config
SELINUX=disabled
# 安裝常用工具
[root@dns1 ~]# yum install -y vim net-tools bash-c*
服務搭建
# 安裝服務
[root@dns1 ~]# yum -y install bind
# 配置注意事項 所有內容以;結尾 ,, 大括號兩側內用空格分隔
# 配置主配置文件
[root@dns1 named]# vim /etc/named.conf
options {
listen-on port 53 { any; }; //設置服務器監聽網卡,any 所有的
listen-on-v6 port 53 { ::1; };
directory "/var/named"; // 數據文件保存位置
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; }; //設置訪問服務器的客戶端地址, any 所有
include "/etc/named.rfc1912.zones"; // 最下面有一行配置文件,指定了區域配置文件。
# 配置區域配置文件
[root@dns1 ~]# vim /etc/named.rfc1912.zones
zone "bilibili.com" IN {
type master;
file "bilibili.localhost";
allow-update { none; };
};
zone "59.30.10.in-addr.arpa" IN {
type master;
file "bilibili.loopback";
allow-update { none; };
};
[root@dns1 ~]# cd /var/named/
[root@dns1 named]# ls
data dynamic named.ca named.empty named.localhost named.loopback slaves
# 注意與區域配置文件相一致
[root@dns1 named]# cp -a named.localhost bilibili.localhost
[root@dns1 named]# cp -a named.loopback bilibili.loopback
# 正向解析
[root@dns1 named]# vim bilibili.localhost
$TTL 1D
@ IN SOA bilibili.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.bilibili.com.
dns A 10.30.59.193
www A 10.30.59.195
# 反向解析
[root@dns1 named]# vim bilibili.loopback
$TTL 1D
@ IN SOA bilibili.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.bilibili.com.
93 PTR dns.bilibili.com.
95 PTR www.bilibili.com.
# 啟動服務
[root@dns1 named]# systemctl restart named
[root@dns1 named]# netstat -ntlp |grep named
tcp 0 0 10.30.59.193:53 0.0.0.0:* LISTEN 12550/named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 12550/named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 12550/named
tcp6 0 0 ::1:53 :::* LISTEN 12550/named
tcp6 0 0 ::1:953 :::* LISTEN 12550/named
測試
# 使用第二臺虛擬機, 配置dns為DNS服務器,測試
[root@localhost ~]# hostnamectl set-hostname dns2
[root@localhost ~]# bash
[root@dns2 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eno16780032
DNS1=10.30.59.193
[root@dns2 ~]# systemctl restart network
# bilibili地址顯示為10.30.59.195,說明配置成功。
[root@dns2 ~]# ping www.bilibili.com
PING www.bilibili.com (10.30.59.195) 56(84) bytes of data.
From 10.30.59.194 icmp_seq=1 Destination Host Unreachable
From 10.30.59.194 icmp_seq=2 Destination Host Unreachable
From 10.30.59.194 icmp_seq=3 Destination Host Unreachable
From 10.30.59.194 icmp_seq=4 Destination Host Unreachable
4.2主從DNS服務器
目的:
減輕主服務器的壓力,備份
環境準備:
centos7-1511,關閉防火墻 selinux
ip | 節點 | 主機名 |
10.30.59.193 | master | dns1 |
10.30.59.194 | slave | dns2 |
10.30.59.195 | ceshi | localhost |
# 主從兩個節點
# 配置本地yum源
[root@dns1 ~]# cat /etc/yum.repos.d/local.repo
[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
[root@dns2 ~]# cat /etc/yum.repos.d/local.repo
[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
# 安裝服務
[root@dns1 ~]# yum install -y bind
[root@dns2 ~]# yum install -y bind
主節點配置
# 主節點配置
[root@dns1 ~]# vim /etc/named.conf
options {
listen-on port 53 { 10.30.59.193; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; };
# 區域配置文件只保留一個模板文件
[root@dns1 ~]# vim /etc/named.rfc1912.zones
zone "bilibili.com" IN {
type master;
file "bilibili.localhost";
allow-update { 10.30.59.194; };
};
# 修改正向解析配置文件 相對于基本服務,這里多配置一個serial充當版本作用
[root@dns1 ~]# cd /var/named/
[root@dns1 named]# cp -a named.localhost bilibili.localhost
[root@dns1 named]# vim bilibili.localhost
$TTL 1D
@ IN SOA bilibili.com. rname.invalid. (
20211208 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.bilibili.com.
dns A 10.30.59.193
www A 10.30.59.195
[root@dns1 named]# service named restart
Redirecting to /bin/systemctl restart named.service
從節點配置
[root@dns2 ~]# vim /etc/named.conf
10 options {
11 listen-on port 53 { 10.30.59.194; };
12 listen-on-v6 port 53 { ::1; };
13 directory "/var/named";
14 dump-file "/var/named/data/cache_dump.db";
15 statistics-file "/var/named/data/named_stats.txt";
16 memstatistics-file "/var/named/data/named_mem_stats.tx t";
17 allow-query { any; };
# 配置區域配置文件 只保留一個模板文件
[root@dns2 ~]# vim /etc/named.rfc1912.zones
zone "bilibili.com" IN {
type slave;
masters { 10.30.59.193; };
file "slaves/bilibili.localhost";
allow-update { none; };
};
# 從服務器不需要配置解析文件,會自動同步master節點服務器文件到slaves目錄下
# 啟動前,確認為空目錄
[root@dns2 ~]# ls /var/named/slaves/
# 啟動服務
[root@dns2 ~]# service named start
Redirecting to /bin/systemctl start named.service
[root@dns2 ~]# ls /var/named/slaves/
bilibili.localhost
驗證結果
給測試機配置dns為從服務器的地址
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16780032
# 從節點的地址
DNS1=10.30.59.194
[root@localhost ~]# systemctl restart netwoprk
Failed to restart netwoprk.service: Unit netwoprk.service failed to load: No such file or directory.
[root@localhost ~]# systemctl restart network
[root@localhost ~]# ping www.bilibili.com
PING www.bilibili.com (10.30.59.195) 56(84) bytes of data.
64 bytes from 10.30.59.195: icmp_seq=1 ttl=64 time=0.028 ms
64 bytes from 10.30.59.195: icmp_seq=2 ttl=64 time=0.042 ms
64 bytes from 10.30.59.195: icmp_seq=3 ttl=64 time=0.040 ms
^C
--- www.bilibili.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev=0.028/0.036/0.042/0.009 ms
4.3DNS緩存服務器
目的:
加快解析速度,提高工作效率
實驗軟件:
dnsmasq
操作:
接上一個環境繼續操作,把從服務器當作緩存服務器。
# 停掉從服務器
[root@dns2 ~]# service named stop
Redirecting to /bin/systemctl stop named.service
# 安裝dnsmasq 可能已經安裝。
yum install -y dnsmasq
# 修改配置文件
[root@dns2 ~]# vim /etc/dnsmasq.conf
domain=bilibili.com
server=10.30.59.193
cache-size=150
# 重啟服務
[root@dns2 ~]# service dnsmasq restart
Redirecting to /bin/systemctl restart dnsmasq.service
# 測試 如果沒有nslookup命令,下載bind-utils
[root@localhost ~]# nslookup www.bilibili.com
Server: 10.30.59.194
Address: 10.30.59.194#53
Name: www.bilibili.com
Address: 10.30.59.195
# 關掉主服務器
[root@dns1 ~]# systemctl stop named
# 再次測試 非權威回答
[root@localhost ~]# nslookup www.bilibili.com
Server: 10.30.59.194
Address: 10.30.59.194#53
Non-authoritative answer:
Name: www.bilibili.com
Address: 10.30.59.195
請求順序
# 客戶端從緩存服務器請求, 緩存服務器沒有,去主服務查找, 主服務器沒啟動,測試沒反應, 啟動主服務器,再次測試, 緩存服務器再次請求主服務器,獲取域名,返回給客戶端。
# 主服務器沒啟動
[root@localhost ~]# nslookup dns.bilibili.com
^C
# 啟動主服務器
[root@dns1 ~]# systemctl start named
[root@localhost ~]# nslookup dns.bilibili.com
Server: 10.30.59.194
Address: 10.30.59.194#53
Name: dns.bilibili.com
Address: 10.30.59.193
# 再次關閉,有緩存可以解析到。
[root@dns1 ~]# systemctl stop named
[root@localhost ~]# nslookup dns.bilibili.com
Server: 10.30.59.194
Address: 10.30.59.194#53
Non-authoritative answer:
Name: dns.bilibili.com
Address: 10.30.59.193
4.4 智能DNS(分離解析)
目的:
NDS分離解析即將相同域名解析為不同的IP地址,實現網絡中一些網站為了讓用戶有更好的體驗效果解析速度更快,就把來自不通運營商的用戶解析到相對應的服務器,這樣就大大提升了訪問速度。
實驗環境:
配置一臺apache服務器,兩個網卡模擬內外網, 兩臺測試機從內網外網分別訪問。dns能夠正確解析(內網地址訪問解析內網地址,外網地址訪問解析外網地址)。
節點 | IP | 主機名 | 備注 |
內網測試機 | 192.168.100.10 | int | 內外網選擇網絡模式:內: vmnat1 192.168.100.0/24外: vmnat 8 192.168.200.0/24 |
外網測試機 | 192.168.200.10 | ext | |
apache | 192.168.100.20 192.168.200.20 | apache | |
dns+路由 | 192.168.100.30 192.168.200.30 | dns |
實驗大綱:
1、安裝bind軟件
2、內核配置文件開啟路由轉發,修改/etc/sysctl.conf
3、修改主配置文件/etc/named.conf 配置any,視圖
4、生成自己定義的區域配置文件。
5、配置數據文件
內網正向解析,外網正向解析
6、重啟服務
7、效果測試
nslookup
基礎環境準備:
修改主機名 配置ip 所有節點關閉防火墻、selinux、配置本地yum。
# 內網測試機
[root@localhost ~]# hostnamectl set-hostname net1
[root@localhost ~]# bash
[root@int ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16777736
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0
GATEWAY=192.168.100.30
DNS1=192.168.100.30
# 外網測試機
[root@localhost ~]# hostnamectl set-hostname ext
[root@localhost ~]# bash
[root@ext ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16777736
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
ONBOOT=yes
IPADDR=192.168.200.10
NETMASK=255.255.255.0
GATEWAY=192.168.200.2
DNS1=192.168.200.30
# 配置雙網卡出了一個問題: 一開始本著第一塊網卡僅主機模式,然后第二塊網卡net模式,就調整第一塊網卡為僅主機模式,新加的第二塊網卡為net模式, 結果網絡不行,就重新配置為第一塊網卡為net模式,第二塊網卡為net模式。 不影響本案例。
# apache
[root@localhost ~]# hostnamectl set-hostname apache
[root@localhost ~]# bash
[root@apache ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16777736
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
ONBOOT=yes
IPADDR=192.168.200.20
NETMASK=255.255.255.0
GATEWAY=192.168.200.2
DNS1=114.114.114.114
[root@apache ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno33554984
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
NAME=eno33554984
ONBOOT=yes
IPADDR=192.168.100.20
NETMASK=255.255.255.0
# dns
[root@localhost ~]# hostnamectl set-hostname dns
[root@localhost ~]# bash
[root@dns ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16777736
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
ONBOOT=yes
IPADDR=192.168.200.30
NETMASK=255.255.255.0
GATEWAY=192.168.200.2
DNS1=114.114.114.114
[root@dns ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno33554984
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno33554984
ONBOOT=yes
IPADDR=192.168.100.30
NETMASK=255.255.255.0
# apache 節點安裝httpd
[root@apache ~]# yum install -y httpd
[root@apache ~]# vim /var/www/html/index.html
dns分離解析驗證成功!
[root@apache ~]# systemctl start httpd
[root@apache ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
# dns節點安裝bind。
[root@dns ~]# yum install -y bind
測試一下直接地址訪問看看有沒有問題
分離解析配置
# dns節點永久開啟路由轉發
[root@dns ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@dns ~]# sysctl -p
net.ipv4.ip_forward=1
#修改主配置文件
# 兩個any 監聽任意地址
# 加兩個視圖 分別監聽內網和其他地址 ,視圖匹配規則為自上而下匹配,注意順序。 match-client匹配地址, include 指定區域配置文件。
[root@dns ~]# vim /etc/named.conf
listen-on port 53 { any; };
allow-query { any; };
view lan {
match-clients { 192.168.100.0/24; };
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/lan.zones";
};
view wan {
match-clients { any; };
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/wan.zones";
};
#include "/etc/named.rfc1912.zones";
# 修改區域配置文件
[root@dns ~]# cp -a /etc/named.rfc1912.zones /etc/lan.zones
[root@dns ~]# vim /etc/lan.zones
zone "bilibili.com" IN {
type master;
file "lan.localhost";
allow-update { none; };
};
[root@dns ~]# cp -a /etc/lan.zones /etc/wan.zones
[root@dns ~]# vim /etc/wan.zones
zone "bilibili.com" IN {
type master;
file "wan.localhost";
allow-update { none; };
};
# 修改解析文件
[root@dns etc]# cd /var/named/
[root@dns named]# ls
data dynamic named.ca named.empty named.localhost named.loopback slaves
[root@dns named]# cp -a named.localhost lan.localhost
[root@dns named]# vim lan.localhost
$TTL 1D
@ IN SOA bilibili.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.bilibili.com.
dns A 192.168.100.30
www A 192.168.100.20
[root@dns named]# cp -a lan.localhost wan.localhost
[root@dns named]# vim wan.localhost
$TTL 1D
@ IN SOA bilibili.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.bilibili.com.
dns A 192.168.200.30
www A 192.168.200.20
測試
# 啟動服務
[root@dns named]# systemctl start named
# 內網機測試
[root@int ~]# curl www.bilibili.com
dns分離解析驗證成功! \\ 查看是否顯示你在主頁顯示的內容。
# 外網機測試
[root@ext ~]# curl www.bilibili.com
dns分離解析驗證成功! \\查看是否同理
# 再使用nslookup測試
# 兩個節點都下載
[root@ext ~]# yum install -y bind-utils
[root@int ~]# nslookup www.bilibili.com
Server: 192.168.100.30
Address: 192.168.100.30#53
Name: www.bilibili.com
Address: 192.168.100.20
[root@ext ~]# nslookup www.bilibili.com
Server: 192.168.200.30
Address: 192.168.200.30#53
Name: www.bilibili.com
Address: 192.168.200.20
# 可以發現內外網使用的dns地址不同,并且解析出來的ip不同。實驗成功!
如果ip更多,就多寫視圖,多謝區域配置文件與解析文件。
拓展知識: 郵件服務
第一層:物理存儲介質。
第二層:內核層次的文件系統,維護文件到磁層磁盤的映射關系。(用戶一般不需要管)
第三層:應用層次的文件系統(需要用戶自己手工安裝應用程序,啟動應用進程)
第四層:網絡文件訪問系統NFS, CIFS(服務器端裝Server,客戶端裝Client,掛載目錄遠程訪問)
參考:
http://www.uml.org.cn/yunjisuan/2014041107.asp
備注:Cluster Network可選,但是最好建議有該網絡,用于OSD擴展時,后端網絡傳輸數據用。
在實際工作中時,深有體會,如果只有public network,在OSD擴展時,由于ceph需要重新“搬運”數據,導致升級長達5個小時。如果有專門的集群網絡(萬兆交換機+光釬),幾分鐘升級完成。
參考:
http://ceph.com/
http://docs.openfans.org/ceph/ http://docs.ceph.org.cn/ (上述官網的漢化版)
http://docs.openstack.org/mitaka/config-reference/block-storage.html
節點 | 安裝組件 | 備注 |
hostname:ceph1 ip:192.168.100.110 | ceph-deploy、mon、osd | OS:CentOS7.9 Admin Node與Ceph1共享 |
hostname:ceph2 ip:192.168.100.111 | mon、osd | |
hostname:ceph3 ip:192.168.100.112 | mon、osd |
該章節的操作均通過root執行且在各個ceph節點均要執行
#vi /etc/hostname #如果為其他節點調整為其他節點的名稱
ceph{number} #如ceph1
#hostname -F /etc/hostname #立即生效,斷開shell重新登錄
#useradd -d /home/irteam -k /etc/skel -m irteam
#sudo passwd irteam
#echo " irteam ALL=(root) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/irteam
#chmod 0440 /etc/sudoers.d/irteam
修改/etc/sudoers,irteam用戶不需要tty
#chmod 755 /etc/sudoers
#vi /etc/sudoers #添加如下配置,而不是將原來的Default requiretty注釋掉
Defaults:irteam !requiretty
#chmod 440 /etc/sudoers
#yum clean all
#rm -rf /etc/yum.repos.d/*.repo
#wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#sed -i '/aliyuncs/d' /etc/yum.repos.d/CentOS-Base.repo
#sed -i 's/$releasever/7.2.1511/g' /etc/yum.repos.d/CentOS-Base.repo
#vi /etc/yum.repos.d/ceph.repo #增加ceph源
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
gpgcheck=0
#yum makecache
#yum install -y ceph
#ceph --version #版本查看
ceph version 10.2.2 (45107e21c568dd033c2f0a3107dec8f0b0e58374)
#sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
#setenforce 0
#systemctl stop firewalld
#systemctl disable firewalld
參考:http://www.android100.org/html/201407/26/46537.html
#timedatectl set-timezone Asia/Shanghai #設置時區
#yum install -y rdate
#rdate -s ?tick.greyware.com #選個可用且權威的服務器
#echo "00 0 1 * * root rdate -s tick.greyware.com" >> /etc/crontab #加入調度
備注:以下操作均在admin-node節點執行,在本文中,由于admin-node與ceph1共享,所以在ceph1執行就可以了,統一用用戶:irteam執行
#sudo vi /etc/hosts
192.168.100.110 ceph1
192.168.100.111 ceph2
192.168.100.112 ceph3
#sudo su - irteam
#ssh-keygen
Generating public/private key pair.
Enter file in which to save the key (/irteam/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /irteam/.ssh/id_rsa.
Your public key has been saved in /irteam/.ssh/id_rsa.pub.
#ssh-copy-id irteam@ceph1
#ssh-copy-id irteam@ceph2
#ssh-copy-id irteam@ceph3
#sudo su - irteam #如果當前登錄用戶是irteam,則忽略該步驟
#vi ~/.ssh/config
StrictHostKeyChecking no
Host ceph1
Hostname ceph1
User irteam
Host ceph2
Hostname ceph2
User irteam
Host ceph3
Hostname ceph3
User irteam
#chmod 600 ~/.ssh/config
#sudo yum -y install ceph-deploy
#ceph-deploy --version
1.5.34
#sudo su - irteam #如果當前登錄用戶是irteam,則不用執行
#mkdir ~/my-cluster && cd ~/my-cluster
#創建集群:在當前目錄下生成ceph.conf以及ceph.mon.keyring
#ceph-deploy new ceph1 ceph2 ceph3
#ls ~/my-cluster #查看生成的文件
ceph.conf ceph-deploy-ceph.log ceph.mon.keyring
修改集群ceph.conf配置,增加public_network,增加monitor之間的時差(默認為0.05s,現改為2s),總共的副本數據調整為2
#vi ceph.conf
[global]
fsid=7cec0691-c713-46d0-bce8-5cb1d57f051f
mon_initial_members=ceph1, ceph2, ceph3 #也可以用IP,用hostname最佳
mon_host=192.168.11.119,192.168.11.124,192.168.11.112
auth_cluster_required=cephx
auth_service_required=cephx
auth_client_required=cephx
public_network=192.168.100.0/24
mon_clock_drift_allowed=2
osd_pool_default_size=2
#ceph-deploy mon create-initial
#ll ~/my-cluster
ceph.bootstrap-mds.keyring
ceph.bootstrap-rgw.keyring
ceph.conf
ceph.mon.keyring
ceph.bootstrap-osd.keyring
ceph.client.admin.keyring
ceph-deploy-ceph.log
#sudo ceph -s #查看集群情況
cluster 7cec0691-c713-46d0-bce8-5cb1d57f051f
health HEALTH_ERR
no osds
monmap e1: 3 mons at {ceph1=192.168.100.119:6789/0,ceph2=192.168.100.111:6789/0,ceph3=192.168.100.112:6789/0}
election epoch 4, quorum 0,1,2 ceph3,ceph1,ceph2
osdmap e1: 0 osds: 0 up, 0 in
flags sortbitwise
pgmap v2: 64 pgs, 1 pools, 0 bytes data, 0 objects
0 kB used, 0 kB / 0 kB avail
64 creating
由于沒有足夠多的磁盤(如果用磁盤請參考維護章節),用文件夾:
#以下創建文件夾,賦權的動作均在ceph1,ceph2,ceph3上執行
#sudo mkdir /var/local/osd1 && sudo chmod 777 -R /var/local/osd1
osd預處理與激活
#ceph-deploy osd prepare ceph1:/var/local/osd1 ceph2:/var/local/osd1 ceph3:/var/local/osd1
#ceph-deploy osd activate ceph1:/var/local/osd1 ceph2:/var/local/osd1 ceph3:/var/local/osd1
備注:
a.如果你有足夠多的磁盤,你也可以直接對磁盤操作
#ceph-deploy osd prepare ceph1:sdb
#ceph-deploy osd activate ceph1:sdb
b.對上述osd prepare & osd activate,也可以一步完成
#ceph-deploy osd create ceph1:sdb
查看集群狀態
#sudo ceph -s
cluster 7cec0691-c713-46d0-bce8-5cb1d57f051f
health HEALTH_OK
monmap e1: 3 mons at {ceph1=192.168.100.110:6789/0,ceph2=192.168.100.111:6789/0,ceph3=192.168.100.112:6789/0}
election epoch 4, quorum 0,1,2 ceph3,ceph1,ceph2
osdmap e15: 3 osds: 3 up, 3 in
flags sortbitwise
pgmap v26: 64 pgs, 1 pools, 0 bytes data, 0 objects
29590 MB used, 113 GB / 142 GB avail
64 active+clean
除了官方推薦的ceph-deploy安裝方式,你還可以選擇如下安裝方式:
通過工具ansible,遠程登錄到各node節點安裝,并且讓mon,osd,rgw用docker方式來承載
另外:由于我們使用docker的目的是想部署openstack,涉及到openstack部分,則不涉及。
如果不部署openstack,則需要將openstack的所有組件設置為no, 只需要打開ceph部分,如:
vi /git/kolla/etc/kolla/globals.yml
…
enable_keystone: “no”,
enable_horizon:”no”,
……
enable_${compName}: “no”,
enable_ceph: “yes”
….
節點 | 安裝組件 | 備注 |
Kolla節點 ip:192.168.100.144 | kolla | OS:Centos7.9 |
hostname:ceph1 ip:192.168.100.133 | mon、osd | |
hostname:ceph2 ip:192.168.100.117 | mon、osd | |
hostname:ceph3 ip:192.168.100.148 | mon、osd |
該章節的操作可以通過root用戶執行且在各個ceph節點均要執行
#vi /etc/hostname #如果為其他節點調整為其他節點的名稱
ceph{nuber} #如ceph1
#hostname -F /etc/hostname #立即生效,斷開shell重新登錄
#useradd -d /home/irteam -k /etc/skel -m irteam
#sudo passwd irteam
#echo " irteam ALL=(root) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/irteam
#chmod 0440 /etc/sudoers.d/irteam
#sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
#setenforce 0
#systemctl stop firewalld
#systemctl disable firewalld
參考:http://www.android100.org/html/201407/26/46537.html
#timedatectl set-timezone Asia/Shanghai #設置時區
#yum install -y rdate
#rdate -s ?tick.greyware.com #選個可用且權威的服務器
#echo "00 0 1 * * root rdate -s tick.greyware.com" >> /etc/crontab #加入調度
#curl -sSL https://get.docker.io | bash
#docker --version
Docker version ${version}, build 20f81dd
#vi /usr/lib/systemd/system/docker.service #添加下面的MountFlags=shared
MountFlags=shared
#systemctl daemon-reload
#systemctl restart docker #重啟docker
#yum install -y python-pip
#pip install -U docker-py
以下操作在kolla節點執行,統一用用戶:irteam執行
#sudo vi /etc/hosts
192.168.100.133 ceph1
192.168.100.117 ceph2
192.168.100.148 ceph3
#sudo su - irteam
#ssh-keygen
Generating public/private key pair.
Enter file in which to save the key (/irteam/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /irteam/.ssh/id_rsa.
Your public key has been saved in /irteam/.ssh/id_rsa.pub.
#ssh-copy-id irteam@ceph1
#ssh-copy-id irteam@ceph2
#ssh-copy-id irteam@ceph3
#sudo mkdir -p /git/ && cd /git/ #目錄根據自己的調整
#git clone https://oss.navercorp.com/paas/kolla.git #也可以從gitHub下載
#pip install -U ansible==1.9.4 #如果從github下載kolla,注意kolla版本與ansible版本的#對應關系
#sudo vi multimode-inventory
….略
[ceph-mon]
ceph1
[ceph-osd]
ceph1 ansible_sudo=True
ceph2 ansible_sudo=True
ceph3 ansible_sudo=True
[ceph-rgw]
…略
備注:irteam必須要有sudo到root用戶的權限
#登錄到各ceph節點,確認哪些盤可以作為osd盤,打上標記,執行完后返回kolla節點
#sudo parted /dev/xvdb -s -- mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP 1 -1
#sudo parted /dev/xvdb print #查看
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdb: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 53.7GB 53.7GB KOLLA_CEPH_OSD_BOOTSTRAP
如果不設置,有沒有關系,會自動劃分5G的journal 空間
#vi /git/kolla/etc/kolla/globals.yml
…略
enable_ceph: "yes"
enable_ceph_rgw: "no"
…略
#kolla最終部署
#/git/kolla/tools/kolla-ansible deploy --configdir /git/openstack-deploy/config-test -i \
/git/openstack-deploy/config-test/multinode-inventory
#sudo ceph -s #當前狀態查看
#sudo ceph -w #實時狀態查看
health HEALTH_OK
monmap e3: 1 mons at {ceph3=192.168.11.112:6789/0}
election epoch 7, quorum 0 ceph3
osdmap e67: 4 osds: 4 up, 4 in
flags sortbitwise
pgmap v60965: 64 pgs, 1 pools, 0 bytes data, 0 objects
57416 MB used, 133 GB / 189 GB avail
64 active+clean
2016-08-19 01:16:01.623581 mon.0 [INF] pgmap v60965: 64 pgs: 64 active+clean; 0 bytes data, 57416 MB used, 133 GB / 189 GB avail
2016-08-19 01:16:05.582505 mon.0 [INF] pgmap v60966: 64 pgs: 64 active+clean; 0 bytes data, 57416 MB used, 133 GB / 189 GB avail
….
#sudo ceph health [detail] #ceph健康狀態查看,[詳情]
HEALTH_OK
#sudo ceph df
GLOBAL:
SIZE AVAIL RAW USED %RAW USED
189G 133G 57411M 29.54
POOLS:
NAME ID USED %USED MAX AVAIL OBJECTS
rbd 0 0 0 64203M 0
備注:OSD數量大于>=2且位于不同的物理節點
#sudo ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.13889 root default
-2 0.04630 host ceph1
0 0.04630 osd.0 up 1.00000 1.00000
-3 0.04630 host ceph2
1 0.04630 osd.1 up 1.00000 1.00000
-4 0.04630 host ceph3
2 0.04630 osd.2 up 1.00000 1.00000
#ceph osd dump
epoch 22
fsid ee45dfa5-234d-48f3-a8a5-32e9ca781f47
created 2016-09-21 14:05:24.512685
modified 2016-09-22 15:14:54.317395
flags
pool 0 'rbd' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 1 flags hashpspool stripe_width 0
max_osd 5
osd.0 up in weight 1 up_from 11 up_thru 21 down_at 0 last_clean_interval [0,0) 192.168.11.112:6800/5903 192.168.11.112:6801/5903 192.168.11.112:6802/5903 192.168.11.112:6803/5903 exists,up 418cbbe0-ea7e-42d8-b43d-e48dd7e53a00
osd.1 up in weight 1 up_from 10 up_thru 21 down_at 0 last_clean_interval [0,0) 192.168.11.134:6800/5639 192.168.11.134:6801/5639 192.168.11.134:6802/5639 192.168.11.134:6803/5639 exists,up f53ec139-9816-46a8-b7d5-41cb5dd57a0f
osd.2 up in weight 1 up_from 11 up_thru 21 down_at 0 last_clean_interval [0,0) 192.168.11.135:6800/5659 192.168.11.135:6801/5659 192.168.11.135:6802/5659 192.168.11.135:6803/5659 exists,up 67ca0418-a495-45a7-914b-197dff732220
osd.3 down out weight 0 up_from 0 up_thru 0 down_at 0 last_clean_interval [0,0) :/0 :/0 :/0 :/0 exists,new
osd.4 down out weight 0 up_from 0 up_thru 0 down_at 0 last_clean_interval [0,0) :/0 :/0 :/0 :/0 exists,new
#ceph-deploy disk list ceph1
#ceph-deploy disk zap ceph1:sdb
備注:此動作由于刪除分區表,會刪除所有數據,務必小心
#ceph-deploy osd prepare ceph1:sdb #準備OSD
#ceph-deploy osd activate ceph1:sdb #激活OSD
或
#ceph-deploy osd create ceph1:sdb #準備+激活=創建,1步到位
參考:
http://docs.ceph.com/docs/hammer/rados/operations/add-or-rm-osds/#removing-osds-manual
https://wiki.deimos.fr/Ceph_:_performance,_reliability_and_scalability_storage_solution#Add_an_OSD
#sudo ceph osd out osd.{number}
#sudo ceph osd down osd.{number} #停止進程,也可以登錄到節點停止該進程
#sudo ceph osd crush remove osd.{number}
#sudo ceph auth del osd. {number}
#sudo ceph osd rm {number}
#sudo rm -rf /var/lib/ceph/osd/ceph-{number} #登錄到所在節點執行
說明:Monitor數量要求>=2n+1 (n>=0,整數),生產環境至少3個
#將ceph1這個monitor節點從~/my-cluster/ceph.conf刪除
#cd ~/my-cluster/ && vi ceph.conf
……略
mon_initial_members=ceph2, ceph3
mon_host=192.168.100.111,192.168.100.112
……略
#推送~/my-cluster/ceph.conf到各節點
#ceph-deploy --overwrite-conf config push ceph1 ceph2 ceph3
#刪除該monitor[可能要執行兩次],最后通過sudo ceph -s查看
#ceph-deploy mon destroy ceph1
#將ceph1這個monitor節點添加到~/my-cluster/ceph.conf
#vi ~/my-cluster/ceph.conf
……略
mon_initial_members=ceph1,ceph2, ceph3
mon_host=192.168.100.110,192.168.100.111,192.168.100.112
……略
#推送~/my-cluster/ceph.conf到各節點
#ceph-deploy --overwrite-conf config push ceph1 ceph2 ceph3
#增加monitor
#ceph-deploy --overwrite-conf mon create ceph1
#sudo ceph -s
cluster 773b310b-5faf-4d98-8761-651ba7daecfb
health HEALTH_OK
monmap e8: 2 mons at {ceph2=192.168.100.115:6789/0,ceph3=192.168.100.126:6789/0}
election epoch 42, quorum 0,1 ceph2,ceph3
osdmap e76: 3 osds: 3 up, 3 in
flags sortbitwise
pgmap v30914: 136 pgs, 10 pools, 38194 kB data, 195 objects
21925 MB used, 120 GB / 142 GB avail
136 active+clean
#當添加或刪除Monitor后,查看選舉狀態
#ceph quorum_ status --format json-pretty
參考:
http://docs.ceph.com/docs/hammer/rados/operations/pools/
http://www.ithao123.cn/content-8246357.html (pg狀態說明)
#sudo ceph osd lspools #或sudo rados lspools #或sudo ceph osd pool ls
rbd
#rados df
pool name KB objects clones degraded unfound rd rd KB wr wr KB
rbd 0 0 0 0 0 0 0 0 0
total used 58986376 0
total avail 139998408
total space 198984784
#sudo ceph osd pool create images 100 #100指pg number
pool 'images' created
默認pool的pg number配置:
http://docs.ceph.com/docs/hammer/rados/configuration/pool-pg-config-ref/
#sudo ceph osd pool set images size 3 #設置pool:images的副本數為3
set pool 1 size to 3
#sudo ceph osd dump | grep 'replicated size' #查看所有pool的副本數
#sudo ceph osd dump | grep ‘’${poolName}’ #查看pool的詳細情況’
#sudo ceph osd pool set-quota images max_objects 10000 #設置quota:最大對象數
set-quota max_objects=10000 for pool images
#sudo ceph osd pool delete images images --yes-i-really-really-mean-it
pool 'images' removed
#rados put test-object-1 a.txt --pool=data
#rados -p data ls
test-object-1
#ceph osd map data test-object-1 #確定對象的位置
osdmap e75 pool 'data' (2) object 'test-object-1' -> pg 2.74dc35e2 (2.62) -> up ([4,5], p4) acting ([4,5], p4)
#rados rm test-object-1 --pool=data
√ 在任意ceph節點安裝對象網管
#sudo yum install -y ceph-radosgw radosgw-agent
√ 基本配置設置
#sudo ceph-authtool --create-keyring /etc/ceph/ceph.client.radosgw.keyring
#sudo chmod +r /etc/ceph/ceph.client.radosgw.keyring
#sudo ceph-authtool /etc/ceph/ceph.client.radosgw.keyring \
-n client.radosgw.gateway --gen-key
#sudo ceph-authtool -n client.radosgw.gateway --cap osd 'allow rwx' \
--cap mon 'allow rwx' /etc/ceph/ceph.client.radosgw.keyring
#sudo ceph -k /etc/ceph/ceph.client.admin.keyring auth add client.radosgw.gateway \
-i /etc/ceph/ceph.client.radosgw.keyring
如果其他節點需要ceph.client.radosgw.keyring,可以推送到/etc/ceph目錄下
[client.radosgw.gateway]
host=ceph1
keyring=/etc/ceph/ceph.client.radosgw.keyring
rgw socket path=/var/run/ceph/ceph.radosgw.gateway.fastcgi.sock
log file=/var/log/radosgw/client.radosgw.gateway.log
√ 啟動radosgw服務(默認監聽7480端口)
#/usr/bin/radosgw -c /etc/ceph/ceph.conf -n client.radosgw.gateway
√ 創建用戶
#sudo radosgw-admin user create --uid=ningyougang --display-name=ningyougang --email=ningyougang@navercorp.com
√ S3客戶端測試
http://www.cloudberrylab.com/free-amazon-s3-explorer-cloudfront-IAM.aspx
到該地址下載S3客戶端,連接
√ S3運維-radosgw,以下含相關運維命令
請參考:
http://docs.ceph.com/docs/master/radosgw/
http://docs.ceph.com/docs/master/man/8/radosgw-admin/
創建用戶
#sudo radosgw-admin user create --uid=newtouchstep --display-name=newtouchstep --email=jingyi.liu@newtouch.cn
修改用戶
#sudo radosgw-admin user modify --uid=newtouchstep --display-name=newtouchstep --email=jingyi.liu@newtouch.cn
查看用戶信息
#sudo radosgw-admin user info --uid=newtouchone
刪除用戶
#sudo radosgw-admin user rm --uid=newtouchone #沒有數據才可以刪除
#sudo radosgw-admin user rm --uid=newtouchone --purge-data #刪除用戶刪除數據
暫停用戶使用
#sudo radosgw-admin user suspend --uid=newtouchone
用戶生效
#sudo radosgw-admin user enable --uid=newtouchone
用戶檢查
#sudo radosgw-admin user check --uid=newtouchone
查詢bucket
#sudo radosgw-admin bucket list
查詢指定bucket的對象
#sudo radosgw-admin bucket list --bucket=images
統計bucket信息
#sudo radosgw-admin bucket stats #查詢所有bucket統計信息
#sudo radosgw-admin bucket stats --bucket=images #查詢指定bucket統計信息
刪除bucket
刪除pucket(但是不刪除object,加上bucket后恢復)
#sudo radosgw-admin bucket rm --bucket=images
刪除bucket后同時刪除object
#sudo radosgw-admin bucket rm --bucket=images --purge-objects
檢查bucket
#sudo radosgw-admin bucket check
刪除object
#sudo radosgw-admin object rm --bucket=attach --object=fanbingbing.jpg
為bucket設置配額
#sudo radosgw-admin quota set --max-objects=200 --max-size=10000000000 --quota-scope=bucket --bucket=images
#sudo radosgw-admin quota enable --quota-scope=bucket --bucket=images
#sudo radosgw-admin quota disable --quota-scope=bucket --bucket=images
為帳號設置配額
#sudo radosgw-admin quota set --max-objects=2 --max-size=100000 --quota-scope=user --uid=newtouchstep
#sudo radosgw-admin quota enable --quota-scope=user --uid=newtouchstep
#sudo radosgw-admin quota disable --quota-scope=user --uid=newtouchstep
參考:
http://docs.ceph.com/docs/master/start/quick-rbd/
http://docs.ceph.com/docs/jewel/man/8/rbd/
經典截圖:
#sudo rbd create foo --size 1024 --pool swimmingpool --image-feature layering
/dev/rbd0
#sudo rbd ls --pool swimmingpool #塊設備列表查看,不指定pool,則默認為rbd
#sudo rbd info foo --pool swimmingpool #查看指定的塊設備
#sudo rbd map foo --pool swimmingpool
#sudo rbd showmapped
id pool image snap device
1 rbd foo - /dev/rbd1
備注:上面的rbd create如果不加參數--image-feature layering,則sudo rbd map操作好像有問題:
http://tracker.ceph.com/issues/15448
http://www.zphj1987.com/2016/06/07/rbd%E6%97%A0%E6%B3%95map(rbd-feature-disable)/
備注:在rbd map時,會報: rbd: map failed: (6) No such device or address
此時可以在rbd create后加--image-feature layering參數即可解決
#sudo rbd create foo --size 1024 --pool swimmingpool --image-feature layering
/dev/rbd0
#sudo mkfs.ext4 /dev/rbd0
#sudo mount /dev/rbd0 /mnt
#ls /mnt #證明被掛載目錄是一個分區
Lost+found
#sudo unmount /mnt #先umount目錄
#sudo rbd unmap /dev/rbd0
#sudo rbd rm foo
參考:
http://docs.ceph.com/docs/master/rados/operations/operating/
#推送配置,從目錄~/my-cluster/ceph.conf到各節點的/etc/ceph/ceph.conf
#ceph-deploy --overwrite-conf config push ceph1 ceph2 ceph3
#sudo systemctl start ceph.target
#sudo systemctl stop ceph.target
#sudo systemctl restart ceph.target
#sudo systemctl start ceph-osd.target
#sudo systemctl start ceph-mon.target
#sudo systemctl start ceph-mds.target
#systemctl start ceph-osd@{id}
#systemctl stop ceph-osd@{id}
#systemctl restart ceph-osd@{id}
備注:如果部署ceph失敗,不必刪除ceph,只需要在當前節點執行如下命令即可,即可將環境還原到剛安裝ceph的狀態
#umount /var/lib/ceph/osd/*
#rm -rf /var/lib/ceph/osd/*
#rm -rf /var/lib/ceph/mon/*
#rm -rf /var/lib/ceph/mds/*
#rm -rf /var/lib/ceph/bootstrap-mds/*
#rm -rf /var/lib/ceph/bootstrap-osd/*
#rm -rf /var/lib/ceph/bootstrap-mon/*
#rm -rf /var/lib/ceph/tmp/*
#rm -rf /etc/ceph/*
#rm -rf /var/run/ceph/*
或(上面命令的簡潔版)
#umount /var/lib/ceph/osd/*
#rm -rf /var/lib/ceph
#rm -rf /etc/ceph/*
#rm -rf /var/run/ceph/*
#刪除該節點的ceph相關容器,注意-f name參數,根據需要加入過濾條件
#docker rm -f $(docker ps -f name=ceph -qa)
#刪除配置文件
#sudo rm -rf /home/irteam/kolla/*
#[可選]如果是monitor節點,刪除ceph_mon, ceph_mon_config
#docker volume rm ceph_mon ceph_mon_config
#[可選]如果是osd節點,umount,刪除分區
#sudo umount /var/lib/ceph/osd/*
#sudo rm -rf /var/lib/ceph
#sudo fdisk /dev/xvdb……,具體請參考磁盤操作章節的刪除分區章節
#sudo parted /dev/xvdb -s -- mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP 1 -1
這里僅列出部分操作,還有更多操作請參考《硬盤操作.docx》
#sudo fdisk -l
Disk /dev/xvdb: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units=sectors of 1 * 512=512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt
# Start End Size Type Name
1 10487808 104857566 45G unknown KOLLA_CEPH_DATA_1
2 2048 10485760 5G unknown KOLLA_CEPH_DATA_1_J
Disk /dev/xvda: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units=sectors of 1 * 512=512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000602dc
Device Boot Start End Blocks Id System
/dev/xvda1 * 2048 1026047 512000 83 Linux
/dev/xvda2 1026048 104857599 51915776 8e Linux LVM
這里僅以刪除分區為例,具體請help
#sudo fdisk /dev/xvdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): m
Command action
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
q quit without saving changes
s create a new empty Sun disklabel
w write table to disk and exit
Command (m for help): d #d表示刪除
Partition number (1,2, default 2): 2 #表示第2個分區
Partition 2 is deleted
Command (m for help): d
Selected partition 1
Partition 1 is delete
Command (m for help): w #最后要保存
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
#sudo df -h
#首先保證該節點安裝ceph
#yum makecache
#yum install -y ceph
#ceph --version #版本查看
#將配置文件ceph.conf和ceph.client.admin.keyring推送到/etc/ceph/下
#ceph-deploy admin {node-name}
這樣你就可以使用root執行ceph的相關管理操作了
# sudo hdparm -W 0 /dev/hda 0
開發,測試環境可以選用btrfs;
生成環境選用xfs
官網: http://zhaozhiming.github.io/blog/2014/09/13/ceph-authentication-theory/
中文翻譯: http://zhaozhiming.github.io/blog/2014/09/13/ceph-authentication-theory/
http://docs.ceph.com/docs/master/rados/configuration/ceph-conf/
報錯信息:
TASK: [ceph | Fetching Ceph keyrings] *****************************************
…略
template_from_string
res=jinja2.utils.concat(rf)
File "<template>", line 9, in root
File "/usr/lib64/python2.7/json/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "/usr/lib64/python2.7/json/decoder.py", line 365, in decode
obj, end=self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib64/python2.7/json/decoder.py", line 383, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
FATAL: all hosts have already failed -- aborting
解決辦法:
#將Monitor上的volume刪除掉
#docker volume rm ceph_mon ceph_mon_config
報錯信息:
#ceph -s
cluster f5a13a56-c9af-4f7b-9ba9-f55de577bafa
health HEALTH_WARN
clock skew detected on mon.192.168.100.134, mon.192.168.100.135
Monitor clock skew detected
monmap e1: 3 mons at {192.168.100.112=192.168.100.112:6789/0,192.168.100.134=192.168.100.134:6789/0,192.168.100.135=192.168.100.135:6789/0}
election epoch 6, quorum 0,1,2 192.168.100.112,192.168.100.134,192.168.100.135
osdmap e12: 5 osds: 5 up, 5 in
pgmap v17: 64 pgs, 1 pools, 0 bytes data, 0 objects
163 MB used, 224 GB / 224 GB avail
64 active+clean
解決辦法:
在/etc/ceph/ceph.conf的[global]章節下,將同步時間參數調整:
[global]
mon_clock_drift_allowed=2 #兩分鐘誤差