负载均衡示例+mysql主从同步示例

环境准备

centos6.9, apache 2.2.15 , redis 3.2.12,php 7.3.13,mysql 5.1.73,thinkphp3.2.3

http是无状态协议,web应用中浏览器向服务器发送请求时,服务器通过识别客户端传递的cookie(header头信息发送)与服务器端存储的session进行识别验证,session默认存储提供服务的本机中,在负载均衡服务架构中,假如对session存储不作处理,客户端第一次请求由192.168.3.21提供服务,cookie与192.168.3.21服务器建立对应,客户端第二次请求时,由192.168.3.20提供服务,此时该服务器不存在session,就出现客户端登录的情况。所以,在web应用中实现负载均衡实现的思路就是解决session共享,本文使用的是apache转发服务。

web请求响应流程

配置基于域名的虚拟主机提供站点服务

apache版本: 2.2.15

在etc/httpd/conf 新建文件夹 extra vhosts


clipboard.png

在站点服务器192.168.3.21,一键安装apache

yum install httpd -y
cd /etc/httpd/conf
vim httpd.conf

在主配置文件httpd.conf中 添加

Include conf/extra/httpd_vhosts.conf

在 extra 创建 httpd_vhosts.conf

vim httpd_vhosts.conf

在httpd_vhosts.conf 添加如下内容

NameVirtualHost *:80
Include /etc/httpd/conf/vhosts/*.conf
httpd_vhosts图例

在 etc/httpd/conf/vhosts 新建以.conf结尾的配置文件

注: 文件名 建议见名知意,实际开发中有多个虚拟域名

vim webtest.conf

在文件 webtest.conf中添加如下代码

<VirtualHost *:80>
    ServerAdmin webtest.com
    DocumentRoot /www/html/webtest
    ServerName webtest.com
</VirtualHost>
webtest.conf图例

在Apache的网站目录下新建 文件夹 webtest 添加文件 index.php 测试

mkdir /www/html/webtest -pv

重启apache

在windows系统 的hosts文件中添加

192.168.3.21  webtest.com    

模仿DNS服务器
在浏览器 访问 webtest.com

hosts图例

站点后台服务器安装 php-redis 扩展 ,192.168.3.24安装redis

在服务器192.168.3.24中 yum安装redis

   yum install -y redis 

启动redis服务:

service redis start

终端:cd /usr/bin

redis图例

2.2 配置 redis.conf 修改 bind 192.168.3.24 当前虚拟主机的ip

cd /etc/redis.conf   
redis配置修改示例

在站点服务器192.168.3.21和192.168.3.20中安装 php-redis 扩展

 yum install php-redis   

注意:安装时 注意 php版本与c++编译环境

2.4 在站点服务器192.168.3.21和192.168.3.20编写测试代码

测试代码图例

浏览器访问 测试

浏览器访问图例

转发服务器apache配置

实际测试中可以通过域名直接转发配置

域名跳转图例
转发服务器转发配置

git搭建 以及 远端 与 站点目录自动同步

yum install git -y
git安装成功示例

git 与站点 www 目录同步 配置过程

cd /home/git
git init --bare test.git

进入站点目录clone空仓库并更改权限

cd /www/html/webtest
git clone /home/git/test.git
chown -R git:git test

配置git钩子同步功能使其代码提交自动同步到站点目录

cd /home/git/test.git/hook
vim post-receive

添加

GIT_WORK_TREE=/www/html/test git checkout -f

更改文件的执行权限

 chmod +x post-receive

注意整个test.git 用户权限

在windows 本地进行客户端 测试

git clone ssh://root@192.168.3.21/home/git/test.git
git add -A
git commit -m ''测试"
git pull

在服务器站点目录下查看 代码 同步

实际部署项目测试

下载thinkphp3.2.3核心包 编辑简单的账号 密码 session 登入退出验证

修改配置文件 添加session 驱动配置,添加缓存session驱动配置

thinkphp3.2.3redis配置图例
 'DATA_CACHE_TYPE' => 'redis',
 'REDIS_HOST'=>'192.168.3.29', 
 'REDIS_PORT'=>6379, 
 'REDIS_DB'=>1,

 'SESSION_TYPE' => 'Redis', //session保存类型
 'SESSION_REDIS_DB' =>0, //session保存到redis 那个类型       
 'SESSION_PREFIX' => 'sess_', //session前缀
 'SESSION_EXPIRE' => 180, //SESSION过期时间

添加session 驱动文件 Redis.class.php作用:相当于更改php.ini配置文件中有关session的配置,存储类型,以及存储位置,等

thinkphp3.2.3添加redis驱动示例

Redis.class.php 示例 :

<?php
namespace Think\Session\Driver;
class Redis {
//  Redis连接对象
  private $redis;
//  Session过期时间
  private $expire;
//操作哪一个数据库
  private $db;
  /**
   * 打开方法
   * @param type $path
   * @param type $name
   * @return type
   */
  public function open($path, $name) {
  $this->expire = C('SESSION_EXPIRE') ? C('SESSION_EXPIRE') : ini_get('session.gc_maxLifetime');
  $this->db=C('SESSION_REDIS_DB')?C('SESSION_REDIS_DB'):0;
  $this->redis = new \Redis();
  $handle= $this->redis->connect(C('REDIS_HOST'), C('REDIS_PORT'));
  if ($this->db) $this->redis->select($this->db); #已改写可以灵活设置session位置
  return $handle;

  }
  /**
   * 关闭
   * @return type
   */
  public function close() {
  return $this->redis->close();
  }
  /**
   * 读取
   * @param string $id
   * @return type
   */
  public function read($id) {
  $id = C('SESSION_PREFIX') . $id;
  $data = $this->redis->get($id);
  return $data ? $data : '';
  }
  /**
   * 写入
   * @param string $id
   * @param type $data
   * @return type
   */
  public function write($id, $data) {
  $id = C('SESSION_PREFIX') . $id;
  return $this->redis->set($id, $data, $this->expire);
  }
  /**
   * 销毁
   * @param string $id
   */
  public function destroy($id) {
  $id = C('SESSION_PREFIX') . $id;
  $this->redis->delete($id);
  }
  /**
   * 垃圾回收
   * @param type $maxLifeTime
   * @return boolean
   */
  public function gc($maxLifeTime) {
  return true;
  }
}

将上述做好的试验项目上传到 后端站点服务器 192.168.3.20 192.1683.21分别 开启 apache服务 开启转发服务器 的 apache 服务及redis服务器, 在不同的浏览器 分别访问 192.168.3.29, 在redis 服务里可以查看不同的浏览器 对应的 session_id信息,在同一浏览器 重复刷新 不会出现 掉线的情况
配置文件设置的seesion 有效期,过期后刷新浏览器,
会重新提示登入

火狐访问图例

redis查看session存储详情

session存储图例
站点服务响应图例1

站点服务响应图例2

mysql 主从复制

mysql 版本 5.1.73
刷新权限列表,设置 用户登入密码 以及权限

flush privileges;
use mysql;
update user set password=password('123456') where user='root';
GRANT REPLICATION SLAVE ON *.* to 'root'@'%' identified by '123456';
主库示例

查看主服务器的状态 日志文件 以及 记入位置

sercice mysqld restart
mysql -uroot -p123456
show master status; 
主库日志信息图例

从服务器 设置 从服务器的参数 监听的主服务器 ip 以及 日志的位置 ```

start/stop slave;
show slave status\G
从服务器图示

注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

启动失败排错

日志位置 log-error=/var/log/mysqld.log

日志示例

主库数据表CRUD 操作时从库数据即可同步


navicate连接示例
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,376评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,126评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,966评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,432评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,519评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,792评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,933评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,701评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,143评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,488评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,626评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,292评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,896评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,324评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,494评论 2 348

推荐阅读更多精彩内容