构架服务端与客户端环境搭建
[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