环境搭建,基础优化,rsync

构架服务端与客户端环境搭建

[if !supportLists]一、[endif]搭建构架虚拟机优化流程


[if !supportLists]1、[endif]服务器搭建与基础优化

规范目录:mkdir -p /server/tools      #存放工具包安装路径

          mkdir -p /server/scripts    #脚本存放目录


2、配置所有主机域名解析:

cat >/etc/hosts<

127.0.0.1    localhost localhost.localdomain localhost4localhost4.localdomain4

::1          localhost localhost.localdomainlocalhost6 localhost6.localdomain6

172.16.1.5 lb01

172.16.1.6 lb02

172.16.1.7 web01

172.16.1.8 web02

172.16.1.9 web03

172.16.1.31 nfs01

172.16.1.41 backup

172.16.1.51 db01 db01.etiantian.org

172.16.1.61 m01

EOF


3、基础优化操作项:更新yum源信息

第一个:就近使用yum源地址,安装软件更快。

curl -s -o/etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

第二个:安装RHEL/CentOS官方源不提供的软件包

curl -s -o /etc/yum.repos.d/epel.repohttp://mir


4、安全优化

# (1)关闭selinux

sed -i's#SELINUX=.*#SELINUX=disabled#g' /etc/selinux/config

sed -i's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

grep SELINUX=disabled/etc/selinux/config

setenforce 0

getenforce


# (2)关闭firewalld防火墙服务

systemctl stop firewalld

systemctl disable firewalld


5.基础优化操作项:设置普通用户提权操作(可选优化)

# 提权oldboy可以利用sudo

useradd oldboy

echo 123456|passwd --stdin oldboy

\cp /etc/sudoers /etc/sudoers.ori

echo "oldboy  ALL=(ALL) NOPASSWD: ALL ">>/etc/sudoers

tail -1 /etc/sudoers

visudo -c


7.基础优化操作项:时间同步设置

# 设置系统时间同步

yum install ntpdate -y   #安装ntpdate时间同步软件

/usr/sbin/ntpdate ntp3.aliyun.com  #同步时间网址


echo '#crond-id-001:time sync byoldboy' >>/var/spool/cron/root

echo "*/5 * * * */usr/sbin/ntpdate ntp3.aliyun.com >/dev/null2>&1">>/var/spool/cron/root

crontab -l


8.基础优化操作项:提升命令行操作安全性(可选优化)

# 提升命令行安全(可选配置)

echo 'export TMOUT=300'>>/etc/profile

echo 'export HISTSIZE=5'>>/etc/profile

echo 'export HISTFILESIZE=5'>>/etc/profile

tail -3 /etc/profile

. /etc/profile    # .代表确认


9.基础优化操作项:加大文件描述符

# 实例演示:加大文件描述

echo '*               -       nofile          65535 '>>/etc/security/limits.conf

tail -1 /etc/security/limits.conf

ulimit -SHn   65535

ulimit -n     #<==命令方式查看配置结果


10.基础优化操作项:优化系统内核


cat >>/etc/sysctl.conf<

net.ipv4.tcp_fin_timeout = 2

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_keepalive_time = 600

net.ipv4.ip_local_port_range =4000    65000

net.ipv4.tcp_max_syn_backlog = 16384

net.ipv4.tcp_max_tw_buckets = 36000

net.ipv4.route.gc_timeout = 100

net.ipv4.tcp_syn_retries = 1

net.ipv4.tcp_synack_retries = 1

net.core.somaxconn = 16384

net.core.netdev_max_backlog = 16384

net.ipv4.tcp_max_orphans = 16384

#以下参数是对iptables防火墙的优化,防火墙不开会提示,可以忽略不理。

net.nf_conntrack_max = 25000000

net.netfilter.nf_conntrack_max =25000000

net.netfilter.nf_conntrack_tcp_timeout_established= 180

net.netfilter.nf_conntrack_tcp_timeout_time_wait= 120

net.netfilter.nf_conntrack_tcp_timeout_close_wait= 60

net.netfilter.nf_conntrack_tcp_timeout_fin_wait= 120

net.core.wmem_default = 8388608

net.core.rmem_default = 8388608

net.core.wmem_max = 16777216

net.core.rmem_max = 16777216

EOF

sysctl -p    #检查内核信息


11.基础优化操作项:安装系统常用软件

CentOS6和CentOS7都要安装的企业运维常用基础工具包

yum install tree nmap dos2unix lrzsz nclsof wget tcpdump htop iftop iotop sysstat nethogs -y

CentOS7要安装的企业运维常用基础工具包

yum install psmisc net-toolsbash-completion vim-enhanced -y


#  13.扩展优化操作项-修改yum.conf文件配置信息

保留yum安装的软件包

将/etc/yum.conf中的keepcache=0改为keepcache=1,为日后一键安装网站集群留好rpm及依赖工具包。


#  14.锁定关键系统文件如/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow、/etc/inittab,

处理以上内容后把chattr、lsattr改名为oldboy,转移走,这样就安全多了。


#  15.清空/etc/issue、/etc/issue.net,去除系统及内核版本登录前的屏幕显示。


16、增加虚拟机网卡(工作中之只有一块网卡,不需要增加第二块网卡)







[if !supportLists]2、[endif]修改网卡地址

#vim /etc/sysconfig/network-scripts/ifcfg-eth0 #和eth1修改IP

[if !supportLists]3、[endif]修改主机名称

#hostnamectl set-hostname     加主机名


=====================================================================


[if !supportLists]二、[endif]rsync服务端与客户端配置

本地(local)

rsync就是一个命令

rsync     [OPTION...]          SRC...      [DEST]

rsync命令 参数选项   [源目录或文件]    目的目录或文件

rsync服务 数据同步服务

rsync 三种模式


 2.远程shell模式

 3.守护进程模式


rsync命令:rsync命令参数:


-v, --verbose  显示输出过程

-z, --compress 压缩

-a, --archive  多参数集合(-rtopgDl)

-r, --recursive 递归

-t, --times    保持修改时间属性

-o, --owner    保持属主不变

-p, --perms    保持权限不变

-g, --group    保持用户组不变

-l, --links    保持拷贝软连接

-q, --quiet    安静的拷贝

--bwlimit=KBPS 限制I/O带宽,KBytes per second。

--delete       删除

--exclude      排除

--exclude-from 从文件中排除


企业常用参数组合:-avz或者-vzrtopg


rsync守进程模式应用实践

1、rsync服务端配置

安装:rsync –version       #显示rsync版本,检查是否安装

rsync version 3.1.2  protocol version 31


2、配置文件/etc/rsyncd.conf

备份cp /etc/rsyncd.conf{,.ori}


cat>/etc/rsyncd.conf<

#rsync_config_______________start

#created by oldboy

#site: http://www.oldboyedu.com

uid = rsync

gid = rsync

use chroot = no

max connections = 200

timeout = 600

fake super = yes

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

ignore errors

read only = false

list = false

hosts allow = 172.16.1.0/24

hosts deny = 0.0.0.0/32

auth users = rsync_backup

secrets file = /etc/rsync.password

[backup]

comment = welcome to oldboyedu backup!

path = /backup/

EOF

[if !vml]

[endif]

改完配置,要重启服务:

#systemctlrestart rsyncd


3、创建用户和备份目录

#useradd rsync #<<创建得是虚拟用户

#id rsync

uid=1001(rsync) gid=1001(rsync) 组=1001(rsync)

mkdir -p /backup  #<<<创建共享目录

chown -R rsync.rsync /backup/ #<<<将共享目录属主和属组设置成刚创建得虚拟用户


[if !supportLists]4、[endif]rsyncd启动和检查

启动:         systemctl start  rsyncd #<<<<启动rsyncd

设置开机自启动:systemctl enable rsyncd  

检查是否启动: systemctl status rsyncd 


如何查看某端口对应什么服务?

   ps -ef|grep sync|grep -v grep  #检查进程

   netstat -lntup|grep 873 #检查端口

lsof -i :873 #检查端口


[if !supportLists]5、[endif]配置密码文件

echo "rsync_backup:oldboy" > /etc/rsync.password

#<<将密码写入password

chmod 600 /etc/rsync.password  #<<<将密码文件设置成可读可写

cat /etc/rsync.password        #<<<查看设置得密码

ls -l /etc/rsync.password      #<<<查看权限是否设置正确


rsync服务端配置完成。


=====================================================================1、客户端配置

[if !supportLists](1)  [endif]认证密码文件

echo "oldboy"> /etc/rsync.password

cat /etc/rsync.password

chmod 600/etc/rsync.password

ls -l/etc/rsync.password



rsync客户端配置完成


[if !supportLists]三、[endif]推拉测试


[if !supportLists]1、[endif]从本地推去到远端

语法格式:

 #rsync -avz 文件路径 rsync_ 用户名@主机地址::模块名

[if !supportLists]2、[endif]从客户端拉到本地服务端

语法格式

   #rsync-avz  rsync://虚拟用户@主机地址/模块名 本地路径



[if !supportLists]四、[endif]定期备份数据脚本并添加指纹定期打包推送,并删除7天以前得

脚本格式

#!/bin/sh


exportPATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"

exportRSYNC_PASSWORD=oldboy

IP=$(hostname-i)

mkdir-p /backup/$IP

#1.打包

tarzchf /backup/$IP/bak_${IP}_$(date +%F_%w).tar.gz /var/spool/cron/root/etc/rc.local /server/scripts /var/html/www /app/logs &>/dev/null&&\

touch/backup/$IP/bak_${IP}_$(date +%F_%w).flag &&\

#采集指纹

find/backup/ -type f -name "*.tar.gz"|xargs md5sum>/backup/$IP/bak_${IP}_$(date +%F_%w).flag &&\

#2.删除

find/backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm -f &&\

#3.推送

rsync-az /backup/ [email protected]::backup &>/dev/null


[if !supportLists]五、[endif]nfs共享储存

1、什么是NFS?

全称network file system 网络文件系统

通过网络存储和组织文件的一种方法或机制。

什么是文件系统?

2、为什么要用共享存储?

前端所有的应用服务器接收到用户上传的图片、文件、视频,都会统一

的放到后端的存储上。

为什么要共享?所有节点服务器都需要将内容存到存储上,取的统一来取。

3、共享存储的种类

单点存储系统就是NFS,中小型企业,阿里云服务的NAS服务,OSS对象存储。

NFS性能不太高。

大型企业会用分布式存储FastDFS、Ceph、GlsterFS、Mfs

大型存储厂商:EMC、Netapp 几十万。

艺龙旅行网 存储用的EMC 传统企业。

硬件存储:传统企业:稳定、2台 双主机头 几十块硬盘 RAID10。

BAT 曾经用硬件,超贵、

阿里云 去IOEIbm Orace EMC

4、NFS工作原理

NFS网络文件系统

启动NFS服务,而且还有启动很多端口。

NFS功能,需要很多服务。每个服务都有端口,而且经常变化。

如何让客户端找到这些端口呢?就需要一个经纪人(rpc服务)

NFS服务:

1、NFS服务(有很多进程和端口),把自己的端口告诉RPC。

2、RPC服务(对外固定端口111)

客户端请求NFS服务,先找RPC 111,查到NFS的端口,发给客户。


# nfs服务服务器端客户端安装

 yum install nfs-utils rpcbind -y    #<<<<安装nfs、rpcbind服务

rpm

-qa nfs-utils rpcbind #<<<<安装前或安装后检查是否存在nfs、rpcbind服务

启动rpc

systemctlstart rpcbind.service     #<<<<<,启动

systemctlenable rpcbind.service    #<<<<<开机自启

看看有没有注册的端口

rpcinfo-p 127.0.0.1  #<<<<127.0.0.1(代表主机主机ip)

启动NFS服务

systemctlstart nfs     #<<<<<,启动

systemctlenable nfs     #<<<<<开机自启

看看有没有注册端口

rpcinfo-p 127.0.0.1  


六、

为什么fstab无法实现nfs挂载?

回顾:开机启动流程:

1、磁盘先启动/etc/fstab

2、防火墙在前。

3、网卡


systemctl

start remote-fs.target   #<<<<开机自动挂载配置文件

systemctlenable remote-fs.target  #<<<<开机自启动

systemctlstatus remote-fs.target  #<<<<查看服务是否开启

 

(1)权限

   rw可读写readwrite

   ro只读read only

   sync写到磁盘才算完成,安全 慢

   async异步写到远程缓冲区,快 不安全

       一会再说。

   all_squash※不管客户端什么用户,到服务端都是nfsnobody

   anonuid=匿名用户的UID

   anongid=匿名用户的GID

项目实践2:

   NFS共享的匿名用户用www,使得客户端上传的图片都是www用户,而不是匿名的nfsnobody。

   web01 backup客户端实现挂载到nfs

   NFS下面共享/backup ,允许web01 backup客户端(/backup)可读写.

   web01上传图片,backup上可以删除web01上传的图片。

      NFS下面共享/data1,允许 web01 backup客户端10网段只读(data1)

   实现开机自动挂载

(1)nfs01服务端NFS、以及所有客户端:

[root@nfs01~] # useradd -u 1111 www

[root@nfs01~] # id www

uid=1111(www)

gid=1111(www) 组=1111(www)

(2)服务端NFS特殊配置

[root@nfs01~] # tail -2 /etc/exports

/data 172.16.1.0/24(rw,sync,all_squash,anonuid=1111,anongid=1111)

/data110.0.0.0/24(ro)

[root@nfs01~] # chown -R www.www /data

[root@nfs01~] # ls -ld /data

drwxr-xr-x

2 www www 70 4月 18 10:05 /data


(3)服务端NFS重启

[root@nfs01~] # systemctl reload nfs

(4)每个客户端

mount-t nfs 172.16.1.31:/data /data

[root@web01~]# df -h

文件系统           容量  已用  可用 已用% 挂载点

172.16.1.31:/data   19G 1.8G   18G   10% /data


[root@web01/data]# touch new_web01.txt

[root@web01/data]# ls -l

总用量0

-rw-r--r--

1 www www 0 4月 16 10:24 ddddf

-rw-r--r--

1 www www 0 4月 16 10:23 dddfff

-rw-r--r--

1 www www 0 4月 18 11:01 new_web01.txt

-rw-r--r--

1 www www 0 4月 17 11:59 oldboy.txt

-rw-r--r--

1 www www 0 4月 17 12:30 oldgirl.txt

安全加优化的挂载方式如下:

mount-t nfs -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072172.16.1.31:/data /mnt


七、实时复制实践

实时复制实践:

前提:backup

rsync服务端部署好。

[root@nfs01~]# echo 'export RSYNC_PASSWORD=oldboy' >>/etc/bashrc

[root@nfs01~]# source /etc/bashrc

[root@nfs01~]# echo $RSYNC_PASSWORD

Oldboy

测试推送

[root@nfs01~]# rsync -avz /data [email protected]::backup/

查看inotify支持情况

[root@nfs01~]# uname -r

[root@nfs01~]#  ls -l /proc/sys/fs/inotify/

总用量0

-rw-r--r--

1 root root 0 4月 19 09:45 max_queued_events

-rw-r--r--

1 root root 0 4月 19 09:45 max_user_instances

-rw-r--r--

1 root root 0 4月 19 09:45 max_user_watches

安装inotify-tools

yuminstall epel-release -y

yuminstall inotify-tools –

[root@nfs01~]# rpm -ql inotify-tools|head -2

/usr/bin/inotifywait

/usr/bin/inotifywatch


[root@nfs01~]# rpm -qa inotify-tools

inotify-tools-3.14-8.el7.x86_64


测试实践

inotifywait-mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create /data


实现数据复制

监控哪些事件?

增 改 删 需要监控

[root@nfs01~]# inotifywait -mrq --format '%w%f' -e close_write,delete /data

/data/a.txt

/data/a.txt

/data/a.txt


编写脚本

mkdir/server/scripts -p

rsync

-az --delete /data/ [email protected]::backup


[root@nfs01/server/scripts]# /bin/sh /server/scripts/monitor1.sh &


[root@nfs01/server/scripts]# tail -2 /etc/rc.local

########################

/bin/sh/server/scripts/monitor1.sh &



sersync实践:

1)客户端推送成功

rsync

-az /data [email protected]::backup


2)部署sersync服务(NFS)

wget https://github.com/wsgzao/sersync/blob/master/sersync2.5.4_64bit_binary_stable_final.tar.gz


sersync_oldboy_64bit_20160928.tar.gz


mkdir/application -p

[root@nfs01/server/tools]# sersync_oldboy_64bit_20160928.tar.gz

[root@nfs01/server/tools]# mv application/sersync /application/

[root@nfs01/server/tools]# tree /application/

/application/

└──sersync

    ├── bin

    │   └──sersync

    ├── conf

    │   ├──confxml.xml

    │   └──confxml.xml.ori

    ├── logs

    │   └──rsync_fail_log.sh

    └── readme.txt


4directories, 5 files


[root@nfs01/server/tools]# cd /application/sersync/

[root@nfs01/application/sersync]# ls

bin  conf logs  readme.txt

[root@nfs01/application/sersync]# cd conf/

[root@nfs01/application/sersync/conf]# ls

confxml.xml  confxml.xml.ori


3)sersync配置文件:干两件事:


1)完成监控配置:

inotifywait-mrq --format '%w%f' -e createFolder,close_write,delete,moveFrom,moveTo /data

2)完整命令拼接:

rsync

-az /data --timeout=100 [email protected]::backup


4)启动服务

[root@nfs01/application/sersync/conf]# ../bin/sersync -h

setthe system param

execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches

execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events

parsethe command param

______________________________________________________

参数-d:启用守护进程模式

参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍

c参数-n: 指定开启守护线程的数量,默认为10个

参数-o:指定配置文件,默认使用confxml.xml文件

参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块

参数-m:单独启用其他模块,使用 -m socket 开启socket模块

参数-m:单独启用其他模块,使用 -m http 开启http模块

不加-m参数,则默认执行同步程序

________________________________________________________________

[root@nfs01/application/sersync/conf]# /application/sersync/bin/sersync -d -n 10 -o/application/sersync/conf/confxml.xml

最终

/application/sersync/bin/sersync-d

pkillsersync

二进制程序,不是yum安装的,所以不能systemctl start sersync


配置:systemctl

start sersync启动方案

https://blog.51cto.com/oldboy/2155931


[root@nfs01/data]# tail -1 /etc/rc.local

/application/sersync/bin/sersync-d



配置:systemctl

start sersync启动方案

https://blog.51cto.com/oldboy/2155931


[root@nfs01/data]# cat /etc/rc.d/init.d/sersync

#!/bin/bash

#chkconfig: 2345 21 81

#description: rsync service start and stop scripts

#Author: oldboy

#Organization: www.oldboyedu.com


start(){

    /application/sersync/bin/sersync -d -o/application/sersync/conf/confxml.xml &>/dev/null

}

stop(){

    killall sersync 2>/dev/null

}

case"$1" in

    start)

        start

        ;;

    stop)

        stop

        ;;

    restart)

        stop

        sleep 2

        start

        ;;

    *)

        echo $"Usage:$0{start|stop|restart}"

        exit 1

esac


chmod+x /etc/rc.d/init.d/sersync


[root@nfs01/data]# cat /usr/lib/systemd/system/sersync.service

[Unit]

Description=sersyncdservice

After=network.target


[Service]

Type=forking          

ExecStart=/etc/rc.d/init.d/sersyncstart  

ExecReload=/etc/rc.d/init.d/sersyncrestart

ExecStop=/etc/rc.d/init.d/sersyncstop    

PrivateTmp=true


[Install]

WantedBy=multi-user.target


chmod+x /usr/lib/systemd/system/sersync.service


[root@nfs01/data]# systemctl enable sersync.service

Createdsymlink from /etc/systemd/system/multi-user.target.wants/sersync.service to/usr/lib/systemd/system/sersync.service.


[root@nfs01/data]# systemctl status sersync.service

●sersync.service - sersyncd service

   Loaded: loaded(/usr/lib/systemd/system/sersync.service; enabled; vendor preset: disabled)

   Active: inactive (dead)


[root@nfs01/data]# systemctl stop sersync

[root@nfs01/data]# ps -ef|grep sersync|grep -v grep

[root@nfs01/data]# systemctl start sersync

你可能感兴趣的:(环境搭建,基础优化,rsync)