Linux运维问题汇总

会持续更新遇到的问题及解决方法。欢迎点赞加关注不迷路。

一、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&#39;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一下服务。





你可能感兴趣的:(linux,linux,运维,ssh)