设为首页 收藏本站
查看: 1192|回复: 0

[经验分享] redis实现session共享,哨兵

[复制链接]

尚未签到

发表于 2017-12-21 08:35:35 | 显示全部楼层 |阅读模式
  一、Redis介绍
  1、redis是key-value的存储系统,属于非关系型数据库
  2、特点:支持数据持久化,可以让数据在内存中保存到磁盘里(memcached:数据存在内存里,如果服务重启,数据会丢失)
  3、支持5种数据类型:string,hash,list,set,zset
  4、两种文件格式(即数据持久化)
  (1)RDB(全量数据):多长时间/频率,把内存中的数据刷到磁盘中,便于下次读取文件时进行加载
  (2)AOF(增量请求):类似mysql的二进制日志,不停地把对数据库的更改语句记录到日志中,下次重启服务,会根据二进制日志把数据重写一次,加载到内存里,实现数据持久化
  5、存储
  (1)内存存储 (2)磁盘存储(RDB)  (3)log文件(AOF)
  二、Redis安装
  1、下载 redis-2.8.21.tar.gz
  2、解压:  tar zxvf redis-2.8.21.tar.gz
  3、cd redis-2.8.21
  4、编译:make
  5、安装: make PREFIX=/usr/local/redis install
  6、创建配置文件所在的目录:mkdir /usr/local/redis/etc
  7、网上下载配置文件 redis.conf,放到 6 创建的目录下
  8、创建启动脚本 /etc/init.d/redis
  9、添加redis用户:useradd -s /sbin/nologin redis
  10、创建var目录,放置redis 的pid,rdb文件:  mkdir /usr/local/redis/var
  11、修改var目录和配置文件权限
  (1)chmod 777 /usr/local/redis/var
  (2)chmod 755 /etc/init.d/redis
  12、启动redis:  service redis start
  13、ps aux | grep redis      ——》 监听6379端口
  三、php应用redis
  前提:已经搭建了LAMP网站架构
  php不能直接连redis,需要redis模块的支持(redis是和开发语言结合使用的)

1、Redis扩展模块安装
(1)下载 phpredis.zip
(2)解压:unzip phpredis.zip
(3)cd phpredis-develop/
(4)/usr/local/php/bin/phpize   ——》生成 configure文件
(5)编译redis.so的模块
./configure --with-php-config=/usr/local/php/bin/php-config
(6)make && make install
(7)检查是否有redis.so文件
ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/
——》 redis.so
(8)编辑php.ini配置文件
最后1行加上
extension=redis.so
(9)php检查是否加载了redis.so模块
/usr/local/php/bin/php -m |grep redis
——》redis
2、Redis 实现session共享
(1)apache测试目录下创建info.php ——》 调用 phpinfo() 函数
(2)apache虚拟主机配置文件(extra目录下)或者主配置文件httpd.conf 中定义
session存储的处理方式和存储路径
(a)php_value session.save_handler "redis"
(b)php_value session.save_path "tcp://127.0.0.1:6379"
ps: 还有另外两种方法
1、php的全局配置文件php.ini添加上面2行
2、如果是lnmp架构
php-fpm.conf对应的pool中加入
php_value[session.save_handler] = redis
php_value[session.save_path] = "tcp://127.0.0.1:6379"
(3)重启apachectl
/usr/local/apache2/bin/apachectl restart
(4)浏览器访问:192.168.131.110/info.php
DSC0000.png   说明配置已经生效
  3、Redis 存储session 测试
  (1)进入apache的htdoc下
  (2)创建session.php
  

<?php  

     ();  

     if (!isset($_SESSION['TEST'])) {  

         $_SESSION['TEST'] = ();  

     }  

     $_SESSION['TEST3'] = ();  

     print $_SESSION['TEST'];  

     print "<br><br>";  

     print $_SESSION['TEST3'];  

     print "<br><br>";  

     print ();  

?>  

  (3)测试  ——》 记得去掉redis配置文件中的密码设置,否则会返回500授权错误
  (a)curl localhost/session.php
DSC0001.png

  (b)redis-cli  ——》 在家目录的.bashrc加入了redis启动目录
DSC0002.png

  说明session已经存入到redis里了
  四、redis的一些题外话
  redis一些重点
  1、主从
  2、持久化
  3、哨兵实现主从切换
  4、sentinel原理 (2.8.0之后有这个功能 sentinel.conf)
  5、数据类型: hash,string 用得多
  着重讲下哨兵
  1、支持redis协议
  2、原理简单描述
  所有服务器都部署哨兵,哨兵去监控主从,要是redis或者哨兵死了,另外所有的机器会重新投票(就是下图6379后面的数字,比如2),投死那台挂掉的机器(2台机器投票确认机器死了),再在另外所有的机器上自成一个体系,重新生成主
DSC0003.png

  3、重点
  (1)哨兵的配置文件也就是sentinel.conf是时时发生变化的
  当主被投票死掉后,从起来于是产生一个新的主ip,新主会变成配置文件master的ip
  (2)redis的配置文件也会改变
  (3)当已死的主恢复后,就变成了从
  (4)哨兵一定要是单数,否则选举易出现问题,偶数可能会同票
  4、几个问题
  (1)什么时候用redis?

所有的web第一次请求,先从db上取,取到的结果再返回给客户端的同时也写到redis去,
当再次用到这个结果时就从redis取,不需要再从db上取(很慢)
(2)什么时候用redis高可用,也就是哨兵?
所有的研发程序需要连主(可写),从(只读)是写不进去东西的
主redis有一个vip或者直连它的物理ip,研发程序直连redis写东西时,
redis主挂了,哨兵就起到作用
redis取不到数据,就从db上取——》程序做的,自动的降级
如果程序没有做降级,redis主挂了,线上所有涉及到在redis写的业务都用不了 ——》 所以就要用哨兵

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-426330-1-1.html 上篇帖子: Redis-基本操作客户端最大连接数配置 下篇帖子: mybatis结合redis实战二级缓存(六)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表