环境准备
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转发服务。
配置基于域名的虚拟主机提供站点服务
apache版本: 2.2.15
在etc/httpd/conf 新建文件夹 extra vhosts
在站点服务器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
在 etc/httpd/conf/vhosts 新建以.conf结尾的配置文件
注: 文件名 建议见名知意,实际开发中有多个虚拟域名
vim webtest.conf
在文件 webtest.conf中添加如下代码
<VirtualHost *:80>
ServerAdmin webtest.com
DocumentRoot /www/html/webtest
ServerName webtest.com
</VirtualHost>
在Apache的网站目录下新建 文件夹 webtest 添加文件 index.php 测试
mkdir /www/html/webtest -pv
重启apache
在windows系统 的hosts文件中添加
192.168.3.21 webtest.com
模仿DNS服务器
在浏览器 访问 webtest.com
站点后台服务器安装 php-redis 扩展 ,192.168.3.24安装redis
在服务器192.168.3.24中 yum安装redis
yum install -y redis
启动redis服务:
service redis start
终端:cd /usr/bin
2.2 配置 redis.conf 修改 bind 192.168.3.24 当前虚拟主机的ip
cd /etc/redis.conf
在站点服务器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 与站点 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驱动配置
'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的配置,存储类型,以及存储位置,等
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存储详情
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 操作时从库数据即可同步