标签归档:Centos

Hyper-V虚拟主机Linux Centos 7数据磁盘扩容

一直以来对Hyper-V Linux虚拟主机的磁盘扩容困扰,今天将介绍如何利用 fdiskresize2fs 进行数据磁盘扩容。

情况说明:

宿主机系统:Windwos Server 2012 R2 Hyper-V
虚拟主机:CentOS Linux release 7.4.1708 (Core)

平时接触Hyper-V较多,所以对磁盘扩容那是常有的事。Windwos磁盘扩容最简单,本文就不多介绍了。
今天我将以Centos虚拟主机进行演示,该小机分为两块磁盘(都是独立磁盘),一块是系统盘/dev/sda,另一块是数据库盘/dev/sdb,现在的需求是sdb需要在不影响数据的情况下从原来的30GB扩容为100GB

1.扩容前先查看磁盘分区及挂载情况

[root@renwole-com ~]# fdisk -l

Disk /dev/sdb: 32.2 GB, 32212254720 bytes, 62914560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x5f149419

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    62914559    31456256   83  Linux

Disk /dev/sda: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x00043041

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    20971519     9436160   8e  Linux LVM

Disk /dev/mapper/cl-root: 8585 MB, 8585740288 bytes, 16769024 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes


Disk /dev/mapper/cl-swap: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
[root@renwole-com ~]# df -hT
Filesystem          Type      Size  Used Avail Use% Mounted on
/dev/mapper/cl-root xfs       8.0G  950M  7.1G  12% /
devtmpfs            devtmpfs  1.9G     0  1.9G   0% /dev
tmpfs               tmpfs     1.9G     0  1.9G   0% /dev/shm
tmpfs               tmpfs     1.9G  8.3M  1.9G   1% /run
tmpfs               tmpfs     1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda1           xfs      1014M  138M  877M  14% /boot
tmpfs               tmpfs     379M     0  379M   0% /run/user/0
/dev/sdb1           ext4       30G   60M   28G   1% /apps

注意:橙色部分 /dev/sdb1 分区大小是30GB,挂载的也是30GB

2.卸载挂载

删除 /etc/fstab 文件中以下开机磁盘自动挂载信息:

/dev/sdb1 /apps ext4 defaults 0 0

3.开始虚拟主机磁盘扩容

Hyper-V虚机操作:

打开Hyper-V 管理器,找到需要扩容的小机并关机,然后右击设置,点击需要扩容的磁盘,(一般是数据盘)编辑 – 默认下一步 – 选择扩展下一步,这一步骤需要注意,假设你原有磁盘为30G,那么你想扩展到100G,请填写100即可,点击下一步完成。然后启动虚拟主机。

查看扩容后的磁盘分区情况:

[root@renwole-com ~]# fdisk -l

Disk /dev/sda: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x00043041

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    20971519     9436160   8e  Linux LVM

Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x5f149419

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    62914559    31456256   83  Linux

Disk /dev/mapper/cl-root: 8585 MB, 8585740288 bytes, 16769024 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes


Disk /dev/mapper/cl-swap: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

sdb分区大小由原来的30GB扩展到100GB了,但分区sdb1并没有使用扩容的70GB空间,怎么办呢?

4.删除分区

删除分区不同等删除数据,删除分区再重建:

[root@renwole-com ~]# fdisk /dev/sdb

The device presents a logical sector size that is smaller than
the physical sector size. Aligning to a physical sector (or optimal
I/O) size boundary is recommended, or performance may be impacted.
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): d                 # 删除sdb1分区
Selected partition 1
Partition 1 is deleted

Command (m for help): n			# 新建分区
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1	# 指定分区号
First sector (2048-209715199, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-209715199, default 209715199):
Using default value 209715199
Partition 1 of type Linux and of size 100 GiB is set

Command (m for help): w                 # 输入w保存
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

再次查看磁盘分区情况

[root@renwole-com ~]# fdisk -l
...
Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x5f149419

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048   209715199   104856576   83  Linux
...

已经从原来的30G扩展成100G了,但现在还不能使用,需要进行如下操作才算真正扩容成功:

[root@renwole-com ~]# resize2fs -f /dev/sdb1
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/sdb1 to 26214144 (4k) blocks.
The filesystem on /dev/sdb1 is now 26214144 blocks long.

扩容成功。

5.挂载磁盘

[root@renwole-com ~]# mount /dev/sdb1 /apps/
[root@renwole-com ~]# df -hT
Filesystem          Type      Size  Used Avail Use% Mounted on
/dev/mapper/cl-root xfs       8.0G  950M  7.1G  12% /
devtmpfs            devtmpfs  1.9G     0  1.9G   0% /dev
tmpfs               tmpfs     1.9G     0  1.9G   0% /dev/shm
tmpfs               tmpfs     1.9G  8.3M  1.9G   1% /run
tmpfs               tmpfs     1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda1           xfs      1014M  138M  877M  14% /boot
tmpfs               tmpfs     379M     0  379M   0% /run/user/0
/dev/sdb1           ext4       99G   60M   94G   1% /apps
[root@renwole-com ~]# ls /apps/
web  mysql

如上所示,Linux虚拟主机数据盘已经成功扩容,查看数据并无丢失。

另外再次将你的磁盘信息写入到 /etc/fstab 文件中,不然重启后磁盘还需要手动挂载。

注意:还是那句话,操作任何数据之前,一定要先备份,养成良好的习惯,以防止数据丢失。

CentOS 7配置使用SFTP服务器

何为SFTP?

SFTP,即 SSH 文件传输协议( SSH File Transfer Protocol ),或者说是安全文件传输协议( Secure File Transfer Protocol )。SFTP 是一个独立的 SSH 封装协议包,通过安全连接以相似的方式工作。它的优势在于可以利用安全的连接传输文件,还能浏览本地和远程系统上的文件系统。

在很多情况下,SFTP都比FTP更可取,因为它具有最基本的安全特性和能利用 SSH 连接的能力,FTP是一种不安全的协议,只能在有限的情况下或在您信任的网络上使用。

先决条件:

服务器 OpenSSH-Server 版本最低4.8p1,因为配置权限需要版本添加的新配置项 ChrootDirectory 来完成。

如何查看OpenSSH版本,命令如下:

$ ssh -V
OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013

1.创建用户信息

添加用户组:

$ groupadd sftp

添加用户:

$ useradd -g sftp -s /sbin/nologin -M userrenwolecom

参数注解:

-g              # 加入用户组
-s              # 指定用户登入后所使用的shell
/sbin/nologin   # 用户不允许登录
-M              # 不要自动建立用户的登入目录

设置用户密码:

$ passwd userrenwolecom

2.创建用户目录并设置权限

创建sftp主目录:

$ mkdir /data/sftp

设置sftp主目录权限:

$ chown root:sftp /data/sftp

文件夹所有者必须是root,用户组可以不是root。

$ chmod 744 /data/sftp

权限不能超过755但不包括755,否则会导致登录报错。

3.创建上传目录并设置权限

/data/sftp/主目录下创建uploads资料夹,并设置所有者是:userrenwolecom,用户组隶属:sftp,这样新增的帐号才能有上传编辑的权限。

$ mkdir -p /data/sftp/uploads
$ chown userrenwolecom:sftp /data/sftp/uploads

4.修改sshd_config配置文件

$ vim /etc/ssh/sshd_config

将此行注释掉,例如:

#Subsystem sftp /usr/libexec/openssh/sftp-server

在此行下面添加如下内容:

Subsystem sftp internal-sftp       # 指定使用sftp服务使用系统自带的internal-sftp
Match Group sftp                   # 匹配sftp组的用户,若要匹配多个组,可用逗号分开
ChrootDirectory /data/sftp/        # 限制用户的根目录
ForceCommand internal-sftp         # 只能用于sftp登录
AllowTcpForwarding no              # 禁止用户使用端口转发
X11Forwarding no                   # 禁止用户使用端口转发

5.重启SSH服务

$ systemctl restart sshd

6.测试是否能够登录、上传、下载等操作

10.28.204.61服务器执行以下命令登录:

$ sftp -P 12012 userrenwolecom@10.28.204.62
userrenwolecom@10.28.204.62's password:
packet_write_wait: Connection to 10.28.204.62 port 12012: Broken pipe
Couldn't read packet: Connection reset by peer

报错,此问题是由于/data/sftp 目录权限分配不当所致,将此目录的所有者更改为root即可,用户组可root/sftp

再次测试连接:

$ sftp -P 12012 userrenwolecom@10.28.204.62
The authenticity of host '[10.28.204.62]:12012 ([10.28.204.62]:12012)' can't be established.
ECDSA key fingerprint is SHA256:/YI/L4RT1QH7lkfxMCAkKnvniQslyUl15mOUKUo8K3k.
ECDSA key fingerprint is MD5:6d:b6:f3:93:8e:48:53:24:9d:5d:c2:2a:5f:28:f4:d2.
Are you sure you want to continue connecting (yes/no)? YES
Warning: Permanently added '[10.28.204.62]:12012' (ECDSA) to the list of known hosts.
userrenwolecom@10.28.204.62's password:【输入userrenwolecom用户密码回车】
Connected to 10.28.204.62.
sftp>

连接成功,现在测试上传一个文件到10.28.204.62服务器

上传

sftp> put /tmp/nginx_log_stat /uploads
Uploading /tmp/nginx_log_stat to /uploads/nginx_log_stat
/tmp/nginx_log_stat

下载

sftp> get uploads/nginx_log_stat /mnt
Fetching /uploads/nginx_log_stat to /mnt/nginx_log_stat
/uploads/nginx_log_stat   100%    7   1.1KB/s   00:00
sftp>

删除

sftp> rm /uploads/nginx_log_stat
Removing /uploads/nginx_log_stat

更多命令请参阅:

sftp> help

小结:

在配置过程中遇到比较奇怪的问题,我将 sshd_config 配置文件中的 Match Group sftp 修改为 Match User userrenwolecom ,重启sshd后,当前终端不会断开,新建终端输入正确密码后会出现SSH登录闪退(自动关闭终端)问题,不管是用PUTTY还是Xshell均是如此,后来我将用户修改成组后就正常了,具体原因尚未可知,不过修改为组效果是一样的。如果你知道什么原因还请指教。

如何在Centos 7上用Logrotate管理日志文件

何为Logrotate?

Logrotate是一个实用的日志管理工具,旨在简化对系统上生成大量的日志文件进行管理。 Logrotate允许自动旋转压缩,删除和邮寄日志文件,从而节省宝贵的磁盘空间。 Logrotate可以设置为每天、每周、每月或当日志文件达到一定的大小时处理日志文件。还可以完全控制日志的自动化管理方式,而不需要人工干预。Logrotate支持Linux系统上的所有日志文件,包括但不限于ApacheNginxTomcatELKzabbix等应用。

1.安装logrotate

系统默认已经安装,某些Linux发行版可能并未安装,那么请执行以下命令安装:

Centos:

$ yum install logrotate -y

Ubuntu:

$ apt-get install logrotate -y

通过yum默认安装的文件存储位置说明

/etc/cron.daily            # logrotate脚本文件存放位置
/etc/logrotate.conf        # 主配置文件
/usr/sbin/logrotate        # 二进制程序文件
/etc/logrotate.d/          # 特定服务日志存储目录(自己设定的配置文件)
/var/lib/logrotate.status  # 状态文件

2.查看logrotate主文件默认配置情况

$ cat /etc/logrotate.conf

# see "man logrotate" for details
# rotate log files weekly
weekly		            # 每周转存一次

# keep 4 weeks worth of backlogs
rotate 4                    # 保留四个日志备份文件

# create new (empty) log files after rotating old ones
create	                    # rotate后,创建一个新的空文件

# use date as a suffix of the rotated file
dateext                     # 轮转的文件名字带有日期信息

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d    # 此目录下的配置文件优先生效

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {             # 指定/var/log/wtmp日志文件;
    monthly                 # 每月轮转一次,优先于全局设定的每周轮转一次;
    minsize 1M              # 日志文件大于1M才会去轮转;
    create 0664 root utmp   # 新日志文件的权限,属主,属组;
    rotate 1                # 保留一个日志备份,优先于全局设置的四个;
}
/var/log/btmp {             # 指定/var/log/btmp日志文件;
    missingok               # 如果日志丢失,不报错;
    monthly
    create 0600 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.
# 系统特定的日志也可以在主文件中配置。

3.logrotate日志切割

在定义日志文件时可以使用通配符,但不建议使用,因为它会包括已切换过的日志,如必须使用,请在*号后加上已知的文件扩展名, 例如:*.log

Nginx日志:

/etc/logrotate.d/目录下创建Nginx服务日志配置文件

$ vim /etc/logrotate.d/nginx

/usr/local/nginx/logs/*.log {
create 644 www root
daily
dateext
rotate 3
minsize 10K
copytruncate
nocompress
missingok
notifempty
noolddir
postrotate
/bin/kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
endscript
}

php日志:

/usr/local/php/var/log/*.log {
missingok
notifempty
sharedscripts
delaycompress
create 0664 www www
postrotate
/bin/kill -SIGUSR1 `cat /usr/local/php/var/run/php-fpm.pid 2>/dev/null` 2>/dev/null || true
endscript
}

注:你也可以手动生成一个20M内容的日志文件进行测试,例如:

$ head -c 20M < /dev/urandom > /var/log/renwole-log

配置完成后,可以通过如下命令来手动执行查看效果:

$ logrotate -f /etc/logrotate.d/nginx

另外还可以使用如下命令查看logrotate运行状态:

$ cat /var/lib/logrotate/logrotate.status

由于Logrotate是基于cron定时运行的,所以logrotate脚本默认在 /etc/cron.daily/ 目录下,文件名是logrotate。你可以设置 /etc/anacrontab 来控制Logrotate何时运行。

4.查看anacrontab默认配置

$ cat /etc/anacrontab

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22

#period in days   delay in minutes   job-identifier   command
1       5       cron.daily              nice run-parts /etc/cron.daily
7       25      cron.weekly             nice run-parts /etc/cron.weekly
@monthly 45     cron.monthly            nice run-parts /etc/cron.monthly

5.关于logrotate常用配置参数注解

daily,weekly,monthly  # 转储周期分别是每天/每周/每月;
minsize 15M           # 日志体积大于此值时轮换(例如:100K,4M);
dateext	              # 轮询的文件名字带有日期信息;
missingok             # 如果日志文件丢失,不要显示错误;
rotate 5              # 轮转存储中包含多少备份日志文件,0为无备份,以数字为准;
compress              # 通过gzip压缩转储以后的日志,以*.gz结尾;
nocompress            # 不需要压缩时,用这个参数;
delaycompress         # 延迟压缩,和compress一起使用时压缩所有日志,除当前和下一个最近的;
nodelaycompress       # 覆盖delaycompress选项,转储同时压缩;
copytruncate          # 用于还在打开中的日志文件,把当前日志备份并截断;
nocopytruncate        # 备份日志文件但是不截断;
create 644 www root   # 转储文件,使用指定的文件模式创建新的日志文件;
nocreate              # 不建立新的日志文件;
errors renwole@my.org # 专储时的错误信息发送到指定的Email地址;
ifempty               # 即使是空文件也转储,这个是logrotate的缺省选项;
notifempty            # 如果日志文件为空,则不转储;
mail renwole@my.org   # 把转储的日志文件发送到指定的E-mail地;
nomail                # 转储时不发送日志文件;
olddir /tmp           # 转储后的日志文件放入指定目录,必须和当前日志文件在同一个文件系统;
noolddir              # 转储后的日志文件和当前日志文件放在同一个目录下;
prerotate/endscript   # 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行;
postrotate/endscript  # 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行;
tabooext              # 不转储指定扩展名的文件,缺省扩展名:cfsaved,.disabled,.dpkg-dist等;
sharedscripts         # 共享脚本,让postrotate/endscript包含脚本只执行一次即可;
dateformat            # 配合dateext使用可以为切割后的日志加上YYYYMMDD格式的日期;

以上参数都可以在全局主配置文件中定义,或指定为某个日志文件进行配置,注意:使用时参数之间不要冲突。

更多参数配置请参阅:

//jlk.fjfi.cvut.cz/arch/manpages/man/logrotate.8
//www.skrenta.com/rt/man/logrotate.8.html
//www.freebsd.org/cgi/man.cgi?query=logrotate&sektion=8&apropos=0&manpath=CentOS+7.1

如何在Linux中设置SSH无密码登录

作为一名运维人员来说,管理1-5台机器尚有余力,但如果是10台、100台或更多服务器,是不是每次登录输入密码非常繁琐,且费时费力,无法提高工作效率。
今天我们通过使用ssh-kengen命令生成私钥&公钥对,目的:免密码登录SSH。其算法有两种,分别是RSADSA

RSA 是非对称加密算法,可以用来加密和签名。
DSA(Digital Signature Algorithm) 只能用来数字签名的算法。

以下操作适用于OS:Centos 7Ubuntu 17,其他系统没测,理论上都可以使用。

服务器:

10.10.204.63
10.10.204.64

1.如何生成ssh公钥

登录10.10.204.63服务器生成公私密钥对:

[root@10-10-204-63 ~]# ssh-keygen -b 4096 -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:qLcoj2nSzq6G9ZpFQZ/OFqFT+oBDf3ousHkt82F1/xM root@10-10-204-63.10.10.204.63
The key's randomart image is:
+---[RSA 4096]----+
|  . . o          |
| . + = o         |
|  o B =          |
|   . X o         |
|  . o B S .      |
|  .= * . . .  E  |
|.oo.B *     .  . |
|oo+*.O o     ..  |
|o*O+o o       .. |
+----[SHA256]-----+

三次回车即可生成 ssh key

注解:

-b 指定密钥长度。对于RSA密钥,最小要求768位,默认是2048位,最长4096字节。
-t 指定要创建的密钥类型。可以使用:”rsa1″(SSH-1) “rsa”(SSH-2) “dsa”(SSH-2)。

2.查看生成的文件

[root@10-10-204-63 ~]# ll .ssh/
total 8
-rw------- 1 root root 3243 Nov 25 15:58 id_rsa
-rw-r--r-- 1 root root  758 Nov 25 15:58 id_rsa.pub

说明:

id_rsa 私钥
id_rsa.pub 公钥

3.将公钥上传到10.10.204.64

[root@10-10-204-63 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.10.204.64
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '10.10.204.64 (10.10.204.64)' can't be established.
ECDSA key fingerprint is SHA256:/YI/L4RT1QH7lkfxMCAkKnvniQslyUl15mOUKUo8K3k.
ECDSA key fingerprint is MD5:6d:b6:f3:93:8e:48:53:24:9d:5d:c2:2a:5f:28:f4:d2.
Are you sure you want to continue connecting (yes/no)? yes【输入yes回车】
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@10.10.204.64's password:【输入服务器密码回车】

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@10.10.204.64'"
and check to make sure that only the key(s) you wanted were added.

上传成功。

4.修改SSH配置文件

登录10.28.204.64修改,操作如下:

$ vim /etc/ssh/sshd_config

去除以下注释:

RSAAuthentication yes
PubkeyAuthentication yes

5.重启SSH服务

$ systemctl restart sshd

6.测试免密码登录10.10.204.64

[root@10-10-204-63 ~]# ssh 'root@10.10.204.64'
Last failed login: Sat Nov 25 16:09:48 CST 2017 from 83.234.149.66 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Sat Nov 25 15:57:33 2017 from 36.7.69.84
[root@10-10-204-64 ~]#

在不输入密码的情况下成功登录。

登陆成功后,建议在10.10.204.64服务器上也生成ssh公钥,并上传到10.10.204.63服务器,这样以来我们就可以相互免密码SSH登陆。多台服务器亦是如此。

7.查看公钥

[root@10-10-204-64 ~]# ll /root/.ssh/
total 8
-rw-------  1 root root 758 Nov 25 16:08 authorized_keys
-rw-r--r--. 1 root root 175 Aug  9 09:19 known_hosts

authorized_keys是刚上传过来的公钥名称

8.如果公钥丢失,可以使用私钥再次生成公钥,命令如下:

[root@10-10-204-63 ~]# ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

完结。

如何通过Git将本地项目提交到码云或GitHub

何为码云?

码云是专为开发者提供稳定、高效、安全的云端软件开发协作平台。
无论是个人、团队、或是企业,都能够用码云实现代码托管、项目管理、协作开发。

PS:

说白了就是和Github一样。但没有Github的开发者和项目多,再怎么说,人家是全球性的。
但码云速度快(毕竟在国内),私有仓库免费,而且不限制私有库和公有库数量,可以作为备份仓库。

OS环境:CentOS Linux release 7.4.1708 (Core)

1.安装配置Git

$ yum install git -y
$ git config --global user.name "renwole"
$ git config --global user.email renwole@renwole.com

2.在终端生成ssh公钥

执行下面命令,三次回车即可生成 ssh key

$ ssh-keygen -t rsa -C "renwole@renwole.com"

3.查看生成的public key

$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDR9k1FgZRJN3P7V9tLfWZQ......

将以上打印出屏幕的内容添加到码云。

说明:SSH key添加地址://gitee.com/profile/sshkeys。公钥标题任意。

4.测试是否可以信任连接

添加后,在终端中输入以下命令:

$ ssh -T git@gitee.com
The authenticity of host 'gitee.com (120.55.226.24)' can't be established.
ECDSA key fingerprint is SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc.
ECDSA key fingerprint is MD5:27:e5:d3:79:2a:9e:eb:6c:93:cd:1f:c1:47:a3:54:b1.
Are you sure you want to continue connecting (yes/no)? yes【输入yes回车】
Warning: Permanently added 'gitee.com,120.55.226.24' (ECDSA) to the list of known hosts.
Authentication failed.

再次执行:

$ ssh -T git@gitee.com
Welcome to Gitee.com, yourname!

返回信息表示已经成功。

5.在码云创建私有仓库

打开码云首页 – 登录 – 点击右上角圆形+号 – 填写你的项目信息 – 创建完成。

打开你的项目地址,例如:

//gitee.com/renwole/renwolecom

点击克隆/下载 – 获取你的SSH地址,下面要用到。

6.把远程仓库项目clone到本地

$ cd /mnt
$ git clone git@gitee.com:renwole/renwolecom.git
Cloning into 'renwolecom'...
remote: Counting objects: 11, done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 11 (delta 2), reused 0 (delta 0)
Receiving objects: 100% (11/11), 19.51 MiB | 5.46 MiB/s, done.
Resolving deltas: 100% (2/2), done.
$ cd renwolecom
$ ll
total 16
-rw-r--r--. 1 root root 10254 Nov 22 09:26 LICENSE
-rw-r--r--. 1 root root    13 Nov 22 09:26 README.md

已经成功克隆到本地。

7.提交项目

你可以将renwolecom目录视为你的项目,鲁完代码直接提交。

无论此项目是否多人参与,push之前先pull,看是否有merge代码,若存在merge就解决merge,若无,请执行以下命令:

$ git pull origin master
$ git add -A
$ git commit -m 'init'
$ git push origin master

8.删除GIT仓库所有提交历史记录

8.1.Checkout

$ git checkout --orphan latest_branch

8.2. Add all the files

$ git add -A

8.3. Commit the changes

$ git commit -am "commit message"

8.4. Delete the branch

$ git branch -D master

8.5.Rename the current branch to master

$ git branch -m master

8.6.Finally, force update your repository

$ git push -f origin master

删除远程文件,本地保留:

$ git rm --cached 文件名
$ git commit -m "remove file from remote repository"
$ git push

删除远程文件夹,本地保留:

$ git rm --cached -r 文件夹名
$ git commit -m "remove directory from remote repository"
$ git push

注意:删除文件夹请使用 -r 参数。

说明:最后上传项目时可选参数 git push origin master -f 表示强制推送要上传的文件。

执行结束后,可以刷新项目地址并查看从本地push仓库的内容。

Centos 7源代码安装配置 Apache 生产篇

什么是Apache?

Apache是​​互联网上最流行的网络web服务器。全球一半以上网站都是使用Apache作为服务器。其也是一个工业级的 Web服务器。

在本文中我主要介绍如何安装Apache HTTP服务器,你只要按照本教程的步骤操作,一定可以安装成功,需要说明的是,如果你只安装Apache,而不安装php,请在配置文件中,删除 FilesMatch 包含的内容,否则会报错找不到PHP。

如果你需要安装PHP/Mysql数据库,那么本站教程太适合你了,关于php和mysql的安装,请阅读:11、12步骤。

说明:本文教程适用于生产环境,Apache是基于FPM/FastCGI解析的PHP。

系统环境:Centos 7.4 Apache 2.4.29

1.更新系统

$ yum update && yum upgrade -y

2.安装扩展包以及依赖包

$ yum install epel-release -y
$ yum install gcc gcc-c++ openssl openssl-devel libtool expat-devel zlib-devel python-devel -y

3.安装pcre

$ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.41.tar.gz
$ tar zxvf pcre-8.41.tar.gz
$ cd pcre-8.41
$ ./configure
$ make -j8 && make install

4.安装nghttp2

$ wget //github.com/nghttp2/nghttp2/releases/download/v1.27.0/nghttp2-1.27.0.tar.gz
$ tar zxvf nghttp2-1.27.0.tar.gz
$ cd nghttp2-1.27.0
$ ./configure
$ make -j8 && make install
$ echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf
$ ldconfig

5.安装Apache httpd

创建用户与组并下载httpd apr apr-util安装包:

$ groupadd www
$ useradd -g www www
$ cd /tmp
$ wget //mirrors.shuosc.org/apache//httpd/httpd-2.4.29.tar.gz
$ wget //mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.6.3.tar.gz
$ wget //mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-util-1.6.1.tar.gz

解压相关包:

$ tar xvf httpd-2.4.29.tar.gz
$ tar xvf apr-1.6.3.tar.gz
$ tar xvf apr-util-1.6.1.tar.gz

apr-1.6.3apr-util-1.6.1移动到httpd-2.4.29/srclib目录下。操作如下:

$ cd httpd-2.4.29
$ cp -R ../apr-1.6.3 srclib/apr
$ cp -R ../apr-util-1.6.1 srclib/apr-util

注意:移动不准带版本号,否则编译安装时找不到库。

开始安装:

$ ./configure \
--prefix=/usr/local/apache \
--enable-mods-shared=most \
--enable-headers \
--enable-mime-magic \
--enable-proxy \
--enable-so \
--enable-rewrite \
--with-ssl \
--with-nghttp2 \
--enable-ssl \
--enable-deflate \
--with-pcre \
--with-included-apr \
--with-apr-util \
--enable-mpms-shared=all \
--with-mpm=prefork \
--enable-remoteip \
--enable-http2 \
--enable-dav \
--enable-expires \
--enable-static-support \
--enable-suexec \
--enable-modules=all \
$ make -j8 && make install

安装完成。

6.配置httpd.conf

$ cd /usr/local/apache/conf
$ vim httpd.conf

除默认配置外,请取消以下注释,开启相关模块:

LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule expires_module modules/mod_expires.so
LoadModule remoteip_module modules/mod_remoteip.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule http2_module modules/mod_http2.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
LoadModule suexec_module modules/mod_suexec.so
LoadModule rewrite_module modules/mod_rewrite.so

在模块结尾部分添加如下内容:

<IfModule http2_module>
ProtocolsHonorOrder On
Protocols h2 http/1.1
</IfModule>

修改以下参数配置

将用户组设置为:

User www
Group www

默认值:

#ServerName www.example.com:80

修改为:

ServerName 0.0.0.0:80

注意:如果基于端口创建虚拟主机,请换行加端口,然后在虚拟主机配置文件中指定端口即可。

将配置文件中的所有:

AllowOverride None

修改为:

AllowOverride All

在以下内容位置:

AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz

添加:

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

取消以下注释并添加apache支持python:

AddHandler cgi-script .cgi .py

取消以下注释:

Include conf/extra/httpd-mpm.conf
Include conf/extra/httpd-vhosts.conf
Include conf/extra/httpd-default.conf

以下内容在文件尾部添加

开启GZIP:

<IfModule mod_headers.c>
 AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript
 <FilesMatch "\.(js|css|html|htm|png|jpg|swf|pdf|shtml|xml|flv|gif|ico|jpeg)$">
 RequestHeader edit "If-None-Match" "^(.*)-gzip(.*)$" "$1$2"
 Header edit "ETag" "^(.*)-gzip(.*)$" "$1$2"
 </FilesMatch>
 DeflateCompressionLevel 6
 SetOutputFilter DEFLATE
</IfModule>

设置apache安全:

ProtocolsHonorOrder On
PidFile /usr/local/apache/logs/httpd.pid
ServerTokens ProductOnly
ServerSignature Off

引入虚拟主机配置文件:

IncludeOptional conf/vhost/*.conf

7.创建目录及虚拟主机配置文件

$ mkdir -p /usr/local/apache/conf/vhost
$ mkdir -p /data/apps/web/renwolecom
$ vim /usr/local/apache/conf/vhost/renwolecom.conf

插入以下内容:

<VirtualHost *:80>
 ServerAdmin webmaster@example.com
 DocumentRoot "/data/apps/web/renwolecom"
 ServerName www.renwole.com
 ServerAlias renwole.com
 errorDocument 404 /404.html
 ErrorLog "/usr/local/apache/logs/renwolecom-error_log"
 CustomLog "/usr/local/apache/logs/renwolecom-access_log" combined

<FilesMatch \.php$>
 SetHandler "proxy:unix:/tmp/php-cgi.sock|fcgi://localhost"
 </FilesMatch>

<Directory "/data/apps/web/renwolecom">
 SetOutputFilter DEFLATE
 Options FollowSymLinks
 AllowOverride All
 Require all granted
 DirectoryIndex index.php index.html index.htm default.php default.html default.htm
 </Directory>
</VirtualHost>

以上内容请根据自己的网站实际路径修改。

说明:如果没有域名,请将域名绑定部分修改为127.0.0.1,在http.conf中添加其他端口即可实现IP+端口访问,要记得防火墙放行端口。

注意:建议清空httpd-vhosts.conf中的内容,或者不开启引用,否则重启httpd服务时会有警告,但不影响使用,主要原因是找到默认配置中的网站目录路径。

8.创建system系统单元启动文件

$ vim /usr/lib/systemd/system/httpd.service

添加以下内容:

[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/usr/local/apache/bin/apachectl
Description=LSB: starts Apache Web Server
Before=runlevel2.target
Before=runlevel3.target
Before=runlevel4.target
Before=runlevel5.target
Before=shutdown.target
After=all.target
After=network-online.target
Conflicts=shutdown.target

[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
ExecStart=/usr/local/apache/bin/apachectl start
ExecStop=/usr/local/apache/bin/apachectl stop

9.加入开机自启/启动/停止/重启

$ systemctl enable httpd
$ systemctl start httpd
$ systemctl stop httpd
$ systemctl restart httpd

10.设置Firewalld防火墙

$ firewall-cmd --permanent --zone=public --add-service=http
$ firewall-cmd --permanent --zone=public --add-service=https
$ firewall-cmd --reload

接下来你就可以使用域名或IP访问你的网站了。

11.部署PHP篇

请参阅《Centos 7源码编译安装 php7.1 生产篇

12.部署Mysql篇

请参阅《Centos 7二进制安装配置 MariaDB(MySQL)数据库

Apache HTTP服务器的安装与配置至此已经结束,如果在安装配置过程中出现任何报错,请查看/usr/local/apache/logs/下的错误日志,以便你能快速解决所遇到的问题。

若还有其他指教,欢迎你的留言。

Ubuntu CentOS 7 源代码构建 Shadowsocks libev Servers

说明:本文相关配置和说明仅用于示例和操作指引,本站(任我乐)不对相关操作结果及由此产生的问题负责。

介绍:

Shadowsocks libev是目前唯一一个持续更新的版本,其他版本由于某些原因作者已经停止开发。Shadowsocks是一个轻量级的SOCKS5网络代理工具。与其他代理软件不同的是,Shadowsocks的流量被设计为从其他流量到第三方监控工具都难以分辨,并且能够将自己伪装成正常的直接连接。通过Shadowsocks传递的数据被加密,以提高安全性和隐私。

由于目前UbuntuCentOS没有Shadowsocks软件包,因此本指南将介绍如何从源代码构建Shadowsocks服务器。

说明:下面章节操作写了UbuntuCentOS的配置方案。本文概要说明在 CentOS 系统下的 Shadowsocks 配置。

1.安装 Shadowsocks-libev 服务器

项目地址://github.com/shadowsocks

更新系统存储库,下载并安装依赖扩展包:

CentOS 7.*:

$ yum update && yum upgrade -y
$ yum install epel-release -y
$ yum install -y gcc gettext autoconf libtool automake make pcre-devel asciidoc xmlto udns-devel libev-devel libsodium-devel mbedtls-devel git m2crypto c-ares-devel

Ubuntu 17.04:

$ apt-get update && apt-get upgrade -yuf
$ apt-get install -y --no-install-recommends gettext build-essential autoconf libtool libpcre3-dev asciidoc xmlto libev-dev libudns-dev automake libmbedtls-dev libsodium-dev git python-m2crypto c-ares-devel

在/mnt目录下载Shadowsocks Git模块:

$ cd /mnt
$ git clone //github.com/shadowsocks/shadowsocks-libev.git

Cloning into 'shadowsocks-libev'...
remote: Counting objects: 11147, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 11147 (delta 0), reused 3 (delta 0), pack-reused 11142
Receiving objects: 100% (11147/11147), 9.22 MiB | 71.00 KiB/s, done.
Resolving deltas: 100% (7305/7305), done.

$ cd shadowsocks-libev
$ git submodule update --init --recursive

开始安装:

$ ./autogen.sh
$ ./configure
$ make -j4 && make install

2.配置 Shadowsocks-libev 服务端

为 Shadowsocks 创建一个新的系统用户:

CentOS 7.*:

$ groupadd shadowsocks
$ useradd -g shadowsocks -s /bin/false shadowsocks

Ubuntu 17.04:

$ adduser --system --no-create-home --group shadowsocks

为配置文件创建一个新目录:

$ mkdir -m 755 /etc/shadowsocks-libev

创建Shadowsocks配置文件,将下面列出的内容粘贴到文件中:

$ vim /etc/shadowsocks-libev/shadowsocks.json

{
    "server":"My Server IP",
    "server_port":8388,
    "local_address": "127.0.0.1",
    "local_port":1080,
    "password":"mypassword",
    "timeout":300,
    "method":"aes-256-gcm",
    "fast_open": true
}

核心参数说明:

server:服务端监听地址(IPv4或IPv6)。
server_port:服务端端口,一般为443。
local_address:本地监听地址,缺省为127.0.0.1 可用-b参数设置。
local_port:本地监听端口,一般为1080。
password:用以加密的密匙。
timeout:超时时间(秒)。
method:加密方法。推荐使用AEAD算法。
fast_open:打开可以减少延迟。适用于系统内核kernel versions 3.7.1或更高版本。

3.优化 Shadowsocks libev 服务器

创建系统优化文件并将下面显示的内容粘贴到文件中。这些设置为Shadowsocks提供了最佳的内核配置。如果以前由于某种原因配置了系统内核设置,请确保不存在冲突。

$ vim /etc/sysctl.d/local.conf

fs.file-max = 51200
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.rmem_default = 65536
net.core.wmem_default = 65536
net.core.netdev_max_backlog = 4096
net.core.somaxconn = 4096

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_mtu_probing = 1

net.ipv4.tcp_congestion_control = hybla

net.ipv4.tcp_congestion_control = cubic

可选:

建议开启BBR拥塞算法优化。请参阅《CentOS 7系统开启BBR拥塞算法优化TCP加速服务器网络》。

应用优化生效:

$ sysctl --system

4.创建一个Shadowsocks Systemd服务单元文件

Shadowsocks systemd服务允许守护进程在系统启动时自动启动并在后台运行。

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

[Unit]
Description=Shadowsocks proxy server

[Service]
User=root
Group=root
Type=simple
ExecStart=/usr/local/bin/ss-server -c /etc/shadowsocks-libev/shadowsocks.json -a shadowsocks -v start
ExecStop=/usr/local/bin/ss-server -c /etc/shadowsocks-libev/shadowsocks.json -a shadowsocks -v stop

[Install]
WantedBy=multi-user.target

加入开机自起并启动:

$ systemctl daemon-reload
$ systemctl enable shadowsocks
$ systemctl start shadowsocks

5.为 Shadowsocks 客户端打开防火墙端口

根据您的偏好,您可以使用iptablesUFWFirewallD命令来完成本节:

Iptables:

$ iptables -4 -A INPUT -p tcp --dport 8388 -m comment --comment "Shadowsocks server listen port" -j ACCEPT

UFW:

$ ufw allow proto tcp to 0.0.0.0/0 port 8388 comment "Shadowsocks server listen port"

FirewallD:

$ firewall-cmd --permanent --zone=public --add-rich-rule=' rule family="ipv4" port protocol="tcp" port="8388" accept'
$ firewall-cmd --reload

ShadowSocks-libev 的服务端到目前为止已经完成安装。

关于Shadowsocks客户端的使用这里不在叙述。

vim 命令编辑 Hosts 文件 详细使用方法

用vim命令打开Hosts文件

$ vim /etc/hosts

按”i“键,进入编辑模式 按”Esc“键,退出编辑模式

按”Backspace“键,删除光标前一个字符
按”Delete“键,删除光标后一个字符
按”dd“键,删除当前行

按”yy“键,复制当前行
按”p“键,粘贴复制的内容到下一行

按”:wq“,保存退出
按”:x“,保存退出
按”:q!“,强行退出不保存

“上”键:光标移至上一行
“下”键:光标移至下一行
“左”键:光标移至左移一个字符
“右”键:光标移至右移一个字符

Home“键,光标移至当前行首
End“键,光标一直当前行尾

PgUp“,向上翻页
PgDn“,向下翻页

Zabbix 3.4 监控 MariaDB(MySQL) 数据库性能

先决条件:

首先你需要安装 Zabbix Servers 及 Zabbix-agentd 端:

Zabbix Servers 3.4 源代码编译安装
Centos 7 Zabbix Agent 客户端源码编译安装配置

1.配置 userparameter_mysql.conf

Zabbix源码中包含了 userparameter_mysql.conf 配置文件,只需要将其拷贝到zabbix_agentd.conf.d目录下:

$ find / -name userparameter_mysql.conf
$ cd /tmp/zabbix-3.4.2/conf/zabbix_agentd/
$ cp userparameter_mysql.conf /usr/local/zabbix/etc/zabbix_agentd.conf.d/

2.修改 zabbix_agentd.conf

因为我们将userparameter_mysql.conf文件放在了zabbix_agentd.conf.d目录,所以需要取消下面注释,这样Zabbix Agent才能够加载此文件

$ vim /usr/local/zabbix/etc/zabbix_agentd.conf
...
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf
...

注意:若 systemctl Zabbix-Agent.service 单元文件中已经加载此配置文件/路径,此步骤可以忽略。

3.创建监控 MariaDB(MySQL) 用户信息

MariaDB [(none)]> GRANT SELECT ON *.* TO 'zabbix'@'localhost' IDENTIFIED BY 'Renwolecom';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit
Bye

注意:MySQL用户权限可根据需求设置,可参考《Linux MariaDB(MySQL)数据库更改用户权限》。

4.创建 .my.cnf 文件,添加 MariaDB(MySQL) 用户信息

$ vim /usr/local/zabbix/etc/.my.cnf

# Zabbix Agent
[mysql]
host=localhost
user=zabbix
password="Renwolecom"
socket=/tmp/mysql.sock
[mysqladmin]
host=localhost
user=zabbix
password="Renwolecom"
socket=/tmp/mysql.sock

5.修改 userparameter_mysql.conf

修改后的内容如下:

$ cd /usr/local/zabbix/etc/zabbix_agentd.conf.d/
$ egrep -v "(^#|^$)" userparameter_mysql.conf

UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/usr/local/zabbix/etc/ /usr/local/mysql/bin/mysql -N | awk '{print $$2}'
UserParameter=mysql.size[*],bash -c 'echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema=\"$1\"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name=\"$2\"");" | HOME=/usr/local/zabbix/etc mysql -N'
UserParameter=mysql.ping,HOME=/usr/local/zabbix/etc/ /usr/local/mysql/bin/mysqladmin ping | grep -c alive
UserParameter=mysql.version,/usr/local/mysql/bin/mysql -V
UserParameter=mysql.vars[*],echo "show variables where Variable_name='$1';" | HOME=/usr/local/zabbix/etc/ /usr/local/mysql/bin/mysql -N | awk '{print $$2}'

注:以上内容请注意相关绝对路径。

6.重启 Zabbix-Agent 服务

$ systemctl restart zabbix-agent

最后在 Zabbix UI界面中添加MySQL监控模板即可。

Zabbix Servers 3.4 源代码编译安装

PS:

其实安装zabbix很简单,网上资料一搜一大把,基本都是采用yum方式安装,简单省事。正因如此我没写相关配置文档,安装方式一般用yum安装或源码安装亦或是容器安装,最近有网友提出来了,我认真对待,撰写 Linux Centos 7 Zabbix 编译安装的全过程(Zabbix服务端)。后期我也会写一些关于Zabbix 使用及优化方面的文章。

官介:

Zabbix是一个企业级的分布式开源监控解决方案。它可以监控各种网络应用以及服务器健康性和完整性的软件。Zabbix服务器将其数据存储在由MySQL、MariaDB、PostgreSQL或Oracle支持的关系型数据库中,Zabbix所有的报告、统计信息和配置参数都可以通过基于Web的前端页面进行访问设置。而且Zabbix是开源免费的。

1.安装环境(Hyper-V 虚拟机):

$ hostnamectl
 Static hostname: localhost.localdomain
 Icon name: computer-vm
 Chassis: vm
 Machine ID: renwoles1d8743989a40cb81db696400
 Boot ID: renwoles272f4aa59935dcdd0d456501
 Virtualization: microsoft
 Operating System: CentOS Linux 7 (Core)
 CPE OS Name: cpe:/o:centos:centos:7
 Kernel: Linux 3.10.0-514.2.2.el7.x86_64
 Architecture: x86-64

2.由于Zabbix UI前端使用 PHP 写的,所以必须运行在支持PHP脚本语言的Web服务器,先决条件:

Centos 7 编译安装nginx
Centos 7 编译安装PHP 7 之生产篇
Linux JAVA JDK JRE 环境变量安装与配置
Centos 7 二进制安装 MariaDB(MySQL)数据库

3.若您的服务器已具备 PHP 环境,请略过第 2 步骤,继续以下配置:

配置 php.ini 必须满足以下要求:

max_execution_time = 300
max_input_time = 300
memory_limit = 128M
post_max_size = 32M
date.timezone = Asia/Shanghai
mbstring.func_overload=2
#Zabbix PHP LDAP 认证开启(可选)
extension = "/usr/local/php/lib/php/extensions/no-debug-zts-20160303/ldap.so"

4.安装依赖包并创建组&用户

$ yum -y install epel-release && yum -y update
$ yum install -y net-snmp-devel OpenIPMI-devel libssh2-devel iksemel-devel
$ groupadd zabbix
$ useradd -g zabbix zabbix

5.安装 Zabbix Server

下载地址://www.zabbix.com/download

$ cd /tmp
$ tar -zxvf zabbix-3.4.2.tar.gz
$ cd zabbix-3.4.2
$ ./configure --prefix=/usr/local/zabbix \
--sysconfdir=/usr/local/zabbix/etc \
--enable-server \
--enable-agent \
--with-mysql=/usr/bin/mysql_config \
--with-net-snmp \
--with-libcurl \
--with-libxml2 \
--enable-proxy \
--enable-ipv6 \
--enable-java \
--with-ssh2 \
--with-iconv \
--with-openipmi \
--with-ldap \
--with-openssl \
--with-jabber \

$ make
$ make install

注意:–enable-agent 可选,此参数主要用于客户端(被监控者)。

注意:如你未安装JAVA环境,请去掉 –enable-java 选项,主要用于监控Tomcat。

6.创建并赋予 Zabbix 配置文件目录权限

$ mkdir -p /usr/local/zabbix/logs
$ chown -R zabbix.zabbix /usr/local/zabbix

7.将 Zabbix UI 前端程序源码拷贝到 Nginx Web 目录

$ cp -rf /tmp/zabbix-3.4.2/frontends/php/* /apps/web/zabbix
$ chown -R www.www /apps/web/zabbix

8.创建数据库名:zabbix 用户:zabbix 密码:renwolecom 并赋予用户拥有该数据库所有权限:

$ mysql -uroot -p
Enter password:(输入root数据库密码回车)
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@"%" identified by 'renwolecom';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit;

9.将Zabbix相关结构表文件按顺序依次导入zabbix数据库

导入顺序 schema.sql 表结构 > images.sql 图片库 > data.sql 初始脚本

$ cd /tmp/zabbix-3.4.2/database/mysql
$ mysql -uzabbix -prenwolecom zabbix < schema.sql
$ mysql -uzabbix -prenwolecom zabbix < images.sql
$ mysql -uzabbix -prenwolecom zabbix < data.sql

10.配置 zabbix_server.conf

配置完成后的内容如下:

$ egrep -v "^$|^#|^;" /usr/local/zabbix/etc/zabbix_server.conf
LogFile=/usr/local/zabbix/logs/zabbix_server.log
PidFile=/usr/local/zabbix/zabbix_server.pid
LogFileSize=0
DBHost=10.10.204.62
DBName=zabbix
DBUser=zabbix
DBPassword=renwolecom
JavaGateway=10.10.204.62
JavaGatewayPort=10052
StartJavaPollers=5
StartPingers=4
Timeout=4
AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts
LogSlowQueries=3000
Include=/usr/local/zabbix/etc/zabbix_server.conf.d/

注意:由于每个生产环境的参数配置不同,所以配置文件我只列出基本常用的,查看更多配置参数是说明

11.创建 systemctl 系统 Zabbix servers 单元文件

$ vim /usr/lib/systemd/system/zabbix.service
[Unit]
Description=Zabbix Server
After=syslog.target
After=network.target

[Service]
Environment="CONFFILE=/usr/local/zabbix/etc/zabbix_server.conf"
EnvironmentFile=-/usr/local/zabbix/etc/zabbix_server.conf.d
Type=forking
Restart=on-failure
PIDFile=/usr/local/zabbix/zabbix_server.pid
KillMode=control-group
ExecStart=/usr/local/zabbix/sbin/zabbix_server -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
TimeoutSec=0

[Install]
WantedBy=multi-user.target

12.启动 zabbix 并加入开机自起动

$ systemctl start zabbix
$ systemctl enable zabbix

13.Firewalld 防火墙设置

$ firewall-cmd --permanent --add-port=10051/tcp
$ firewall-cmd --permanent --add-port=80/tcp
$ firewall-cmd --reload

安装完成。

接下来,你可以使用 IP 或域名访问 Zabbix 监控管理系统,具体设置,请根据 Zabbix Server Web 向导提示设置即可。

设置完成后,zabbix默认账号:Admin 密码:zabbix(注意账号区分大小写)登录后是英文界面, 只需点击右上角的小人图标(当前用户设置)定位到 Language 项,选择 Chinese (zh_CN),点击 Update 即可切换为中文界面。

关于Zabbix代理客户端,请参阅《Centos 7 Zabbix Agent 客户端源码编译安装配置》。