Thinkphp5.0 session 分布式部署
来源:互联网 发布:10档行情软件 编辑:程序博客网 时间:2024/06/05 20:01
要实现的功能 :部署高可用web服务
项目架构图:
在一个集群中部署2套web_server服务,通过lvs负载均衡提供一个虚拟IP,供用户访问。
用redis存储session,提高系统可用性。
数据库采用主主同步方式,利用keepalived做容灾处理。
一、
web_server 使用PHP语言,利用TP5.0框架。
application\config.php session 设置为session存储。
'session' => [ 'expire' => 3600, // SESSION失效时间 'id' => '', // SESSION_ID的提交变量,解决flash上传跨域 'var_session_id'=> '', // SESSION 前缀 'prefix' => 'think', // 驱动方式 支持redis memcache memcached 'type' => 'redis', // 是否自动开启 SESSION 'auto_start' => true, //redis 主机 'host' => '127.0.0.1', //redis 端口 'port' => 6379, // 密码 'password' => 'password', ],
linux 安装redis(自行Google)
php 安装redis扩展(自行Google)
调用登录接口 能成功登录。登录redis客户端进行验证。keys * 可以看到huo5552v3duh5opdkr4logti93 类似这样一个key.get huo5552v3duh5opdkr4logti93可以查看具体存储的session。
二、
利用keepalived实现redis双主热备
以下参考http://huangzhijun.blog.51cto.com/482881/1725606/ 并根据自己实践做了修改
1、方案:使用keepalived + 监控脚本实现主备切换。2、设计思路:1)当 Master 与 Slave 均运作正常时, Master负责服务,Slave负责Standby;2)当 Master 挂掉,Slave 正常时, Slave接管服务,同时关闭主从复制功能;3)当 Master 恢复正常,则从Slave同步数据,同步数据之后关闭主从复制功能,恢复Master身份,于此同时Slave等待Master同步数据完成之后,恢复Slave身份。3、操作步骤10.95.40.12 master10.95.40.14 slave10.95.40.99 虚拟IP (ping 选一个不存在的ip)1)两台主机分别安装rediswget http://download.redis.io/releases/redis-2.8.3.tar.gztar -xzvf redis-2.8.3.tar.gzcd redis-2.8.3make编译成功mkdir /usr/local/rediscp src/redis-server /usr/local/rediscp src/redis-cli /usr/local/rediscp src/redis-benchmark /usr/local/rediscp redis.conf /usr/local/redis (redis.conf 在 src 目录的上一层)修改redis 配置文件开启远程登录,暂不开启密码验证。vim redis.conf #requirepass 360redis 注释掉#bind 127.0.0.1 注视掉protected-mode no 设置为 noredis-server redis.conf 需要制定配置文件redis-cli 连接测试2) 两台主机分别安装keepalivedyum -y install keepalived修改keepalived的配置文件vim /etc/keepalived/keepalived.confMaster即 10.95.40.12! Configuration File for keepalivedglobal_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL}vrrp_script chk_redis { script "/etc/keepalived/scripts/redis_check.sh" interval 2}vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 360redis } track_script { chk_redis } virtual_ipaddress { 10.95.40.99 } notify_master /etc/keepalived/scripts/redis_master.sh notify_backup /etc/keepalived/scripts/redis_backup.sh notify_fault /etc/keepalived/scripts/redis_fault.sh notify_stop /etc/keepalived/scripts/redis_stop.sh}mkdir scripts 编写检查脚本touch redis_check.shvim redis_check.sh#!/bin/bashnetstat -ntlp | grep 6379if [ "$?" == "0" ]; then echo $? exit 0else echo $? exit 1fivim redis_master.shEDISCLI="/usr/local/redis/redis-cli"LOGFILE="/var/log/keepalived-redis-state.log"echo "[master]" >> $LOGFILEdate >> $LOGFILEecho "Being master...." >> $LOGFILE 2>&1echo "Run SLAVEOF cmd ..." >> $LOGFILE$REDISCLI SLAVEOF 10.95.40.14 6379 >> $LOGFILE 2>&1sleep 10 #延迟10秒以后待数据同步完成后再取消同步状态echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1vim redis_backup.sh#!/bin/bashREDISCLI="/usr/local/redis/redis-cli"LOGFILE="/var/log/keepalived-redis-state.log"echo "[backup]" >> $LOGFILEdate >> $LOGFILEecho "Being slave...." >> $LOGFILE 2>&1sleep 15 # 延迟15秒待数据被对方同步完成之后再切换主从角色echo "Run SLAVEOF cmd ..." >> $LOGFILE$REDISCLI SLAVEOF 10.95.40.14 6379 >> $LOGFILE 2>&1vim redis_fault.sh#!/bin/bashLOGFILE=/var/log/keepalived-redis-state.logecho "[fault]" >> $LOGFILEdate >> $LOGFILEvim redis_stop.sh#!/bin/bashLOGFILE=/var/log/keepalived-redis-state.logecho "[stop]">> $LOGFILEdate >> $LOGFILESlave即 10.95.40.14vim /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL}vrrp_script chk_redis { script "/etc/keepalived/scripts/redis_check.sh" interval 2 }vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 360redis } track_script { chk_redis } virtual_ipaddress { 10.95.40.99 } notify_master /etc/keepalived/scripts/redis_master.sh notify_backup /etc/keepalived/scripts/redis_backup.sh notify_fault /etc/keepalived/scripts/redis_fault.sh notify_stop /etc/keepalived/scripts/redis_stop.sh }同样创建scripts文件夹redis_check.shredis_fault.shredis_stop.sh文件同Master 文件vim redis_master.sh#!/bin/bashREDISCLI="/usr/local/redis/redis-cli"LOGFILE="/var/log/keepalived-redis-state.log"echo "[master]" >> $LOGFILEdate >> $LOGFILEecho "Being master...." >> $LOGFILE2>&1echo "Run SLAVEOF cmd ..." >>$LOGFILE$REDISCLI SLAVEOF 10.95.40.12 6379 >> $LOGFILE 2>&1sleep 10 #延迟10秒以后待数据同步完成后再取消同步状态echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1vim redis_backup.sh#!/bin/bashREDISCLI="/usr/local/redis/redis-cli"LOGFILE="/var/log/keepalived-redis-state.log"echo "[backup]" >> $LOGFILEdate >> $LOGFILEecho "Being slave...." >> $LOGFILE 2>&1sleep 15 #延迟15秒待数据被对方同步完成之后再切换主从角色echo "Run SLAVEOF cmd ..." >> $LOGFILE$REDISCLI SLAVEOF 10.95.40.12 6379 >> $LOGFILE 2>&13)启动redis 和 keepalived redis-server redis.confservice keeplived start4)测试ip add 查看 主节点是否多了虚拟IP 10.95.40.99 redis-cli -h 10.95.40.99 测试redis 是否可以连接成功停止 主节点redis 服务 看redis 客户端是否还可以连接通查看从节点是否多了虚拟IP 10.95.40.99 5)遗留问题 是否可以设置redis 密码 修改redis.conf requirepass 360redis 修改 Master 和 Slave 的sh脚本 $REDISCLI SLAVEOF 10.95.40.12 6379 -a 360redis>> $LOGFILE 2>&1 SLAVEOF 命令不存在
三、利用keepalived 实现mysql数据库双主热备。
阅读全文
1 0
- Thinkphp5.0 session 分布式部署
- thinkphp5的SESSION用法
- thinkphp5的SESSION用法
- linux部署thinkphp5小结
- thinkphp5.0部署在nginx服务器的一些疑难杂症
- Centos6.5 部署THinkPHP5.0 遇到的各种坑
- memcached会话共享+分布式+Thinkphp5
- session-缓存-分布式会话session共享、多节点部署session共享解决方案
- thinkphp5.0
- Thinkphp5.0
- ThinkPhp5.0
- ThinkPHP5.0
- hadoop-0.20.0分布式部署
- 分布式Session
- 分布式session
- 分布式 session
- 分布式session
- 分布式Session
- 文章静态化分页
- 习题5.2
- SVN
- 手把手教你在Android Studio 3.0上分析内存泄漏
- 解决linux安装软件:/lib/ld-linux.so.2: bad ELF interpreter问题
- Thinkphp5.0 session 分布式部署
- Unity的HTC VIVE SDK研究(手柄按键功能的研究,比较详细)
- 第15章 做游戏的主人——输出控制利器Directlnput
- 大数据学习28:JAVA 连HBase的API小工具类
- ajax
- 猫眼电影 票房爬取
- 关于回调函数和函数调用
- App Store 版本兼容性显示问题
- (二)angular.js