Linux常用软件的安装及系统优化

Posted Sicc1107

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux常用软件的安装及系统优化相关的知识,希望对你有一定的参考价值。

linux 命令

ln -s #源文件 目表目录
/bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone  #修改时区
echo $(ifconfig eth0 | awk -F "[ :]+" '/inet /{print $3}')  #网卡IP
sed -n '/2020-10-15 09:55/,/2020-10-15 10:05/p' /home/lytlhsrv/logs/catalina.out #过滤日志

#查看当前TCP连接的状态和对应的连接数量:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

#连接数统计
sed -n '/15\\/Oct\\/2020:08:55/,/15\\/Oct\\/2020:09:05/p' /home/lytlhsrv/logs/localhost_access_log.2020-10-15.txt | awk '{i=$1;count[i]++}END{for(i in count)print(i,count[i])}' | egrep '235|165|166'

#linux 内存释放
sync; echo 1 > /proc/sys/vm/drop_caches     #仅清除页面缓存(PageCache)
sync; echo 2 > /proc/sys/vm/drop_caches   	#清除目录项和inode
sync; echo 3 > /proc/sys/vm/drop_caches     #清除页面缓存,目录项和inode

htop  #资源查看top 升级
mpstat -P ALL 5
pidstat -d 5 1
iostat 

#新服务器配置
uname -r
cat /etc/
cat /etc/redhat-release
yum -y install ntpdate                                #安装工具包
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime   #同步时区
TZ='Asia/Shanghai'; export TZ                         #修改时区 
ntpdate -u ntp1.aliyun.com                            #同步阿里云服务器时间
#常用工具
yum install net-tools lftp rsync psmisc vim bash-completion createrepo vsftpd lrzsz


docker快速启动 常用工具安装

docker run -d --restart=always -e TZ="Asia/Shanghai" --name omsrabbitmq -p 5672:5672 -p 15672:15672 rabbitmq 

docker run -d --restart=always -e TZ="Asia/Shanghai" --name mongo  -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=admin  -p 27017:27017 -v /home/robot/mongo:/data/db mongo

docker run -d --restart=always -e TZ="Asia/Shanghai" --name sredis -p 6379:6379 -v /home/redis:/data  docker.io/redis --requirepass "Hzlh2020" 

docker run -d --restart=always -e TZ="Asia/Shanghai" --name mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=Linker@2020s -e MYSQL_USER=hzlh -e MYSQL_PASSWORD=Hzlh2020  -v /home/robot/mysql:/var/lib/mysql rep.linker.cc/hzlh/mysql:5.7

docker run -d --restart=always -e TZ="Asia/Shanghai" --name nginx -p 80:80 -v /home/nginx/html:/usr/share/nginx/html -v /home/nginx/conf/:/etc/nginx/  -v /home/nginx/logs:/var/log/nginx nginx:latest

docker run -d --restart=always -e TZ="Asia/Shanghai" --name probot -p 18080:8080 -v /home/robot/public_html:/usr/local/tomcat-7.0.70/webapps -v /home/robot/logs:/usr/local/tomcat-7.0.70/logs tomcat7:v1 
################################################################
#JDK安装配置
tar -zxvf jdk-8u60-linux-x64.tar.gz
mv jdk1.8.0_60 /usr/local/

vim /etc/profile
 export JAVA_HOME=/usr/local/jdk1.8.0_60
 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
 export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
java -version
#################################################################
#redis安装配置
yum -y install gcc 
tar -zxvf redis-4.0.8.tar.gz
cd redis-4.0.8
make && make install

./utils/install_server.sh            软件开发着写好的 配置脚本 运行
#端口              6379
#主配置文件     /etc/redis/6379.conf
#日志文件        /var/log/redis_6379.log
#数据库目录     /var/lib/redis/6379
#服务启动程序  /usr/local/bin/redis-server
#命令行连接     /usr/local/bin/redis-cli

###############################################################
#tomcat安装配置
tar -zxvf apache-tomcat-7.0.96.tar.gz 
mv apache-tomcat-7.0.96 /usr/local/tomcat7
vim /etc/profile
 export TOMCAT_HOME=/usr/local/tomcat7
 export CATALINA_HOME=/usr/local/tomcat7
source /etc/profile
/usr/local/tomcat7/bin/startup.sh 
#################################################################
#docker gitlab git安装配置
docker pull gitlab/gitlab-ce

docker run -d  -p 443:443 -p 80:80 -p 222:22 --name gitlab --restart always -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce

按上面的方式,gitlab容器运行没问题,但在gitlab上创建项目的时候,
生成项目的URL访问地址是按容器的hostname来生成的,也就是容器的id。
作为gitlab服务器,我们需要一个固定的URL访问地址,
于是需要配置gitlab.rb(宿主机路径:/home/gitlab/config/gitlab.rb)。

# gitlab.rb文件内容默认全是注释
$ vim /home/gitlab/config/gitlab.rb

# 配置http协议所使用的访问地址,不加端口号默认为80
external_url 'http://192.168.199.231'

# 配置ssh协议所使用的访问地址和端口
gitlab_rails['gitlab_ssh_host'] = '192.168.199.231'
gitlab_rails['gitlab_shell_ssh_port'] = 222 # 此端口是run时22端口映射的222端口

#重启容器
docker restart gitlab
#此时项目的仓库地址就变了。如果ssh端口地址不是默认的22,就会加上ssh:// 协议头
#打开浏览器输入ip地址(因为我的gitlab端口为80,所以浏览器url不用输入端口号,
#如果端口号不是80,则打开为:ip:端口号)

#########################################################
#mongodb安装配置
tar zxf mongodb-linux-i686-1.8.2.tgz
mv mongodb-linux-i686-1.8.2 /usr/local/mongodb

#创建数据库文件夹与日志文件
mkdir /usr/local/mongodb/data
touch /usr/local/mongodb/logs

vim /usr/local/mongodb/mongo.conf
#数据库数据存放目录
dbpath=/usr/local/mongodb/data
#数据库日志存放目录
logpath=/usr/local/mongodb/logs/mongodb.log
#以追加的方式记录日志
logappend = true
#端口号 默认为27017
port=27017
#以后台方式运行进程
fork=true
#开启用户认证
auth=true
#关闭http接口,默认关闭http端口访问
#nohttpinterface=true
#mongodb所绑定的ip地址
#bind_ip = 127.0.0.1
#启用日志文件,默认启用
journal=true
#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
quiet=true

#######################################################
#nginx安装配置
yum -y install gcc pcre-devel zlib-devel openssl-devel
tar -xf nginx.tar.gz
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_ssl_module --with-stream --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --without-http_autoindex_module --without-http_ssi_module
make && make install 
yum -y install php php-fpm php-mysql

ansible

ansible couponlhsrv -m shell -a "docker stop couponlhsrv"
ansible lytlhsrv -m copy -a "src=shell/getlog.sh dest=/home/ mode=755"
ansible lytlhsrv -m shell -a "/home/getlog.sh"

for i in 10.27.235.155 10.27.235.156 10.27.235.157 10.27.166.233 10.27.166.234 10.27.166.235 10.27.166.236 10.27.166.237 10.27.166.238 10.27.166.239
do
scp root@$i:/home/$i.log ./
done

ansible gq -m shell -a "/usr/sbin/mkfs.ext4 /dev/vdb"
ansible gq -m shell -a "echo '/dev/vdb  /home  ext4    defaults    0 0' >> /etc/fstab"
ansible gq -m shell -a "mount -a"
ansible gq -m shell -a "mkdir /etc/yum.repos.d/bak" 
ansible gq -m shell -a "mv /etc/yum.repos.d/*.repo  /etc/yum.repos.d/bak/"
ansible gq -m copy -a "src=yum.repos.d dest=/etc/yum.repos.d"
ansible gq -m shell -a "yum clean all" 
ansible gq -m shell -a "yum repolist" 
ansible gq -m copy -a "src=soft/sysctl.conf dest=/etc/"
ansible gq -m shell -a "sysctl -p"
ansible gq -m copy -a "src=soft/daemon.json dest=/etc/docker/"
ansible gq -m shell -a " yum install -y docker-ce-3:19.03.13-3.el7 containerd.io "

mysql

myql 安装配置
yum install -y cmake bison bison-devel libaio-devel gcc gcc-c++ git ncurses-devel make
tar -xf mysql-5.7.20.tar.gz
tar -xf boost_1_59_0.tar.gz
mv boost_1_59_0.tar.gz mysql-5.7.20/boost
cd mysql-5.7.20
	
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.20 \\
-DMYSQL_DATADIR=/home/DB/mysql/data \\
-DMYSQL_UNIX_ADDR=/home/DB/mysql/mysql.sock \\
-DDOWNLOAD_BOOST=1 -DWITH_BOOST=./boost \\
-DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8mb4 \\
-DDEFAULT_COLLATION=utf8mb4_general_ci \\
-DWITH_EXTRA_CHARSETS=all \\
-DWITH_INNOBASE_STORAGE_ENGINE=1 \\
-DWITH_FEDERATED_STORAGE_ENGINE=1 \\
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \\
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \\
-DWITH_MYISAM_STORAGE_ENGINE=1 \\
-DWITH_ZLIB=bundled -DWITH_SSL=bundled \\
-DENABLED_LOCAL_INFILE=1 \\
-DWITH_EMBEDDED_SERVER=1 \\
-DENABLE_DOWNLOADS=1 \\
-DWITH_DEBUG=0 

make && make install

useradd -s /sbin/nologin mysql
mkdir -p /home/DB/mysql/data
mkdir -p /var/mysql/log
chown -R mysql.mysql /usr/local/mysql-5.7.20 /home/DB/mysql

/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql-5.7.20 --datadir=/home/DB/mysql/data
vim /etc/my.cnf
[client]
port=3306
socket=/home/DB/mysql/mysql.sock
[mysqld]
basedir=/usr/local/mysql-5.7.20
datadir=/home/DB/mysql/data
socket=/home/DB/mysql/mysql.sock
symbolic-links
log-error=/home/DB/mysql/log/error.log
pid-file=/home/DB/mysql/mysql.pid

character_set_server=utf8mb4
skip_name_resolve = 1            #禁止域名解析
max_connections = 800            # MySQL的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值
lower_case_table_names = 1       #表名不区分大小写 

[mysqld_safe]
log-error=/home/DB/mysql/error.log
pid-file=/home/DB/mysql/mysql.pid
basedir=/usr/local/mysql-5.7.20

cp /usr/local/mysql-5.7.20/support-files/mysql.server /etc/init.d/mysqld
echo 'PATH=/usr/local/mysql-5.7.20/bin/:$PATH' >>/etc/profile
source /etc/profile

touch /home/DB/mysql/error.log
chown mysql.mysql /home/DB/mysql/error.log
touch /home/DB/mysql/mysql.pid
chown mysql.mysql /home/DB/mysql/mysql.pid

/etc/init.d/mysqld start




show processlist;   #只列出前100条,如果想全列出请使用show full processlist; 

#显示当前mysql状态
mysqladmin -u<user> -p<pwd> -h<host> status
Uptime: 13131  Threads: 1  Questions: 22  Slow queries: 0  Opens: 16  Flush tables: 1  Open tables: 1  Queries per second avg: 0.1

show status
#Threads_connected  当前的连接数
#Connections  试图连接到(不管是否成功)MySQL服务器的连接数。
#Max_used_connections  服务器启动后已经同时使用的连接的最大数量。


show variables like '%max_connections%'; #这是是查询数据库当前设置的最大连接数
show global status like 'Thread%';
T#hreads_created表示创建过的线程数,通过查看Threads_created就可以查看MySQL服务器的进程状态。

show variables like 'thread_cache_size';
#如果我们在MySQL服务器配置文件中设置了thread_cache_size,当客户端断开之后,服务器处理此客户的线程将会缓存起来以响应下一个客户而不是销毁(前提是缓存数未达上限)。
#Threads_created表示创建过的线程数,如果发现Threads_created值过大的话,表明MySQL服务器一直在创建线程,这也是比较耗资源,可以适当增加配置文件中thread_cache_size值,查询服务器

show variables;



mysql优化


JAVA jar 包运行

# base image
FROM registry.cn-hangzhou.aliyuncs.com/akading/java:8-jre-alpine
# MAINTAINER
MAINTAINER yavst<ywj0327@126.com>
# change dir to /usr/local/
WORKDIR /usr/local/
ADD oms-server-0.0.1-SNAPSHOT.jar oms-server-0.0.1-SNAPSHOT.jar
# EXPOSE
EXPOSE 8080
ENTRYPOINT ["java","-jar","/usr/local/oms-server-0.0.1-SNAPSHOT.jar"]

#/bin/bash
#docker run -d --restart=always -e TZ="Asia/Shanghai" --name omsrabbitmq -p 5672:5672 -p 15672:15672 rabbitmq
#docker run -d --restart=always -e TZ="Asia/Shanghai" --name omsredis -p 6379:6379 -v /home/redis:/data  docker.io/redis --requirepass "Hzlh2020"
v=20210407_04
docker rm -f oms-server
wget http://dep.linker.cc/oms-server-0.0.1-SNAPSHOT.jar
docker build -t oms-server:${v} ./
docker run -itd -p 8995:8080 --restart=always  -e TZ="Asia/Shanghai" -v /home/oms-server/logs/:/usr/local/logs  --name oms-server oms-server:${v}
rm -rf oms-server-0.0.1-SNAPSHOT.jar

.net 程序docker 运行

.net docker 运行

vim vim startup.sh #启动脚本
#!/bin/bash
cd /usr/local/netapi
nohup dotnet LYT.VillagerMailboxApp.CoreApi.dll &
tail -f nohup.out

dockerfile
FROM registry.cn-hangzhou.aliyuncs.com/akading/dotnet:sdk3.1
MAINTAINER yavst<ywj0327@126.com>
WORKDIR /usr/local/
COPY rkpcapi ./rkpcapi
RUN chmod a+x /usr/local/rkpcapi/startup.sh
EXPOSE 5004
CMD [ "/usr/local/rkpcapi/startup.sh"]

#构建镜像
1 docker build -t jrfxapi:1 .
#启动
2 docker run -itd --name jrfxapi  -e TZ="Asia/Shanghai"  -p 5005:5005 -v /home/jrfxapi:/usr/local/jrfxapi jrfxapi:1

系统优化

#具体参考https://blog.csdn.net/qq_29677867/article/details/90048086
#高并发Linux内核参数优化
vim /etc/sysctl.conf
vm.swappiness = 0
    vm.max_map_count=262144
    ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1
    net.ipv6.conf.lo.disable_ipv6 = 1
vm.swappiness = 0
net.ipv4.neigh.default.gc_stale_time=120
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_announce=2


net.ipv4.tcp_synack_retries = 2
kernel.sysrq = 1
net.nf_conntrack_max = 655360
net.netfilter.nf_conntrack_tcp_timeout_established = 1200
net.ipv4.tcp_orphan_retries = 1
net.ipv4.tcp_max_orphans = 8192

#要知道端口的数量只有65535个,占用一个少一个,会严重的影响到后继的新连接。这种情况下,我们就有必要调整下Linux的TCP内核参数,让系统更快的释放TIME_WAIT连接
net.ipv4.tcp_syncookies = 1  #表示开启SYNCookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1  #表示开启TCP连接中TIME-WAITsockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_tw_reuse = 1    #表示开启重用。允许将TIME-WAITsockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_fin_timeout = 25   #修改系統默认的TIMEOUT 时间。 让系统更快的释放TIME_WAIT连接

#如果你的连接数本身就很多,我们可以再优化一下TCP的可使用端口范围,进一步提升服务器的并发能力。依然是往上面的参数文件中,加入下面这些配置
net.ipv4.ip_local_port_range = 1024 65535 #表示用于向外连接的端口范围。缺省情况下很小,改为1024到65535。
net.ipv4.tcp_keepalive_time= 1200	#表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
net.ipv4.tcp_max_tw_buckets = 5000 #表示系统同时保持TIME_WAIT的最大数量,如果超过这个数字,TIME_WAIT将立刻被清除并打印警告信息。默认为180000,改为5000。此项参数可以控制TIME_WAIT的最大数量,只要超出了。
net.ipv4.tcp_max_syn_backlog = 8192 #表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。


#文件打开数
ulimit –n 65535
vim /etc/security/limits.conf  #追加
* softnofile 65536
* hard nofile65536

镜像编排

#tomcat 镜像编排
vim Dockerfile
FROM myos:latest
MAINTAINER sichenhao<249708536@qq.com
#把java和tomocat添加到容器中
ADD jdk-8u60-linux-x64.tar.gz /usr/local/
	
#安装vim编辑器
RUN yum -y install vim
#设置登录时候workdir路径
ENV MYPATH /usr/local/
WORKDIR $MYPATH
#配置java和tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_60
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-7.0.96
ENV CATALINA_BASE /usr/local/apache-tomcat-7.0.96
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE 8080
#启动时运行tomcat
CMD /usr/local/apache-tomcat-7.0.96/bin/startup.sh && tail -f /usr/local/apache-tomcat-7.0.96/logs/catalina.out

以上是关于Linux常用软件的安装及系统优化的主要内容,如果未能解决你的问题,请参考以下文章

Linux常用软件的安装及系统优化

Linux基础系统优化及常用命令

详述Linux系统中Tomcat部署及优化

Linux运维每天都做啥工作

linux运维的工作内容都有啥

linux系统优化规范v1.0