测试cloudstack搭建,并不一定适用。 供个人 复习使用
首先准备三台 机器,由于测试使用 就用VMware Workstation是创建的虚拟机。
cloudsatck版本安装4.12.0 系统模板使用4.11.2 模板。gluster 版本 6.0 ceph 版本luminous
最终结果,测试GlusterFS和ceph的依赖库版本似乎不一样。因此并没有成功安装ceph,另外ctdb集群搭建管理节点和计算节点是同一个ctdb集群,这样会有虚拟IP的问题。计算节点在访问管理节点端口时可能使用的是虚拟IP。。但是虚拟IP也不一定指向 管理节点,emmm,没考虑到。所以,这也是因为实验环境受限,不然可以多个计算节点搭建ctdb 集群实现gluster挂载高可用,也不用管理节点参与了。。。
管理节点2G内存 计算节点4G ceph-admin 1G 管理节点和计算节点记得勾选处理器的虚拟化Intel VT-x、EP 或 AMD-V/RV(V)
电脑内存少,没办法。。。就分配的少一点。
主机名 | IP | 作用 | 除系统所在硬盘外添加额外硬盘数 |
---|---|---|---|
manager | 192.168.199.91 | cloudstack管理节点 | 2块,一块用于ceph,一块用于gluster |
agent | 192.168.199.92 | cloudstack计算节点 | 3块,同上。大小设置为30G。还有一块作为nfs主存储 |
ceph-admin | 192.168.199.93 | ceph-deploy部署节点和管理节点 | 2块,同manager。大小设置为30G |
也就是说,两个主存储。一个是nfs共享,一个是ceph集群存储池。
主机名设置
vim /etc/hostname
将主机名称写入,重启后生效
编辑/etc/hosts 文件
vim /etc/hosts
192.168.199.91 manager
192.168.199.92 agent
192.168.199.93 ceph-admin
关闭防火墙,设置selinux,如果不想关闭防火墙,可以开放相应文件软件端口。比如cloudstack,ceph,nfs,mariadb 等。具体端口可以自行查找。
systemctl disable firewalld
systemctl stop firewalld
vi /etc/selinux/config
编辑文件设置
SELINUX=permissive
保存后重启才会生效。想要立即生效
setenforce permissive
非常重要
yum -y install epel*
yum makecache
cloudstack虚拟实例网络使用,需要在manager节点和agent节点设置桥接文件。ceph-admin节点也顺便设置一下。
安装 网络工具包
yum -y install net-tools
yum -y install bridge-utils
新增桥接文件
vim /etc/sysconfig/network-scripts/ifcfg-cloudbr0
内容大致如下
TYPE=Bridge
BOOTPROTO=none
DEVICE=cloudbr0
ONBOOT=yes
IPADDR=192.168.199.91
NETMASK=255.255.255.0
GATEWAY=192.168.199.1
STP=yes
设置原网卡文件,修改添加如下内容
不同主机的网卡名可能不一样
vim /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO="none"
ONBOOT="yes"
BRIDGE="cloudbr0"
最后一行指明 网卡桥接设备是 cloudbr0。
重启network
systemctl restart network
查看 网桥状态和 路由
brctl show
route -n
通manager节点一致,只是将cloudbr0的IPADDR修改成192.168.199.92
vim /etc/sysconfig/network-scripts/ifcfg-cloudbr0
TYPE=Bridge
BOOTPROTO=none
DEVICE=cloudbr0
ONBOOT=yes
IPADDR=192.168.199.92
NETMASK=255.255.255.0
GATEWAY=192.168.199.1
STP=yes
其他的一致。
只是IP变了,其他的一致
CentOS7 一般会使用chronyd 进行时间同步。
时间同步有两个方案,一个是 所有节点 设置同一个 公共ntp服务器 进行时间同步,比如阿里云。 另一个 就是选择其中一个节点作为 时间同步服务器,其它的 的节点设置ntp 服务器为 该节点。
简单起见 设置一个 公共 ntp 服务器 阿里云
ntp.aliyun.com
ntp1.aliyun.com
方法很简单,安装chronyd
yum -y chrony
编辑配置文件
vim /etc/chrony.conf
注释掉原来的时间同步服务器
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
增加阿里的
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
重启chronyd服务
systemctl restart chronyd
查看时间同步
chronyc sources
查看当前时间
timedatectl
gluster集群创建的卷 使用gluster方式挂载到本地,然后设置成共享点,使用内核态nfs方式 实现挂载。
或者安装NFS-Ganesha 直接用户态方式实现nfs挂载。
使用第二种方法。可参考
https://blog.csdn.net/dandanfengyun/article/details/105371521
三个节点都执行
搜索gluster的软件源
yum search centos-release-gluster
安装相应gluster版本的软件源
由于cloudstack安装依赖gluster,且默认版本是6.0,为了避免版本冲突 所以 安装6。
yum -y install centos-release-gluster6
安装gluster 软件包
yum -y install glusterfs glusterfs-server glusterfs-rdma glusterfs-geo-replication
安装完成设置开机自启并启动glusterd
systemctl enable glusterd
systemctl start glusterd
查看当前 硬盘。三个节点的 /dev/sdb 硬盘作为gluster的数据盘。
格式化硬盘
mkfs.ext4 /dev/sdb
创建一个目录 作为该硬盘挂载点。。。
mkdir /gluster-data
设置开机自动挂载 并挂载
echo "/dev/sdb /gluster-data ext4 defaults 0 0" >> /etc/fstab
mount -a
下面操作在某一个节点执行。如ceph-admin
添加信任节点到集群
gluster peer probe manager
gluster peer probe agent
添加完成查看集群
gluster peer status
gluster volume create vol-gluster replica 3 manager:/gluster-data/brick agent:/gluster-data/brick ceph-admin:/gluster-data/brick
开启卷
gluster volume start vol-gluster
查看卷状态
gluster volume info
将gluster卷挂载到三个节点
尽管,这样尽管显得很多此一举,本来就是三个硬盘,已经挂载到本地了。但是gluster这个卷挂载到本地,能保证三个节点数据是一致的。。。
三个节点都要执行
创建挂载点
mkdir /gluster-export
依然设置开机自动挂载
echo "ceph-admin:/vol-gluster /gluster-export glusterfs defaults,_netdev 0 0" >> /etc/fstab
mount -a
gluster暂时设置就到这里,ctdb 再设置高可用
https://blog.csdn.net/dandanfengyun/article/details/106235667
使用ceph-deploy工具部署ceph 集群。ceph-deploy 工具安装在ceph-admin节点。ceph 版本是luminous,更高版本似乎不支持使用ceph-deploy工具部署了。
由于安装glusterfs原因。。。似乎依赖库版本冲突,安装glusterfs后无法再安装ceph 软件了。。。同样先安装ceph后就无法安装gluster了。。。
可能是故意的。。。两个软件不能共存。。。也有可能是要安装的ceph 版本有点低的原因?不过luminous 不算低了吧。
但是已经为ceph部署准备了硬盘。。别浪费了,再使用gluster创建一个gluster卷当作 cloudstack主存储。
cloudstack的主存储和二级存储。主存储,一般用作虚拟机分配磁盘。 二级存储,一般存放,ISO,模板,快照等。主存储可以使用 gluster ceph nfs 本地存储等多种协议, 二级存储必须是网络存储,不支持本地存储,而且目前好像也不支持gluster。
使用gluster再创建一个虚拟卷当作 cloudstack的主存储。由于cloudstack主存储支持gluster,也就不用像上一步那样再把gluster卷挂载到本地,然后再用nfs方式共享出去当作二级存储了。。。
三个节点都执行
创建 /dev/sdc 硬盘挂载点。。。
mkdir /gluster-data2
格式化 硬盘
mkfs.ext4 /dev/sdc
设置开机自动挂载 并挂载 该硬盘
echo "/dev/sdc /gluster-data2 ext4 defaults 0 0" >> /etc/fstab
mount -a
现在 每个节点 使用df -h 查看大概是这样的
两个已经挂载的硬盘,挂载点是 /gluster-data /gluster-data2。然后 /gluster-export 是通过glusterfs方式挂载到本地的 glusterfs卷的挂载点。
新增gluster 卷 卷名 vol-primary
新增卷的操作只用在一个节点操作即可,开启卷也是。
gluster volume create vol-primary replica 3 manager:/gluster-data2/brick agent:/gluster-data2/brick ceph-admin:/gluster-data2/brick
开启卷
gluster volume start vol-primary
查看卷状态
gluster volume status
查看卷信息
gluster volume info
现在有两个gluster卷,卷名分别是vol-gluster vol-primary。准备将vol-gluster当作cloudstack的二级存储,vol-primary当作cloudstack主存储。vol-gluster卷,还不能完全当作二级存储,还要在其中写入一些配置文件。
https://blog.csdn.net/dandanfengyun/article/details/105371521
CentOS7 直接安装ctdb 的话 版本是4.9,而且一启动该服务就报错。。。不知原因,因此使用rpm安装4.2.4 版本。。。会附带samba的安装,没关系,samba本来也挺有用的。
ctdbrpm包下载地址 这是我从官网下载的。
https://download.csdn.net/download/dandanfengyun/12317533
官网下载地址(不是ctdb官网,是gluster支持ctdb的rpm包)
https://download.gluster.org/pub/gluster/glusterfs/samba/CentOS/epel-7/x86_64/
下载完成,把所有rpm安装包放在一起全部进行安装,把说明删了。。。
安装
rpm -ivh * --nodeps --force
–nodeps 表示忽略依赖, --force 表示强制安装。
然后可能还有两个依赖包没安装,手动yum安装即可
yum -y install cups-libs libarchive
使用就是启动ctdb 服务,并用其来管理nfs。关于ctdb作用的解释自行搜索吧。。个人并不是很了解,但这不影响我使用 CTDB提供高可用特性,例如节点监控、节点切换、IP切换。
创建配置文件目录
mkdir /gluster-export/lock
创建ctdb配置文件
三个节点配置文件要一致
(4.2.4的配置文件是/etc/sysconfig/ctdb之后版本的可能是 /etc/ctdb/ctdbd.conf)这里,创建的配置文件待会要做软链接链接到默认位置
vim /gluster-export/lock/ctdb
CTDB_RECOVERY_LOCK=/gluster-export/lock/lockfile
CTDB_PUBLIC_ADDRESSES=/etc/ctdb/public_addresses
只用在一个节点操作就行,因为gluster-export是挂载的gluster卷,三个节点内容一致。
创建nodes 文件,表示ctdb管理的节点
三个节点nodes文件要一致
vim /gluster-export/lock/nodes
据说末尾要留一空行,否则最后一个节点可能失效。
192.168.199.91
192.168.199.92
192.168.199.93
创建public_addresses 文件
三个节点的public_addresses 文件不需要完全一致,可以有独特的设置。这里为了方便就设置成一样的了
ctdb 管理的虚拟IP,可以访问该IP实现访问ctdb管理的实际节点。当一个节点失效时,虚拟IP会指向有效的节点IP。
vim /gluster-export/lock/public_addresses
cloudbr0是网桥名称,如果没有设置网桥,那就选择网卡名称 。但是三个节点最好一致,如果有的节点有网桥,有的没有,很容易出错。。。192.168.199.90 就是虚拟的IP,并没有真是的节点占用改IP,如果有,那可能引发意料之外的结果。。。
192.168.199.90/24 cloudbr0
配置文件建立了,但是没有放在相应位置,ctdb启动时是不会读取这些配置文件的。。。
下面的操作三个节点都要执行。
备份源ctdb 配置文件
mv /etc/sysconfig/ctdb /etc/sysconfig/ctdb.bak
nodes 和public_addresses默认都没有创建,也就不用备份了。
创建软链接指向配置文件
ln -s /gluster-export/lock/ctdb /etc/sysconfig/ctdb
ln -s /gluster-export/lock/nodes /etc/ctdb/nodes
ln -s /gluster-export/lock/public_addresses /etc/ctdb/public_addresses
这样三个节点的配置文件就一致了,因为 /gluster-export是gluster卷的挂载点。文件都是一致的。
启动ctdb
systemctl enable ctdb
systemctl start ctdb
启动时可能有网络连接问题。。。重启几次就好了。不明原因
启动完成查看状态
ctdb status
查看虚拟IP
ctdb ip
查看 虚拟IP是否可用
ping 192.168.199.90
上一步尽管安装了ctdb 成功启动 但是没有看出什么作用。。。
三个节点都执行
安装nfs-utils
yum -y install nfs-utils
编辑配置文件
vim /gluster-export/lock/nfs
NFS_TICKLE_SHARED_DIRECTORY=/gluster-export/lock/nfs-tickles
NFS_HOSTNAME=nfs-server
STATD_PORT=874
STATD_OUTGOING_PORT=876
MOUNTD_PORT=892
RQUOTAD_PORT=875
LOCKD_UDPPORT=872
LOCKD_TCPPORT=872
STATD_SHARED_DIRECTORY=/gluster-export/lock/nfs-state
STATD_HOSTNAME="$NFS_HOSTNAME -H /etc/ctdb/statd-callout"
RPCNFSDARGS="-N 4"
备份原配置文件
mv /etc/sysconfig/nfs /etc/sysconfig/nfs.bak
创建软链接
ln -s /gluster-export/lock/nfs /etc/sysconfig/nfs
设置共享点配置文件。
创建nfs共享目录
mkdir /gluster-export/secondary
编辑共享目录的设置
vim /gluster-export/lock/exports
/gluster-export/secondary *(rw,async,no_root_squash,no_subtree_check)
下面的三个节点都要执行
备份原配置文件 关于这个共享点设置文件。CentOS系统自带nfs共享,只是没有nfs管理工具,查看比较麻烦。这个文件是本来就有的,不是安装完nfs-utils生成的。
mv /etc/exports /etc/exports.bak
创建软链接
ln -s /gluster-export/lock/exports /etc/exports
编辑ctdb配置文件,使其管理nfs,然后三个节点重启nfs服务
vim /gluster-export/lock/ctdb
添加一下两行
CTDB_NFS_SKIP_SHARE_CHECK=yes
CTDB_MANAGES_NFS=yes
重启ctdb服务
systemctl restart ctdb
待全部节点状态为OK时开始测试。
查看虚拟IP共享点
showmount -e 192.168.199.90
测试nfs挂载虚拟IP共享点时一直挂载失败,查看nfs状态,发现要设置fsid
编辑exports 配置文件 设置fsid=0 即可
vim /gluster-export/lock/exports
/gluster-export/secondary *(rw,async,no_root_squash,no_subtree_check,fsid=0)
设置完后三个节点重启ctdb。
重启完毕 测试挂载
mkdir /mnt/test-mnt
mount -t nfs 192.168.199.90:/gluster-export/secondary /mnt/test-mnt/
可以看到可以使用虚拟IP使用nfs方式挂载。
测试完毕,取消挂载。删除临时挂载点。
umount -l /mnt/test-mnt/
rm -rf /mnt/test-mnt/
下面开始安装。cloudstack的必备软件。这里基本上就在manager节点和agent节点安装了。
manager节点安装数据库 mariadb-server
CentOS7不能直接安装mysql。。。不过mariadb效果是一样的。
yum -y install mariadb-server mariadb
设置开机启动
systemctl enable mariadb
编辑配置文件 /etc/my.ini
vim /etc/my.cnf
在[mysqld] 模块下加入
innodb_rollback_on_timeout=1
innodb_lock_wait_timeout=600
max_connections=350
log-bin=mysql-bin
binlog-format = 'ROW'
据说 max_connections 应该等于管理节点个数 * 350
启动mariadb 服务
systemctl start mariadb
进行安全设置,按提示操作就好
mysql_secure_installation
注 这一步表示是否设置不允许远程连接,一般选n,表示允许远程连接。其他的默认Y就好,提示输入密码是就输入想要设置的密码
Disallow root login remotely? [Y/n]
设置root用户启用远程连接。123456 就是我设置的密码,改成自己的就可以,第一个123456 是登录进MySQL的密码,必须是刚才设置的,第二个123456是远程连接时使用密码,可以更改成自己想要的。
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY '123456'";
agent节点安装mariadb 测试远程连接。
yum -y install mariadb
安装完成测试一下
mysql -h manager -u root -p
manager节点和agent节点设置cloudstack安装源。这里设置的是4.12版本。
vi /etc/yum.repos.d/cloudstack.repo
[cloudstack]
name=cloudstack
baseurl=http://cloudstack.apt-get.eu/centos7/4.11/
enabled=1
gpgcheck=0
直接安装的话就是
管理节点执行
yum -y install cloudstack-management
计算节点执行
yum -y install cloudstack-agent
不过安装速度有点慢,主要是下载比较慢。因此一般会下载到本地安装。
rpm下载地址
http://cloudstack.apt-get.eu/centos7/4.12/
系统模板下载地址
http://cloudstack.apt-get.eu/systemvm/4.11/systemvmtemplate-4.11.2-kvm.qcow2.bz2
rpm包安装
yum -y install cloudstack-common-4.12.0.0-1.el7.centos.x86_64.rpm cloudstack-management-4.12.0.0-1.el7.centos.x86_64.rpm
数据库初始化
cloudstack-setup-databases cloud:123456@localhost --deploy-as=root:123456
启动Management服务
cloudstack-setup-management
还需要安装一个KVM模板。模板我也下载到本地了。这一步耗费时间不短
/usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt \
-m /gluster-export/secondary \
-f /root/systemvmtemplate-4.11.2-kvm.qcow2.bz2 \
-h kvm –F
如果通过网络安装,命令是
/usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt \
-m /gluster-/secondary \
-u http://cloudstack.apt-get.eu/systemvm/4.11/systemvmtemplate-4.11.2-kvm.qcow2.bz2 \
-h kvm -F
大致,如此,一些全局设置在WEBUI基础设置时进行设置。
yum -y install cloudstack-common-4.12.0.0-1.el7.centos.x86_64.rpm cloudstack-agent-4.12.0.0-1.el7.centos.x86_64.rpm
.虚拟化配置
CloudStack通过libverd来管理所有的kvm
有两部分需要进行配置, libvirt和QEMU
1) 编辑QEMU VNC配置文件/etc/libvirt/qemu.conf
vim /etc/libvirt/qemu.conf
去掉注释
vnc_listen="0.0.0.0"
2)CloudStack使用libvirt管理虚拟机
配置/etc/libvirt/libvirtd.conf文件
vim /etc/libvirt/libvirtd.conf
listen_tls = 0
listen_tcp = 1
tcp_port = "16059"
auth_tcp = "none"
mdns_adv = 0
配置/etc/sysconfig/libvirtd文件
vim /etc/sysconfig/libvirtd
LIBVIRTD_ARGS="--listen"
当管理节点添加此主机时,这个tcp_port = “16059"会自动变成16509,还有 LIBVIRTD_ARGS=”-1",这些都是cloudstack改变的。无须再手动改它!!
3)重启libvirtd 并设置为开机自启
systemctl restart libvirtd
systemctl enable libvirtd
设置该宿主机上运行虚拟机CPU模型。三种模式。这里选择的host-model
vim /etc/cloudstack/agent/agent.properties
host-model 表示从可用的CPU模型中选择一个与宿主机最接近的。
guest.cpu.mode=host-model
CloudStack安装完毕。
这时候想起来,agent,还有一块空闲硬盘。。。准备当作nfs挂载主存储。
agent节点操作
格式化 硬盘
mkfs.ext4 /dev/sdd
创建挂载点
mkdir -p /export/primary
挂载
echo "/dev/sdd /export/primary ext4 defaults 0 0" >> /etc/fstab
mount -a
设置成共享目录。由于 /etc/exports 在上面变成了软连接。但是,现在要改变agent的共享设置,但是又不想设置软连接源文件,因为软连接源文件也会影响到manager 和ceph-admin 节点。。。而且这个 、exports共享设置也不是必须三个节点保持一致,因此。agent删除软链接。。。修改成文件配置 共享
rm -f /etc/exports
将原来备份修改过来
mv /etc/exports.bak /etc/exports
设置配置文件。
/export/primary *(rw,async,no_root_squash,no_subtree_check)
/gluster-export/secondary *(rw,async,no_root_squash,no_subtree_check,fsid=0)
设置完成 导入设置
exportfs -a
其它节点测试 agent节点的共享
当然,这样做,有个小问题。虚拟IP 的作用是指向一个有效IP,当这个有效的IP意外失效后,虚拟IP会指向其他的IP。如果这时候虚拟IP恰好指向agent节点。。。那么显示的共享目录就会多一个 primary
现在agent节点重启 ctdb。在ctdb集群开来 agent节点失效,因此虚拟IP指向转移。。。当然,现在判断不出来 是在manager或ceph-admin节点。
不过这问题不大,本来我们也不会去使用虚拟IP挂载 /export/primary。因为我们自己知道它是agent专有的。使用虚拟IP挂载 /gluster-export/secondary不会有任何问题,三个节点都提供了共享点。
日志查看
manager节点
tail -f /var/log/cloudstack/management/management-server.log
agent 节点
tail -f /var/log/cloudstack/agent/agent.log
使用浏览器访问
http://manageriP:8080/client/
默认的账号密码是
admin
password
选择我以前使用过cloudstack 跳过此指南。进行一些全局配置。
需要设置的大致有
CPU超配倍数 一般设置3-4倍。。。
cpu.overprovisioning.factor
内存超配倍数,如果准备运行虚拟机大多是Linux无界面系统,可以设置2倍,如果运行Windows等有图形界面的。最好选择不修改,因为经过个人测试,图形界面虚拟机相应的qemu进程真的会占用宿主机分配的那么多内存。当然,这有可能是因为我使用kvm 作为虚拟机管理程序的原因,Xenserver或者VMware可能会好一点。
mem.overprovisioning.factor
允许下载模板或ISO的网段。。。可以设置成0.0.0.0/0表示允许所有网段,或者设置成 自己网络所在网段如 192.168.199.0/24
secstorage.allowed.internal.sites
设置完毕重启 cloudstack-management
在UI界面修改超配倍数可以生效的只有刚开始设置时,当添加一个集群后,UI界面设置超配是不起作用的,需要在数据库中修改。
mysql -u root -p
use cloud;
select * from cluster_details;
按照查找出来的数据修改。。。修改前停掉运行在改集群上的虚拟机
update cluster_details set value=2.0 where id=?;
update cluster_details set value=4.0 where id=?;
manager节点执行
systemctl restart cloudstack-management
再次访问刚才网站。。。登录后选择之前使用过 cloudstack
添加资源域
中间步骤略
添加主存储。选用gluster 协议。。。卷vol-primary 服务器选择ctdb虚拟出的IP
添加二级存储 使用nfs 协议,虚拟IP vol-gluster卷挂载点的 secondary目录
/gluster-export/secondary
可能主存储添加失败。。。这个据说是bug,可以等一会在添加,还好我们还有一个 用于主存储的nfs
点击Fix errors
协议选择 nfs 服务器 192.168.199.91 路径/export/primary
不要带空格
等待系统VM成功启动。查看控制版。
主存储显示 58.81G是存储的两倍,因为主存储一般都是超配2倍,主存储显示分配给虚拟机的硬盘空间,存储显示实际使用的硬盘空间。
再次尝试添加主存储 存储标签不用设置的。。。
添加gluster协议的主存储 提供程序记得选DefaultPrimary
服务器是ctdb虚拟出来的IP 这一次添加成功
可以在控制板上看到 主存储增加了
至于添加ISO虚拟机的操作,不再写了。。。这文章算是对之前学习总结。不过也漏了不少。。。ceph 未能使用。
下一步计划 就是 学习cloudstackAPI调用。