我正在参加「金石计划」
写在前面
在工作中,我们可能会遇到一些问题,然后通过自己得一顿操作,最终把问题解决了。
可能在一两天之内,我们还是会记得解决这些问题的方法,但是过了一段时间之后,基本上都忘光了。
所以这里,我们应该要养成一个良好的习惯,把每次遇到的问题,如何解决的,都记录下。下次再看文档,这样就想起来了。
<<千与千寻>>有些事情是不可能忘记的,只是一时想不起来
下面,就分享一下,我遇到的一些问题,和相关的解决方法。
可能以前也有分享过一篇,有兴趣的小伙伴,可以查看这里:常用操作合集一、常用操作合集二、常用操作合集三
1.mysql死锁如何处理
把mysql中产生死锁的事务进程干掉,所以记录一下sql
sql
-- 查看数据库当前的进程
show processlist;
-- 当前运行的所有事务
SELECT * FROM information_schema.INNODB_LOCKs;
-- 当前出现的锁
SELECT * FROM information_schema.INNODB_LOCK_waits;
-- 锁等待的对应关系
SELECT * FROM information_schema.INNODB_TRX;
-- 查询产生锁的具体sql
select
a.trx_id 事务id ,
a.trx_mysql_thread_id 事务线程id,
a.trx_query 事务sql
from
INFORMATION_SCHEMA.INNODB_LOCKS b,
INFORMATION_SCHEMA.innodb_trx a
where
b.lock_trx_id=a.trx_id;
-- !!!
select concat('KILL ',a.trx_mysql_thread_id ,';')
from INFORMATION_SCHEMA.INNODB_LOCKS b,INFORMATION_SCHEMA.innodb_trx a
where b.lock_trx_id=a.trx_id;
-- 杀掉死锁进程
kill {thread_id};
2.阿波罗注册中心部署
Quick Start安装包,大家只需要下载到本地,就可以直接使用,免去了编译、打包过程。
安装包共50M,如果访问github网速不给力的话,可以从百度网盘下载。
-
从GitHub下载
-
checkout或下载apollo-build-scripts项目
-
由于Quick Start项目比较大,所以放在了另外的repository,请注意项目地址
-
-
从百度网盘下载
- 通过网盘链接下载,提取码: 9wwe
- 下载到本地后,在本地解压apollo-quick-start.zip
-
为啥安装包要58M这么大?
- 因为这是一个可以自启动的jar包,里面包含了所有依赖jar包以及一个内置的tomcat容器
nginx代理,8070,出现某些接口访问404,原因是丢失了 /apollo
访问前缀导致
所以要在启动的时候,指定访问前缀-Dserver.servlet.context-path=/apollo
sh
# 185行
export JAVA_OPTS="$PORTAL_JAVA_OPTS -Dlogging.file.name=./apollo-portal.log -Dserver.port=8070 -Dserver.servlet.context-path=/apollo -Dspring.profiles.group.github=$spring_profiles_group_github -Dspring.datasource.url=$apollo_portal_db_url -Dspring.datasource.username=$apollo_portal_db_username -Dspring.datasource.password=$apollo_portal_db_password"
加上项目访问前缀-Dserver.servlet.context-path=/apollo
nginx代理配置:
nginx
location /apollo/ {
proxy_pass http://127.0.0.1:8070/apollo/;
}
3.如何基于基础镜像,添加一些额外的功能?
很多时候,我们可能会到docker hub上面拉取一些基础镜像,例如nginx这些。
这些nginx镜像,一般来说体积都相对的较小,传输也是比较方便,更受开发者的青睐。毕竟自己去制作一个nginx镜像,体积可能相对较大。
但是这些nginx镜像,由于体积相对较小,是因为精简了很多命令,少了很多功能。例如,unzip,telnet等功能,是没有的。
那我们怎么给这个nginx基础镜像,添加unzip,telnet等功能呢?
我们可以这么干,创建一个 Dockerfile,以该nginx镜像作为基础镜像,将unzip,telnet等功能添加进去即可。例如这样:
- Dockerfile
docckerFile
FROM nginx:1.25.1
COPY zip /usr/bin
COPY unzip /usr/bin
COPY telnet /usr/bin
nginx:1.25.1,这个镜像可以直接从docker hub上面拉取即可:
docker pull nginx:1.25.1
注:zip
,unzip
,telnet
这些文件,可以找一台相同架构的linux服务器(x86),在/usr/bin目录下面拉取出来,即可。
然后重新build一下即可
bash
docker build -t llsydn/nginx:1.25.1 -f ./Dockerfile .
4.Ajax出现Post数据时+和&符号变空格的解决办法
采用Ajax传递数据时,通常会将数据整理为data="var1=abc&var2=def"。而当数据中存在加号(+)或是连接符(&)时,服务器端接收数据时会有部分数据丢失现象。
分析一下Ajax传递数据的格式与Javascript的语法不难发现:
- "+"号:JavaScript解析为字符串连接符,所以服务器端接收数据时"+"会丢失。
- "&":JavaScript解析为变量连接符,所以服务器端接收数据时&符号以后的数据都会丢失。
解决办法也相当简单,只需要为+与&符号编码即可:
ini
data = data.replace(/+/g, "%2B" );
data = data.replace(/&/g, "%26" );
5.nginx监控ie,360兼容浏览器实现跳转
bash
server{
...
if ($http_user_agent ~* "(MSIE|trident)") {
return 301 http://$host/index.html;
}
..
}
上面是针对所有请求,进行拦截
bash
server{
...
location /llsydn {
if ($http_user_agent ~* "(MSIE|trident)") {
return 301 http://$host/index.html;
}
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8083;
}
..
}
上面是针对
/llsydn
访问前缀的请求,进行拦截
6.logging日志级别
Logging 日志级别主要有以下几种:
makefile
1.TRACE:最低级别,主要用于记录程序运行时的调试信息,通常只有在调试时才会记录此类日志。
2.DEBUG:调试级别,主要是用于代码的调试和问题排查,记录程序的详细状态和变量值等。
3.INFO:信息级别,主要用于记录程序运行过程中的状态信息如启动信息、配置加载、HTTP 请求处理状态等。
4.WARN:警告级别,主要用于记录应用程序中非致命的错误和异常,比如某个方法调用失败、硬件资源占用过大等。
5.ERROR:最高级别,主要用于记录严重的错误和异常信息,如系统崩溃、功能无法实现、关键数据丢失等在应用程序中设置日志级别时,通常需要根据具体的需求选择适当的级别。对于生产环境,一般建议将日志级别设置为INFO或WARN,以避免记录太多无用的日志信息;而在开发和测试阶段,可以将日志级别设置为 DEBUG或TRACE,以便更好地调试和问题排查。
7.oauth2的4种授权模式说明
感觉这篇文章总结起来还是,挺不错的。有兴趣的小伙伴可以去看看!!!
8.firewalld配置只允许指定IP地址访问
9.k8s开启防火墙配置
- 一、官方的端口说明
关于端口的官方说明可见地址:点击查看
- 二、假设k8s部署情况如下:
主机名 | 主机IP |
---|---|
k8s-master | 172.17.185.91 |
k8s-node01 | 172.17.185.92 |
k8s-node02 | 172.17.185.93 |
k8s-node03 | 172.17.185.94 |
- 三、所有机器上执行如下命令:
css
# 确保开启防火墙服务
systemctl restart firewalld
# 将集群内所有的节点IP配置到防火墙可信区中
firewall-cmd --permanent --zone=trusted --add-source=172.17.185.91
firewall-cmd --permanent --zone=trusted --add-source=172.17.185.92
firewall-cmd --permanent --zone=trusted --add-source=172.17.185.93
firewall-cmd --permanent --zone=trusted --add-source=172.17.185.94
# 增加防火墙规则
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 1 -j ACCEPT -m comment --comment "kube-proxy redirects" #这个规则的目的是允许 kube-proxy 重定向流量
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 1 -j ACCEPT -m comment --comment "docker subnet" #这个规则的目的是允许 Docker 容器子网之间的流量通信
# 设置防火墙伪装ip, 打开NAT,默认是关闭状态
firewall-cmd --add-masquerade --permanent
# 所有k8s的NodePort端口添加到例外
firewall-cmd --permanent --zone=public --add-port=30000-32767/tcp
# 重新加载配置
firewall-cmd --reload
firewall-cmd --zone=trusted --list-all
firewall-cmd --direct --get-all-rules
firewall-cmd --list-ports #查看开放端口
firewall-cmd --list-services #查看services
firewall-cmd --add-port=2375/tcp --zone=public --permanent #添加开放端口
- 四、防火墙相关操作
注:
1.需要在所有节点上执行。
2.nodeport端口,按需要进行增加配置即可。
10.Tools-文库怎么下载方法汇总
好了,以上就是我个人的实操了。可能有些不对,大家伙,轻点喷!!!
个人理解,可能也不够全面,班门弄斧了。
好了,今天就先到这里了!!!^_^
如果觉得有收获的,帮忙点赞、评论、收藏
一下,再走呗!!!