2

【任务 2】私有云服务运维[10 分]
【适用平台】私有云
【题目 1】OpenStack 开放镜像权限[0.5 分]
使 用 OpenStack 私 有 云 平 台 , 在 OpenStack 平台的 admin 项 目 中 使 用
cirros-0.3.4-x86_64-disk.img 镜像文件创建名为 glance-cirros 的镜像,通过 OpenStack 命令将 glance-cirros 镜像指定 demo 项目进行共享使用。配置完成后提交 controller 节点的用户名、密 码和 IP 地址到答题框。

(1)在admin项目中创建镜像
[root@controller ~]# openstack image create --disk-format qcow2 --container-format bare --file cirros-0.3.4-x86_64-disk.img glance-cirros
(2)将 glance-cirros 镜像指定 demo 项目进行共享使用
命令格式为glance member-create
[root@controller ~]# openstack image list # 查看image的id
±-------------------------------------±-------±-------+
| ID | Name | Status |
±-------------------------------------±-------±-------+
| 5453f892-257a-4982-a3e2-fff94645a5e9 | cirros | active |
±-------------------------------------±-------±-------+
[root@controller ~]# openstack project list #查看demo项目id
±---------------------------------±--------+
| ID | Name |
±---------------------------------±--------+
| 065e210e48d6432d9b0fb6559bc8f487 | service |
| 4f49c46f87f247ed94a06d37e4415337 | demo |
| 74d88b843cc941c8bf4ac743f46d1116 | admin |
±---------------------------------±--------+

[root@controller ~]# glance member-create 5453f892-257a-4982-a3e2-fff94645a5e9 4f49c46f87f247ed94a06d37e4415337 #将镜像共享给demo项目
±-------------------------------------±---------------------------------±--------+
| Image ID | Member ID | Status |
±-------------------------------------±---------------------------------±--------+
| 5453f892-257a-4982-a3e2-fff94645a5e9 | 4f49c46f87f247ed94a06d37e4415337 | pending |
±-------------------------------------±---------------------------------±--------+
在共享之后,镜像的状态是pending状态,此时还需要激活镜像
[root@controller ~]# glance member-update 5453f892-257a-4982-a3e2-fff94645a5e9 4f49c46f87f247ed94a06d37e4415337 accepted
±-------------------------------------±---------------------------------±---------+
| Image ID | Member ID | Status |
±-------------------------------------±---------------------------------±---------+
| 5453f892-257a-4982-a3e2-fff94645a5e9 | 4f49c46f87f247ed94a06d37e4415337 | accepted |
±-------------------------------------±---------------------------------±---------+
1.检查 glance-cirros 镜像权限开放正确计 0.5 分

【题目 2】OpenStack 消息队列调优[0.5 分]
OpenStack 各服务内部通信都是通过 RPC 来交互,各 agent 都需要去连接 RabbitMQ;随着各服务 agent 增多,MQ 的连接数会随之增多,最终可能会到达上限,成为瓶颈。使用自行搭建的OpenStack私有云平台,分别通过用户级别、系统级别、配置文件来设置RabbitMQ 服务的最大连接数为 10240,配置完成后提交修改节点的用户名、密码和 IP 地址到答题框。
(1)系统级别修改
[root@controller ~]# vi /etc/sysctl.conf
fs.file-max=10240 #在sysctl.conf文件的最下方添加一行fs.file-max=10240
(2)用户级别修改
[root@controller ~]# vi /etc/security/limits.conf #在配置文件的最后添加两行内容如上
openstack soft nofile 10240
openstack hard nofile 10240
(3)修改rabbitMQ配置
[root@controller ~]# vi /usr/lib/systemd/system/rabbitmq-server.service #在[Service]下添加一行参数如下:
LimitNOFILE=10240
编辑完之后保存退出,重启RabbitMQ服务,命令如下:
[root@controller ~]# systemctl daemon-reload
[root@controller ~]# systemctl restart rabbitmq-server
重启完毕后,查看RabbitMQ的最大连接数,命令如下:
[root@controller ~]# rabbitmqctl status
Status of node rabbit@openstack
…忽略输出…
{file_descriptors,
[{total_limit,10240},
1.检查 rabbitmq 服务最大连接数正确计 0.5 分

【题目 3】OpenStack Glance 镜像压缩[0.5 分]
使用自行搭建的 OpenStack 平台。在 HTTP 服务中存在一个镜像为CentOS7.5-compress.qcow2 的镜像,请使用 qemu 相关命令,对该镜像进行压缩,压缩后的镜像命名为chinaskill-js-compress.qcow2 并存放在/root 目录下。完成后提交 controller 点的用户名、密码和 IP 地址到答题框。

1.检查镜像压缩正确计 0.5 分

【题目 4】glance对接cinder后端存储[0.5 分]
在自行搭建的OpenStack平台中修改相关参数,使 glance 可以使用 cinder作为后端存储,将镜像存储于cinder 卷中。使用 cirros-0.3.4-x86_64-disk.img 文件创建cirros-image 镜像存储于 cirros-cinder 卷中,通过 cirros-image 镜像使用 cinder 卷启动盘的方式进行创建虚拟机。完成后提交修改节点的用户名、密码和 IP 地址到答题框。
(1)修改glance配置文件
[root@controller ~]# vi /etc/glance/glance-api.conf
show_multiple_locations = true
[glance_store]
#stores = file,http
#demo_store = file
#filesystem_store_datadir = /var/lib/glance/images/
stores = cinder
default_store=cinder
[root@controller ~]# systemctl restart openstack-glance* # 重启glance相关服务
(2)修改cinder配置文件
[root@controller ~]# vi /etc/cinder/cinder.conf
allowed_direct_url_schemes = cinder
image_upload_use_cinder_backend = true
image_upload_use_internal_tenant = true
[root@controller ~]# systemctl restart openstack-cinder* # 重启cinder相关服务
(3)测试
[root@controller ~]# openstack image create cirros < cirros-0.3.4-x86_64-disk.img
[root@controller ~]# cinder list
±-------------------------------------±----------±-------------------------------------------±-----±------------±---------±------------+
| ID | Status | Name | Size | Volume Type | Bootable | Attached to |
±-------------------------------------±----------±-------------------------------------------±-----±------------±---------±------------+
| 527a11ff-5a45-4d72-8bbe-8e6a2215342d | available | image-dca0685f-4261-475f-80cd-f6f868b96741 | 1 | - | false | |
±-------------------------------------±----------±-------------------------------------------±-----±------------±---------±------------+
1.检查修改 glance 后端存储为 cinder 正确计 0.5 分
加一道类似题:

【题目 5】OpenStack Heat运维:创建容器[0.5 分]
在自行搭建的 OpenStack 私有云平台上 ,在 /root 目录下编写 Heat 模板create_container.yaml,要求执行yaml 文件可以创建名为 heat-swift 的容器。完成后提交控制节点的用户名、密码和 IP 地址到答题框。(在提交信息前请准备好 yaml 模板执行的环境)

[root@controller ~]# openstack-service list # 查看openstack平台所有已安装服务

1.执行 heat 模板文件成功创建容器计 0.5 分

【题目 6】OpenStack Nova 清除缓存[0.5 分]
在 OpenStack 平台的一台计算节点创建虚拟机,若是第一次在该节点创建次虚拟机,会先将镜像文件复制到该计算节点目录/var/lib/nova/instances/_base。长期下来,该目录会占用比较大的磁盘空间而要清理。可以通过修改 nova 的配置文件来自动清理该缓存目录,即在该节点没有使用某镜像启动的云主机,那么这个镜像在过一定的时间后会被自动删除。配置完成后提交改动节点的用户名、密码和 IP 地址到答题框。
[root@controller ~]# vim /etc/nova/nova.conf
remove_unused_base_images=True
remove_unused_original_minimum_age_seconds=3
image_cache_manager_interval=5
1.检查 nova 配置自动清理缓存文件正确计 0.5 分

【题目 7】Redis 一主二从三哨兵模式[1 分]
使用提供的 OpenStack 私有云平台,申请三台 CentOS7.9 系统的云主机,使用提供的 http 源,在三个节点自行安装 Redis 服务并启动,配置 Redis 的访问需要密码,密码设置为123456。然后将这三个 Redis 节点配置为 Redis 的一主二从三哨兵架构,即一个 Redis 主节点,两个从节点,三个节点均为哨兵节点。配置完成后提交 Redis 主节点的用户名、密码和IP 地址到答题框。
1.检查 redis 主从集群部署正确计 0.5 分
2.检查 redis 集群部署为哨兵节点正确计 0.5 分
(1)redis一主二从配置:

[root@redis1 ~]# vi /etc/redis.conf
#第一处修改

bind 127.0.0.1 //找到bind 127.0.0.1这行并注释掉

#第二处修改
protected-mode no //将yes修改为no,外部网络可以访问
#第三处修改
daemonize yes //将no修改为yes,开启守护进程
#第四处修改
requirepass “123456” //添加设置访问密码
#第五处修改,设定主库密码与当前库密码同步,保证从库能够提升为主库
masterauth “123456”
#第六处修改,将no修改为yes,打开AOF持久化支持
appendonly yes

[root@redis2 ~]# vi /etc/redis.conf
#第一处修改

bind 127.0.0.1 //找到bind 127.0.0.1这行并注释掉

#第二处修改
protected-mode no //将yes修改为no,外部网络可以访问
#第三处修改
daemonize yes //将no修改为yes,开启守护进程
#第四处修改

requirepass foobared //找到该行

requirepass “123456” //在下方添加设置访问密码
#第五处修改

slaveof //找到该行

slaveof 192.168.200.21 6379 //在下方添加访问的主节点IP与端口
#第六处修改

masterauth //找到该行

masterauth “123456” //在下方添加访问主节点密码
#第七处修改,将no修改为yes,打开AOF持久化支持
appendonly yes

(2)redis哨兵模式配置:
redis1节点:
修改redis1节点的/etc/redis-sentinel.conf配置文件,具体内容如下:
[root@redis1 ~]# vi /etc/redis-sentinel.conf

1. 保护模式修改为否,允许远程连接

protected-mode no

2. 修改监控地址,为主redis库的主机ip地址

sentinel monitor mymaster 192.168.200.21 6379 2

3. 添加配置5秒内没有响应,就反馈服务器挂了

sentinel down-after-milliseconds mymaster 5000

4. 修改配置15秒内master没有活起来,就重新选举主

sentinel failover-timeout mymaster 15000

5. 表示如果master重新选出来后,其它slave节点能同时并行从新master同步缓存的台数有多少个,显然该值越大,所有slave节点完成同步切换的整体速度越快,但如果此时正好有人在访问这些slave,可能造成读取失败,影响面会更广。最安全的设置为1,只同一时间,只能有一台干这件事,这样其它slave还能继续服务,但是所有slave全部完成缓存更新同步的进程将变慢。这里设置为2。

sentinel parallel-syncs mymaster 2

6. 添加配置主数据库密码为123456

sentinel auth-pass mymaster 123456
修改redis2从节点和redis3从节点的/etc/redis-sentinel.conf配置文件,修改内容与redis1主节点的/etc/redis-sentinel.conf配置文件一致。
修改完配置文件后,哨兵模式配置就完毕了,接下来需要重启服务。因为Redis服务已经启动,现在只需要启动Redis哨兵服务。命令如下所示:
所有节点启动哨兵:

systemctl restart redis-sentinel

systemctl enable redis-sentinel

在redis1节点,查看哨兵模式信息,命令如下:
[root@redis1 ~]# redis-cli -h 192.168.200.21 -p 26379 INFO Sentinel

Sentinel

sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.200.21:6379,slaves=2,sentinels=3
在redis2节点,查看哨兵模式信息,命令如下:
[root@redis2 ~]# redis-cli -h 192.168.200.22 -p 26379 INFO Sentinel

Sentinel

sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.200.21:6379,slaves=2,sentinels=3
在redis3节点,查看哨兵模式信息,命令如下:
[root@redis3 ~]# redis-cli -h 192.168.200.23 -p 26379 INFO Sentinel

Sentinel

sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.200.21:6379,slaves=2,sentinels=3
可以看到目前集群中有一个Redis主节点,两个Redis从节点,三个哨兵节点。

【题目 8】Redis服务调优-AOF[1 分] ----没找到答案
使用上一题安装的 Redis 服务。在 Redis 中,AOF 配置为以三种不同的方式在磁盘上执行 write 或者 fsync。假设当前 Redis 压力过大,请配置 Redis 不执行 fsync。除此之外,避免AOF 文件过大,Redis 会进行 AOF 重写,生成缩小的 AOF 文件。请修改配置,让 AOF重写时,不进行 fsync 操作。配置完成后提交 Redis 节点的用户名、密码和 IP 地址到答题框。
1.检查配置 redis 不执行 fsync 正确计 0.5 分、
2.检查配置 redis 进行 AOF 重写不执行 fsync 正确计 0.5 分

【题目 9】应用部署:堡垒机部署[0.5 分]
使用提供的 OpenStack 平台申请一台 CentOS7.9 的云主机,使用提供的软件包安装JumpServer 堡垒机服务,并配置使用该堡垒机对接自己安装的 controller 和 compute 节点。完成后提交 JumpServer 节点的用户名、密码和 IP 地址到答题框。
1.检查堡垒机部署正确计 0.5 分
(1)修改主机名
远程连接堡垒机节点,修改节点的主机名为jumpserver,修改主机名后,执行bash命令 或者刷新页面以生效新主机名,如下所示:
[root@jumpserver ~]# hostnamectl set-hostname jumpserver
(2)关闭防火墙与SELinux
将节点的防火墙与SELinux关闭,并设置永久关闭SELinux,命令如下:
[root@jumpserver ~]# setenforce 0
[root@jumpserver ~]# sed -i s#SELINUX=enforcing#SELINUX=disabled# /etc/selinux/config
[root@jumpserver ~]# iptables -F
[root@jumpserver ~]# iptables -X
[root@jumpserver ~]# iptables -Z
[root@jumpserver ~]# /usr/sbin/iptables-save
(3)配置本地Yum源
使用提供的软件包配置Yum源,通过地址将jumpserver.tar.gz软件包下载至Jumpserver节点的/root目录下。
[root@jumpserver ~]# curl -O http://mirrors.douxuedu.com/competition/jumpserver.tar.gz
解压软件包jumpserver.tar.gz至/root目录下,命令如下:
[root@jumpserver ~]# tar -zxvf jumpserver.tar.gz -C /opt/
[root@jumpserver ~]# ls /opt/
compose config docker docker.service images jumpserver-repo static.env
将默认Yum源移至其他目录,创建本地Yum源文件,命令及文件内容如下:
[root@jumpserver ~]# mv /etc/yum.repos.d/* /media/
[root@jumpserver ~]# cat >> /etc/yum.repos.d/jumpserver.repo << EOF
[jumpserver]
name=jumpserver
baseurl=file:///opt/jumpserver-repo
gpgcheck=0
enabled=1
EOF
[root@jumpserver ~]# yum repolist
repo id repo name status
jumpserver jumpserver 2
(4)安装依赖环境
安装Python数据库,命令如下:
[root@jumpserver ~]# yum install python2 -y
安装配置Docker环境,命令如下:
[root@jumpserver ~]# cp -rf /opt/docker/* /usr/bin/
[root@jumpserver ~]# chmod 775 /usr/bin/docker*
[root@jumpserver ~]# cp -rf /opt/docker.service /etc/systemd/system/
[root@jumpserver ~]# chmod 755 /etc/systemd/system/docker.service
[root@jumpserver ~]# systemctl daemon-reload
[root@jumpserver ~]# systemctl enable docker --now
验证服务状态,命令如下:
[root@jumpserver ~]# docker --version
Docker version 18.06.3-ce, build d7080c1
[root@jumpserver ~]# docker-compose --version
docker-compose version 1.27.4, build 40524192
(5)安装Jumpserver服务
加载Jumpserver服务组件镜像,命令如下:
[root@jumpserver ~]# cd /opt/images/
[root@jumpserver images]# sh load.sh
创建Jumpserver服务组件目录,命令如下:
[root@jumpserver images]# mkdir -p /opt/jumpserver/{core,koko,lion,mysql,nginx,redis}
[root@jumpserver images]# cp -rf /opt/config /opt/jumpserver/
生效环境变量static.env,使用所提供的脚本up.sh启动Jumpserver服务,命令如下:
[root@jumpserver images]# cd /opt/compose/
[root@jumpserver compose]# source /opt/static.env
[root@jumpserver compose]# sh up.sh
Creating network “jms_net” with driver “bridge”
Creating jms_mysql … done
Creating jms_redis … done
Creating jms_core … done
Creating jms_celery … done
Creating jms_luna … done
Creating jms_lion … done
Creating jms_lina … done
Creating jms_nginx … done
Creating jms_koko … done
使用谷歌浏览器访问http://10.24.193.142,Jumpserver Web登录(admin/admin),如图1所示:

图1 Web登录
登录成功后,会提示设置新密码,如图2所示:

图2 修改密码
登录平台后,单击页面右上角下拉菜单切换中文字符设置,如图3所示:

图3 登录成功
至此Jumpserver安装完成。

【题目 10】skywalking服务部署与应用[1 分]
使用提供的 OpenStack 私有云平台,申请一台 centos7.9 系统的云主机,使用提供的软 件包安装 Elasticsearch 服务和 skywalking 服务,将 skywalking 的 UI 访问端口修改为 8888。接下来再申请一台CentOS7.9的云主机,用于搭建gpmall商城应用,并配置SkyWalking Agent,将 gpmall 的 jar 包放置探针并启动。安装与配置完成后提交 skywalking 节点的用户名、密码和 IP 地址到答题框。
1.检查 skywalking 服务部署正确计 1 分
IP 主机名 节点
10.24.194.203 node-1 Skywalking实验节点
10.24.193.168 mall 商城搭建节点
10.24.193.169 - 桌面化测试节点
使用平台提供的两台云主机做为实验节点,云主机类型使用2VCPU/4GB内存/40GB硬盘,以及一台桌面化节点用来测试应用部署成果。
1、部署Elasticsearch服务
(1)修改主机名,修改主机名后,单击实验环境左侧工具栏最后一个重连按钮以生效新主机名。
[root@node-1 ~]# hostnamectl set-hostname node-1
[root@node-1 ~]# hostnamectl
Static hostname: node-1
(2)将提供的elasticsearch-7.17.0-linux-x86_64.tar.gz软件包下载到此节点并解压到/opt目录,进入解压后的目录并创建data目录:
[root@node-1 ~]# curl -O http://mirrors.douxuedu.com/competition/elasticsearch-7.17.0-linux-x86_64.tar.gz
[root@node-1 ~]# tar -zxvf elasticsearch-7.17.0-linux-x86_64.tar.gz -C /opt
[root@node-1 ~]# cd /opt/elasticsearch-7.17.0/
[root@node-1 elasticsearch-7.17.0]# mkdir data
(3)修改Elasticsearch配置,在文件最后添加如下几行内容,按“i”建进入编辑模式进行配置,按ESC键输入:wq保存退出。
[root@node-1 elasticsearch-7.17.0]# vi config/elasticsearch.yml

cluster.name: my-application
node.name: node-1
path.data: /opt/elasticsearch-7.17.0/data
path.logs: /opt/elasticsearch-7.17.0/logs
network.host: 0.0.0.0
cluster.initial_master_nodes: [“node-1”]
http.cors.enabled: true
http.cors.allow-origin: “*”
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
(4)创建Elasticsearch启动用户,并设置属组及权限:
[root@node-1 elasticsearch-7.17.0]# groupadd elsearch
[root@node-1 elasticsearch-7.17.0]# useradd elsearch -g elsearch -p elasticsearch
[root@node-1 elasticsearch-7.17.0]# chown -R elsearch:elsearch /opt/elasticsearch-7.17.0
(5)修改资源限制及内核配置,添加如下内容:
[root@node-1 elasticsearch-7.17.0]# vi /etc/security/limits.conf

  • hard nofile 65536
  • soft nofile 65536
    [root@node-1 elasticsearch-7.17.0]# vi /etc/sysctl.conf
    vm.max_map_count=262144
    [root@node-1 elasticsearch-7.17.0]# sysctl -p
    [root@node-1 elasticsearch-7.17.0]# reboot
    重启后等待一段时间后刷新页面点击重新连接。
    (6)启动Elasticsearch服务:
    [root@node-1 ~]# cd /opt/elasticsearch-7.17.0/
    [root@node-1 elasticsearch-7.17.0]# su elsearch
    [elsearch@node-1 elasticsearch-7.17.0]$ ./bin/elasticsearch -d
    (7)查询端口,存在9200则成功启动:
    [root@node-1 elasticsearch-7.17.0]$ netstat -ntpl
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1081/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1041/master tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 610/rpcbind
    tcp6 0 0 :::9200 ::😗 LISTEN 2261/java
    (8)切换至带有桌面的虚拟机环境中,使用浏览器访问10.24.193.154:9200,如图1所示:

图1 Elasticsearch服务访问
2、部署skywalking oap服务
(1)将提供的jdk-8u144-linux-x64.tar.gz软件包下载至node-1节点/root/目录中,并配置jdk如下所示:
[elsearch@node-1 elasticsearch-7.17.0]$ exit
[root@node-1 elasticsearch-7.17.0]# cd
[root@node-1 ~]# curl -O http://mirrors.douxuedu.com/competition/jdk-8u144-linux-x64.tar.gz
[root@node-1 ~]# tar -zxvf jdk-8u144-linux-x64.tar.gz -C /usr/local/
修改profile环境变量文件,代码如下所示:
[root@node-1 ~]# vi /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_144
export CLASSPATH=.: J A V A H O M E / j r e / l i b / r t . j a r : {JAVA_HOME}/jre/lib/rt.jar: JAVAHOME/jre/lib/rt.jar:{JAVA_HOME}/lib/dt.jar: J A V A H O M E / l i b / t o o l s . j a r e x p o r t P A T H = {JAVA_HOME}/lib/tools.jar export PATH= JAVAHOME/lib/tools.jarexportPATH=PATH:${JAVA_HOME}/bin
[root@node-1 ~]# source /etc/profile
[root@node-1 ~]# java -version
java version “1.8.0_144”
Java™ SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot™ 64-Bit Server VM (build 25.144-b01, mixed mode)
(2)将提供的apache-skywalking-apm-es7-8.0.0.tar.gz软件包下载至node-1节点上并解压到/opt目录下:
[root@node-1 ~]# curl -O http://mirrors.douxuedu.com/competition/apache-skywalking-apm-es7-8.0.0.tar.gz
[root@node-1 ~]# tar -zxvf apache-skywalking-apm-es7-8.0.0.tar.gz -C /opt
(3)进入解压后目录,修改OAP配置文件:
[root@node-1 ~]# cd /opt/apache-skywalking-apm-bin-es7/
[root@node-1 apache-skywalking-apm-bin-es7]# vi config/application.yml

#集群配置使用单机版
cluster:
selector: ${SW_CLUSTER:standalone}
standalone:

#数据库使用elasticsearch7
storage:
selector: ${SW_STORAGE:elasticsearch7}

elasticsearch7:
nameSpace: ${SW_NAMESPACE:“”}
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:10.24.194.203:9200}

(4)启动OAP服务,查询端口,存在11800与12800则成功启动:
[root@node-1 apache-skywalking-apm-bin-es7]# ./bin/oapService.sh
SkyWalking OAP started successfully!
[root@node-1 apache-skywalking-apm-bin-es7]# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::11800 ::😗 LISTEN 2416/java
tcp6 0 0 ::1:25 ::😗 LISTEN 1041/master
tcp6 0 0 :::12800 ::😗 LISTEN 2416/java
tcp6 0 0 :::111 ::😗 LISTEN 610/rpcbind
tcp6 0 0 :::9200 ::😗 LISTEN 2261/java

3、部署skywalking ui服务
(1)由于SkyWalking UI的默认地址是8080,与很多中间件可能存在冲突,修改一下:
[root@node-1 apache-skywalking-apm-bin-es7]# vi webapp/webapp.yml

server:
port: 8888

(2)启动SkyWalking UI服务:
[root@node-1 apache-skywalking-apm-bin-es7]# ./bin/webappService.sh
SkyWalking Web Application started successfully!
(3)查看端口,存在8888则成功启动:
[root@node-1 apache-skywalking-apm-bin-es7]# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::8888 ::😗 LISTEN 3133/java
(4)切换带有桌面的虚拟机环境,使用火狐浏览器访问10.24.194.203:8888,此时访问页面无数据,如图2所示:

图2 访问SkyWalking UI服务
4、搭建并启动应用商城服务
切换至提供mall节点,搭建并启动应用商城服务,并配置SkyWalking Agent
(1)修改mall节点主机名,修改完成后,单击实验环境左侧工具栏最后一个重连按钮以生效新主机名。
[root@localhost ~]# hostnamectl set-hostname mall
[root@mall ~]# hostnamectl
Static hostname: mall
修改/etc/hosts配置文件如下:
[root@mall ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.24.193.168 mall
(2)配置本地Yum源
将提供的gpmall包下载到服务器的/root目录下并解压gpmall.tar.gz,配置本地local.repo文件,具体代码如下所示:
[root@mall ~]# curl -O http://mirrors.douxuedu.com/competition/gpmall.tar.gz
[root@mall ~]# tar -zxvf gpmall.tar.gz
[root@mall ~]# mv /etc/yum.repos.d/* /media/
[root@mall ~]# cd gpmall/
[root@mall gpmall]# tar -zxvf gpmall-repo.tar.gz -C /root/
[root@mall ~]# vi /etc/yum.repos.d/local.repo
[mall]
name=mall
baseurl=file:///root/gpmall-repo
gpgcheck=0
enabled=1
(3)安装基础服务
安装基础服务,包括Java JDK环境、数据库、Redis、Nginx等,安装基础服务的命令具体如下。
① 安装Java环境
[root@mall ~]# yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

[root@mall ~]# java -version
openjdk version “1.8.0_322”
② 安装Redis缓存服务
[root@mall ~]# yum install redis -y
③ 安装Nginx服务
[root@mall ~]# yum install nginx -y
④ 安装MariaDB数据库
[root@mall ~]# yum install mariadb mariadb-server -y
安装ZooKeeper服务,将提供的zookeeper-3.4.14.tar.gz解压,命令如下:
[root@mall gpmall]# tar -zxvf zookeeper-3.4.14.tar.gz -C /root/
进入到zookeeper-3.4.14/conf目录下,将zoo_sample.cfg文件重命名为zoo.cfg,命令如下:
[root@mall gpmall]# cd /root/zookeeper-3.4.14/conf/
[root@mall conf]# mv zoo_sample.cfg zoo.cfg
进入到zookeeper-3.4.14/bin目录下,启动ZooKeeper服务,命令如下:
[root@mall conf]# cd …/bin
[root@mall bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.14/bin/…/conf/zoo.cfg
Starting zookeeper … STARTED
查看ZooKeeper状态,命令如下:
[root@mall bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.14/bin/…/conf/zoo.cfg
Mode: standalone
安装Kafka服务,将提供的kafka_2.11-1.1.1.tgz解压至/root目录下,命令如下:
[root@mall bin]# tar -zxvf /root/gpmall/kafka_2.11-1.1.1.tgz -C /root
进入到kafka_2.11-1.1.1/bin目录下,启动Kafka服务,命令如下:
[root@mall bin]# cd /root/kafka_2.11-1.1.1/bin/
[root@mall bin]# ./kafka-server-start.sh -daemon …/config/server.properties
使用jps或者netstat -ntpl命令查看Kafka是否成功启动,命令如下:
[root@mall bin]# jps
6039 Kafka
1722 QuorumPeerMain
6126 Jps
[root@mall bin]# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::9092 ::😗 LISTEN 6039/java
运行结果查看到Kafka服务和9092端口,说明Kafka服务已启动。
(4)启动服务
① 启动数据库并配置
修改数据库配置文件并启动MariaDB数据库,设置root用户密码为123456,并创建gpmall数据库,将提供的gpmall.sql导入。
修改/etc/my.cnf文件,添加字段如下所示:
[root@mall bin]# cd
[root@mall ~]# vi /etc/my.cnf
[mysqld]

init_connect=‘SET collation_connection = utf8_unicode_ci’
init_connect=‘SET NAMES utf8’
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
启动数据库命令如下。
[root@mall ~]# systemctl start mariadb
设置root用户的密码为123456并登录。
[root@mall ~]# mysqladmin -uroot password 123456
[root@mall ~]# mysql -uroot -p123456
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 5.5.68-MariaDB MariaDB Server

Copyright © 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

MariaDB [(none)]>
设置root用户的权限,命令如下:
MariaDB [(none)]> grant all privileges on . to root@localhost identified by ‘123456’ with grant option;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> grant all privileges on . to root@“%” identified by ‘123456’ with grant option;
Query OK, 0 rows affected (0.001 sec)
创建数据库gpmall并导入/root/gpmall/目录中的gpmall.sql文件。
MariaDB [(none)]> create database gpmall;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> use gpmall;
MariaDB [gpmall]> source /root/gpmall/gpmall.sql
退出数据库并设置开机自启。
MariaDB [gpmall]> exit
Bye
[root@mall ~]# systemctl enable mariadb
Created symlink from /etc/systemd/system/mysql.service to /usr/lib/systemd/system/mariadb.service.
Created symlink from /etc/systemd/system/mysqld.service to /usr/lib/systemd/system/mariadb.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
② 启动Redis服务
修改Redis配置文件,编辑/etc/redis.conf文件。
将bind 127.0.0.1这一行注释掉;将protected-mode yes 改为 protected-mode no。
启动Redis服务命令如下。
[root@mall ~]# vi /etc/redis.conf

#bind 127.0.0.1
protected-mode no

[root@mall ~]# systemctl start redis
[root@mall ~]# systemctl enable redis
Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /usr/lib/systemd/system/redis.service.
③ 启动Nginx服务
启动Nginx服务命令如下。
[root@mall ~]# systemctl start nginx
[root@mall ~]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.

(5)应用系统部署
使用提供gpmall-shopping-0.0.1-SNAPSHOT.jar、gpmall-user-0.0.1-SNAPSHOT.jar、shopping-provider-0.0.1-SNAPSHOT.jar、user-provider-0.0.1-SNAPSHOT.jar 、dist这5个包部署应用系统,其中4个jar包为后端服务包,dist为前端包。(包在gpmall目录下)
① 全局变量配置
修改/etc/hosts文件,修改项目全局配置文件如下(原有的172.128.11.42 mall映射删除):
[root@mall ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.24.193.168 kafka.mall
10.24.193.168 mysql.mall
10.24.193.168 redis.mall
10.24.193.168 zookeeper.mall
② 部署前端
清空默认项目路径下的文件,将dist目录下的文件,复制到Nginx默认项目路径(文件在gpmall目录下)。
[root@mall ~]# rm -rf /usr/share/nginx/html/*
[root@mall ~]# cp -rvf gpmall/dist/* /usr/share/nginx/html/
修改Nginx配置文件/etc/nginx/nginx.conf,添加映射如下所示:
[root@mall ~]# vi /etc/nginx/nginx.conf

server {
listen 80;
listen [::]:80;
server_name _;
root /usr/share/nginx/html;

    # Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;location / {root   /usr/share/nginx/html;index  index.html index.htm;}location /user {proxy_pass http://127.0.0.1:8082;}location /shopping {proxy_pass http://127.0.0.1:8081;}location /cashier {proxy_pass http://127.0.0.1:8083;}error_page 404 /404.html;


重启Nginx服务,命令如下:
[root@mall ~]# systemctl restart nginx
到此,前端部署完毕。
③ 部署后端
将node-1节点的/opt/apache-skywalking-apm-bin-es7目录下的agent目录复制到mall节点下(密码为Abc@1234):
[root@mall ~]# scp -r 10.24.194.203:/opt/apache-skywalking-apm-bin-es7/agent /root
修改SkyWalking agent配置文件:
[root@mall ~]# vi agent/config/agent.config

agent.service_name=KaTeX parse error: Double subscript at position 46: … agent.sample_n_̲per_3_secs={SW_AGENT_SAMPLE:1}

collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:10.24.194.203:11800}

采样率修改:agent.sample_n_per_3_secs配置说明:
在访问量较少时,链路全量收集不会对系统带来太大负担,能够完整的观测到系统的运行状况。但是在访问量较大时,全量的链路收集,对链路收集的客户端(agent探针)、服务端(SkyWalking OAP)、存储器(例如说Elastcsearch)都会带来较大的性能开销,甚至会影响应用的正常运行。在访问量级较大的情况下,往往会选择抽样采样,只收集部分链路信息。SkyWalking Agent在agent/config/agent.config 配置文件中,定义了agent.sample_n_per_3_secs配置项,设置每3秒可收集的链路数据的数量。
将gpmall软件包中提供的4个jar包,放置探针并启动,通过设置启动参数的方式检测系统,启动命令如下:
[root@mall ~]# nohup java -javaagent:/root/agent/skywalking-agent.jar -jar gpmall/shopping-provider-0.0.1-SNAPSHOT.jar &
[1] 20086
[root@mall ~]# nohup: ignoring input and appending output to ‘nohup.out’

[root@mall ~]# nohup java -javaagent:/root/agent/skywalking-agent.jar -jar gpmall/user-provider-0.0.1-SNAPSHOT.jar &
[2] 20132
[root@mall ~]# nohup: ignoring input and appending output to ‘nohup.out’

[root@mall ~]# nohup java -javaagent:/root/agent/skywalking-agent.jar -jar gpmall/gpmall-shopping-0.0.1-SNAPSHOT.jar &
[3] 20177
[root@mall ~]# nohup: ignoring input and appending output to ‘nohup.out’

[root@mall ~]# nohup java -javaagent:/root/agent/skywalking-agent.jar -jar gpmall/gpmall-user-0.0.1-SNAPSHOT.jar &
[4] 20281
[root@mall ~]# nohup: ignoring input and appending output to ‘nohup.out’

httpd访问网络配置

[root@mall ~]# setsebool -P httpd_can_network_connect 1
按照顺序运行4个jar包后,至此后端服务部署完毕。
④ 网站访问
打开浏览器,在地址栏中输入http://10.24.193.168,访问界面,如图3所示。

图3 商城首页
单击右上角“头像”,进行登录操作,使用用户名/密码为test/test进行登录,如图4所示。

图4 登录界面
登录后,可进行购买商品操作,单击首页“地平线8号”旅行箱图片,如图5所示。

图5 商品页面
进入购买界面,单击“现在购买”按钮,进行购买商品操作,如图6所示。

图6 购买界面
单机完“现在购买”按钮,跳转到提交订单界面,如图7所示。
)
图7 订单界面
至此,单机部署应用系统完成。
(6)再次访问SkyWalking UI(10.24.194.203:8888),点击右上角的自动按钮(Auto),发现已有数据产生,如图8与图9所示:

图8 访问SkyWalking UI

如图9 拓扑展示

【题目 11】Linux 内核优化[1 分]
在使用 Linux 服务器的时候,TCP 协议规定,对于已经建立的连接,网络双方要进行四次挥手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不会被释放。因为服务器程序要同时管理大量连接,所以很有必要保证无用的连接完全断开,否则大量僵死的连接会浪费许多服务器资源。创建一台 CentOS7.9 云主机,修改相应的配置文件,分别开启 SYN Cookies;允许将 TIME-WAIT sockets 重新用于新的 TCP连接;开启 TCP 连接中 TIME-WAIT sockets 的快速回收;修改系統默认的 TIMEOUT 时间为 30。完成后提交修改节点的用户名、密码和 IP 地址到答题框。
[root@container ~]# vim /etc/sysctl.conf
#添加以下参数
net.ipv4.tcp_syncookies=1 # 开启 SYN Cookies
net.ipv4.tcp_tw_reuse = 1 # 允许将 TIME-WAIT sockets 重新用于新的 TCP连接
net.ipv4.tcp_tw_recycle = 1 # 开启 TCP 连接中 TIME-WAIT sockets 的快速回收
net.ipv4.tcp_fin_timeout = 30 # 修改系統默认的 TIMEOUT 时间为 30

[root@controller ~]# sysctl -p # 查看修改内容是否生效
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
1.检查内核优化正确计 1 分

【题目 12】排错:Glance服务排错[1 分] —没找到答案
使用赛项提供的 chinaskill-error1 镜像启动云主机,flavor 使用 4vcpu/12G 内存/100G 硬盘。启动后存在错误的私有云平台,错误现象为查看不到 image 列表,试根据错误信息排查云平台错误,使云平台可以查询到 image 信息。完成后提交云主机节点的用户名、密码和 IP地址到答题框。

查看glance的服务有没有启动

[root@controller ~]# openstack-service list
openstack-glance-api
openstack-glance-registry
[root@controller ~]# systemctl status openstack-glance-registry.service
1.检查错误镜像 glance 服务启动正确计 1 分

【题目 13】排错:数据库排错[1.5 分]
使用赛项提供的排错镜像 chinaskill-error2 创建一台云主机(云主机的登录用户名为 root,密码为 000000),该云主机中存在错误的数据库服务,错误现象为数据库服务无法启动。请将数据库服务修复并启动,将数据库的密码修改为 chinaskill123。修复完成后提交该云主机的用户名、密码和 IP 地址到答题框。
[root@controller ~]# mysql -uroot -p000000
ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)
需要修改密码:
[root@controller ~]# vi /etc/my.cnf
在文件的最后一行加入skip-grant-tables

[root@controller ~]# systemctl restart mariadb.service # 重启服务
[root@controller ~]# mysql -uroot -p # 这次就可以不用密码进入
MariaDB [(none)]> use mysql
MariaDB [mysql]> UPDATE user SET PASSWORD=PASSWORD(‘chinaskill123’) where USER=‘root’; # 修改密码
MariaDB [mysql]> FLUSH PRIVILEGES; # 刷新权限
[root@controller ~]# vi /etc/my.cnf # 回到文件删掉添加的skip-grant-tables
[root@controller ~]# systemctl restart mariadb.service # 重启服务
[root@controller ~]# mysql -uroot -pchinaskill123 # 重新登陆即可
1.检查错误镜像数据库服务启动正确计 1.5 分

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/159655.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络知识学习(笔记二)

ios模型规定的网络模型一共有7层&#xff0c;但是实际使用过程中&#xff0c;4层的TCP/IP模型是经常使用的&#xff0c;网络知识学习笔记里面也是基于4层TCP/IP模型进行分析的&#xff0c;前面已经讲了&#xff1a;&#xff08;1&#xff09;物理层&#xff0c;&#xff08;2&a…

VMware 系列:戴尔服务器配置(格式数据、RAID5、安装ESXI)以及相关问题

戴尔服务器配置(格式数据、RAID5、安装ESXI)以及相关问题 一. 戴尔服务器配置(格式数据、RAID5、安装ESXI)一、戴尔服务器数据格式化1.进入服务器bios界面2.启动虚拟控制台后按F2键进入系统设置界面3.进入设置界面,然后选择Device Settings4.然后进入如下界面,选择Integr…

Linux系统管理与服务器安全:构建稳健云数据中心

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 在当今数字化时代&#xff0c;云数据中心已经成…

FeignClient相关调用逻辑

https://www.cnblogs.com/chiangchou/p/feign.html#_label3_2

最受欢迎的猫罐头有那些?精选的5款热门猫罐头推荐!

新手养猫很容易陷入疯狂购买的模式&#xff0c;但有些品牌真的不能乱买&#xff01;现在的大环境不太好&#xff0c;我们需要学会控制自己的消费欲望&#xff0c;把钱花在刀刃上&#xff01;现在宠物市场真的很内卷&#xff0c;很多品牌都在比拼产品的数据和营养成分。很多铲屎…

物联网AI MicroPython学习之语法 WDT看门狗外设

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; WDT 介绍 模块功能: 看门狗WDT&#xff08;WatchDog Timer&#xff09;外设驱动模块 接口说明 WDT - 构建WDT对象 函数原型&#xff1a;WDT(timeout)参数说明&#xff1a; 参数类型必选参数&#xff1f…

springboot内置Tomcat流程

1、org.springframework.boot.SpringApplication#initialize setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));加载了org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext 2、spring refres…

12-25v转3.3v高清水下钓鱼摄像头电源供电芯片方案

高清水下钓鱼摄像头电源芯片方案&#xff1a;12-25V转3.3V&#xff0c;支持超宽电压输入范围和30米长线视频放大 在水下钓鱼摄像头设计中&#xff0c;为了实现高清画质和稳定的电源供应&#xff0c;需要一款能够将12-25V转换为3.3V输出的高效电源芯片。这款电源芯片不仅支持高…

Java使用x-www-form-urlencoded发请求

平常在开发过程中用的最多的就是JSON格式&#xff0c;请求编码就是 application/json&#xff0c;但偏偏有些接口是 x-www-form-urlencoded&#xff0c;怎么办呢&#xff0c;重新封装喽 在POSTMan工具是叫 x-www-form-urlencoded 在 APIpost工具中是叫 urlencoded Map<Str…

数据结构-map

数据结构-哈希算法 哈希原理 hash哈希是一种算法 y hash(x) 给定一个x一定得到固定的yx是输入&#xff0c;x取值范围称为输入空间&#xff0c;x是任意值&#xff0c;x是任意长度&#xff08;go中字节序列&#xff09;y是输出&#xff0c;y取值范围称为输出空间&#xff0c;…

Spring Boot 邮件发送(五种类型的邮件)

邮件协议&#xff1a; SMTP、POP3、IMAP SMTP 协议全称为 Simple Mail Transfer Protocol&#xff0c;译作简单邮件传输协议&#xff0c;它定义了邮件客户端软件与 SMTP 服务器之间&#xff0c;以及 SMTP 服务器与 SMTP 服务器之间的通信规则。 用户先将邮件投递到腾讯的 SMT…

C#每天复习一个重要小知识day3:随机数的生成

目录 格式&#xff1a; 生成随机数&#xff1a; 生成一个0-100的随机数&#xff1a; 以下是更详细的代码示例&#xff1a; 在C#中&#xff0c;可以使用Random类来生成随机数。这个类提供了多种方法来生成不同类型的随机数。 格式&#xff1a; Random 随机变量名(r) new …

论文阅读 Forecasting at Scale (一)

最近在看时间序列的文章&#xff0c;回顾下经典 论文地址 项目地址 Forecasting at Scale 摘要1、介绍2、时间业务序列的特点3、Prophet预测模型3.1、趋势模型3.1.1、非线性饱和增长3.1.2、具有变化点的线性趋势3.1.3、自动转换点选择3.1.4、趋势预测的不确定性 摘要 预测是一…

暗物质探测器认知教学VR元宇宙平台打破传统束缚

“飞船正在上升&#xff0c;马上就冲出大气层了!”这是一位在1&#xff1a;1还原的神舟飞船返回舱内借助VR设备置身元宇宙世界&#xff0c;沉浸式体验升空全过程的游客兴奋地说道。不仅如此&#xff0c;在载人飞船训练期&#xff0c;元宇宙技术为航天员虚拟一个逼真的太空世界&…

vue3 iconify 图标几种使用 并加载本地 svg 图标

iconify iconify 与 iconify/vue 使用 下载 pnpm add iconify/vue -D使用 import { Icon } from "iconify/vue";<template><Icon icon"mdi-light:home" style"color: red; font-size: 43px" /><Icon icon"mdi:home-flo…

hosts.allow和hosts.deny配置

有个单机环境限制ssh登录&#xff0c;有多种方式&#xff0c;这里选择了配置hosts.allow和hosts.deny [rootdb ~]# more /etc/hosts.allow # # hosts.allow This file contains access rules which are used to # allow or deny connections to network services t…

shell脚本三

目录 一、循环语句 一、循环 二、for循环语句 1.列表循环 2.与c语言循环相似的for循环 3.使用for打印三角形以及乘法表 4.测试172.16.114.0网段存活的主机并将存活的主机IP地址写入文件中&#xff0c;未存活的主机放入另一文件中 三、while循环语句 四、until循环语句…

如何使用 Navicat 连接 GaussDB 主备版

Navicat Premium&#xff08;16.2.8 Windows版或以上&#xff09; 已支持对GaussDB 主备版的管理和开发功能。它不仅具备轻松、便捷的可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结构同步、协同合作、数据迁移等&#xff09;&#xff0c;这…

浅析OKR的敏捷性

前言 OKR对于工作的提升有着一定的不可替代的作用。特别在敏捷方面。 OKR的敏捷性 OKR&#xff08;Objectives and Key Results&#xff09;是一种目标设定框架&#xff0c;它的敏捷性主要体现在以下几个方面&#xff1a; 公开透明 OKR要求完全公开透明&#xff0c;让每个员…

每日一练:质因数分解

1. 题目 从键盘输入一个整数&#xff0c;开始整数的质因数分解&#xff0c;最后打印出该整数的所有质因数。 2.解题思路 1&#xff09;初始化&#xff1a; 从最小的质数开始&#xff0c;将输入的整数不断除以质数&#xff0c;直到无法整除为止。   2&#xff09;循环&#x…