


Session sharing: How php and redis clusters implement session sharing
本篇文章给大家带来的内容是关于Session共享:php和redis集群如何实现Session共享,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
一、redis 数据库集群安装
软件版本redis-3.2.11、php-redis-2.2.4
角色 |
IP 地址 |
主机名 |
Redis 数据库服务器 |
192.168.1.41 |
Redis41 |
Slave 1 Redis 数据库服务器 |
192.168.1.42 |
Redis42 |
Slave 2 Redis 数据库服务器 |
192.168.1.43 |
Redis43 |
VIP 地址 |
192.168.1.40 |
|
三台数据库同样配置
adduser -s /sbin/nologin -d /var/lib/redis redis yum -y install gcc gcc-c++ tar -xf redis-3.2.11.tar.gz cd redis-3.2.11/ make MALLOC=libc //用MALLOC这个 环境变量去编译Redis,而且libc 并不是默认的 分配器,默认的是 jemalloc make PREFIX=/usr/local/redis install //指定安装路径 mkdir -p /usr/local/redis/conf cp redis.conf /usr/local/redis/conf/ cp sentinel.conf /usr/local/redis/conf/
常用配置选项/usr/local/redis/conf/redis.conf
– port 6379 // 端口 – bind 192.168.1.41 //IP 地址 – tcp-backlog 511 //tcp 连接总数 – timeout 0 // 连接超时时间 – tcp-keepalive 300 // 长连接时间 – daemonize yes // 守护进程方式运行 – databases 16 // 数据库个数 – logfile /var/log/redis_6379.log //pid 文件 – maxclients 10000 // 并发连接数量 – dir /var/lib/redis/6379 // 数据库目录
配置Redis能够让systemclt系统管理(非必须)
vim /usr/lib/systemd/system/redis.server
[Unit] Description=Redis In-Memory Data Store After=network.target [Service] User=redis Group=redis Type=simple ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf ExecStop=/usr/local/redis/bin/redis-cli shutdown Restart=always RestartSec=42s [Install] WantedBy=multi-user.target
二、安装 php-redis 扩展
配置 php 支持 Redis
tar zxvf phpredis-2.2.4.tar.gz cd phpredis-2.2.4 /usr/local/php/bin/phpize //用phpize生成configure配置文件 ./configure --enable-redis --with-php-config=/usr/local/php/bin/php-config make && make install php -m |grep redis
编写测试文件 redis.php 进行页面测试
<?php $redis = new redis(); $redis->connect('192.168.1.41',6379); $redis->set('redistest','666666'); echo $redis->get('redistest'); ?>
三、redis 服务器集群高可用
redis集群实现大概有以下几种方式:
redis-cluster, 官方提供的集群搭建方案(过于重量级,比较适合后期数据量较大的时候的使用) redis+keepalive 虚拟IP,多台配置非常复杂,不宜维护,需要 slaveof no one 脚本 redis+zookeeper 需要引入zookeeper,对现有代码变动较大 redis+sentinel redis自带监控中间件,哨兵模式 配置三台 redis 服务器 配置主从关系,在 slave 上添加配置 slaveof 192.168.1.41 6379 查看集群主从关系 redis-cli -h 192.168.1.41 -p 6379 info replication
修改 redis 哨兵配置文件 sentinel.conf
bind 192.168.1.41 protected-mode no daemonize yes port 26379 dir /tmp sentinel monitor mymaster 192.168.1.41 6379 2 sentinel down-after-milliseconds mymaster 3000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 5000 sentinel client-reconfig-script mymaster /usr/local/redis/conf/reconfig.sh 分别在主,从上启动 sentinel redis-sentinel /usr/local/redis/conf/sentinel.conf 查看哨兵状态 redis-cli -h 192.168.1.41 -p 26379 info sentinel
四、客户端兼容问题
客户端程序(如PHP程序)连接redis时需要ip和port,但redis-server进行故障转移时,主数据库是变化的,所以ip地址也是变化的,客户端程序如何感知当前主redis的ip地址和端口呢?
redis-sentinel提供了接口,请求任何一个sentinel,发送SENTINEL get-master-addr-by-name
解决方案:
增加配置切换脚本 sentinel.conf,当主数据库服务宕机时,实现VIP漂移自动切换主从。
sentinel client-reconfig-script mymaster /usr/local/redis/conf/reconfig.sh
#!/bin/bash #mymaster leader start 192.168.1.41 6379 192.168.1.42 6379 VIP="192.168.1.40/24" local_ip=$(ip addr show dev eth0 |awk '$1=="inet"{print $2}') if [[ "${local_ip%%/*}" == "$4" ]];then /usr/sbin/ifconfig eth0:1 down elif [[ "${local_ip%%/*}" == "$6" ]];then /usr/sbin/ifconfig eth0:1 "${VIP}" fi
相关推荐:
thinkphp5中belongsToMany() 模块名称的命名问题解决
php中文网学习专题:php session (包含图文、视频、案例)
The above is the detailed content of Session sharing: How php and redis clusters implement session sharing. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Alipay PHP...

Session hijacking can be achieved through the following steps: 1. Obtain the session ID, 2. Use the session ID, 3. Keep the session active. The methods to prevent session hijacking in PHP include: 1. Use the session_regenerate_id() function to regenerate the session ID, 2. Store session data through the database, 3. Ensure that all session data is transmitted through HTTPS.

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

The application of SOLID principle in PHP development includes: 1. Single responsibility principle (SRP): Each class is responsible for only one function. 2. Open and close principle (OCP): Changes are achieved through extension rather than modification. 3. Lisch's Substitution Principle (LSP): Subclasses can replace base classes without affecting program accuracy. 4. Interface isolation principle (ISP): Use fine-grained interfaces to avoid dependencies and unused methods. 5. Dependency inversion principle (DIP): High and low-level modules rely on abstraction and are implemented through dependency injection.

How to debug CLI mode in PHPStorm? When developing with PHPStorm, sometimes we need to debug PHP in command line interface (CLI) mode...

How to automatically set the permissions of unixsocket after the system restarts. Every time the system restarts, we need to execute the following command to modify the permissions of unixsocket: sudo...

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

Sending JSON data using PHP's cURL library In PHP development, it is often necessary to interact with external APIs. One of the common ways is to use cURL library to send POST�...
