Portworx安装和使用

Portworx安装和使用

Portworx介绍

Portworx是一家美国存储初创公司,它研发了业界第一个容器定义存储系统Portworx。Portworx提供了全新的、统一的Scale out存储栈,其核心架构是共享的、松耦合的、分布式、基于元数据的块存储层(卷、块设备、全局共享卷和文件访问等)。portworx本身作为容器服务的方式部署,在每个集群节点呈现为PX的容器。

容器的数据卷简单可以分为:本地存储、共享存储;使用本地数据卷存储,当该卷所在的机器出现故障,严重可导致数据永远丢失。
Portworx (px-dev)在各个节点上保存多份备份,可以很好解决上面的问题,并可以把各个服务器上的磁盘充分利用起来组成一个存储池。

它使用Gossip Protocol的通信方式类似流言传播,每个节点状态的变化和更新,立即通过一传十,十传百的方式在集群内广播,而不是由某几个节点逐一传递,所以通信效率非常高效。

一、环境准备

准备3个虚拟机,并额外为每个虚拟机添加一个虚拟8G的磁盘(sdb)

a.master private:10.2.22.11
b.node1 private:10.2.22.12
c.node2 private:10.2.22.13

二、准备etcd,在master机器上

//需要服务发现工具 etcd 或 consul  下载
$ wget https://github.com/coreos/etcd/releases/download/v3.0.14/etcd-v3.0.14-linux-amd64.tar.gz  

//解压
$ tar -xzvf etcd-v3.0.14-linux-amd64.tar.gz

//启动服务
$ cd etcd-v3.0.14-linux-amd64
$ ./etcd --name infra0 --initial-advertise-peer-urls http://10.2.22.11:2380   --listen-peer-urls http://10.2.22.11:2380   --listen-client-urls http://10.2.22.11:2379,http://127.0.0.1:2379   --advertise-client-urls http://10.2.22.11:2379   --initial-cluster-token etcd-cluster-1   --initial-cluster infra0=http://10.2.22.11:2380   --initial-cluster-state new

三、运行portworx容器

//检查存储设备: sdb磁盘
$ lsblk
  
//创建配置文件目录:
$ mkdir -p /etc/pwx

//下载样例文件:
$ wget https://raw.githubusercontent.com/portworx/px-dev/master/conf/config.json
$ cp -p config.json /etc/pwx

//修改config.json
$ vim /etc/pwx/config.json
{
    
    
  "clusterid": "5ac2ed6f-7e4e-4e1d-8e8c-3a6df1fb61a5",
  "kvdb": [
      "etcd:http://10.2.22.11:2379"
    ],
  "storage": {
    
    
    "devices": [
      "/dev/sdb"
    ]
  }
}

//clusterid 集群的id,每台都一样
// /dev/sdb   上面lsblk 列出的磁盘

//运行portworx容器:(注意需要开放一些端口,具体看日志)
$ docker pull portworx/px-dev

$ docker run --restart=always --name px -d --net=host \
             --privileged=true                             \
             -v /run/docker/plugins:/run/docker/plugins    \
             -v /var/lib/osd:/var/lib/osd:shared           \
             -v /dev:/dev                                  \
             -v /etc/pwx:/etc/pwx                          \
             -v /opt/pwx/bin:/export_bin:shared            \
             -v /var/run/docker.sock:/var/run/docker.sock  \
             -v /var/cores:/var/cores                      \
             -v /usr/src:/usr/src                          \
             --ipc=host                                    \
            portworx/px-dev

$ docker  logs px -f 查看日志

//查看状态
$ /opt/pwx/bin/pxctl status 
   //Status: PX is operational 说明成功
  

另为两台以同样方式启动

//docker-compose运行容器
$ git clone https://github.com/portworx/px-dev.git
$ cd px-dev/quick-start
$ docker-compose run portworx -daemon -k etcd:http://10.2.22.11:2379 -c 5ac2ed6f-7e4e-4e1d-8e8c-3a6df1fb61a5 -s /dev/sdb

四、数据共享

//创建卷, 以pxd驱动类型  
$ docker volume create -d pxd --name=redis_vol --opt fs=ext4 --opt size=1G

//查看卷
$ /opt/pwx/bin/pxctl volume list

//在node1上启动redis 开启数据持久化
$ docker run --name some-redis  -v redis_vol:/data --volume-driver=pxd  -d redis redis-server --appendonly yes
 
//启动redis客户端
$ docker run -it --link some-redis:redis --rm redis redis-cli -h redis -p 6379

//写入数据
$ redis:6379> set foo abcd
$ redis:6379> get foo
"abcd"

//停止redis
$ docker kill some-redis


//在node2上启动redis
$ docker run --name other-redis  -v redis_vol:/data --volume-driver=pxd  -d redis redis-server --appendonly yes

//启动redis客户端 并进入 
$ docker run -it --link other-redis:redis --rm redis redis-cli -h redis -p 6379

//查看数据,还存在
$redis:6379> get foo
 "abcd"

//创建一个卷的快照
//查看卷
$ /opt/pwx/bin/pxctl volume list 

//根据redis_vol卷的ID 创建一个快照
$ /opt/pwx/bin/pxctl snap create 1013827046371938942

//生成了一个卷的快照ID
Volume successfully snapped: 889729860013179865


//备份好快照后,改一下数据
$ docker run -it --link other-redis:redis --rm redis redis-cli -h redis -p 6379

$ redis:6379> get foo
"abcd"

$ redis:6379> set foo foobar
OK

$ redis:6379> get foo
"foobar"

//启动redis server 指定备份的卷ID
$ docker run --name snap-redis -v 889729860013179865:/data --volume-driver=pxd -d redis redis-server --appendonly yes

$ docker run -it --link snap-redis:redis --rm redis redis-cli -h redis -p 6379

$ redis:6379> get foo
"abcd"
得到的数据,是当时备份的值

五、增加删除替换磁盘

//为了向节点添加更多的存储,该节点必须处于维护模式

//显示系统中的驱动器列表
$ /opt/pwx/bin/pxctl service drive show  

//进入维护模式
$ /opt/pwx/bin/pxctl service maintenance --enter 
输入Y
//或 
$ /opt/pwx/bin/pxctl service maintenance --enter -y

//增加磁盘
$ /opt/pwx/bin/pxctl service drive add /dev/sdc

//将sde替换成sdc
$ /opt/pwx/bin/pxctl service drive replace --source /dev/sde --target /dev/sdc --operation start 

//退出维护模式
$ /opt/pwx/bin/pxctl service maintenance --exit 

六、常用命令

//显示集群中的卷
$ /opt/pwx/bin/pxctl volume list

//查看本地卷
$ docker volume ls 

//删除卷
/opt/pwx/bin/pxctl volume delete 卷名或ID

//修改属性
$ /opt/pwx/bin/pxctl volume update redis_vol --shared=on 
$ /opt/pwx/bin/pxctl volume update redis_vol --scale=10 

//查看卷信息
$/opt/pwx/bin/pxctl volume inspect redis_vol

//当有个节点挂掉了,但是它占用了集群中的卷,在另一台正常机器上  用此命令分离卷
$ /opt/pwx/bin/pxctl host attach 845707146523643463(ID) 连接
$ /opt/pwx/bin/pxctl host detach 845707146523643463  分离

//显示状态
$ /opt/pwx/bin/pxctl status

//显示集群节点 
$ /opt/pwx/bin/pxctl cluster list 

//删除脱机节点
$ /opt/pwx/bin/pxctl cluster delete a56a4821-6f17-474d-b2c0-3e2b01cd0bc3 

猜你喜欢

转载自blog.csdn.net/yinjl123456/article/details/123669761