为了做好运维面试路上的助攻手,特整理了上百道 【运维技术栈面试题集锦】 ,让你面试不慌心不跳,高薪offer怀里抱!
这次整理的面试题,小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。
本份面试集锦涵盖了
- 174 道运维工程师面试题
- 128道k8s面试题
- 108道shell脚本面试题
- 200道Linux面试题
- 51道docker面试题
- 35道Jenkis面试题
- 78道MongoDB面试题
- 17道ansible面试题
- 60道dubbo面试题
- 53道kafka面试
- 18道mysql面试题
- 40道nginx面试题
- 77道redis面试题
- 28道zookeeper
总计 1000+ 道面试题, 内容 又全含金量又高
- 174道运维工程师面试题
1、什么是运维?
2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?
3、现在给你三百台服务器,你怎么对他们进行管理?
4、简述raid0 raid1raid5二种工作模式的工作原理及特点
5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
7、Tomcat和Resin有什么区别,工作中你怎么选择?
8、什么是中间件?什么是jdk?
9、讲述一下Tomcat8005、8009、8080三个端口的含义?
10、什么叫CDN?
11、什么叫网站灰度发布?
12、简述DNS进行域名解析的过程?
13、RabbitMQ是什么东西?
14、讲一下Keepalived的工作原理?
15、讲述一下LVS三种模式的工作过程?
16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
17、如何重置mysql root密码?
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
- 下载解压:https://github.com/infinilabs/analysis-ik/tags
解压elasticsearch-analysis-ik-7.8.0 到/usr/local/modules/elasticsearch/elasticsearch-7.8.0/plugins/ik
目录下
- 重新启动Elasticsearch
./usr/local/modules/elasticsearch/elasticsearch-7.8.0/bin/elasticsearch
1.4 卸载Elasticsearch-7.8.0
- 停止服务后。执行下面命令
[wolffy@hadoop102 module]$ rm -rf /opt/module/elasticsearch-7.8.0
[wolffy@hadoop102 module]$ rm -rf kibana-7.8.0
第二章 Elasticsearch-7.8.0集群基于Centos7
Elasticsearch安装hadoop102、hadoop103、hadoop104
Kibana安装hadoop102
2.1 安装 Elasticsearch-7.8.0
Elasticsearch(ES)是一个基于Apache Lucene的开源的分布式、高扩展、近实时的搜索引擎。它主要用于海量数据的快速存储、实时检索和高效分析。通过简单易用的RESTful API,它隐藏了Lucene的复杂性,使得全文搜索变得简单。
2.1.1 安装包下载
下载地址:https://www.elastic.co/downloads/past-releases#elasticsearch
2.1.2 解压安装ElasticSearch
- 解压elasticsearch-7.8.0.tar.gz到/opt/module目录下,并更名
[wolffy@hadoop102 software]$ tar -zxvf /opt/software/elasticsearch-7.8.0-linux-x86_64.tar.gz -C /opt/module/
- 在/opt/module/elasticsearch-7.8.0路径下创建data文件夹
[wolffy@hadoop102 elasticsearch-7.8.0]$ mkdir data
- 修改配置文件/opt/module/elasticsearch-7.8.0/config/elasticsearch.yml
[wolffy@hadoop102 config]$ vi elasticsearch.yml
#-----------------------Cluster-----------------------
cluster.name: myes
#-----------------------Node-----------------------
node.name: node102
#-----------------------Paths-----------------------
path.data: /opt/module/elasticsearch-7.8.0/data
#-----------------------Memory-----------------------
bootstrap.memory\_lock: false
#-----------------------Network-----------------------
network.host: hadoop102
#-----------------------Discovery-----------------------
discovery.seed\_hosts: ["hadoop102", "hadoop103","hadoop104"]
cluster.initial\_master\_nodes: ["node102", "node103","node104"]
cluster.name:如果要配置集群需要两个节点上的elasticsearch配置的cluster.name相同,都启动可以自动组成集群,这里如果不改cluster.name则默认是cluster.name=my-application,
node.name:随意取但是集群内的各节点不能相同修改后的每行前面不能有空格,修改后的“:”后面必须有一个空格
- 分发至hadoop103以及hadoop104,分发之后修改配置文件:
[wolffy@hadoop102 module]$ xsync.sh elasticsearch-7.8.0/
[wolffy@hadoop103 elasticsearch-7.8.0]$ vim /opt/module/elasticsearch-7.8.0/config/elasticsearch.yml
# 在hadoop103机器修改以下信息
node.name: node103
network.host: hadoop103
[wolffy@hadoop104 elasticsearch-7.8.0]$ vim /opt/module/elasticsearch-7.8.0/config/elasticsearch.yml
# 在hadoop104机器修改以下信息
node.name: node104
network.host: hadoop104
2.1.3 调整linux内核参数
- 切换到root用户,编辑limits.conf 添加类似如下内容
[root@hadoop102 elasticsearch-7.8.0]# vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
注意:*不要省略掉。以上操作为增加Linux文件系统中可以同时打开的文件句柄数。
- 切换到root用户修改配置sysctl.conf
[root@hadoop102 elasticsearch-7.8.0]# vi /etc/sysctl.conf
vm.max\_map\_count=655360
以上修改的Linux配置需要分发至其他节点.然后重新启动Linux,必须重启!!!
2.1.4 ElasticSearch启动
- 单点启动
[wolffy@hadoop102 elasticsearch-7.8.0]$ /opt/module/elasticsearch-7.8.0/bin/elasticsearch
[wolffy@hadoop103 elasticsearch-7.8.0]$ /opt/module/elasticsearch-7.8.0/bin/elasticsearch
[wolffy@hadoop104 elasticsearch-7.8.0]$ /opt/module/elasticsearch-7.8.0/bin/elasticsearch
- 群起脚本elasticsearch_control.sh
[wolffy@hadoop102 bin]$ vim /home/wolffy/bin/elasticsearch_control.sh
#!/bin/bash
# 请确保SSH密钥认证已经设置好,以便脚本能够无密码登录到每台机器上执行命令
# # 定义Elasticsearch的地址和端口
ELASTICSEARCH\_HOST=("hadoop102" "hadoop103" "hadoop104")
ELASTICSEARCH\_PORT="9200"
# 定义启动Elasticsearch的命令
START\_CMD="nohup /opt/module/elasticsearch-7.8.0/bin/elasticsearch > /dev/null 2>&1 &"
# 定义停止Elasticsearch的命令
STOP\_CMD="ps -ef | grep Elasticsearch | grep -v grep | awk '{print \$2}' | xargs kill "
# 定义检查Elasticsearch状态的命令
STATUS\_CMD="curl http://${ELASTICSEARCH\_HOST}:${ELASTICSEARCH\_PORT}/\_cat/nodes?v"
# 函数:启动Elasticsearch服务
start\_elasticsearch() {
for i in "${ELASTICSEARCH\_HOST[@]}"; do
echo "Starting Elasticsearch on $i..."
ssh $i "$START\_CMD"
if [ $? -eq 0 ]; then
echo "Elasticsearch started successfully on $i."
else
echo "Failed to start Elasticsearch on $i."
fi
done
}
# 函数:停止Elasticsearch服务
stop\_elasticsearch() {
for i in "${ELASTICSEARCH\_HOST[@]}"; do
echo "Stopping Elasticsearch on $i..."
ssh $i "$STOP\_CMD"
if [ $? -eq 0 ]; then
echo "Elasticsearch stopped successfully on $i."
else
echo "Failed to stop Elasticsearch on $i."
fi
done
}
# 函数:检查Elasticsearch服务状态
check\_elasticsearch\_status() {
for i in "${ELASTICSEARCH\_HOST[@]}"; do
echo "Checking Elasticsearch status on $i..."
ssh $i "$STATUS\_CMD"
# 执行curl命令并输出集群健康状态
echo "Checking Elasticsearch cluster health..."
$CHECK\_HEALTH\_CMD
# 检查curl命令的退出状态,如果非0则输出错误消息
if [ $? -ne 0 ]; then
echo "Failed to retrieve Elasticsearch cluster health."
exit 1
fi
done
}
# 解析命令行参数
case "$1" in
start)
start_elasticsearch
;;
stop)
stop_elasticsearch
;;
status)
check_elasticsearch_status
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
;;
esac
[wolffy@hadoop102 bin]$ chmod +x /home/wolffy/bin/elasticsearch_control.sh
[wolffy@hadoop102 bin]$ elasticsearch_control.sh start
[wolffy@hadoop102 bin]$ elasticsearch_control.sh status
[wolffy@hadoop102 bin]$ elasticsearch_control.sh stop
- 访问:http://hadoop102:9200/_cat/nodes?v
2.2 安装Kibana-7.8.0
Kibana是一个用于探索、可视化和分享ES数据的客户端。因此在任一节点安装即可。
2.2.1 安装包下载
下载地址:https://www.elastic.co/downloads/past-releases#kibana
2.2.2 解压安装Kibana
- 将kibana压缩包上传到所安装节点的指定目录
[wolffy@hadoop102 module]$ tar -zxvf /opt/software/kibana-7.8.0-linux-x86_64.tar.gz -C /opt/module/
[wolffy@hadoop102 module]$ mv /opt/module/kibana-7.8.0-linux-x86_64/ /opt/module/kibana-7.8.0
- 修改相关配置连接Elasticsearch
[wolffy@hadoop102 kibana-7.8.0]$ vi config/kibana.yml
server.host: "hadoop102"
server.port: 5601
elasticsearch.hosts: ["http://hadoop102:9200"]
i18n.locale: "zh-CN"
2.2.3 Kibana启动
- 启动Kibana
[wolffy@hadoop102 kibana-7.8.0]$ bin/kibana
- Kibana启停脚本(安装nodejs)
[wolffy@hadoop102 bin]$ vim /home/wolffy/bin/kibana_control.sh
#!/bin/bash
# 定义Kibana的安装路径
KIBANA\_HOME="/opt/module/kibana-7.8.0"
# 定义Kibana的进程名或关键字,用于查找进程ID
KIBANA\_PROCESS\_NAME="node ./bin/../src/cli"
# 函数:启动Kibana
start\_kibana() {
# 切换到Kibana的安装目录
cd "$KIBANA\_HOME" || exit
# 启动Kibana
echo "Starting Kibana..."
nohup ./bin/kibana &> kibana.log & # 在后台启动Kibana并将输出重定向到kibana.log
# 检查Kibana进程是否正在运行(可选)
sleep 5 # 等待Kibana启动
if pgrep -f "$KIBANA\_PROCESS\_NAME" > /dev/null; then
echo "Kibana started successfully."
else
echo "Failed to start Kibana."
exit 1
fi
}
# 函数:停止Kibana
stop\_kibana() {
# 查找Kibana的进程ID
KIBANA\_PID=$(pgrep -f "$KIBANA\_PROCESS\_NAME")
# 检查是否找到了Kibana的进程ID
if [ -z "$KIBANA\_PID" ]; then
echo "Kibana is not running."
exit 0
fi
# 停止Kibana进程
echo "Stopping Kibana..."
kill "$KIBANA\_PID"
# 等待Kibana进程结束
wait "$KIBANA\_PID" || true
# 检查Kibana是否已停止
if pgrep -f "$KIBANA\_PROCESS\_NAME" > /dev/null; then
echo "Failed to stop Kibana."
exit 1
else
echo "Kibana stopped successfully."
fi
}
# 检查传入的参数
case "$1" in
start)
start_kibana
;;
stop)
stop_kibana
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
[wolffy@hadoop102 bin]$ chmod +x /home/wolffy/bin/kibana_control.sh
- 浏览器访问:http://hadoop102:5601/app/kibana#/dev_tools/console
2.3 安装elasticsearch-analysis-ik-7.8.0
Elasticsearch-Analysis-IK是一个专门为Elasticsearch设计的中文分词器插件,它将Lucene IK分词器集成到Elasticsearch中,并支持自定义词典。
- 下载解压:https://github.com/infinilabs/analysis-ik/tags
[wolffy@hadoop102 elasticsearch-7.8.0]$ cd plugins/
[wolffy@hadoop102 plugins]$ mkdir ik
[wolffy@hadoop102 plugins]$ cd ik
[wolffy@hadoop102 ik]$ unzip /opt/software/elasticsearch-analysis-ik-7.8.0.zip
[wolffy@hadoop102 ik]$ cp /opt/software/elasticsearch-analysis-ik-7.8.0/* /opt/module/elasticsearch-7.8.0/plugins/ik
- 分发分词器到所有节点
[wolffy@hadoop102 plugins]$ xsync.sh ik
- 重新启动Elasticsearch
[wolffy@hadoop102 plugins]$ elasticsearch_control.sh start
2.4 卸载Elasticsearch-7.8.0和Kibana-7.8.0
- 停止服务后。执行下面命令
[wolffy@hadoop102 module]$ rm -rf /opt/module/elasticsearch-7.8.0
[wolffy@hadoop102 module]$ rm -rf kibana-7.8.0
2.5 注意
因为安全问题,Elasticsearch 不允许root用户直接运行,所以要创建新用户,在root用户中创建新用户,执行如下命令:
useradd wolffy *# 新增wolffy用户*
passwd wolffy *# 为wolffy用户设置密码*
5、为新用户授权
chown -R wolffy:wolffy /opt/elasticsearch-7.4.0 *#文件夹所有者*
将 /opt/elasticsearch-7.4.0文件夹授权给wolffy用户:wolffy用户组
8.0以上需要增加如下配置
打开elasticsearch.yml
新增
xpack.security.enabled: false
xpack.security.transport.ssl.enabled: false
第三章 Elasticsearch-7.8.0通过Docker方式安装
3.1 安装 Elasticsearch-7.8.0
3.1.1 创建网络
# 因为需要部署kibana容器,因此需要让es和kibana容器互联。
docker network create es-net
3.1.2 拉取镜像
# 拉取镜像
docker pull elasticsearch:7.8.0
3.1.3 创建挂载点目录
# 创建挂载点目录
mkdir -p \
/Users/wolffy/docker/elasticsearch-7.8.0/data \
/Users/wolffy/docker/elasticsearch-7.8.0/config \
/Users/wolffy/docker/elasticsearch-7.8.0/plugins
# 修改权限
chmod 777 /Users/wolffy/docker/elasticsearch-7.8.0/data
chmod 777 /Users/wolffy/docker/elasticsearch-7.8.0/config
chmod 777 /Users/wolffy/docker/elasticsearch-7.8.0/plugins
Likely root cause: java.nio.file.AccessDeniedException: /usr/share/elasticse
宿主机的目录权限问题 :用户目录一定要家目录。这样用户才有权限问题。
3.1.4 创建容器
docker run -d \
--restart=always \
--name elasticsearch-7.8.0 \
--network es-net \
-p 9200:9200 \
-p 9300:9300 \
--privileged \
-v /Users/wolffy/docker/elasticsearch-7.8.0/data:/usr/share/elasticsearch/data \
-v /Users/wolffy/docker/elasticsearch-7.8.0/plugins:/usr/share/elasticsearch/plugins \
-e "discovery.type=single-node" \
-e "ES\_JAVA\_OPTS=-Xms512m -Xmx512m" \
elasticsearch:7.8.0
-d
: 在后台运行容器,并返回容器ID。--restart=always
: 无论容器的退出状态如何,始终重启容器。这确保了即使Elasticsearch服务因为某种原因停止,容器也会自动重启。--name elasticsearch-7.8.0
: 为容器指定一个名称,这里是elasticsearch-7.8.0
。--network es-net
: 将容器连接到名为es-net
的Docker网络。这允许容器与同一网络上的其他容器通信。-p 9200:9200
: 将宿主机的9200端口映射到容器内的9200端口,用于Elasticsearch的HTTP接口。-p 9300:9300
: 将宿主机的9300端口映射到容器内的9300端口,用于Elasticsearch的传输层通信。--privileged
: 给予容器扩展的权限,让容器内的root用户拥有宿主机的root权限。这通常不是最佳实践,因为它可能会带来安全风险,但在某些情况下,Elasticsearch可能需要这些权限来正确运行。-v /Users/wolffy/docker/elasticsearch-7.8.0/data:/usr/share/elasticsearch/data
: 将宿主机的/Users/wolffy/docker/elasticsearch-7.8.0/data
目录映射到容器内的/usr/share/elasticsearch/data
目录,用于存储Elasticsearch的数据。-v /Users/wolffy/docker/elasticsearch-7.8.0/plugins:/usr/share/elasticsearch/plugins
: 将宿主机的/Users/wolffy/docker/elasticsearch-7.8.0/plugins
目录映射到容器内的/usr/share/elasticsearch/plugins
目录,允许你将自定义插件安装在宿主机上,并在容器中使用。-e "discovery.type=single-node"
: 设置环境变量discovery.type
为single-node
,告诉Elasticsearch以单节点模式运行。这在开发或测试环境中很常见,但在生产环境中,你可能需要配置一个更复杂的集群。-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"
: 设置环境变量ES_JAVA_OPTS
来配置Elasticsearch的Java虚拟机。这里,-Xms512m
设置了JVM的初始堆大小为512MB,-Xmx512m
设置了最大堆大小为512MB。elasticsearch:7.8.0
: 指定要运行的Elasticsearch镜像及其版本,这里是elasticsearch:7.8.0
。
3.1.5 编写elasticsearch.yml[可选]
# 先进入es容器
docker exec -it elasticsearch-7.8.0 /bin/bash
# 关闭 密码安全验证
echo 'xpack.security.enabled: false' >> config/elasticsearch.yml
cat config/elasticsearch.yml
xpack.security.enabled: false elasticsearch-8.x以下无需配置
3.1.6 重启elasticsearch容器测试
docker restart es
docker start es
http://localhost:9200/
3.2 安装Kibana-7.8.0
3.2.1 拉取镜像
docker pull kibana:7.8.0
最全的Linux教程,Linux从入门到精通
======================
-
linux从入门到精通(第2版)
-
Linux系统移植
-
Linux驱动开发入门与实战
-
LINUX 系统移植 第2版
-
Linux开源网络全栈详解 从DPDK到OpenFlow
第一份《Linux从入门到精通》466页
====================
内容简介
====
本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。
本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。
需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。
本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。
需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!