学习目标和内容
根据业务发展需求,业务网站架构已经发展到以上模式。实现了线上服务的提供,可以给用户提供稳定的整个的web服务。但是,在最近的操作中,也发现了一些问题。
①当业务代码发生改变上传到web服务器时,因为架构已经不是单台服务器提供服务器,而是由多台web服务器提供服务,业务代码需要同时上传到多台web服务器,在操作上带来了很多不便。
故需要解决以上问题, 就需要web服务器中的业务代码能够及时同步,保证业务代码的一致性。
web1服务器/usr/local/nginx/html/tp5shop
web2服务器/usr/local/nginx/html/tp5shop
①scp
scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令 全量同步
问题:全部复制过去 比较慢 效率低一些 scp不能够远程删除
②rsync
rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快 增量同步
问题:当文件变动,不能够实时同步
③rsync+sersync
inotify-tools和sersync属于同类
sersync是基于inotify+rsync的大量文件的多服务器自动同步程序
使用 Linux 2.6 内核的 inotify 监控 Linux 文件系统事件,被监听目录下如果有文件发生修改,sersync 将通过内核自动捕获到事件,并将该文件利用 rsync 同步到多台远程服务器。sersync 仅仅同步发生增、删、改事件的单个文件或目录,不像rsync镜像同步那样需要比对双方服务器整个目录下数千万的文件,并且支持多线程同步,因此效率非常高
sersync主要用于服务器同步,web镜像等功能。基于boost1.43.0,inotify api,rsync command.开发
特点:
1、sersync是使用c++编写,而且对linux系统文件系统产生的临时文件和重复的文件操作进行过滤(详细见附录,这个过滤脚本程序没有实现),所以在结合rsync同步的时候,节省了运行时耗和网络资源。因此更快。
相比较上面两个项目,sersync配置起来很简单,其中bin目录下已经有基本上静态编译的2、二进制文件,配合bin目录下的xml配置文件直接使用即可。
另外本项目相比较其他脚本开源项目,使用多线程进行同步,尤其在同步较大文件时,能够保证多个服务器实时保持同步状态。
4、本项目自带crontab功能,只需在xml配置文件中开启,即可按您的要求,隔一段时间整体同步一次。无需再额外配置crontab功能。
5、本项目socket与http插件扩展,满足您二次开发的需要。
源服务器 web1 server01 修改文件在这里 192.168.17.100
目标服务器 web2 server03 同步源服务器的数据 192.168.17.104
语法:scp 本地文件路径 用户名\@远程IP:远程存储路径
由于需要远程登录,故需要输入密码不是很方便,添加机器的公钥到允许列表中
①生成公钥(源服务器)
shell > ssh-keygen
②添加公钥到允许文件(源服务器)
web2允许web1登录,不需要输入密码
③测试远程登录
④测试修改业务代码
源服务器操作
⑤通过scp推送同步
源服务器操作
shell > scp -r /usr/local/nginx/html/tp5shop root\@192.168.17.102:/usr/local/nginx/html
可以把以上推送命令,写入到脚本中,业务代码变化之后,直接执行脚本就可以
①web1文件变动
②在web1执行推送
shell > rsync -av /usr/local/nginx/html/tp5shop root\@192.168.17.102:/usr/local/nginx/html
③在web2上查看
--delete
delete extraneous files from destination dirs
从目的地目录删除无关文件
以上操作,可以增量同步,删除已经无关的文件。
问题:不能够文件被变动就同步,想折中的版本通过计划任务(crontab),crontab默认一分钟
①添加到脚本中
注意执行权限
②添加计划任务
③查看计划任务日志
rsync同步 web2
sersync 监控触发同步 web1
参看markdown文件
单点服务器满足基本业务需求,用户可以通过线上服务访问网站业务
①多个业务软件,同时在一个服务器,会有资源争抢的现象
②数据库服务器,数据是最重要的,需要单独进行管理
数据库服务器进行严格的权限要求。
特定的用户操作特定库 一个业务一个用户
HA 高可用 多个(起码两个以上)服务器节点,如果单点服务器出现问题,就由其他服务器进行接管服务。整个业务服务,是高度可用的。业务不受影响
VIP 虚拟IP 多台服务器,同时争抢一个IP
vrrp arp rarp 网卡mac地址 => IP 确定VIP是否被绑定
unicast_peer 1.2.8以后
使用keepalived
主master备backup 默认主优先
双备 优先级 可以设置不争抢
互为主备 负载均衡时搭建的
单点web服务器,已经不能够满足业务流量需求,需要增加服务器同时进行提供业务服务
SLB server load blance 把业务流量[平均]分配(分发)到多台服务器
主从类型: M-S M-S-S M S S S M-M
一主多从的使用最多
延时复制 从同步主的延迟时间,作为误操作的一个备份
半同步 默认主从是异步,为了保证数据实时一致性,主确认从已经写入relay-log,才完成写入,返回用户,有一个等待时间
mysql的安全权限控制
grant 权限 on 数据库.数据表 to 用户名\@主机 idetified by ‘密码’;
revoke
日志(错误、二进制、中继、慢查询[mysql优化]) 备份
二进制日志开启: bin-log = 存储路径和名称 server-id 服务器唯一识别标识
备份:tar 打包 mysqldump xtrabackup innobackupex、
备份的影响:冷备份 温备份 热备份
备份的类型:物理(copy) 逻辑(sql导出再执行)
备份的粒度:全量 增量
主从复制:bin-log
slave 通过读取master的bin-log 写入relay-log中,再进行重放操作,复制同步数据。
默认异步线程的
master
①开启bin-log server-id 1
②授权slave replication slave 权限
③mysql > show master status;
slave
①配server-id 2
②配置slave服务
mysql > stop slave
mysql > change master masterhost ,masteruser · ········
日志文件名称 logfile 日志记录位置 position
mysql > start slave;
mysql > show slave status\G;
两个yes,一个yes就看看下面的报错信息,解决
S 用来读
M 又读又写 来回切换模式,效率不高
M写 S读 读写分离 S down 为了业务可用性 M可以提供读服务
实现读写分离的两种方式:
①业务代码分离
②中间件(mycat)
mycat java编写
jdk
mycat两种:
双写 writeHost writeHost M宕机 S不影响,可以读
单写单读 writeHost readHost M宕机 S不可用
mycat 客户端口 8066
管理端口 9066 mysql > show \@\@heartbeat;
①LB的业务模式下,session出现不能够访问的情况
ip_hash session入库 memcached
②高速内存缓存软件 缓存了首页的category栏目数据
memcached
nosql key=>value
内存存储数据 要注意数据的备份
memcached redis key=>value store
mongodb doucument store
默认允许在11211端口
./memcached -uroot -d -p 11211 -m 内存大小 -M 禁用LRU机制
存储缓存机制
①懒惰机制 当key过期后,不会直接删除 当被使用时,确认过期,才会删除
节省系统的资源
②LRU 如果一个key存储的时候,发现存储空间不足。先删除已经过期的key,删了已经过期key还是不能够存储。会删除最近最少使用的key。删除这个key,存储新的key。
这个也是缓存的一种理想模式。不用的话,就没有必须占用内存空间
-M 可以禁用LRU
$mem = new memcached();
$mem->connect(ip,port);
$mem->get(‘category’);
if(!category){
}
redis比memcache
①数据类型丰富
string 缓存字符串 计算器 incr
list 可以进行数据的双向操作
set 交集 并集 差集 sns 好友圈
zset 排序 score 权排序 score从大到小 或者从小到大 控制排序也就是控制score的大小
hash key:(field:value)
②数据持久化 snappshotting 快照 dump.rdb save
save 900 1
save 300 10
save 60 10000
aof append only file 文件追加写
每次 每秒 根据系统资源情况 闲时
③redis 主从模式
④redis默认存储1G memcached 1M
⑤redis 单核 memcached 多核
redis hash 效果高 压缩高 返回数据快
memcached 超过100k以上,效果好一些
一般使用,缓存都可以 它们的每秒并发都可以达到几w级别
商城业务使用redis:
set记录登录的用户数,统计活跃用户及其数量
master-slave
master bind 127.0.0.1 外网访问网卡
requirepass 密码
slave 配置master slave of ~~~~~~
masterauth ~~~~~
mongodb用来进行访问日志记录
mongodb特点:
①存储 PB bson结构 存储灵活
②效率 读写
③结构 collection 集合 document 文档 field 域
CURD
use devops;
db.student.insert({name:1})
db.student.find({name:1},{age:1,_id:0})
db.student.remove()
db.student.update({查询条件},{‘$set’:{}})
server01-server10
server01 web1 nginx php-fpm keepalived sersync
server02 master MySQL mysql
server03 web2 nginx php-fpm keepalived rsync
server04 LB nginx|haproxy keepalived
server05 backupLB nginx|haproxy keepalived
server06 slave MySQL mysql
server07 mycat mycat java
server08 master cache memcached redis
server09 slave cache redis
server10 mongodb
主要在于证书和key的配置项,其他配置是提供加密算法和功能的选项。