栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2.Redis部署架构

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2.Redis部署架构

redis部署架构 一、redis多实例
实例1		安装目录: /app/6380		数据目录: /app/6380/data
实例2		安装目录: /app/6381		数据目录: /app/6381/data
1、创建实例安装目录
# mkdir -p /app/638{0,1}/{conf,data}
# ls /app/
6380  6381
# ls /app/6380/
conf  data
# ls /app/6381
conf  data
2、拷贝实例的配置文件
# cp redis-6.2.1/redis.conf /app/6380/conf/
# cp redis-6.2.1/redis.conf /app/6381/conf/
3、编辑实例的配置文件
bind 192.168.140.10
port 6380
daemonize yes
pidfile /var/run/redis_6380.pid
loglevel warning
logfile "/var/log/redis_6380.log"
dbfilename dump_6380.rdb
dir /app/6380/data
appendonly yes
appendfilename "appendonly_6380.aof"
4、启动实例
# redis-server /app/6380/conf/redis.conf 
# redis-server /app/6381/conf/redis.conf 

# netstat -antp | grep redis
tcp        0      0 192.168.140.10:6380     0.0.0.0:*			LISTEN      32667/redis-server  
tcp        0      0 192.168.140.10:6381     0.0.0.0:*			LISTEN      32687/redis-server  
5、连接redis实例进行数据读写
# redis-cli -h 192.168.140.10 -p 6380
192.168.140.10:6380> 
192.168.140.10:6380> set a 10
OK

# redis-cli -h 192.168.140.10 -p 6381
192.168.140.10:6381> set b 20
OK
二、redis主从复制

作用: 提高redis可用性

1、核心要素

1、redis采用异步的方式进行数据复制
2、支持一主多从的架构
3、复制数据时是非阻塞
4、从redis 2.6开始,从服务器默认是只读

2、配置主从复制
replicaof  
masterauth 
测试主从复制
# redis-cli -h 192.168.140.10 -p 6380
192.168.140.10:6380> 
192.168.140.10:6380> set name martin
OK
192.168.140.10:6380> exit

# redis-cli -h 192.168.140.10 -p 6381
192.168.140.10:6381> get name
"martin"
192.168.140.10:6381> set a 10
(error) READonLY You can't write against a read only replica.
192.168.140.10:6381> 
查看主从复制状态
192.168.140.10:6380> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.140.10,port=6381,state=online,offset=394,lag=1
master_failover_state:no-failover
master_replid:a47ef340dc924ea952e39c0b51354efefbb9a9e7
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:394
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:394

# redis-cli -h 192.168.140.10 -p 6381
192.168.140.10:6381> 
192.168.140.10:6381> info replication 
# Replication
role:slave
master_host:192.168.140.10
master_port:6380
master_link_status:up
master_last_io_seconds_ago:10
master_sync_in_progress:0
slave_repl_offset:464
slave_priority:100
slave_read_only:1
connected_slaves:0
master_failover_state:no-failover
master_replid:a47ef340dc924ea952e39c0b51354efefbb9a9e7
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:464
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:464
3、主从切换
1、将从服务器提升为新主服务器 
	> slaveof no one
2、将从服务器上连接主服务器配置删除 
三、redis分片集群

redis 3.x版本后开始支持
作用:
1、提升数据读写速度
2、提升可用性

1、工作原理

Redis集群使用哈希槽slot进行数据分片

Redis集群有16384个哈希槽, 每个key通过CRC16校验后对16384取模来决定放置哪个槽, 集群的每个节点负责一部分hash槽

举个例子,比如当前集群有3个节点,
那么:
节点 A 包含 0 到 5500号哈希槽.
节点 B 包含5501 到 11000 号哈希槽.
节点 C 包含11001 到 16384号哈希槽.

	数据究竟存放到哪个槽上?
	数据做hash运算除以16384除余
2、部署分片集群
环境描述: 

192.168.140.10     3个集群模式的实例     7001  7002  7003
192.168.140.11     3个集群模式的实例     7004  7005  7006
1、分别在两台服务器安装redis 2、创建实例目录,拷贝配置文件
# mkdir -p /app/700{1,2,3}/{conf,data}

# cp redis-6.2.1/redis.conf /app/7001/conf/
# cp redis-6.2.1/redis.conf /app/7002/conf/
# cp redis-6.2.1/redis.conf /app/7003/conf/

3、编辑实例的配置文件
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind 192.168.140.10
port 7001
daemonize yes
loglevel warning
logfile "/var/log/redis_7001.log"
dbfilename dump_7001.rdb
dir /app/7001/data
appendonly yes
appendfilename "appendonly_7001.aof"

cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000

# cp /app/7001/conf/redis.conf /app/7002/conf/
# cp /app/7001/conf/redis.conf /app/7003/conf/redis.conf 

# sed -ri 's/7001/7002/g' /app/7002/conf/redis.conf 
# sed -ri 's/7001/7003/' /app/7003/conf/redis.conf

4、启动实例
# redis-server /app/7001/conf/redis.conf 
# redis-server /app/7002/conf/redis.conf 
# redis-server /app/7003/conf/redis.conf 

# ps -elf | grep redis
5 S root      40446      1  0  80   0 - 41264 ep_pol 16:23 ?        00:00:00 redis-server 192.168.140.10:7001 [cluster]
5 S root      40455      1  0  80   0 - 41264 ep_pol 16:23 ?        00:00:00 redis-server 192.168.140.10:7002 [cluster]
5 S root      40464      1  0  80   0 - 41264 ep_pol 16:23 ?        00:00:00 redis-server 192.168.140.10:7003 [cluster]

# netstat -antp | grep redis
tcp        0      0 192.168.140.10:17001    0.0.0.0:*				LISTEN      40446/redis-server  
tcp        0      0 192.168.140.10:17002    0.0.0.0:*				LISTEN      40455/redis-server  
tcp        0      0 192.168.140.10:17003    0.0.0.0:*				LISTEN      40464/redis-server  
tcp        0      0 192.168.140.10:7001     0.0.0.0:*				LISTEN      40446/redis-server  
tcp        0      0 192.168.140.10:7002     0.0.0.0:*				LISTEN      40455/redis-server  
tcp        0      0 192.168.140.10:7003     0.0.0.0:*				LISTEN      40464/redis-server  
5、参考上述方法配置第二台服务器
# ps -elf | grep redis
5 S root      21309      1  0  80   0 - 41264 ep_pol 16:29 ?        00:00:00 redis-server 192.168.140.11:7004 [cluster]
5 S root      21315      1  0  80   0 - 41264 ep_pol 16:29 ?        00:00:00 redis-server 192.168.140.11:7005 [cluster]
5 S root      21321      1  0  80   0 - 41264 ep_pol 16:29 ?        00:00:00 redis-server 192.168.140.11:7006 [cluster]
0 S root      21327   6812  0  80   0 - 28203 pipe_w 16:29 pts/0    00:00:00 grep --color=auto redis

# netstat -antp | grep redis
tcp        0      0 192.168.140.11:17004    0.0.0.0:*				LISTEN      21309/redis-server  
tcp        0      0 192.168.140.11:17005    0.0.0.0:*				LISTEN      21315/redis-server  
tcp        0      0 192.168.140.11:17006    0.0.0.0:*				LISTEN      21321/redis-server  
tcp        0      0 192.168.140.11:7004     0.0.0.0:*				LISTEN      21309/redis-server  
tcp        0      0 192.168.140.11:7005     0.0.0.0:*				LISTEN      21315/redis-server  
tcp        0      0 192.168.140.11:7006     0.0.0.0:*				LISTEN      21321/redis-server  
6、创建集群
# redis-cli --cluster create 
> 192.168.140.10:7001 
> 192.168.140.10:7002 
> 192.168.140.10:7003 
> 192.168.140.11:7004 
> 192.168.140.11:7005 
> 192.168.140.11:7006 
> --cluster-replicas 1


[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
7、连接集群、测试数据读写
# redis-cli -h 192.168.140.10 -p 7002 -c 
192.168.140.10:7002> set name martin
-> Redirected to slot [5798] located at 192.168.140.11:7004
OK
192.168.140.11:7004> get name
"martin"
192.168.140.11:7004> exit
四、基于redis实现会话保持

环境描述:
192.168.140.10 nginx
192.168.140.11 tomcat服务器 两个tomcat实例
192.168.140.12 redis服务器 三个redis实例,一主两从环境
192.168.140.13 redis哨兵

1、配置nginx实现tomcat负载均衡
    upstream tomcatserver {
          server 192.168.140.11:9000;
          server 192.168.140.11:9001;
    }

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
             proxy_pass http://tomcatserver;
             proxy_set_header X-Real-IP $remote_addr;
        }
# /usr/local/nginx/sbin/nginx 
# netstat -antp | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      9536/nginx: master  

2、配置tomcat实例
# /usr/local/tomcat/bin/version.sh 
Using CATALINA_base:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_91
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/8.0.44
Server built:   May 10 2017 17:21:09 UTC
Server number:  8.0.44.0
# netstat -antp | grep java
tcp6       0      0 :::9000                 :::*                    LISTEN      7157/java           
tcp6       0      0 :::9001                 :::*                    LISTEN      7209/java           
tcp6       0      0 :::8009                 :::*                    LISTEN      7157/java           
tcp6       0      0 127.0.0.1:8010          :::*                    LISTEN      7157/java           
tcp6       0      0 127.0.0.1:8020          :::*                    LISTEN      7209/java    
测试页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>


  
    
    你好
  
  <%
    for(int i=1;i<=6;i++){
  %>
       align="center">欢迎访问 tomcat 1 jsp页面!
      >
  <%
    }
  %>
  
    
<%= request.getSession().getId() %>
3、通过nginx访问tomcat,此时tomcat会话ID是非持久 4、配置redis一主两从环境 1) 安装redis 2.6
# tar xf redis-2.6.14.tar.gz 
# cd redis-2.6.14/
# make 
# make PREFIX=/usr/local/redis install 
2) 配置redis多实例
# mkdir -p /app/700{1,2,3}/{conf,data}
# cp redis-2.6.14/redis.conf /app/7001/conf/


daemonize yes
pidfile /var/run/redis_7001.pid
port 7001
bind 192.168.140.12
loglevel warning
logfile "/var/log/redis_7001.log"
dbfilename dump_7001.rdb
dir /app/7001/data
appendonly yes
appendfilename appendonly_7001.aof


# cp /app/7001/conf/redis.conf /app/7002/conf/
# sed -ri 's/7001/7002/g' /app/7002/conf/redis.conf 
# cp /app/7001/conf/redis.conf /app/7003/conf/
# sed -ri 's/7001/7003/g' /app/7003/conf/redis.conf 

3) 配置一主多从
slaveof 192.168.140.12 7001

# redis-server /app/7001/conf/redis.conf 
# redis-server /app/7002/conf/redis.conf
# redis-server /app/7003/conf/redis.conf
# netstat -antp | grep redis
tcp        0      0 192.168.140.12:7001     0.0.0.0:*               LISTEN      8901/redis-server   
tcp        0      0 192.168.140.12:7002     0.0.0.0:*               LISTEN      8905/redis-server   
tcp        0      0 192.168.140.12:7003     0.0.0.0:*               LISTEN      8911/redis-server   
tcp        0      0 192.168.140.12:7001     192.168.140.12:37184    ESTABLISHED 8901/redis-server   
tcp        0      0 192.168.140.12:7001     192.168.140.12:37182    ESTABLISHED 8901/redis-server   
tcp        0      0 192.168.140.12:37184    192.168.140.12:7001     ESTABLISHED 8911/redis-server   
tcp        0      0 192.168.140.12:37182    192.168.140.12:7001     ESTABLISHED 8905/redis-server 

4)验证一主多从成功
# redis-cli -h 192.168.140.12 -p 7001
redis 192.168.140.12:7001> info replication
# Replication
role:master
connected_slaves:2
slave0:192.168.140.12,7002,online
slave1:192.168.140.12,7003,online
redis 192.168.140.12:7001> 
redis 192.168.140.12:7001> set name martin
OK
redis 192.168.140.12:7001> exit

# redis-cli -h 192.168.140.12 -p 7002
redis 192.168.140.12:7002> get name
"martin"
redis 192.168.140.12:7002> exit

# redis-cli -h 192.168.140.12 -p 7003
redis 192.168.140.12:7003> get name
"martin"
redis 192.168.140.12:7003> exit


5、配置哨兵 1) 安装redis 2.6 2) 复制哨兵配置文件
# mkdir /usr/local/redis/conf
# cp redis-2.6.14/sentinel.conf /usr/local/redis/conf
3) 编辑配置文件
# vim /usr/local/redis/conf/sentinel.conf 
port 26379
sentinel monitor mymaster 192.168.140.12 7001 1
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 60000
4) 启动哨兵
# cp redis-2.6.14/src/redis-sentinel /usr/local/redis/bin/
# redis-sentinel /usr/local/redis/conf/sentinel.conf
[8948] 04 Mar 10:18:58.561 * Max number of open files set to 10032
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 2.6.14 (00000000/0) 64 bit
  .-`` .-```.  ```/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
 |    `-._   `._    /     _.-'    |     PID: 8948
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

[8948] 04 Mar 10:18:58.564 * +slave slave 192.168.140.12:7002 192.168.140.12 7002 @ mymaster 192.168.140.12 7001
[8948] 04 Mar 10:18:58.564 * +slave slave 192.168.140.12:7003 192.168.140.12 7003 @ mymaster 192.168.140.12 7001
6、配置tomcat连接redis哨兵保存会话 1) 将jar包复制到 tomcat
# cp commons-logging-1.2.jar commons-pool2-2.4.2.jar jedis-2.9.0.jar tomcat-cluster-redis-session-manager-2.0.jar /usr/local/tomcat/lib/
2) 编辑tomcat实例配置文件,指定redis集群的信息
# vim /opt/tomcat01/conf/context.xml 
   
   
# netstat -antp | grep java
tcp6       0      0 :::9000                 :::*                    LISTEN      17377/java          
tcp6       0      0 :::9001                 :::*                    LISTEN      17456/java          
tcp6       0      0 :::8009                 :::*                    LISTEN      17377/java          
tcp6       0      0 127.0.0.1:8010          :::*                    LISTEN      17377/java          
tcp6       0      0 127.0.0.1:8020          :::*                    LISTEN      17456/java          
tcp6       0      0 192.168.140.11:47648    192.168.140.13:26379    ESTABLISHED 17456/java          
tcp6       0      0 192.168.140.11:47640    192.168.140.13:26379    ESTABLISHED 17377/java    
7、测试访问nginx,查看会话ID应该是一致的
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/771115.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号