rsync实现集群文件同步、nginx负载均衡反向代理、session共享,mysql主从复制读写分离--笔记

rsync实现集群文件同步、nginx负载均衡反向代理、session共享,mysql主从复制读写分离--笔记

  • rsync实现集群文件同步
  • nginx负载均衡反向代理
  • session共享问题
  • mysql主从复制读写分离

rsync实现集群文件同步

使用三台服务器:

192.168.75.133 web_01服务器
192.168.75.134 web_02服务器
192.168.75.135 web_03服务器+线上测试环境+源站

web_01、web_02服务器为集群中的web服务器,对外开放,是负载均衡集群的部分。

其中web_03 服务器不对外开放,代码发布到该服务器,在该服务器上进行测试,完成后程序由该服务器同步到其他集群服务器上,同时自动脚本位于该服务器上。

这里为了方便,在web_03服务器上制定一个规则,即只要rsync.txt存在我们就开始同步,这样只要开发上传该文件同步就开始,同步完成后自动删除该文件。

第一步:笔者这里安装的是centos7 已经默认安装了rsync 所以不再进行安装,未安装的同学可以自行安装,过程相对简单

第二步:安装inotify inotify-tools
笔者这里centos7已经默认安装了inotify , 如果要查看是否安装可以使用如下命令在这里插入图片描述
如果列出如上三项,则证明已经安装

没有安装的读者可以自行安装,然后我们需要安装inotify-tools工具
工具下载下载地址https://sourceforge.net/projects/inotify-tools/

tar -zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure --prefix=/usr/local/inotify-tools
make && make install

第三步:对客户端 服务端进行配置

先要搞清楚web_03是客户端 web_01、web_02是否服务端 ,这个不要搞倒了, 是web_03的文件同步到web_01、web_02上面
首先对web_01、web_02进行配置,配置文件/etc/rsyncd.conf
rsync实现集群文件同步、nginx负载均衡反向代理、session共享,mysql主从复制读写分离--笔记_第1张图片

uid = nobody
gid = nobody
use chroot = no
max connections = 10
strict mode = no
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /usr/data/rsync/rsyncd.log
[data]
path = /home/wwwroot/jcjg/
comment = web4 files
ignore errors
read only = no
write noly = no
hosts allow = 192.168.75.135
hosts deny = *
list = false
uid = root
gid = root
auth users = root
secrets file = /usr/local/rsync/conf/server.pass

/home/wwwroot/jcjg这个目录必须存在, /usr/local/rsync/conf/server.pass这个通信密码文件也必须存在
web_01、web_02通信密码文件中的内容为:

root:123abc±

然后我们对web_03进行配置,配置文件 /etc/rsyncd.conf
rsync实现集群文件同步、nginx负载均衡反向代理、session共享,mysql主从复制读写分离--笔记_第2张图片

uid = nobody
gid = nobody
use chroot = no
max connections = 10
strict mode = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /usr/data/rsync/rsyncd.log

建立web_03的密码文件/usr/local/rsync/conf/server.pass由于web_03是客户端,因此密码没有前缀

123abc±

设置密码文件的权限未600,chmod 600 /usr/local/rsync/conf/server.pass
以守护进程方式启动rsync:rsync --daemon --config=/etc/rsyncd.conf
测试的时候可以关闭防火墙:systemctl stop iptables.service

第四步:编写shell脚本
命名为ha-rsync.sh,内如如下:
rsync实现集群文件同步、nginx负载均衡反向代理、session共享,mysql主从复制读写分离--笔记_第3张图片

#!/bin/bash
host3=192.168.75.133
host4=192.168.75.134
src=/home/wwwroot/jcjg/
excludedir= s r c " r s y n c . t x t " d s t 3 = d a t a d s t 4 = d a t a u s e r = r o o t r s y n c f i l e = src"rsync.txt" dst3=data dst4=data user=root rsync_file= src"rsync.txt"dst3=datadst4=datauser=rootrsyncfile={src}“rsync.txt”
if [ -f “ r s y n c f i l e " ] t h e n / u s r / b i n / r s y n c − v z r t o p g − − d e l e t e − − p r o g r e s s − − e x c l u d e = rsync_file" ] then /usr/bin/rsync -vzrtopg --delete --progress --exclude= rsyncfile"]then/usr/bin/rsyncvzrtopgdeleteprogressexclude=excludedir --password-file=/usr/local/rsync/conf/server.pass $src u s e r @ user@ user@host3:: d s t 3 / u s r / b i n / r s y n c − v z r t o p g − − d e l e t e − − p r o g r e s s − − e x c l u d e = dst3 /usr/bin/rsync -vzrtopg --delete --progress --exclude= dst3/usr/bin/rsyncvzrtopgdeleteprogressexclude=excludedir --password-file=/usr/local/rsync/conf/server.pass $src u s e r @ user@ user@host4::$dst4
fi
rm -rf $src"rsync.txt”

好我们来测试下,进入/home/wwwroot/jcjg创建文件

touch rsync.txt

回到ha-rsync.sh所在目录执行

sh ha-rsync.sh

rsync实现集群文件同步、nginx负载均衡反向代理、session共享,mysql主从复制读写分离--笔记_第4张图片

如上说明同步脚本已顺利执行,到01、02服务器上/home/wwwroot/jcjg/目录下查看,该目录已和03服务器下目录保持一致。

项目文件在集群中可以同步后,接下来我们就来搭建集群中的负载均衡。

nginx负载均衡反向代理

先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可以解释N台服务器平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。那么负载均衡的前提就是要有多台服务器才能实现,也就是两台以上即可。

使用三台服务器:
192.168.75.132 负载均衡服务器
192.168.75.133 web_01服务器
192.168.75.134 web_02服务器

本次实验的图解如下,很基础的一个负载均衡实验。负载均衡的高可用性以后再说。Nginx负载均衡器接收到请求后会把数据分发到后端的web_01和web_02服务器上,web_01、web_02上已经搭建了lnmp服务。
rsync实现集群文件同步、nginx负载均衡反向代理、session共享,mysql主从复制读写分离--笔记_第5张图片
配置web_01和web_02服务器,搭建虚拟主机并部署项目,站点信息配置如下:
rsync实现集群文件同步、nginx负载均衡反向代理、session共享,mysql主从复制读写分离--笔记_第6张图片
部署好有,执行语法检查并重新载入nginx配置文件
在这里插入图片描述
在项目文件中打印出当前服务器IP
在这里插入图片描述
在132负载均衡服务器上安装好nginx服务,配置如下:

rsync实现集群文件同步、nginx负载均衡反向代理、session共享,mysql主从复制读写分离--笔记_第7张图片
hosts指向www.jcjg.com,linux环境下在(/etc/hosts)
重新载入nginx配置,在浏览器输入www.jcjg.com,可以看到
在这里插入图片描述![在这里插入图片描述](https://img-blog.csdnimg.cn/20190612152756746.png在这里插入图片描述
没刷新一次服务器IP在133和134之间变动,说明负载均衡配置成功。至此我们已经搭建好负载均衡集群以及集群之前文件同步功能,接下来我们开始解决集群建session共享问题。

session共享问题

由于nginx是随机分配请求,假设一个用户登录时访问网站登录时被分配到web_01上,然后进行了登录操作,此时该服务器上就会有该用户登录的session信息,然后登陆后重定向到网站首页或个人中心时,此时如果被分配到web_02上,那么这台服务器上没有该用户session信息,于是又会变成未登录状态,所以由于nginx的负载均衡会导致session共享的问题。

解决方法:

1.nginx提供了ip_hash策略,可以保持用户ip进行hash值计算固定分配到某台服务器上,然后只要是该ip则会保持分配到该服务器上,保证用户访问的是同一台服务器,那么session问题就不存在了。这也是解决session共享的一种方式,也称为黏性session。但是假设一台nginx服务器挂了的话,那么session也会丢失。所以比较好的方案是抽取session。

2.session存在memcache或者redis中,以这种方式来同步session,把session抽取出来,放到内存级数据库里面,解决了session共享问题,同时读取速度也是非常之快。
rsync实现集群文件同步、nginx负载均衡反向代理、session共享,mysql主从复制读写分离--笔记_第8张图片
本实验我们将session剥离至memcached中;
使用服务器
192.168.75.136 服务器
在该服务器上安装好memcached服务(安装过程此处不再赘述),结合我们部署的tp5框架项目,只需要将session的驱动设置为memceched,同时设置好ip与端口
rsync实现集群文件同步、nginx负载均衡反向代理、session共享,mysql主从复制读写分离--笔记_第9张图片

mysql主从复制读写分离

在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需求。此时数据库集群就很好的解决了这个问题了。采用MySQL分布式集群,能够搭建一个高并发、负载均衡的集群服务器(这里暂时不涉及)。在此之前我们必须要保证每台MySQL服务器里的数据同步。数据同步我们可以通过MySQL内部配置就可以轻松完成,这里我们主要讲主从复制,主主复制也大同小异。

使用二台服务器:
192.168.75.136
192.168.75.137

配置文件
一般Linux中的MySQL配置文件都在/etc/my.cnf(windows中的配置文件为mysql.ini)

log-bin=mysql-bin 开启二进制日志

注意:二进制日志必须开启,因为数据的同步实质上就是其他的MySQL数据库服务器将这个数据变更的二进制日志在本机上再执行一遍。

192.168.75.136 为主数据库服务器
192.168.75.137 为从数据库服务器

开始构建主从复制

第一步:

在192.168.75.136中创建一个192.168.75.137主机中可以登录的MySQL用户

用户:slave1

密码:123456

mysql>GRANT REPLICATION SLAVE ON . TO ‘slave1’@’192.168.75.137’ IDENTIFIED BY ‘123456’;

mysql>FLUSH PRIVILEGES;

第二步:

查看192.168.75.136 MySQL服务器二进制文件名与位置

mysql>SHOW MASTER STATUS;

rsync实现集群文件同步、nginx负载均衡反向代理、session共享,mysql主从复制读写分离--笔记_第10张图片
第三步:

告知二进制文件名与位置

在192.168.75.136中执行:

mysql>CHANGE MASTER TO

MASTER_HOST=’192.168.75.136’,
MASTER_USER=’slave1’,
MASTER_PASSWORD=’123456’,
MASTER_LOG_FILE=’mysql-bin.000012’,
MASTER_LOG_POS=107;

完成主从复制配置

测试主从

在192.168.75.137中

mysql>START SLAVE; #开启复制

mysql>SHOW SLAVE STATUS\G #查看主从复制是否配置成功

rsync实现集群文件同步、nginx负载均衡反向代理、session共享,mysql主从复制读写分离--笔记_第11张图片
当看到Slave_IO_Running: YES、Slave_SQL_Running: YES才表明状态正常

在tp5项目中配置数据库配置文件如下
rsync实现集群文件同步、nginx负载均衡反向代理、session共享,mysql主从复制读写分离--笔记_第12张图片
至此主从复制读写分离搭建成功。

你可能感兴趣的:(服务器运维,架构)