标签归档:Centos 7

Centos 7利用内存优化磁盘缓存读写速度

Linux中的/dev/shm目录不属于磁盘,而是内存,如果使用/dev/shm/目录作为Linux中的磁盘文件读写缓存,可想效率是非常惊人的。

默认/dev/shm目录没有挂载,需要手动进行挂载。

在以下文件尾端添加以下内容:

$ vim /etc/fstab
tmps /dev/shm tmpfs defaults,size=1G 0 0

请根据自己的物理内存大小添加,一般是物理内存的10-50%左右。

挂载/dev/shm/目录:

$ mount -o remount /dev/shm/
$ mkdir /dev/shm/tmp
$ chmod 755 /dev/shm/tmp
$ mount -B /dev/shm/tmp /tmp

注意:

/dev/shm/tmp在系统重启后会丢失挂载,需要重新设置挂载,下面有个shell脚本,你加入开机自启即可:

$ vim /etc/init.d/shmtmp.sh
#!/bin/bash
mkdir /dev/shm/tmp
chmod 755 /dev/shm/tmp
mount -B /dev/shm/tmp/ /tmp

之后再以下文件末尾添加如下内容:

$ vim /etc/rc.local
sh /etc/init.d/shmtmp.sh

这样就实现了重启自动挂载。你就可以利用内存提高读写性能,例如:将php的session,以及其他的缓存放在/tmp目录下,速度效率成倍提升。

Centos 7如何备份和还原Redis数据

何为Redis?

Redis是内存中的键值缓存和存储(即数据库),也可以永久保存到磁盘。在本文中,你将了解,如何在Centos 7上备份还原您的redis数据库。

备份还原说明

默认情况下,Redis数据将保存到磁盘中的.rdb文件中,该文件是Redis数据集的时间点快照。快照是按照指定的时间间隔进行的,所以对于备份来说是完美的。

1.数据备份篇

在Centos 7和其他Linux发行版中,Redis数据库目录默认是/var/lib/redis。但是,如果您更改了redis存储位置,则可以通过键入以下命令查找:

[root@renwolecom ~]# find / -name *rdb

使用redis-cli管理工具进入数据库:

[root@renwolecom ~]# redis-cli

由于大部分数据都运行在内存中,redis只会每隔一段时间保存一次,为获取最新副本,请执行以下命令:

10.10.204.64:6379> save
OK
(1.02s)

另外,如果Redis设置了用户认证,就需要先验证,再保存,例如:

10.10.204.64:6379> auth RenwoleQxl5qpKHrh9khuTW
10.10.204.64:6379> save

之后进行备份即可,例如:

[root@renwolecom ~]# cp /var/lib/redis/dump.rdb /apps/redis-backup-20180129

2.数据还原篇

恢复备份需要您使用恢复文件替换现有的Redis数据库文件。为保证原始数据文件不被破坏,我们建议尽可能恢复到新的Redis服务器。

停止Redis数据库,一旦停止,Redis数据库处于脱机状态。

[root@renwolecom ~]# systemctl stop redis

如果恢复到原始Redis服务器,请重命名当前数据文件,之后再进行恢复:

[root@renwolecom ~]# mv /var/lib/redis/dump.rdb /var/lib/redis/dump.rdb.old
[root@renwolecom ~]# cp -p /apps/redis-backup-20180129/dump.rdb /var/lib/redis/dump.rdb

设置dump.rdb文件权限,拷贝过来的数据文件,可能不具备Redis用户及读取权限,需要手动赋予:

[root@renwolecom ~]# chown redis:redis /var/lib/redis/dump.rdb
[root@renwolecom ~]# chmod 660 /var/lib/redis/dump.rdb

启动redis

[root@renwolecom ~]# systemctl start redis

大功告成!现在你可以登录redis核实数据了。

注意说明:

根据需求,关闭AOF,AOF跟踪每个写操作到Redis数据库。由于我们试图从时间点备份中恢复,所以我们不希望Redis重新创建存储在其AOF文件中的操作。

是否开启AOF可以通过查看文件获悉:

[root@renwolecom ~]# ls /var/lib/redis/

如果看到.aof后缀的文件,说明你启用了AOF。

重命名.aof文件,

[root@renwolecom ~]# mv /var/lib/redis/*.aof /var/lib/redis/appendonly.aof.old

如果有多个.aof文件,请单独命名。

编辑你的Redis配置文件暂时关闭AOF:

[root@renwolecom ~]# vim /etc/redis/redis.conf
appendonly no

如果备份期间有任何疑问,欢迎留言。

keepalived 源代码编译安装及配置文件讲解

何为Keepalived?

Keepalived是一个基于vrrp协议来实现的服务器高可用解决方案,可以利用其实现避免IP单点故障,类似的工具还有heartbeat、corosync。不过其不会单独出现,而是搭配着 LVS、Nginx、HAproxy,一起协同工作达到高可用的目的。

何为VRRP协议?

VRRP全称Vritual Router Redundancy Protocol,虚拟路由冗余协议。通过把几台提供路由功能的设备组成一个虚拟路由设备,使用一定的机制保证虚拟路由的高可用,从而达到保持业务的连续性与可靠性。

在配置组成的一个虚拟路由器中,有MASTER和BACKUP之分。MASTER是主节点,在一个虚拟路由器中,只能有一个MASTER,但可以有多个BACKUP,BACKUP是备用节点,也就是当master挂掉之后,BACKUP接管MASTER节点的所有资源,当有多个BACKUP节点时,根据其priority(优先级)的值的大小,来选举谁作为MASTER的替代者。当BACKUP节点的优先级值相同时,根据其IP地址的大小,来决定。

先决条件:

  • 节点之间的时间必须同步。
  • 确保FirewalldSELinux不会成为阻碍。
  • 各节点用于集群服务的网络接口必须支持MULTICAST(多播)通信。采用D类地址(224-239)。多播地址建议手动定义,因为若有多个集群服务都使用默认的,虽有认证机制,但仍会互发信息,可能会影响性能,更会产生无用日志信息。

1.时间同步

请参阅《Centos 7 Chrony 设置服务器集群系统时间同步》。

2.Firewalld防火墙配置

$ firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface eth0 --destination 224.0.0.111 --protocol vrrp -j ACCEPT
$ firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --out-interface eth0 --destination 224.0.0.111 --protocol vrrp -j ACCEPT
$ firewall-cmd --reload

3.开启路由转发

$ echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf
$ echo 1 > /proc/sys/net/ipv4/ip_forward

4.安装keepalived

$ cd /tmp
$ wget //www.keepalived.org/software/keepalived-1.3.9.tar.gz
$ tar xvf keepalived-1.3.9.tar.gz
$ cd keepalived-1.3.9
$ ./configure --prefix=/usr/local/keepalived
$ make && make install
$ ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin
$ mkdir /etc/keepalived/
$ ln -s /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

在安装过程中可能出现以下错误:

可能报错1:

checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: in `/tmp/keepalived-1.3.9':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details

解决方案:

$ yum install gcc -y

可能报错2:

configure: error:
!!! OpenSSL is not properly installed on your system. !!!
!!! Can not include OpenSSL headers files.            !!!

解决方案:

$ yum install openssl-devel -y

可能报错3:

*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.

解决方案:

$ yum install libnl-devel

可能报错4:

checking libnfnetlink/libnfnetlink.h usability... no
checking libnfnetlink/libnfnetlink.h presence... no
checking for libnfnetlink/libnfnetlink.h... no
configure: error: libnfnetlink headers missing

解决方案:

$ yum install libnfnetlink-devel -y

安装总结:

一个最小化安装的Centos 7系统,在源代码编译安装keepalived时,首先安装以下依赖包,再编译安装keepalived就不会出现以上错误了。

安装依赖包:

$ yum install gcc openssl-devel libnl-devel libnfnetlink-devel ipvsadm -y

5.keepalived配置文件讲解

# 全局配置,包含两个子配置块:全局定义和静态地址和路由。

! Configuration File for keepalived
global_defs {               # 全局定义
   notification_email {     # 通知邮件相关设置
    acassen@firewall.loc    # 邮件发送目标地址
   }
   notification_email_from rwl@renwole.com  # 发件人
   smtp_server 127.0.0.1    # 使用本机邮件服务
   smtp_connect_timeout 30  # 设置连接smtp server的超时时间
   router_id LVS_DEVEL      # 标识当前节点唯一,节点间不能相同
   # 检查vrrp报文中的所有地址比较耗时
   # 设置此标志的意思是如果接收的到报文和上一个报文来至同一个路由器,则不执行检查。默认是跳过检查
   vrrp_skip_check_adv_addr
   vrrp_strict              # 严格执行VRRP协议规范,此模式不支持节点单播
   # 小数类型,单位秒。
   # 在一个网卡上每组gratuitous arp消息之间的延迟时间。
   # 默认为0,一个发送的消息=n组 arp报文
   vrrp_garp_interval 0
   # 小数类型,单位秒
   # 在一个网卡上每组na消息之间的延迟时间,默认为0
   vrrp_gna_interval 0
}

# 此区域是VRRP配置,含两个子配置块:vrrp_sync_group/vrrp_instance,主要对外提供服务VIP区域及其相关属性

vrrp_instance VI_1 {     # VRRP实例
    state MASTER         # 只能有一个是MASTER,余下的都应该为BACKUP;
    interface eth1	 # 对外提供网络的接口
    virtual_router_id 65 # 虚拟路由id标识,数字,必须和backup里相同
    priority 100         # 优先级,数字必须比backup大
    advert_int 1         # 组播信息发送间隔,两个节点设置必须一样,秒
    authentication {	 # 设置验证信息,两个节点必须一致(明文)
        auth_type PASS
        auth_pass 1111
    }
	# 虚拟地址,即Floating IP
    virtual_ipaddress {  # 可简写为单个地址,系统会默认计算掩码和设备
	
        172.16.28.65
	# 172.16.28.65/24
        # 172.16.28.65/24 dev eth1
    }
	# 定义通知脚本(另添加)
        notify_master "/usr/local/keepalived/etc/keepalived/notify.sh master"
        notify_backup "/usr/local/keepalived/etc/keepalived/notify.sh backup"
        notify_fault "/usr/local/keepalived/etc/keepalived/notify.sh fault"
}

# 此区域是LVS配置。若用Keepalived+LVS,需要这段配置,若用其他,例如:Keepalived+Nginx,则无需配置。
# LVS包含两个子配置块:virtual_server_group/virtual_server
# virtual_server:虚拟服务器。每个虚拟服务器里面包含多个真实服务器real_server。

virtual_server 172.16.28.65 80 {  # 虚拟IP 监听80端口
    delay_loop 6		  # 健康检查时间间隔,秒
    lb_algo rr		          # 负载调度算法,常见使用wlc或rr
    lb_kind NAT		          # LVS负载转发规则,DR,NAT,TUN等
    persistence_timeout 50        # 会话保持时间,秒
    protocol TCP		  # 转发协议一般有tcp和udp两种

    real_server 172.16.28.65 80 { # 配置真实服务器的地址与端口
        weight 1		  # 权重
        SSL_GET {
            url {
              path /		  # 健康检查的页面
              digest ff20ad2481f97b1754ef3e12ecd3a9cc # 计算出的MD5值
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3     # 连接超时时间,秒
            nb_get_retry 3	  # 失败重试次数,超过后移除
            delay_before_retry 3  # 失败重试间隔,秒
        }
    }
}
...

6.启动keepalived

在正确配置完keepalived.conf后,就可以启动keepalived,并且加入开机自启动服务。

$ systemctl start keepalived
$ systemctl enable keepalived

keepalived源码编译安装完毕。

说明:此文章主要介绍何为Keepalived及如何安装keepalived与注解keepalived的配置文件作用,无具体实验或生产配置。

欲了解生产环境中的keepalived各种模式配置,请参阅以下文章:

Keepalived单网络主备单主配置模式(实战)
Keepalived单网络双活双主配置模式
Keepalived双网络(内外网)故障非同步漂移主备单主模式
Keepalived双网络(内外网)故障同步漂移主备单主模式
Keepalived双网络(内外网)故障非同步漂移双活双主模式
Keepalived双网络(内外网)故障同步漂移双活双主模式

CentOS Linux 7.7 1908 x86 64 ISO 官方原版镜像下载

适用于 x86_64 架构:
CentOS-7-x86_64-DVD-1908.iso                       11-Sep-2019 18:51      4G
CentOS-7-x86_64-DVD-1908.torrent                   17-Sep-2019 12:39     87K
CentOS-7-x86_64-Everything-1908.iso                09-Sep-2019 19:09     10G
CentOS-7-x86_64-Everything-1908.torrent            17-Sep-2019 12:38    103K
CentOS-7-x86_64-LiveGNOME-1908.iso                 16-Sep-2019 18:57      1G
CentOS-7-x86_64-LiveGNOME-1908.torrent             17-Sep-2019 12:39     29K
CentOS-7-x86_64-LiveKDE-1908.iso                   16-Sep-2019 19:27      2G
CentOS-7-x86_64-LiveKDE-1908.torrent               17-Sep-2019 12:39     38K
CentOS-7-x86_64-Minimal-1908.iso                   11-Sep-2019 19:04    942M
CentOS-7-x86_64-Minimal-1908.torrent               17-Sep-2019 12:39     37K
CentOS-7-x86_64-NetInstall-1908.iso                06-Sep-2019 11:49    552M
CentOS-7-x86_64-NetInstall-1908.torrent            17-Sep-2019 12:39     22K
版本说明:

DVD:        # 标准安装镜像,一般常用。
Minimal:    # 最小安装镜像,自带的软件最少。
Everything: # 标准的基础上集成所有软件,镜像最大。
NetInstall: # 网络安装镜像,包小,但需联网才能安装。
更多版本请参阅下载 CentOS ISO》。

CentOS 7系统开启BBR拥塞算法优化TCP加速服务器网络

介绍:

BBR是Google在2016年9月份开源的一个优化网络拥堵的算法。类似于锐速、Zetatcp、Finalspeed等,BBR也是通过单边优化TCP从而在同样的网络环境下更加高效的利用带宽和降低延迟。介于Google强大的开发背景和Linux4.9内核对BBR的引入,BBR是必会成为未来网络加速的首选方案。本人实测GigsGigs新加坡的服务器在开启BBR后,速度从3MB/s左右提高到了20MB/s左右,效果明显。下面就介绍如何在Centos7系统环境下开启BBR。

1.更新系统(主要将系统的软件包更新到最新):

$ yum update -y

2.安装最新的Linux内核(我是直接使用Elrepo编译好的内核进行安装):

$ rpm --import //www.elrepo.org/RPM-GPG-KEY-elrepo.org
$ rpm -Uvh //www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
$ yum --enablerepo=elrepo-kernel install kernel-ml

3.查看当前已安装的内核:

$ awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

系统会返回类似结果:

0 : CentOS Linux (4.13.9-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-693.5.2.el7.x86_64) 7 (Core)
2 : CentOS Linux (3.10.0-514.el7.x86_64) 7 (Core)
3 : CentOS Linux (0-rescue-769ef9902d8743958a40cb81db696433) 7 (Core)

4.把 CentOS Linux (4.13.9-1.el7.elrepo.x86_64) 内核设置为默认并重启系统:

$ grub2-set-default 0
$ reboot

5.查看内核是否设置成功:

$ cat /proc/version
Linux version 4.13.9-1.el7.elrepo.x86_64 (mockbuild@Build64R7) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)) #1 SMP Sun Nov 12 10:02:34 EDT 2017

6.设置 sysctl.conf:

$ vim /etc/sysctl.conf

加入或修改如下两行参数:

net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

执行如下命令以使以上修改生效:

$ sysctl -p
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

7.查看BBR是否正常启动:

$ lsmod | grep bbr
tcp_bbr                20480  7

若显示tcp_bbr说明BBR已经正常启动。

Logstash Filebeat 安装配置之使用 Kibana 分析日志数据

什么是 Logstash?

Logstash 是用于管理事件和日志的开源工具。它为数据收集提供实时传递途径。Logstash 将收集你的日志数据,将数据转换为 JSON 文档,并将其存储在 Elasticsearch 中。

本教程的目地是使用Logstash来收集服务器的syslog,并设置Kibana可视化收集的日志。

此次我们需要用到的组件:

Logstash:处理传入日志的的服务器组件
Elasticsearch:存储所有日志。
Kibana:用于搜索和可视化日志的Web界面。
Filebeat:安装在客户端服务器上,利用Filebeat向Logstash搬运日志数据,典型的搬运工。

以上组件都需要用到,确保Elasticsearch、Kibana已经安装好,如未安装,请参阅以下教程:

安装配置 Elasticsearch 搜索引擎集群
ElasticSearch 之 Kibana 二进制安装配置
Elasticsearch Kibana 集群 安装配置 X-pack 扩展包

环境:

Server: CentOS 7 (IP: 10.28.204.65). 16 GB RAM.
&
Logstash/Kibana/Elasticsearch

Client: CentOS 7 (IP: 10.28.204.66). 8 GB RAM.
&
Filebeat

先决条件:

Linux JAVA JDK JRE 环境变量安装与配置

由于Logstash基于Java,请确保您的计算机上安装有OpenJDK或Oracle JDK(暂不支持Java 9)。

安装说明:

ELK 官网对于每种软件提供了多种格式的安装包(zip/tar/rpm/DEB),以 Linux Centos 7 系统为例,如果直接下载 RPM,可以通过 rpm -ivh path_of_your_rpm_file 直接安装成系统 service。以后就可以使用 systemctl 命令启停。比如 systemctl logstash.service start/stop/status。很简单,但缺点也很明显,不能自定义安装目录,相关文件放置比较分散,不易于集中管理。

安装 Logstash

下载地址://www.elastic.co/downloads/logstash

说明:我下面讲述两种安装方式。全程使用超级root用户操作。

二进制压缩包安装方式

1.解压并将其移动到合适的路径:

$ cd /tmp
$ tar zxvf logstash-5.6.3.tar.gz
$ mv logstash-5.6.3 /usr/local
$ cd /usr/local
$ ln -s logstash-5.6.3 logstash
$ mkdir -p /usr/local/logstash/config/conf.d

2.创建用户和组并赋予权限

$ groupadd logstash
$ useradd -g logstash logstash
$ chown -R logstash.logstash logstash*

3.创建systemctl系统单元文件

$ vim /etc/systemd/system/logstash.service

[Unit]
Description=logstash

[Service]
Type=simple
User=logstash
Group=logstash
# Load env vars from /etc/default/ and /etc/sysconfig/ if they exist.
# Prefixing the path with '-' makes it try to load, but if the file doesn't
# exist, it continues onward.
EnvironmentFile=-/usr/local/logstash/config
EnvironmentFile=-/usr/local/logstash/config
ExecStart=/usr/local/logstash/bin/logstash "--path.settings" "/usr/local/logstash/config"
Restart=always
WorkingDirectory=/
Nice=19
LimitNOFILE=16384

[Install]
WantedBy=multi-user.target

安装完成。此种安装方法优势在于配置文件集中,易管理,但安装比较麻烦。

YUM 安装方式

此种安装方式简单快速,耗时较短。

1.下载并安装公共签名密钥:

$ rpm --import //artifacts.elastic.co/GPG-KEY-elasticsearch

如果下载失败,请将服务器DNS修改为 8.8.8.8 重启网卡即可。

2.添加logstash镜像源

$ vim /etc/yum.repos.d/logstash.repo

[logstash-5.x]
name=Elastic repository for 5.x packages
baseurl=//artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=//artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

3.开始安装

$ yum install logstash -y

安装完后会自动生成logstash.service单元文件,无需手动创建。

说明5.x 代表:默认安装最新版的logstash,可根据需求把 x 更改为具体版本号,例如:5.6

YUM安装后的相关配置目录:

/usr/share/logstash - 主程序
/etc/logstash - 配置文件
/var/log/logstash - 日志
/var/lib/logstash - 数据存储

开始配置 Logstash

注意:以下操作,我使用第一种安装方式配置。

Filebeat(Logstash Forwarder)通常安装在客户端服务器上,并使用SSL证书验证Logstash服务器的身份以进行安全通信。

1.生成有效期为365天的自签名SSL证书,使用主机名或IP SAN创建SSL证书。

方法一(主机名):

$ cd /etc/pki/tls/

现在创建SSL证书。将“server.renwolecom.local” 替换为你的logstash服务器主机名。

$ openssl req -x509 -nodes -newkey rsa:2048 -days 365 -keyout private / logstash-forwarder.key -out certs / logstash-forwarder.crt -subj / CN = server.renwolecom.local

2.如果你计划使用IP地址而不是主机名,请按照以下步骤为IP SAN创建SSL证书。

方法二(IP地址):

要创建IP SAN证书,你需要在OpenSSL配置文件中的SubjectAltName中添加一个logstash服务器的IP地址。

$ vim /etc/pki/tls/openssl.cnf

查找 “[v3_ca]” 部分,在此字段下方添加logstash服务器的IP,例如:

subjectAltName = IP:10.28.204.65

$ cd /etc/pki/tls/
$ openssl req -x509 -days 365 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

本文采用后者。

配置 logstash.conf

Logstash配置可以在/etc/logstash(YUN安装方式)中找到。由于我是二进制安装,所以需要在 /usr/local/logstash/config 目录下创建conf.d文件夹(已创建)。

logstash配置文件由三部分组成,分别是:输入、过滤、输出; 你可以在 /usr/local/logstash/config/conf.d 下分别创建三个配置文件,也可以将这三个部分放在一个配置文件中。

1.我建议你使用单个文件并放置输入、过滤、输出部分。

$ vim /usr/local/logstash/config/conf.d/logstash.conf

2.在输入部分,我将配置Logstash通信端口以及添加SSL证书,从而进行安全通信。

input {
 beats {
   port => 5044
   ssl => true
   ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
   ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

3.在过滤器部分,我们将使用Grok来解析这些日志,然后将其发送到Elasticsearch。以下grok过滤器将查找“syslog”标记的日志,并尝试解析它们,以生成结构化索引。

filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    syslog_pri { }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}

4.在输出部分,我们将定义要存储的日志位置; 这个很显然是Elasticsearch服务器。

output {
 elasticsearch {
  hosts => [ "10.28.204.65:9200" ]
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
 user => elastic
 password => changeme
       }
stdout {
    codec => rubydebug
       }
}

5.完整配置内容如下:

$ cat /usr/local/logstash/config/conf.d/logstash.conf

input {
 beats {
   port => 5044
   ssl => true
   ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
   ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}
filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    syslog_pri { }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}
output {
 elasticsearch {
  hosts => [ "10.28.204.65:9200" ]
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
 user => elastic
 password => changeme
       }
stdout {
    codec => rubydebug
       }
}

修改 logstash.yml 主配置文件

修改完成后的内容如下:

$ egrep -v "(^#|^$)" /usr/local/logstash/config/logstash.yml

path.config: /usr/local/logstash/config/conf.d
path.logs: /usr/local/logstash/logs

主要是上面路径。

启动 logstash 并加入开机自启

$ systemctl start logstash
$ systemctl enable logstash

启动后你可以通过如下命令查看日志状态,从而解决任何可能出现的问题。

YUM安装查看日志:

$ cat /var/log/logstash/logstash-plain.log

二进制安装查看日志:

$ cat /usr/local/logstash/logs/logstash-plain.log

请根据自己的实际路径查看操作。

在客户端服务器上安装 Filebeat

1.有5个Beats客户端可用,分别是:

Filebeat – 实时洞察日志数据。
Packetbeat – 分析网络数据包数据。
Metricbeat – 采集服务的各项性能指标。
Winlogbeat – 轻量级的Windows事件日志。
Heartbeat – 主动探测来监控其可用性的服务。

2.要分析客户端计算机的系统日志(例如:10.28.204.66),我们需要安装filebeat。使用以下命令进行安装:

$ curl -L -O //artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.6.3-x86_64.rpm
$ rpm -vi filebeat-5.6.3-x86_64.rpm

配置 Filebeat

现在是时候将filebeat与Logstash连接起来,按照下面的步骤来获得配置ELK Stack的filebeat。

1.Filebeat(beats)使用SSL证书验证logstash服务器身份,因此将logstash-forwarder.crt从logstash服务器复制到客户端。

$ scp -pr root@10.28.204.65:/etc/pki/tls/certs/logstash-forwarder.crt /etc/ssl/certs/

2.打开filebeat配置文件

$ vim /etc/filebeat/filebeat.yml

3.我们将配置filebeat来发送 /var/log/messages 日志内容到Logstash服务器。因此请在路径部分下修改现有的配置。请注释掉– /var/log/*.log,以避免将该目录中所有.log文件发送到Logstash。

...
paths:

- /var/log/messages
# - /var/log/*.log
...

4.注释掉“output.elasticsearch”部分。因为我们不会直接将日志存储到Elasticsearch

...
#output.elasticsearch:
...

5.现在,找到 “output.logstash” 行。并修改如下所示的内容:

本节定义filebeat将日志发送到logstash服务器“10.28.204.65:5044”。并修改SSL证书所在的路径。

...
output.logstash:
  # The Logstash hosts
  #hosts: ["localhost:5044"]
  hosts: ["103.28.204.65:5044"]

  # Optional SSL. By default is off.
  # List of root certificates for HTTPS server verifications
  ssl.certificate_authorities: ["/etc/ssl/certs/logstash-forwarder.crt"]
...

保存并退出。
重要:Filebeat的配置文件采用YAML格式,这意味着缩进非常重要!请务必使用与这些说明相同数量的空格。

重新启动 Filebeat 服务

$ systemctl restart filebeat
$ cat /var/log/filebeat/filebeat

Firewall 防火墙设置

$ firewall-cmd --permanent --zone=public --add-port=5044/tcp
$ firewall-cmd --reload

测试数据是否正常存储

在你的 Elasticsearch 服务器上,通过使用以下命令,验证 Elasticsearch 是否接收到 Filebeat>logstash 数据:

$ curl -u elastic -XGET '//10.28.204.65:9200/filebeat-*/_search?pretty'

回车后输入你的认证密码,你应该看到一堆如下的输出:

...
{
"_index" : "filebeat-2017.11.1",
"_type" : "log",
"_id" : "AV8Zh29HaTuC0RmgtzyM",
"_score" : 1.0,
"_source" : {
"@timestamp" : "2017-11-1T06:16:34.719Z",
"offset" : 39467692,
"@version" : "1",
"beat" : {
"name" : "204",
"hostname" : "204",
"version" : "5.6.3"
},
"input_type" : "log",
"host" : "204",
"source" : "/var/log/messages",
"message" : "Nov 11 19:06:37 204 logstash: at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:182)",
"type" : "log",
"tags" : [
"beats_input_codec_plain_applied"
]
}
...

如果你的输出显示为 0,那么你应该排查logstash与Elasticsearch的通信是否正常,通过可以通过查看启动日志得出结论。如果你获得了预期的输出,则进行下一步。

连接到 Kibana

1.使用以下URL访问Kibana:

//10.28.204.65:5601/

2.在你的第一次登录时,你必须映射filebeat索引。

在索引名称或模式框中键入以下内容:

filebeat-*

选择 @timestamp 然后单击创建。

3.还可以登录 logstash
依次打开:

Management >> Index Patterns >> Create Index Pattern

输入:

filebeat-*

选择:

@timestamp

其他默认,点击:Create

4.创建完成后点击:

Discover >> filebeat-*

此时你可以在右侧查看客户端 10.28.204.66 的系统日志。

ELK Stack Logstash 的安装配置与结合使用到目前为止已经完成,Kibana不仅仅局限于此,他还有更强大的功能,值得深入研究。

禁用 Transparent Huge Pages (THP) 透明巨大页面

Transparent Huge Pages (THP)是一种Linux内存管理系统,可以通过使用更大的内存页来减少对带有大量内存的机器Translation Lookaside Buffer (TLB)的开销。

然而,数据库工作负载通常在THP上表现不佳,因为它们往往是稀疏而非连续性的内存访问模式。所以你应该禁用Linux机器上的THP,以确保Redis、ORACLE、MariaDB、MongoDB等数据库的最佳性能。

Transparent Huge Pages是在CentOS/RedHat 6.0中引入的优化,从CentOS 7 版本开始,该特性默认启用,其目的是减少大量内存的系统的开销。然而,由于某些数据库使用内存的方式,这个特性实际上弊大于利,因为内存访问很少是连续的。

下面介绍如何禁用RedHat/CentOS 6/7上的透明巨大页面。对于其他系统,请查阅供应商的文档。

生产环境:

$ hostnamectl
...
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7.4 1708
Kernel: Linux 3.10.0-693.2.2.el7.x86_64
Architecture: x86-64

先查看 THP 状态:

$ cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

$ cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never

状态显示:启用。

创建脚本:

$ vim /etc/init.d/disable-transparent-hugepages

添加以下内容:

#!/bin/bash
### BEGIN INIT INFO
# Provides:          disable-transparent-hugepages
# Required-Start:    $local_fs
# Required-Stop:
# X-Start-Before:    mongod mongodb-mms-automation-agent
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Disable Linux transparent huge pages
# Description:       Disable Linux transparent huge pages, to improve
#                    database performance.
### END INIT INFO

case $1 in
  start)
    if [ -d /sys/kernel/mm/transparent_hugepage ]; then
      thp_path=/sys/kernel/mm/transparent_hugepage
    elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then
      thp_path=/sys/kernel/mm/redhat_transparent_hugepage
    else
      return 0
    fi

    echo 'never' > ${thp_path}/enabled
    echo 'never' > ${thp_path}/defrag

    re='^[0-1]+$'
    if [[ $(cat ${thp_path}/khugepaged/defrag) =~ $re ]]
    then
      # RHEL 7
      echo 0  > ${thp_path}/khugepaged/defrag
    else
      # RHEL 6
      echo 'no' > ${thp_path}/khugepaged/defrag
    fi

    unset re
    unset thp_path
    ;;
esac

保存并退出!

给予该文件可执行权限,命令如下:

$ chmod 755 /etc/init.d/disable-transparent-hugepages

加入开机自启动并重启系统:

$ systemctl enable disable-transparent-hugepages
$ systemctl start disable-transparent-hugepages
$ sudo reboot

再次查看THP状态:

$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

$ cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]

状态显示:已经禁用。

到此 禁用 Transparent Huge Pages 的目的已经实现。

注意:该教程不适用于Debian/Ubuntu或CentOS/RedHat 5 及更低版本。原因上述已说明。

Linux Nginx网站:Certbot安装配置Lets Encrypt SSL免费HTTPS加密证书

实验环境:CentOS Linux release 7.3.1611 (Core)
内核版本:Linux version 3.10.0-514.el7.x86_64
Nginx版本: Nginx-1.13.0

Let’s Encrypt是一个免费的、自动化、开放的证书颁发机构。由Mozilla、Cisco、Chrome、facebook、Akamai等众多公司和机构发起的,其安全稳定及其可靠。具体信息可以去letsencrypt官方网站了解详情。

今天我们就充分利用Lets Encrypt让你的网站实现https加密。

官网://letsencrypt.org/

1.安装certbot及源扩展包

$ yum install -y epel-release

Certbot是Let’s Encrypt官方指定推荐的客户端。通过 Certbot,你可以自动化部署 Let’s Encrypt SSL证书,以便为网站加上HTTPS加密支持。

$ yum install certbot
$ certbot certonly
Saving debug log to /var/log/letsencrypt/letsencrypt.log
How would you like to authenticate with the ACME CA?
//你是希望如何使用ACME CA进行身份验证?
-------------------------------------------------------------------------------
1: Place files in webroot directory (webroot)
//将文件放在webroot目录
2: Spin up a temporary webserver (standalone)
//使用临时Web服务器(独立目录)
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):1 【选择1回车】
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):su@renwole.com【输入您的邮箱地址,用于紧急更新和安全通知】

Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
-------------------------------------------------------------------------------
Please read the Terms of Service at
//letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
//acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A【选择A回车同意服务条款,C为拒绝】
-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o:Y【您是否愿意分享您的电子邮件地址,建议选择Y回车】
Please enter in your domain name(s) (comma and/or space separated) (Enter 'c'
to cancel): blog.renwole.com【输入域名回车】
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for blog.renwole.com
Select the webroot for blog.renwole.com:
-------------------------------------------------------------------------------
1: Enter a new webroot
//输入网站绝对路径
-------------------------------------------------------------------------------
Press 1 [enter] to confirm the selection (press 'c' to cancel):1【选择数字1回车】
Input the webroot for blog.renwole.com: (Enter 'c' to cancel):/home/www/blog.renwole.com【输入网站所在绝对路径回车】
Waiting for verification...
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits): /etc/letsencrypt/keys/0001_key-certbot.pem
Creating CSR: /etc/letsencrypt/csr/0001_csr-certbot.pem

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/blog.renwole.com/fullchain.pem. Your cert
will expire on 2017-08-09. To obtain a new or tweaked version of
this certificate in the future, simply run certbot again. To
non-interactively renew *all* of your certificates, run "certbot
renew"
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: //letsencrypt.org/donate
Donating to EFF:

恭喜!您的SSL证书和密钥链接已保存,你的证书将于2017-08-09到期。

注意:这里需要说明,在生成证书之前,你必须保证nginx 443端口是运行状态,否则会生成证书失败。

2.自动续订

Certbot可以配置为在证书过期之前自动更新证书。由于Let’s Encrypt SSL证书有效期时间为90天,所以建议您利用此功能。您可以通过运行以下命令来测试证书的自动续订:

$ sudo certbot --nginx certonly

如果以上正常工作,你可以通过添加运行以下操作的cron或systemd定时任务安排自动更新:

certbot renew

我们写一个自动执行脚本,建议每小时执行一次:

$ sudo crontab -e

添加以下内容:

0 */6 * * * /usr/bin/certbot renew --quiet && /bin/systemctl restart nginx

保存并退出!

通过命令查看是否添加成功:

$ crontab -l
0 */6 * * * /usr/bin/certbot renew --quiet && /bin/systemctl restart nginx

重启crontab

$ systemctl status crond.service
$ systemctl restart crond.service

通过命令观察 crontab 是否执行:

$ tail -f /var/log/cron

证书是否续订成功,可以通过以下命令管理查看证书信息:

$ certbot certificates

更多Certbot命令请参阅官方文档 //certbot.eff.org/docs/

3.配置nginx.conf
接下来修改Nginx配置文件,修改sever段,去掉相应注释,将生成的SSL证书填写到ssl_certificate后面,将生成的密钥填写到ssl_certificate_key后面,保存并重启nginx服务器即可。

# vi /usr/local/nginx/conf/nginx.conf

server {
 listen 443 ssl;

 ssl_certificate /etc/letsencrypt/live/blog.renwole.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/blog.renwole.com/privkey.pem;

# ssl_session_cache shared:SSL:1m;
 ssl_session_timeout 5m;

# ssl_ciphers HIGH:!aNULL:!MD5;
 ssl_prefer_server_ciphers on;

# location / {
 # root html;
 # index index.html index.htm;
 # }
 }

使用谷歌浏览器访问//blog.renwole.com/可以看到绿色的安全小锁图标,说明网站已经https加密成功。

linux Centos7 ssh、sftp、scp命令远程传输文件

以下实验数据都是手工亲测,非拷贝而来,所以真实可靠,也是我在工作当中经常用到的一些命令,分享出来,大家一块学习。
系统操作环境Centos7.3 64 *2,两台机器都在公网IP地址分别是

A:223.5.5.5
B:223.6.6.6

一、sftp是一个交互式文件传输程式。它类似于ftp传输协议,属于ssh, 但它进行加密传输,相对FTP来讲有更高的安全性。

sftp用法

如果有服务器的端口不是默认的22,请在sftp后面加-P 端口号 即可。

# sftp root@223.6.6.6
The authenticity of host ‘223.6.6.6 (223.6.6.6)’ can’t be established.
ECDSA key fingerprint is SHA256:Hl/dKTFzL4lOlF8DIG5itaV4OAsZunC2AWlFGLjLfsg.
Are you sure you want to continue connecting (yes/no)? yes【输入yes回车】
Warning: Permanently added ‘223.6.6.6’ (ECDSA) to the list of known hosts.
root@223.6.6.6’s password:【输入223.6.6.6的root密码并回车】
Connected to 223.6.6.6.
sftp>

将223.6.6.6服务器文件下载到223.5.5.5的home目录;

sftp> get /var/www/renwole.txt /home/

将223.5.5.5服务器文件上传到223.6.6.6服务器的mnt目录;

sftp> put /home/renwole.txt /mnt/

你如果不知道远程主机的目录是什么样, ls命令可以列出223.6.6.6服务器的当前目录列表。例如:

sftp> ls //和查看本地操作命令一样
sftp> pwd //查询223.6.6.6的当前工作目录

改变路径可以用cd ,改变本机路径可以用 cd.. 例如;

sftp> cd

如果用于修改服务器文件,可以使用ssh连接,例如:

# ssh root@223.6.6.6
root@223.6.6.6’s password:【输入B服务器密码回车进入内部】

如果想退出,例如:

# exit //退出机器,返回你原始机器界面。

二、scp具有和ssh一样的验证机制,从而可以实现2台机器安全的远程拷贝文件。

scp可以概括为:

scp -P 端口 文件路径 用户名@主机地址:远程目录

如果想拷贝本地文件到另外一台ssh终端,可以使用以下命令;

# scp /renwole/mariadb.tar.gz root@223.6.6.6:/renwole123/
root@223.6.6.6’s password:【输入密码回车】
mariadb.tar.gz  8%  37MB  1.3MB/s  05:29  ETA

如果你反过来操作,把远程主机的文件拷贝到当前系统,操作命令以下;

# scp root@223.6.6.6:/renwole123/mariadb.tar.gz /renwole

如果你想拷贝文件夹以及文件夹内的所有文件,就加参数 -r 如果你的端口号不是22,那么需要在scp后加个 -P (区分大小写)端口号。建议加-C选项,因为这样可以启用SSH的压缩功能;传输速度更快,例如

# scp -P 6632 -C /renwole/mariadb root@223.6.6.6:/renwole123/

其实我个人建议使用scp,速度快,稳定,安全。