-
-
-
- 系統網絡配置
- 建立ceph-deploy使用者
- 配置yum源
- 安裝ntp時間同步服務
- 配置防火牆(使用firewalld)
- 克隆另外兩台虛拟機,并完成配置
- 節點tj01上安裝ceph-deploy
- 安裝及搭建ceph叢集
- 安裝啟動網關rgw
- 建立對象網關使用者(S3接口需要)
- 使用java測試S3接口
- 配置mgr儀表盤
-
-
系統網絡配置
1、安裝centos7.2在tj01節點上(略),修改網絡連接配接為NAT
2、修改網絡為靜态IP,參考https://www.cnblogs.com/leokale-zz/p/7832576.html
systemctl start NetworkManager.service
systemctl disable NetworkManager.service
ip addr
檢視除了lo的另一張網卡的mac位址,記錄下來
cd /etc/sysconfig/network-scripts/
mv ifcfg-eno16777736 ifcfg-eth100
vi ifcfg-eth100
按以下修改
ifcfg-eth100
檔案
删除檔案
rm -f /etc/udev/rules.d/*fix.rules
關閉
NetworkManage
服務,
systemctl stop NetworkManager.service
重新開機網絡服務
systemctl restart network.service
(出現問題可以先
reboot
,然後檢視網卡狀态
service network status
)
建立ceph-deploy使用者
在叢集内的所有 Ceph 節點上給 ceph-deploy 建立一個特定的使用者,這裡我們建立使用者名
iflyceph
,設定密碼
sudo useradd -d /home/iflyceph -m iflyceph
sudo passwd iflyceph
確定各 Ceph 節點上新建立的使用者都有 sudo 權限(三個節點)
su root
touch /etc/sudoers.d/iflyceph
vi /etc/sudoers.d/iflyceph
添加如下内容
執行
sudo chmod 0440 /etc/sudoers.d/iflyceph
配置yum源
1、下載下傳離線安裝包,這裡安裝luminous12.2.6版本,隻需要下載下傳12.2.6相關的包即可:
yum install wget
su iflyceph
cd ~
mkdir cephyumsource
cd cephyumsource
#這裡我們提供所有的包
wget http://eu.ceph.com/rpm-luminous/el7/x86_64/{某版本包名}
...
...
#下載下傳完後,安裝`createrepo`
yum install createrepo
#生成符合要求的yum倉庫,檔案夾裡面會多出一個repodata倉庫資料檔案夾,此時建立庫成功
createrepo /home/iflyceph/cephyumsource
下載下傳好的包如下圖所示
su root
cd /etc/yum.repos.d/
mkdir backup
mv ./* ./backup
#使用阿裡源
wget -O ./CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-repo
wget -O ./epel-7.repo http://mirrors.aliyun.com/repo/epel-repo
vim CentOS-Base.repo
在最後面添加以下内容,儲存
[LocalCeph]
name=CentOS-$releasever - LocalCeph
baseurl=file:///home/iflyceph/cephyumsource/
gpgcheck=
enabled=
gpgkey=
執行下面指令
yum clean all
rm -rf /var/cache/yum
yum makecache
#離線安裝ceph
yum install ceph
#檢視安裝版本
ceph -v
至此,ceph12.2.6已經在單節點安裝完畢,為減少工作量,後面我們先在單節點上做些準備工作,然後克隆另外的兩個節點
安裝ntp時間同步服務
#安裝ntp
yum install ntp ntpdate ntp-doc
#啟動ntp
systemctl start ntpd
#驗證
ps -ef|grep ntpd
#設定開機啟動
systemctl enable ntpd
配置防火牆(使用firewalld)
參考https://blog.csdn.net/xlgen157387/article/details/52672988
參考https://www.cnblogs.com/moxiaoan/p/5683743.html
#安裝
yum install firewalld
#添加規則,以下服務使用的端口允許
sudo firewall-cmd --zone=public --add-service=ceph-mon --permanent
sudo firewall-cmd --zone=public --add-service=ceph --permanent
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --zone=public --add-service=ssh --permanent
#ceph-mgr的tcp端口允許
sudo firewall-cmd --zone=public --add-port=/tcp --permanent
#啟動防火牆
systemctl start firewalld
#檢視防火牆規則
firewall-cmd --list-all
#開機啟動
systemctl enable firewalld
#檢視服務狀态
systemctl status firewalld
#若修改規則後,使用reload立即生效
firewall-cmd --reload
#禁用SELINUX
setenforce
克隆另外兩台虛拟機,并完成配置
此時,基礎配置工作基本完成
1、
vmware
克隆虛拟機
tj02
和
tj03
2、按系統網絡配置中配置虛拟機網絡(參考上面第一節)
3、以root使用者分别在三個節點上修改
hostname
#節點1上執行
hostnamectl set-hostname tj01
#節點2上執行
hostnamectl set-hostname tj02
#節點3上執行
hostnamectl set-hostname tj03
#三個節點均執行
vi /etc/hosts
#根據實際ip添加下面行
tj01
tj02
tj03
修改完後重新登入生效
4、切換使用者iflyceph生成免密登入(三個節點)
#tj01、tj02、tj03均執行
su iflyceph
cd ~
#生成ssh登入秘鑰
ssh-keygen
#均使用預設一直回車,結束後/home/iflyceph/.ssh下會生成兩個檔案id_rsa,id_rsa.pub
#在tj01,tj02,tj03均上執行
ssh-copy-id [email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected]
#驗證免密登入
ssh tj01 uptime
ssh tj02 uptime
ssh tj03 uptime
節點 tj01
上安裝 ceph-deploy
tj01
ceph-deploy
sudo yum install ceph-deploy
sudo ceph-deploy --version
安裝及搭建ceph叢集
su iflyceph
cd ~
#建立目錄用于存放admin節點ceph配置資訊
mkdir ceph-cluster
cd ceph-cluster
#執行下面語句,目前檔案夾下生成ceph.conf和ceph.mon.keyring檔案
ceph-deploy new tj01
可能會出現如下錯誤提示
[iflyceph@tj01 ceph-cluster]$ ceph-deploy new tj01
Traceback (most recent call last):
File "/usr/bin/ceph-deploy", line , in <module>
from ceph_deploy.cli import main
File "/usr/lib/python2.7/site-packages/ceph_deploy/cli.py", line , in <module>
import pkg_resources
ImportError: No module named pkg_resources
python問題,執行以下解決
su root
wget https://bootstrap.pypa.io/ez_setup.py -O - | python
解決後再次執行
ceph-deploy new tj01
無提示錯誤,接着
vi ceph.conf
#添加以下内容
osd pool default size = 3
public network = /
osd pool default pg num = 128
osd pool default pgp num = 128
mon_max_pg_per_osd =
#初始化ceph-mon,目前檔案夾下生成一系列keyring
ceph-deploy mon create-initial
#寫入目前檔案夾配置(當作admin)到tj01、tj02、tj03節點
ceph-deploy admin tj01 tj02 tj03
#建立mgr用于系統監控,提供儀表盤(注意mgr需要高可用,官方文檔建議一個mon節點啟動一個mgr)
ceph-deploy mgr create tj01
ceph-deploy mgr create tj02
ceph-deploy mgr create tj03
#添加osd,為保證性能,最好以單獨的硬碟做osd,這裡添加了一個硬碟/dev/vdb,(别挂載目錄)
ceph-deploy osd create --data /dev/vdb tj01
ceph-deploy osd create --data /dev/vdb tj02
ceph-deploy osd create --data /dev/vdb tj03
#檢查叢集狀态
sudo ceph health
sudo ceph –s
#擴充叢集,添加多個mon,mon需要高可用
ceph-deploy mon add tj02
ceph-deploy mon add tj03
#檢查結果狀态:
sudo ceph quorum_status --format json-pretty
至此,ceph叢集搭建完畢,執行
ps -ef|grep ceph
檢視ceph程序
安裝啟動網關rgw
yum install ceph-radosgw
#網關管理者節點
ceph-deploy admin tj01 tj02 tj03
#建立網關執行個體
ceph-deploy rgw create tj01
#檢視程序
ps -ef|grep gw
如網關啟動失敗,可在
/var/log/ceph/
下檢視網關啟動日志,可能碰到問題
#[問題]
this can be due to a pool or placement group misconfiguration, e.g. pg_num < pgp_num or mon_max_pg_per_osd exceeded
#[解決]
#ceph.conf添加一行
mon_max_pg_per_osd =
#執行
ceph-deploy admin tj01 tj02 tj03
#重新開機ceph所有程序(從tj01、tj02、tj03依次執行)
sudo systemctl restart ceph.target
通路驗證
http://client-node:7480
使用
rados -h
檢視rados指令用法,執行
sudo rados lspools
檢視叢集存儲池如下
建立對象網關使用者(S3接口需要)
為了使用 REST 接口,首先需要為S3接口建立一個初始 Ceph 對象網關使用者。然後,為 Swift 接口建立一個子使用者。然後你需要驗證建立的使用者是否能夠通路網關。
#格式如下:
radosgw-admin user create --uid={username} --display-name="{display-name}" [--email={email}]
#這裡我們執行
sudo radosgw-admin user create --uid=tjwy --display-name="tjwy" [--[email protected].com]
使用java測試S3接口
public class TestCeph {
private static final Logger LOGGER = LoggerFactory.getLogger(TestCeph.class);
private static AmazonS3 amazonS3 = null;
@Before
public void initClient() {
final String hosts = "192.168.79.100:7480";
final String accessKey = "6DLM20O4E23QNEXDY6ZM";
final String secretKey = "v80dbNDduag5CPCXJ73J7IfaD0Nziqs0jmG6D17x";
AWSCredentialsProvider credentialsProvider = new AWSCredentialsProvider() {
public AWSCredentials getCredentials() {
return new BasicAWSCredentials(accessKey, secretKey);
}
public void refresh() {
}
};
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setProtocol(Protocol.HTTP);
EndpointConfiguration endpointConfiguration = new EndpointConfiguration(hosts, null);
amazonS3 = AmazonS3ClientBuilder.standard().withCredentials(credentialsProvider)
.withEndpointConfiguration(endpointConfiguration)
.withClientConfiguration(clientConfiguration).build();
LOGGER.info("ceph client init success!");
}
@Test
public void testBucket() {
Bucket bucket1 = amazonS3.createBucket("my-new-bucket3");
Bucket bucket2 = amazonS3.createBucket("my-new-bucket2");
List<Bucket> buckets = amazonS3.listBuckets();
for (Bucket bucket : buckets) {
LOGGER.info(bucket.getName() + "\t" + com.amazonaws.util.StringUtils.fromDate(bucket.getCreationDate()));
}
}
/**
* @Description: ACL控制,上傳,下載下傳,删除,生成簽名URL
* @Auther: minyu
* @Date: 2018/7/12 11:31
*/
@Test
public void testObject() throws IOException {
String infile = "D://Download/export.csv";
// String outfile = "D://hello.txt";
//建立對象
String bucketName = "my-new-bucket2";
String fileName = "export.csv";
ByteArrayInputStream inputStream = new ByteArrayInputStream(FileUtils.inputStream2ByteArray(infile));
amazonS3.putObject(bucketName, fileName, inputStream, new ObjectMetadata());
//修改對象ACL
amazonS3.setObjectAcl(bucketName, fileName, CannedAccessControlList.PublicReadWrite);
// amazonS3.setObjectAcl(bucketName,fileName, CannedAccessControlList.Private);
//下載下傳對象
// amazonS3.getObject(new GetObjectRequest(bucketName,fileName), new File(outfile));
// S3Object s3Object = amazonS3.getObject(bucketName, fileName);
// new FileInputStream(s3Object.getObjectContent());
//删除對象
// amazonS3.deleteObject(bucketName,fileName);
//生成對象的下載下傳 URLS (帶簽名和不帶簽名)
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, fileName);
URL url = amazonS3.generatePresignedUrl(request);
LOGGER.info(url.toString());
// amazonS3.getObject()
}
/**
* @Description: 異步分片上傳測試
* @Auther: minyu
* @Date: 2018/7/12 11:30
*/
@Test
public void multipartUploadUsingHighLevelAPI() {
String filePath = "E://學習ppt/test.pptx";
String bucketName = "my-new-bucket2";
String keyName = "spark3";
TransferManager tm = TransferManagerBuilder.standard()
.withMultipartUploadThreshold(L).withS3Client(amazonS3).build();
LOGGER.info("start uploading...");
long start = System.currentTimeMillis();
// TransferManager processes all transfers asynchronously,
// so this call will return immediately.
Upload upload = tm.upload(
bucketName, keyName, new File(filePath));
LOGGER.info("asynchronously return ...go on other opration");
try {
// Or you can block and wait for the upload to finish
upload.waitForCompletion();
LOGGER.info("Upload complete.");
LOGGER.info("檔案描述:" + upload.getDescription());
LOGGER.info("耗時:" + (System.currentTimeMillis() - start) + "ms");
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, keyName);
URL url = amazonS3.generatePresignedUrl(request);
LOGGER.info("下載下傳位址:" + url);
} catch (AmazonClientException e) {
LOGGER.info("Unable to upload file, upload was aborted.");
e.printStackTrace();
} catch (InterruptedException e) {
LOGGER.info("Unable to upload file, upload was aborted.");
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
運作程式建立兩個bucket後,檢視存儲池變化
運作程式寫入對象後,檢視存儲池變化
運作程式測試異步分片上傳之後,檢視存儲池變化
配置mgr儀表盤
#主節點上執行
ceph config-key put mgr/dashboard/server_addr .
#列出mgr所有插件子產品
ceph mgr module ls
#開啟儀表盤子產品
ceph mgr module enable dashboard
#檢視mgr相關的http/https服務位址
ceph mgr services
通路
http://192.168.79.100:7000
驗證如下