云计算赛项-私有云笔记一(基础运维)

5月 11, 2021

【题目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