会持续更新遇到的问题及解决方法。欢迎点赞加关注不迷路。
一、Grafana 重置admin密码
1.查找grafana.db文件
find / -name "grafana.db"
PS:一般默认文件为/var/lib/grafana/grafana.db
2.使用sqlite3加载数据库文件
sqlite3 /var/lib/grafana/grafana.db
#.tables查看有那些表
.tables
#select查看表里面的内容
select * from user;
#使用update更新密码
update user set password = '59acf18b94d7eb0694c61e60ce44c110c7a683ac6a8f09580d626f90f4a242000746579358d77dd9e570e83fa24faa88a8a6', salt = 'F3FAxVm33R' where login = 'admin';
#修改完成后退出
.exit
3.update之后,账号密码将为admin/admin
二、Centos系统根目录满使用find / -size +1G大文件没有
这可能是文件删除了未释放内存,占用了很大空间
执行命令:
lsof -n | grep delete
然后kill掉进行ID
kill -9 ID
三、远程传送包报错‘authorized_keys’: Operation not permitted
ssh-copy-id -i ~/.ssh/id_rsa.pub root@xxx.xxx.xxx.xxx
查看.ssh目录下的文件结果看到authorized_keys文件权限为777
把权限修改回600却报错如下:
chmod: changing permissions of ‘authorized_keys’: Operation not permitted
加上 sudo 继续执行,还是报错!
sudo chmod 600 authorized_keys
一般来说,root 用户的权限是最大了,难道还有 root 用户操作不了的文件?
因为chmod 的底层实现是 chattr 命令,用此命的功能更为强大,甚至可以锁定文件,即使 root 用户也操作不了此文件
然后执行下面的命令查看当前文件属性,可以发现有 i 属性:
lsattr authorized_keys
----i--------e-- authorized_keys
说明此时的文件是被锁定的,任何用户都是修改不了的,那么我们就去掉这两个属性:
chattr -i authorized_keys
减号(-)代表去掉的意思,反之加号(+)代表增加的意思。
然后我们给文件加上600的权限,这样文件的属性就更改了
四、kafka问题:设置清理消息时间
log.retention.bytes=1073741824 #最大存储1G数据
log.retention.hours=12 #数据最多保存12小时
五、安装chattr命令:
yum -y install e2fsprogs
六、linux下批量将文件由windows格式转换为unix格式
for x in $(find . -TYPE f);do dos2unix $x $x;done
七、k8s ingress高级配置,动态修改上传文件大小限制参数client_max_body_size
问题描述:在配置内网服务映射到外网域名提供外面访问时,提示上传文件过大
解决方法:针对单个ingress
[root@master24 021-sonarqube]# cat sonarqube-nginx.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: sonarqube
namespace: default
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: "5M"
spec:
rules:
- host: tests.sonar.com
http:
paths:
- backend:
serviceName: sonarqube
servicePort: 9000
path: /
前提:
注意到nginx.ingress.kubernetes.io为ingress-nginx的启动参数的设置
--annotations-prefix=nginx.ingress.kubernetes.io
针对所有ingress
八、linux配置jdk环境出现错误:/usr/libexec/grepconf.sh: line 5: grep: command not found 的解决办法
针对于在 etc下profile文档配置环境的解决办法
1.解决方法如下:输入export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin并进行source(可以保证命令行暂时使用)
2.此时再通过vi /etc/profile已经可以再次进入配置jdk环境的文档
九、Centos7服务器TCP连接数过高
查看CLOSE_WAIT:netstat -antp | grep CLOSE_WAIT
然后kill掉,重启服务即可。
十、查看内存信息
cat /proc/meminfo
核心数计算说明
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq
查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l
查看CPU信息(型号)
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
十一、搭建skywalking时,elaticsearch填坑记录
在启动skywalking后,添加的服务达到一定数量的时候,发现skywalking的ui界面查不到数据。
尝试升级了skywalking的版本之后在短期内可以看到效果,但过了一段时间之后又查不到数据了。
报错日志:
Suppressed: org.elasticsearch.client.ResponseException: method [POST], host [http://127.0.0.1:9200], URI [/service_instance_inventory/type/6_tcc-app-gateway-77b98ff6ff-crblx.cards_0_0/_update?refresh=true&timeout=1m], status line [HTTP/1.1 429 Too Many Requests]
{"error":{"root_cause":[{"type":"remote_transport_exception","reason":"[elasticsearch-0][10.16.9.130:9300][indices:data/write/update[s]]"}],"type":"es_rejected_execution_exception","reason":"rejected execution of org.elasticsearch.transport.TransportService$7@19a5cf02 on EsThreadPoolExecutor[name = elasticsearch-0/write, queue capacity = 200, org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor@389297ad[Running, pool size = 2, active threads = 2, queued tasks = 200, completed tasks = 147611]]"},"status":429}
at org.elasticsearch.client.RestClient$SyncResponseListener.get(RestClient.java:705) ~[elasticsearch-rest-client-6.3.2.jar:6.3.2]
at org.elasticsearch.client.RestClient.performRequest(RestClient.java:235) ~[elasticsearch-rest-client-6.3.2.jar:6.3.2]
at org.elasticsearch.client.RestClient.performRequest(RestClient.java:198) ~[elasticsearch-rest-client-6.3.2.jar:6.3.2]
at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:522) ~[elasticsearch
解决方案:
Skywalking选择ElasticSearch存储中可能会遇到以下错误,错误代码429。或者ElasticSearch性能问题
将一下的配置添加 elasticsearch.yml ,根据环境自定修改参数。
#在跟踪方案中,请考虑至少设置更多。
thread_pool.index.queue_size: 500
thread_pool.write.queue_size: 500
十二、解决ORA-00020:maximum number of processes (150) exceeded 错误
执行连接oracle命令
sqlplus "/as sysdba"
连接SQL,如果出错导致无法连接,可以用以下两种方法重启Oracle,
(1)杀死所有oracle进程
$ ps -ef |grep $ORACLE_SID|grep -v grep|awk '{print $2}' | xargs kill -9
$ ipcs -m | grep oracle | awk '{print $2}' | xargs ipcrm shm
(2)重启服务器
(3) 查看修改oracle的最大连接数sessions和最大线程数processes
修改最大线程数
show parameter sessions
alter system set sessions=335 scope=spfile;
修改最大连接数
show parameter processes
alter system set processes=300 scope=spfile;
十三、nginx配置报错问题
1. Upstream timed out (110: Connection timed out) while reading response header from upstream
这种情况主要在下面两种情况下发生:
a. Nginx 作为 proxy,需要适当的调整 proxy timeout 的值。
location / {
...
proxy_connect_timeout 300;
proxy_read_timeout 300;
proxy_send_timeout 300;
...
}
b. Nginx作为 php-fpm 等其他的有上游服务,需要适当的调整 fastcgi_read_timeout 选项值
location ~* .php$ {
include fastcgi_params;
fastcgi_index index.php;
fastcgi_read_timeout 150;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
2. open() “/usr/local/nginx/html/favicon.ico” failed (2: No such file or directory)
只需要关闭 favicon.ico 的 log:
location = /favicon.ico {
log_not_found off;
access_log off;
}
十四、CentOS 7搭建GitLab服务器踩坑——解决Whoops, GitLab is taking too much time to respond 502 错误
external_url改成了服务器的ip和开放的端口号,端口号在防火墙上也开了,但是在服务器上访问时却报了502错误
决方案
折腾了好久,最后终于找到了解决的方法
1.首先vim /etc/gitlab/gitlab.rb打开配置文件
2.修改配置
找到如下配置项,原来是用#注释的,把前面的#去掉取消注释,原来的默认端口号应该是8080,改成你自己想要的端口号,比如8099
注意新配置的端口号不要被其他进程占用,且要在防火墙设置放开
以下两项新配置的端口号需一致
之所以报502这个错误就是原来默认配置的8080端口号被其他应用占用冲突了,只需换成其他新的端口号就可以了
unicorn['port'] = 8099
gitlab_workhorse['auth_backend'] = "http://localhost:8099"
3.输入如下命令让配置生效
sudo gitlab-ctl reconfigure
4.重启服务即可。sudo gitlab-ctl restart
十五、Nexus3问题
1、Nexus max file descriptors
解决方法
# 配置 nexus 的 nofile 为65536
$ echo "nexus - nofile 65536" >> /etc/security/limits.conf
# 重启 nexus 生效
$ ./nexus3/nexus-3.12.1-01/bin/nexus restart
2、Detected execution as "root" user. This is NOT recommended!
# 启动 nexus,报错警告
$ ./nexus start
WARNING: ************************************************************
WARNING: Detected execution as "root" user. This is NOT recommended!
WARNING: ************************************************************
Starting nexus
解决方法
# 在 bin 目录下创建 nexus.rc
$ echo "run_as_user=nexus" > /home/nexus/nexus3/nexus-3.12.1-01/bin/nexus.rc
十七、MySQL5.7插入数据及修改表报错
ERROR 1874 (HY000): InnoDB is in read only mode.
mysql掉电,文件损坏,在恢复过程中,遇到表只读
解决方法:
修改MySQL配置文件my.cnf
注释这个参数:innodb_force_recovery
PS:innodb_force_recovery可以设置为1-6,大的数字包含前面所有数字的影响,当设置参数值大于0后,可以对表进行select,create,drop操作,但insert,update或delete这类操作是不允许的。
十八、docker操作批量
批量停止、删除docker容器
批量停止
根据NAMES停止所有容器
docker stop `docker ps | awk 'NR!=1{print $NF}'`
根据CONTAINER ID停止所有容器
docker stop `docker ps | awk 'NR!=1{print $1}'`
批量删除
根据NAMES删除所有容器
docker rm `docker ps -a | awk 'NR!=1{print $NF}'`
根据CONTAINER ID删除所有容器
docker rm `docker ps -a | awk 'NR!=1{print $1}'`
十九、在 k8s 中配置域名解析
方法1:修改容器的 hosts
设想:把 hosts 文件内容存储在 configmap 中,通过 volume 绑定到 /etc/hosts。但很不幸,/etc/hosts 被 k8s 征用了,无法修改。
但 k8s 给我们提供了 hostAliases 来解决此问题。
apiVersion: apps/v1
kind: Deployment
metadata:
name: hosts-append
labels:
app: hosts-append
spec:
replicas: 1
selector:
matchLabels:
app: hosts-append
template:
metadata:
labels:
app: hosts-append
spec:
hostAliases:
- ip: "127.0.0.1"
hostnames:
- "foo.local"
- "bar.local"
- ip: "10.1.2.3"
hostnames:
- "foo.remote"
- "bar.remote"
containers:
- image: nginx:alpine
name: hosts-append
ports:
- containerPort: 80
protocol: TCP
部署后,pod 里面的 hosts 文件已经追加了解析记录。结果如下:
$ kubectl exec hosts-append-5576848dcf-jnt4s -- cat /etc/hosts
# Kubernetes-managed hosts file.
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
10.4.0.224 hostbiza-5576848dcf-jnt4s
# Entries added by HostAliases.
127.0.0.1 foo.local bar.local
10.1.2.3 foo.remote bar.remote
此方法的缺点是:不同环境下的域名映射是不一样的,我必须为环境编写不同的 yaml 文件。
方法2:使用私有dns解析
k8s 内部默认已经安装了 coredns 服务,可以通过修改 coredns 的配置来达到内部解析的目的。
coredns 的配置写在了 configmap 的 kube-system 命名空间下的 coredns 配置节点了。只需要增加 hosts 配置节点就好。
编辑他:
kubectl edit cm -n kube-system coredns
1
Corefile 配置示例(其中 hosts 节点是自定义的解析节点):
.:53 {
errors
health
kubernetes cluster.local. in-addr.arpa ip6.arpa {
pods insecure
upstream
fallthrough in-addr.arpa ip6.arpa
}
hosts {
127.0.0.1 foo.local
8.8.8.8 foo.remote
fallthrough
}
prometheus :9153
proxy . /etc/resolv.conf
cache 30
reload
loadbalance
}
修改完成后,要等等。配置下发完成即可生效。可以进入 pod 内部 ping 一下域名看看。
在一般的控制台,这个节点无法修改。但借助命令行 kubectl 或者其他可视化工具(如 Lens),可以修改这个配置节点。
至于开发环境下的域名解析,自己改本机 hosts 就好啦。
当然,更好的做法是把配置文件与应用解耦,所有的配置,包括远程服务的域名或 ip 都可以被远程修改。
二十、K8s 删除命名空间 namespace ,命令空间会一直 terminating
比如说 kubectl delete istio-operator 命名空间后,一直处于 terminating 。。。
kubectl get ns istio-operator -o json > delete-ns.json
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"labels\":{\"install.operator.istio.io/owning-resource\":\"\",\"istio-injection\":\"disabled\",\"istio-operator-managed\":\"Reconcile\",\"operator.istio.io/component\":\"IstioOperator\",\"operator.istio.io/managed\":\"Reconcile\",\"operator.istio.io/version\":\"1.6.0\"},\"name\":\"istio-operator\"}}\n"
},
"creationTimestamp": "2020-07-22T07:40:17Z",
"labels": {
"install.operator.istio.io/owning-resource": "",
"istio-injection": "disabled",
"istio-operator-managed": "Reconcile",
"operator.istio.io/component": "IstioOperator",
"operator.istio.io/managed": "Reconcile",
"operator.istio.io/version": "1.6.0"
},
"name": "istio-operator",
"resourceVersion": "176004",
"selfLink": "/api/v1/namespaces/istio-operator",
"uid": "0d14ab93-14b1-4aa8-98a5-450bb5b84ae1"
},
"spec": {
"finalizers": [
"kubernetes"
]
},
"status": {
"phase": "Active"
}
}
将 spec 中的内容清空
在一个终端 kubectl proxy 开启代理 :kubectl proxy --port=8081(注意:查看是否存在8081端口占用,可以换没有占用的端口)
curl -k -H "Content-Type: application/json" -X PUT --data-binary @delete-ns.json http://127.0.0.1:8081/api/v1/namespaces/istio-operator/finalize
然后命令空间就会被删除啦
二十一、Cassandra读写timeout的配置解决
问题现象:程序异常如下:Caused by: com.datastax.driver.core.exceptions.WriteTimeoutException: Cassandra timeout during write query at consistency LOCAL_ONE (1 replica were required but only 0 acknowledged the write)
原因很显然是coordinator,就是node没有及时响应写完成
解决方法无外乎,减少数据量,提高超时时间
在cassandra.yaml里
# How long the coordinator should wait for writes to complete
write_request_timeout_in_ms: 2000
# How long the coordinator should wait for counter writes to complete
counter_write_request_timeout_in_ms: 5000
将这2项都调大,默认是2s和5s,我这里调大为20s和50s
调整后,重启节点生效
sudo systemctl restart cassandra
二十二、Centos7升级Jenkins版本
查看rpm安装的,rpm -ql jenkins,查看jenkins.war包并备份一下
然后点击系统管理进行升级
问题现象:Jenkins升级后无法正常启动(java.lang.IllegalStateException: An attempt to save the global configuration
java.lang.IllegalStateException: An attempt to save the global configuration was made before it was loaded
at jenkins.model.Jenkins.save(Jenkins.java:3379)
at jenkins.model.Jenkins.saveQuietly(Jenkins.java:3398)
at jenkins.model.Jenkins.setSecurityRealm(Jenkins.java:2637)
at jenkins.model.Jenkins$16.run(Jenkins.java:3342)
at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:169)
at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:296)
at jenkins.model.Jenkins$5.runTask(Jenkins.java:1129)
at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:214)
at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117)
at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:68)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused: org.jvnet.hudson.reactor.ReactorException
at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:282)
at jenkins.InitReactorRunner.run(InitReactorRunner.java:50)
at jenkins.model.Jenkins.executeReactor(Jenkins.java:1162)
at jenkins.model.Jenkins.<init>(Jenkins.java:962)
at hudson.model.Hudson.<init>(Hudson.java:85)
at hudson.model.Hudson.<init>(Hudson.java:81)
at hudson.WebAppMain$3.run(WebAppMain.java:295)
Caused: hudson.util.HudsonFailedToLoad
at hudson.WebAppMain$3.run(WebAppMain.java:312)
解决方法
下载hpi文件,并将其放到JENKINS_HOME/plugins文件夹。jenkins plugin文件夹一般在下面位置:/var/lib/jenkins/plugins/。
Role strategy hpi plugin的下载链接为
https://updates.jenkins.io/latest/role-strategy.hpi
文件放置妥当以后重启jenkins服务
systemctl restart jenkins
二十三、/tmp目录的清理规则主要取决于/usr/lib/tmpfiles.d/tmp.conf文件的设定,默认的配置内容为:
我们可以配置这个文件,比如你不想让系统自动清理/tmp下以tomcat开头的目录,那么增加下面这条内容到配置文件中即可:
x /tmp/tomcat.*
二十四、无法启动Cassandra-Snitch的数据中心与上一个不同(Cannot start Cassandra - Snitch's Datacenter Differs from Previous)
If you are using GossipingPropertyFileSnitch, start Cassandra with the option
-Dcassandra.ignore_dc=true
If it starts successfully, execute:
nodetool repair
nodetool cleanup
之后,Cassandra应该可以正常启动而无需使用ignore选项。
二十五、Centos7最大进程数
vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
vi /etc/security/limits.d/20-nproc.conf
* soft nproc 65535
二十六、Centos7安装docker(报错:container-selinux >= 2:2.74)
step 1: 安装必要的一些系统工具
yum install -y yum-utils device-mapper-persistent-data lvm2
Step 2: 添加软件源信息
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Step 3: 安装 Docker-CE
yum -y install docker-ce
Step 4: 开启Docker服务
systemctl restart docker
systemctl enable docker
安装docker时报container-selinux >= 2.9错误
如果安装docker时出现了以下错误
Error: Package: containerd.io-1.2.13-3.2.el7.x86_64 (docker-ce-stable)
Requires: container-selinux >= 2:2.74
Error: Package: 3:docker-ce-18.09.9.el7.x86_64 (docker-ce-stable)
Requires: container-selinux >= 2:2.74
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
这个报错是container-selinux版本低或者是没安装的原因
yum 安装container-selinux 一般的yum源又找不到这个包
需要安装epel源 才能yum安装container-selinux
然后在安装docker-ce就可以了。
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum install epel-release
yum makecache
yum install container-selinux
二十七、Centos7安装依赖socat时yum源找不到安装包
到这里下载: http://repo.iotti.biz/
使用yum localinstall -y socat-1.7.3.2-5.el7.lux.x86_64.rpm
二十八、redis安全问题漏洞
Redis服务存在CONFIG命令配置未被修改
修复建议
将Redis配置文件中rename-command CONFIG 配置项更改为其他内容
rename-command CONFIG CHANGE // 将CONFIG命令重命名为CHANGE,在 Redis 中可以使用 CONFIG 命令来修改配置
rename-command CONFIG "" // 禁用CONFIG命令,要么禁用要么重命名,只能配置其中一种
二十九、nginx反向代理Authorization请求头问题解决
在前后端分离的开发中使用nginx做反向代理去请求服务器地址时,发现自定义的header请求头Authorization信息丢失了,在网上找了很多资料都不是我所需要的,现解决后记录如下:
修改nginx的nginx.conf配置文件,添加如下所示内容。
add_header Access-Control-Allow-Readers Authorization;
然后重新reload一下服务。