【题目1】镜像管理
在openstack 私有云平台上, 基于cirros-0.3.4-x86_64-disk.img 镜像, 使用命令创建一个名为cirros 的镜像。
openstack image create --disk-format qcow2 --container-format bare --file /opt/cirros-0.5.2-x86_64-disk.img cirros
glance image-create --disk-format qcow2 --container-format bare --file /opt/cirros-0.5.2-x86_64-disk.img --name cirros
【题目2】实例类型管理
在openstack 私有云平台上,使用命令创建一个名为Fmin,ID为1,内存为1024 MB,磁盘为10 GB,vcpu 数量为1 的云主机类型。
openstack flavor create --id 1 --ram 1024 --disk 10 --vcpus 1 Fmin
【题目3】网络管理
在openstack 私有云平台上,创建云主机网络extnet,子网extsubnet,虚拟机网段为192.168.y.0/24(其中y 是vlan 号),网关为192.168.y.1 假设vlan号为10
openstack network create --provider-network-type vlan --provider-segment 10 --provider-physical-network provider --external --share extnet
openstack subnet create --subnet-range 192.168.10.0/24 --network extnet extsubnet
【题目4】云主机管理
在openstack 私有云平台上,基于“cirros”镜像、flavor 使用“Fmin”、extnet 的网络,创建一台虚拟机VM1,启动VM1,并使用PC 机能远程登录到VM1。
openstack server create --flavor Fmin --image cirros --nic net-id=5babf7fd-bd07-4316-853b-de2dcecd1118 VM1
# 如果指定可用区 --availability-zone nova:compute1
【题目5】Cinder 管理
在openstack 私有云平台上,创建一个名为“lvm”的卷类型,创建一块卷设备,名字为block、类型为lvm 的40G 云硬盘,并附加到虚拟机VM1 上。
openstack volume type create lvm
openstack volume create --size 40 --type lvm block
openstack server add volume VM1 block
【题目6】Raid 管理
在OpenStack 私有云平台,创建一台云主机,并创建一个40G 大小的cinder 块存储,将块存储连接到云主机,然后在云主机上对云硬盘进行操作。要求分出4 个大小为5G 的分区,使用这4 个分区,创建名为/dev/md5、raid 级别为5的磁盘阵列加一个热备盘(使用最后一个分区作为热备盘)。
分区
parted /dev/vdb
mklabel gpt
mkpart 1 1G 6G
mkpart 2 6G 11G
mkpart 3 11G 16G
mkpart 4 16G 21G
Raid
yum install mdadm
mdadm --create --auto=yes /dev/md5 --level=5 --raid-devices=3 --spare-devices=1 /dev/vdb[1-4]
可以缩写为:mdadm –C –a yes /dev/md5 –l5 –n3 –x1 /dev/vdb[1-4]
-create 表示要创建raid
--auto=yes /dev/md5 是否自动检测,新建立的软件磁盘陈列设备为md5,md序号可以为0-9
--level=5 磁盘阵列的等级,这里是raid5
-raid-devices 所需使用的磁盘数量
--spare-devices 添加作为预备(spare)磁盘的块数
/dev/vdb[1-4] 磁盘阵列所使用的设备,还可以写成"/dev/vdb1 /dev/vdb2 /dev/vdb3 /dev/vdb4"
永久挂载
①创建文件系统
mkfs.ext4 /dev/md5
②查看/dev/md5的UUID
blkid -o list | grep md5 或 ll /dev/disk/by-uuid lsblk-f
③将md5挂载在/backup目录,并开机自动挂载
vi /etc/fstab
UUID=228bb98d-a14c-4746-b48c-75c1595e9637 /backup ext4 defaults 0 0 添加该行
其中第一列为UUID;
第二列为挂载目录(该目录必须为空目录,必须存在);
第三列为文件系统类型;
第四列为参数;
第五列0表示不备份;
最后一列必须为2或0(除非引导分区为1)
④ fstab文件不重启生效
mount -a
【题目7】数据库主从管理
使用OpenStack 私有云平台,创建两台云主机vm1 和vm2,在这两台云主机上分别安装数据库服务,并配置成主从数据库,vm1 节点为主库,vm2 节点为从库(数据库密码设置为000000)。
*修改hostname hosts yum源 关闭防火墙
yum -y install mariadb mariadb-server
初始化改密码
法①mysql_secure_installation << EOF
Y Set root password 是否设置root密码
000000 New password 设置root用户的密码
000000 Re-enter new password 再输入一次你设置的密码
Y Remove anonymous users 是否删除匿名用户
N Disallow root login remotely 是否禁用root远程登录
Y Remove test database and access to it 是否删除test数据库
Y Reload privilege tables now 是否重新加载权限表
EOF
法②mysqladmin改密码
mysqladmin -uroot password 000000
sed -i '13a log-bin = mysql-bin' /etc/my.cnf.d/mariadb-server.cnf
sed -i '14a binlog-ignore-db = mysql' /etc/my.cnf.d/mariadb-server.cnf
sed -i '15a server-id = 1' /etc/my.cnf.d/mariadb-server.cnf vm1:server_id=1,vm2:server_id=2
systemctl restart mariadb-server mariadb
vm1:
①
mysql -uroot -p000000 -e "create user 'repl'@'%' identified by '000000';"
mysql -uroot -p000000 -e "grant replication slave on *.* to 'repl'@'%';"
②
mysql -uroot -p000000 -e "grant replication slave on *.* to 'repl'@'%' identified by '000000';" 用户不存在自动创建,注意:mysql8之后需要先创建用户,之后才能授权
mysql -uroot -p000000 -e "flush privileges;"
mysql -uroot -p000000 -e "select user,host from mysql.user;" 查看是否具有远程权限,%为有
mysql -uroot -p000000 -e "show master status\G;" 查看master状态
vm2:
mysql -uroot -p000000 -e "stop slave;"
mysql -uroot -p000000 -e "change master to master_host='vm1',master_password='000000',master_user='repl';"
mysql -uroot -p000000 -e "start slave;"
mysql -uroot -p000000 -e "show slave status\G;" 查看slave状态
读写分离
yum install java-1.8.0
tar -zxvf /opt/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /usr/local
cd /usr/local/mycat/
vi conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" randomDataNode="dn1"> checkSQLschema需为true 否则报 1146-table does not exist;或者name和实际数据表名相同
<table name="test" dataNode="dn1" rule="rule1"/> ①name需要和实际数据库的表名 dn1和下面dataNode相同 rule与rule.xml相同 ②schema直接指定dataNode
</schema>
<dataNode name="dn1" dataHost="localhost1" database="mycat" /> dataHost和下面dataHost相同,database为实际数据库
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.200.82:3306" user="root" mysql的物理主机写节点
password="123456">
<readHost host="hostS2" url="192.168.200.61:3306" user="root" mysql的物理主机读节点
password="123456" />
</writeHost>
</dataHost>
</mycat:schema>
vi conf/server.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="nonePasswordLogin">0</property>
<property name="ignoreUnknownCommand">0</property>
<property name="useHandshakeV10">1</property>
<property name="removeGraveAccent">1</property>
<property name="useSqlStat">0</property>
<property name="useGlobleTableCheck">0</property>
<property name="sqlExecuteTimeout">300</property>
<property name="sequnceHandlerType">1</property>
<property name="sequnceHandlerPattern">(?:(\s*next\s+value\s+for\s*MYCATSEQ_(\w+))(,|\)|\s)*)+</property>
<property name="subqueryRelationshipCheck">false</property>
<property name="sequenceHanlderClass">io.mycat.route.sequence.handler.HttpIncrSequenceHandler</property>
<property name="processorBufferPoolType">0</property>
<property name="handleDistributedTransactions">0</property>
<property name="useOffHeapForMerge">0</property>
<property name="memoryPageSize">64k</property>
<property name="spillsFileBufferSize">1k</property>
<property name="useStreamOutput">0</property>
<property name="systemReserveMemorySize">384m</property>
<property name="useZKSwitch">false</property>
<property name="strictTxIsolation">false</property>
<property name="useZKSwitch">true</property>
<property name="parallExecute">0</property>
</system>
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">TESTDB</property> 需要和上面的name相同
<property name="defaultSchema">TESTDB</property>
</user>
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
<property name="defaultSchema">TESTDB</property>
</user>
</mycat:server>
bin/mycat start
cat logs/wrapper.log 显示MyCAT Server startup successfully. see logs in logs/mycat.log为成功
netstate -ntpl 有8066和8066为成功开放端口
错误:
Startup failed: Timed out waiting for a signal from the JVM.
JVM did not exit on request, terminated
解决办法:
在wrapper.conf中添加
wrapper.startup.timeout=300
wrapper.ping.timeout=120
【题目8】云平台安全策略提升
使用OpenStack 私有云平台,通过提供的相关软件包,安装必要组件,将私有云平台的访问策略从http 提升至https。
yum install mod_ssl mod_wsgi httpd
vi /etc/httpd/conf.d/ssl.conf
删除 SSLProtocol下的 -SSLv3
vi /etc/openstack-dashboard/local_settings
CSRF_COOKIE_SECURE = True 将该行的注释取消
SESSION_COOKIE_SECURE = True 将该行的注释取消
USE_SSL = True 添加该行
SESSION_COOKIE_HTTPONLY = True 添加该行
systemctl restart httpd
systemctl restart memcached
【题目】RabbitMQ集群
登录私有云平台,使用centos7镜像创建三台云主机来搭建rabbitmq集群。使用普通集群模式,其中一台做磁盘节点,另外两台做内存节点,配置完毕后启动rabbitmq服务。
修改hosts yum源 关闭防火墙
node1:
yum -y install rabbitmq-server
rabbitmq-plugins enable rabbitmq_management 启动web管理插件
systemctl restart rabbitmq-server
yum -y install net-tools
netstat -ntpl 4369 dns 15672 web 5672 amqp
scp /var/lib/rabbitmq/.erlang.cookie node2:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie node3:/var/lib/rabbitmq/
node2:
yum install rabbitmq-server
rabbitmq-plugins enable rabbitmq_management
systemctl restart rabbitmq-server
yum -y install net-tools
netstat -ntpl
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@node1
rabbitmqctl start_app
node3:
yum install rabbitmq-server
rabbitmq-plugins enable rabbitmq_management
systemctl restart rabbitmq-server
yum -y install net-tools
netstat -ntpl
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@node1
rabbitmqctl start_app
rabbitmqctl cluster_status 查看集群状态
增加节点停止节点后再次启动遇到无法启动解决办法
rabbitmqctl stop
rabbitmq-server -detached
【题目】手工迁移
openstack server list
cd /var/lib/nova/instances/
scp -rp e70df9af-057c-49b5-9056-68903d22c84d compute2:/var/lib/nova/instances/
mysql -uroot -p000000
show databases;
use nova;
show tables;
UPDATE instances SET host="compute2",node="compute2" where uuid="e70df9af-057c-49b5-9056-68903d22c84d";
在compute2修改属主
chown nova:nova -R /var/lib/nova/instances/e70df9af-057c-49b5-9056-68903d22c84d
##【题目】heat 模板管理
在openstack私有云平台上,在/root目录下编写模板server.yaml,创建名为“m1.flavor”、 ID 为 1234、内存为1024MB、硬盘为20GB、vcpu数量为 1的云主机类型
vi /root/server.yaml
heat_template_version: 2018-03-02
description: Simple template to deploy a single flavor
resources:
server:
type: OS::Nova::Flavor
properties:
disk: 20
flavorid: 1234
name: m1.flavor
ram: 1024
vcpus: 1
openstack stack create --template /root/server.yaml flavor
【题目】swift后端存储 2040
vi /etc/glance/glance-api.conf
[glance_store]
*stores = glance.store.swift.Store 可不改
*default_store = swift
swift_store_region = RegionOne
swift_store_endpoint_type = internalURL
swift_store_container = glance 将要被创建的容器
swift_store_large_object_size = 5120 最大5G限制,但与glance结合后限制无效
swift_store_large_object_chunk_size = 200 最大200个容器
*swift_store_create_container_on_put = True 上传开
*swift_store_multi_tenant = True 启用多租户存储模式,该模式导致Glance图像存储在租户特定的Swift帐户中
swift_store_admin_tenants = service
*swift_store_auth_address = http://controller:5000/v3.0/
*swift_store_user = glance
*swift_store_key = 000000
systemctl restart openstack-glance*
带*为必改
【题目】虚拟机调整flavor
在Controller节点中编写名为modvm.sh的shell脚本查看云主机VM1的内存大小,如果内存小于2G,调整云主机VM1的内存为2G。
vi /etc/nova/nova.conf
allow_resize_to_same_host=True 取消注释,并把false改为true 150
systemctl restart openstack-nova*
vi modvm.sh
source /etc/keystone/admin-openrc.sh
flavor=`openstack server show VM1 | grep flavor | awk '{print $4}'`
echo $flavor
ram=`openstack flavor show $flavor | grep ram | awk '{print $4}'`
echo $ram
if [ ${ram} -lt 2048 ] ;then
openstack flavor create --ram 2048 --disk $(openstack flavor show $flavor | grep disk | awk '{print $4}') --vcpu $(openstack flavor show $flavor | grep vcpu | awk '{print $4}') vm
openstack server resize --flavor vm VM1
sleep 3
openstack server resize --confirm VM1
echo 'finished'
fi
bash modvm.sh
【题目】zun的运维
上传CentOS7_1804.tar镜像到私有云平台,命名为centos7.5-docker。然后使用该镜像启动一个名为chinaskill-container的容器
openstack image create --disk-format raw --container-format docker --file /opt/openstack/images/CentOS7_1804.tar centos7.5-docker
openstack appcontainer run --name chinaskill-container --cpu 2 --memory 2048 --net network=ext --image-driver glance centos7.5-docker /bin/bash
--image-driver 灰常重要,指定仓库地址为glance 默认指向docker
【题目】swift的运维
在controller节点上新建名为Chinaskill的容器,并获取该容器的存放路径;将 centos7_5.qcow2 镜像上传到chinaskill容器中,并设置分段存放, 每一段大小为 10M。
openstack container create Chinaskill
swift upload Chinaskill /opt/images/centos7_5.qcow2 --segment-size 10M
【题目】镜像的运维
根据上题的云主机打快照,并保存为指定路径的文件
openstack server image create --name myInstanceSnapshot myInstance
openstack image save --file snapshot.raw f30b204e-1ce6-40e7-b8d9-b353d4d84e7d
【题目】openstack参数调优
vi /etc/nova/nova.conf
CPU: cpu_allocation_ratio = 4 CPU超配比例是1:4
RAM: ram_allocation_ratio = 1.0 内存超配比例是1:1.0
DISK: disk_allocation_ratio = 1.0 磁盘超配比例是1:1.0
RAM-Reserve: reserved_host_memory_mb = 2048 内存预留空间,这部分空间不能被虚拟机使用
DISK-Reserve: reserved_host_disk_mb = 20480 磁盘预留空间,这部分空间不能被虚拟机使用
【题目】mariadb参数调优
修改最大最大连接数
法①set GLOBAL max_connections=256
法②/etc/my.cnf.d/mariadb-server.cnf
max_connections=128
【题目】openstack角色权限管理
普通用户无法创建和删除虚拟机
vi /etc/nova/policy.json
"compute:create":"rule:admin",
"compute:delete":"rule:admin",
一般格式:
①"行为名:规则": "rule:用户权限"
②"规则": "rule:用户权限"
【题目】redis主从
设置redis密码为123456 并配置主从
主从复制
vi /etc/redis.conf
master:
bind 0.0.0.0
requirepass 123456
node:
bind 0.0.0.0
requirepass 123456
replicaof 192.168.34.77 6379
masterauth 123456
redis-server /etc/redis.conf
哨兵模式
node:
vi /etc/redis.conf
sentinel monitor mymaster 192.168.34.77 6379 1
sentinel down-after-milliseconds mymaster 30000
sentinel auth-pass mymaster 123456
redis-sentinel /etc/sentinel.conf