rexray docker ceph-rbd 实现无状态数据库docker容器实战

1.前提条件
1.1有了一个可用的ceph 集群 其中mon1节点的IP 10.20.4.1
1.2 有2台虚拟机可以用于验证测试,虚拟机能上网,DNS设置正常。

关于如何创建ceph集群,请参考文章:https://blog.csdn.net/happyfreeangel/article/details/85171736

rexray docker ceph-rbd 实现无状态数据库docker容器实战_第1张图片测试虚拟机:
IP 10.20.4.211 10.20.4.212 内核版本:4.14.89 centos7 1811

一. 在测试虚拟机上安装ceph 相关组件
yum install -y ceph-common
copy ceph集群离的mon节点下/etc/ceph/文件夹中的配置文件到10.20.4.211 和10.20.4.212 /etc/ceph
scp -r [email protected]:/etc/ceph /etc/
[root@superset1 ceph]# ip addr | grep ‘10.20’
inet 10.20.4.211/16 brd 10.20.255.255 scope global noprefixroute ens160
[root@superset1 ceph]# pwd
/etc/ceph
[root@superset1 ceph]# tree
.
├── ceph.client.admin.keyring
├── ceph.conf
├── rbdmap
└── rbdmap.rpmnew

0 directories, 4 files
[root@superset1 ceph]#
2. 测试ceph客户端 10.20.4.211 10.20.4.212 是否正常.
[root@superset1 ceph]# ceph -s
cluster:
id: 82d6ce06-6e92-4c2a-ab26-11ff63b7e67d
health: HEALTH_OK

services:
mon: 3 daemons, quorum mon1,mon2,mon3
mgr: mon1(active), standbys: mon2, mon3
osd: 3 osds: 3 up, 3 in

data:
pools: 3 pools, 248 pgs
objects: 192 objects, 434MiB
usage: 4.14GiB used, 1.46TiB / 1.46TiB avail
pgs: 248 active+clean

io:
client: 339B/s wr, 0op/s rd, 0op/s wr

[root@superset1 ceph]#

[root@superset2 postgresql]# ceph -s
cluster:
id: 82d6ce06-6e92-4c2a-ab26-11ff63b7e67d
health: HEALTH_OK

services:
mon: 3 daemons, quorum mon1,mon2,mon3
mgr: mon1(active), standbys: mon2, mon3
osd: 3 osds: 3 up, 3 in

data:
pools: 3 pools, 248 pgs
objects: 192 objects, 434MiB
usage: 4.14GiB used, 1.46TiB / 1.46TiB avail
pgs: 248 active+clean

io:
client: 5.96KiB/s wr, 0op/s rd, 1op/s wr

[root@superset2 postgresql]#

二. 安装rexray 组件
1.下载安装rexray ( 本虚拟机必须能上网,dns 解析正常)
curl -sSL https://rexray.io/install | sh -s
2. 配置rexray 服务
可以打开
https://rexrayconfig.cfapps.io/ 进行配置,
点击
rexray docker ceph-rbd 实现无状态数据库docker容器实战_第2张图片

点击download 保存起来
config.yml 内容如下:

libstorage:
service: rbd
integration:
volume:
operations:
create:
default:
size: 10
rbd:

scp config.yml [email protected]:/etc/rexray/
scp cofig.yml [email protected]:/etc/rexray/

3.启动rexray服务
systemctl enable rexray;systemctl start rexray;systemctl status rexray;

rexray docker ceph-rbd 实现无状态数据库docker容器实战_第3张图片

看到如上图状态,表示rexray 运转正常.

4.(可选,可以不用安装) 安装docker plugin install rexray/rbd
docker plugin install rexray/rbd
[root@localhost postgresql]#
Plugin “rexray/rbd” is requesting the following privileges:

  • network: [host]
  • mount: [/dev]
  • mount: [/etc/ceph]
  • allow-all-devices: [true]
  • capabilities: [CAP_SYS_ADMIN]
    Do you grant the above permissions? [y/N] y
    latest: Pulling from rexray/rbd
    783623f39b58: Download complete
    Digest: sha256:a9a75b74c15ea17d199efe97cc73086f06b8545d455acf0a1671995ee607af43
    Status: Downloaded newer image for rexray/rbd:latest
    Installed plugin rexray/rbd

三. 部署postgresql

  1. 创建 /var/server/postgresql 目录
    mkdir -p /var/server/postgresql

  2. 把下面的脚本保存起来,为文件内容:start-postgres-docker.sh
    然后设置chmod +x start-postgres-docker.sh ,执行这个脚本.

  3. [root@superset1 postgresql]# more start-postgres-docker.sh
    #!/usr/bin/env bash
    file_path= ( c d " (cd " (cd"(dirname “$0”)"; pwd)
    cd ${file_path}
    docker stop postgresql
    docker rm postgresql
    firewall-cmd --add-port=5432/tcp --permanent --zone=public
    firewall-cmd --reload

docker run --name postgresql
–restart always
–volume-driver=rexray
-v test_data:/var/lib/postgresql/data
-p 5432:5432
-e POSTGRES_USER=centos
-e POSTGRES_PASSWORD=secret
-d postgres:9.6.2
postgres -c max_connections=500

四。验证是否实现了存储独立。
使用SQL客户端工具dataGrip 或其他工具也可以,或直接命令行进入docker 容器操作也可以.

在10.20.4.211 上执行
create table people(name varchar(100) primary key , age integer default 0);
insert into people(name,age) values(“Happy”,40);
select * from people;

在10.20.4.212 上执行
select * from people;
rexray docker ceph-rbd 实现无状态数据库docker容器实战_第4张图片

可能遇到的错误及解决办法:

  1. docker driver plugin rexray not found.
    这是因为rexray 在本虚拟机里没有正常启动。
    可能是你忘记配置了rexray /etc/rexray/config.yml

2.docker: Error response from daemon: VolumeDriver.Mount: docker-legacy: Mount: test_data: failed: resource not found.
See ‘docker run --help’.
这个是因为一个存储挂的目录默认同时只能在一台虚拟机上挂载。
只要把其他挂载test_data的虚拟机的 docker停掉 docker stop postgres 即可。

你可能感兴趣的:(Ceph,rexray)