开发的运维事情

297 阅读4分钟

[toc]

记录自己开发过程中,一些运维工作与命令,欢迎补充指错!

基础服务

如何开启22好端口

22端口bai是ssh服务的,你只要启动ssh服务就可以了,du可以执行命令“/etc/init.d/sshd start”。然后用netstat -antulp |zhi grep ssh看是否能看到相关信息就可dao以了。

netstat -aptn |grep 4000 查看端口q

Linux 网络配置方法 nmtui 配置

查看端口情况

1,lsof -i:端口号

lsof -i 用以显示符合条件的进程情况,lsof(list open files)是一个列出当前系统打开文件的工具。以root用户来执行lsof -i命令,如下图

lsof输出的每列的意义是:

COMMAND:进程的名称或者进程开启的方式

PID:进程id

USER:进程所有者

FD:文件描述符

TYPE:协议类型

DEVICE:端口号

SIZE/OFF:偏移

NODE:协议名

NAME:节点名

2,netstat -tunlp|grep 端口号

netstat -tunlp用于显示tcp,udp的端口和进程等相关情况,如下图

命令里的t,u,n,l,p均有不同含义:

-t 仅显示和tcp相关的

-u 仅显示和udp相关的

-n 不限时别名,能显示数字的全部转换为数字

-l 仅显示出于Listen(监听)状态的

-p 显示建立这些连接的程序名

防火墙

firewalld

1、firewalld的基本使用

启动: systemctl start firewalld

查看状态: systemctl status firewalld

停止: systemctl disable firewalld

禁用: systemctl stop firewalld   

2.systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。

启动一个服务:systemctl start firewalld.service 关闭一个服务:systemctlstop firewalld.service 重启一个服务:systemctlrestart firewalld.service 显示一个服务的状态:systemctlstatus firewalld.service 在开机时启用一个服务:systemctlenable firewalld.service 在开机时禁用一个服务:systemctldisable firewalld.service 查看服务是否开机启动:systemctlis-enabled firewalld.service 查看已启动的服务列表:systemctllist-unit-files|grep enabled 查看启动失败的服务列表:systemctl--failed   

3.配置firewalld-cmd

查看版本: firewall-cmd --version

查看帮助: firewall-cmd --help

显示状态: firewall-cmd --state

查看所有打开的端口: firewall-cmd--zone=public --list-ports

更新防火墙规则: firewall-cmd --reload

查看区域信息: firewall-cmd--get-active-zones

查看指定接口所属区域: firewall-cmd--get-zone-of-interface=eth0

拒绝所有包:firewall-cmd --panic-on

取消拒绝状态: firewall-cmd --panic-off

查看是否拒绝: firewall-cmd --query-panic   

那怎么开启一个端口呢

添加

1 firewall-cmd --zone=public --add-port=80/tcp --permanent (--permanent永久生效,没有此参数重启后失效)   

重新载入

1 firewall-cmd --reload   

查看

1 firewall-cmd --zone=public --query-port=80/tcp   

删除

1 firewall-cmd --zone=public --remove-port=80/tcp --permanent   

查看firewall是否运行,下面两个命令都可以

1 2 3 systemctl status firewalld.service

firewall-cmd --state   

查看当前开了哪些端口

其实一个服务对应一个端口,每个服务对应/usr/lib/firewalld/services下面一个xml文件。

1 firewall-cmd --list-services   

查看还有哪些服务可以打开

1 firewall-cmd --get-services   

查看所有打开的端口:

1 firewall-cmd --zone=public --list-ports   

更新防火墙规则:

1 firewall-cmd --reload

文件操作

显示当前目录 pwd

给文件附上可执行权限 chmod 777 tomcat.sh

vim

查找

一,全匹配:

1,从上往下查找,比如“string” : /string

2,从下往上查找,比如“string” : ?string

二,模糊匹配(正则表达式)

1,. :通配1个字符 ,如 匹配 server, 可以用 /se...r

2,* :通配多个字符,如 匹配 privilege,可以用 p*ge

三,快速查找

1, Shift + * :让光标停留在想要查找的单词的任意一个字母上面, 然后输入 Shift + * ,即可快速选中该单词,并且通过 n 或 N 进行上一个或下一个的匹配。

2,yw :让光标停留在单词的第一个字母上, 然后输入yw拷贝该单词, 然后输入 / (Ctrl + R) 0 (即 /”0),回车, 就查找到了第一个匹配的单词, 并且通过 n 或 N 进行上一个或下一个的匹配。

软件安装

服务配置

spring.druid配置

spring.datasource.druid.url=jdbc:mysql://dbv3.ruipos:3306/standard_cos_v3?useUnicode=true&zeroDateTimeBehavior=convertToNull&useSSL=true&characterEncoding=UTF-8&serverTimezone=Hongkong&autoReconnect=true
spring.datasource.druid.username=hyy
spring.datasource.druid.password=2$VbCtXALqq

#连接池属性
#连接池初始化大小、最大、最小
spring.datasource.druid.initial-size=1
spring.datasource.druid.max-active=100
spring.datasource.druid.min-idle=2
#连接最大时长 单位秒
spring.datasource.druid.max-wait=7200
#检查空闲连接的频率,单位毫秒, 非正整数时表示不进行检查
spring.datasource.druid.time-between-eviction-runs-millis=60000
#池中某个连接的空闲时长达到 N 毫秒后, 连接池在下次检查空闲连接时,将回收该连接,要小于防火墙超时设置
spring.datasource.druid.min-evictable-idle-time-millis=60000
#程序 申请 连接时,进行连接有效性检查(低效,影响性能)
spring.datasource.druid.test-on-borrow=false
#程序 返还 连接时,进行连接有效性检查(低效,影响性能)
spring.datasource.druid.test-on-return=false
#当程序请求连接,池在分配连接时,是否先检查该连接是否有效。(高效)	
spring.datasource.druid.test-while-idle=true
#检查池中的连接是否仍可用的 SQL 语句,drui会连接到数据库执行该SQL, 如果正常返回,则表示连接可用,否则表示连接不可用
spring.datasource.druid.validation-query=SELECT 1
spring.datasource.druid.validation-query-timeout=1000
#程序没有close连接且空闲时长超过minEvictableIdleTimeMillis,则会执行validationQuery指定的SQL,以保证该程序连接不会池kill掉,其范围不超过minIdle指定的连接个数。
spring.datasource.druid.keep-alive=true
#要求程序从池中get到连接后, N 秒后必须close,否则druid 会强制回收该连接,不管该连接中是活动还是空闲, 以防止进程不会进行close而霸占连接。
spring.datasource.druid.remove-abandoned=false
spring.datasource.druid.remove-abandoned-timeout=180
#当druid强制回收连接后,是否将stack trace 记录到日志中
spring.datasource.druid.log-abandoned=true
#缓存通过以下两个方法发起的SQL:public PreparedStatement prepareStatement(String sql) public PreparedStatement prepareStatement(String sql,int resultSetType, int resultSetConcurrency)
spring.datasource.druid.pool-prepared-statements=false
#每个连接最多缓存多少个SQL
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
#这里配置的是插件,常用的插件有:监控统计: filter:stat 日志监控: filter:log4j 或者 slf4j 防御SQL注入: filter:wall
spring.datasource.druid.filters=stat,wall,slf4j
#合并多个DruidDataSource的监控数据
spring.datasource.druid.use-global-data-source-stat=true
#连接属性。比如设置一些连接池统计方面的配置。
spring.datasource.druid.connect-properties.mergeSql=true
spring.datasource.druid.connect-properties.slowSqlMillis=5000

数据库

数据库备份与还原

备份
mysqldump -u username -p dbname [tbname ...]> filename.sql
还原
mysql -u username -P [dbname] < filename.sql

查询数据库超时配置

show variables like '%timeout%'

mysql查询、修改等命令导致进程卡住的时候

>show full processlist;    // 列出进程,找出处于waiting的process,要杀死这些process
>kill ID;            // ID号就是指的列出的第一列“Id”

查询慢sql

SELECT * FROM information_schema.PROCESSLIST WHERE length(info) > 0 ORDER BY TIME

添加用户、权限

创建用户

CREATE USER 'username'@'host' IDENTIFIED BY 'password';

username – 你将创建的用户名说明:

host – 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如 果想让该用户可以从任意远程主机登陆,可以使用通配符%

password – 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登 陆服务器

例子:

CREATE USER 'javacui'@'localhost' IDENTIFIED BY '123456'; 
CREATE USER 'javacui'@'172.20.0.0/255.255.0.0' IDENDIFIED BY '123456'; 
CREATE USER 'javacui'@'%' IDENTIFIED BY '123456'; 
CREATE USER 'javacui'@'%' IDENTIFIED BY ''; 
CREATE USER 'javacui'@'%';

授权

GRANT privileges ON databasename.tablename TO 'username'@'host'; privileges – 用户的操作权限,如SELECT , INSERT , UPDATE 等(详细列表见该文最后面).如果要授予所 的权限则使用ALL说明:

databasename – 数据库名

tablename-表名,如果要授予该用户对所有数据库和表的相应操作权限则可用* 表示, 如*.*

例子:

GRANT SELECT, INSERT ON test.user TO 'javacui'@'%'; 
GRANT ALL ON *.* TO 'javacui'@'%';
注意:用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;

设置与更改用户密码

SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');

如果是当前登陆用户用

SET PASSWORD = PASSWORD("newpassword");

撤销用户权限

REVOKE privilege ON databasename.tablename FROM 'username'@'host'; 例子说明: privilege, databasename, tablename – 同授权部分

REVOKE SELECT ON . FROM 'javacui'@'%'; 假如你在给用户’javacui’@'%’授权的时候是这样的(或类似 的):GRANT SELECT ON test.user TO ‘javacui’@'%’, 则在使用 REVOKE SELECT ON . FROM ‘javacui’@'%’;命令并不能撤销该用户对test数据库中user表的SELECT 操作注意:

相反,如果授权使用的是GRANT SELECT ON . TO ‘javacui’@'%’;则 REVOKE SELECT ON test.user FROM ‘javacui’@'%’;命令也不能撤销该用户对test数据库中user表的 Select 权限

具体信息可以用命令SHOW GRANTS FOR ‘javacui’@'%’; 查看

删除用户

DROP USER ‘username’@'host’;

操作后切记刷新数据库

flush privileges;

nginx

配置文件在 /etc/nginx

检查配置语法是否正确 nginx -t

重启让配置文件生效 nginx -s reload

java.lang.OutOfMemoryError: unable to create new native thread

查阅问题原因 blog.csdn.net/thwsir/arti…

有限制线程数的方法 blog.csdn.net/weixin_3967…

没有使用,优先业务支撑。

ulimit -u 查看服务器最大线程数

pstree -p|wc -l 查询当前线程情况

发现个别服务线程数到1300,记忆中正常情况应该300左右,重启后线程回落正常。

继续查资料,翻到这个讲根本原因的www.zhihu.com/question/64…

查看连接数

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉
netstat -antp | grep 80 | grep ESTABLISHED -c

ssh互通

给A机器生成公钥文件

ssh-keygen -t rsa cat ~/.ssh/id_rsa.pub

给B机器加上A的公钥,从而从B访问A不需要账号密码

在B机器上执行 vim ~/.ssh/authorized_keys chmod 755 ~/.ssh chmod 600 ~/.ssh/authorized_keys

给B机器加上A的公钥,另外一种方式

在A机器上执行 ssh ssh-copy-id root@192.168.1.101

异常情况

image.png 执行 ssh-keygen -f "/root/.ssh/known_hosts" -R 192.168.1.101

搭建k8s

配置网络

安装yum

yum install-y yum-utils

安装Docker

安装 Docker 官方源

sudo yum-config-manager \ --add-repo \ download.docker.com/linux/cento…

更新源 yum makecache fast

安装 yum install docker-ce