redis集群

1 实验环境

redis1 192.168.9.12
redis2 192.168.9.13
redis3 192.168.9.16

2 环境部署

2.1安装redis

[root@redis	~]# tar xf redis-5.0.0.tar.gz  -C /usr/src/
[root@redis	~]# cd /usr/src/
[root@redis src]# ls
[root@redis	src]# ln -s /usr/src/redis-5.0.0/ /usr/local/redis
[root@redis	src]# cd /usr/local/redis/
[root@redis	redis]# make && make install
[root@redis	redis]# ./src/redis-server --version
[root@redis	redis]# egrep -v "^$|^#" redis.conf |head

2.2 修改配置文件 vim redis.conf

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[root@redis redis]# ./src/redis-server redis.conf

在这里插入图片描述

[root@redis redis]# netstat -anptu|grep redis

3.多实例部署

三台一样
vim reids.conf末行模式
g/^#/d 删除以#开头的行
g/^$/d 删除空行

[root@redis1 redis]# mkdir -pv /usr/local/redis/{6379,6380}/{conf,log,pid,data}
[root@redis1 redis]# cp -p /usr/local/redis/redis.conf /usr/local/redis/6379/conf/redis.conf
[root@redis1 redis]# cp -p /usr/local/redis/redis.conf /usr/local/redis/6380/conf/redis.conf
[root@redis1 redis]# sed -i 's/6379/6380/g' /usr/local/redis/6380/conf/redis.conf
[root@redis1 redis]# vim /usr/local/redis/6379/conf/redis.conf

在这里插入图片描述

[root@redis ~]# useradd -M -s /bin/bash redis
[root@redis ~]# chown -R redis:redis /usr/local/redis/
[root@redis ~]# su - redis -s /bin/bash  -c "redis-server /usr/local/redis/6379/conf/redis.conf”
[root@redis ~]# su - redis -s /bin/bash  -c "redis-server /usr/local/redis/6380/conf/redis.conf”
[root@redis ~]# netstat -anptu | grep redis | grep -v grep

4.安装 ruby工具

4.1 安装

[root@redis3 ~]# yum install ruby rubygems -y
[root@redis3 ~]# gem sources  --remove https://rubygems.org/
[root@redis3 ~]# gem sources -a http://mirrors.aliyun.com/rubygems/
http://mirrors.aliyun.com/rubygems/ added to sources
[root@redis3 ~]# gem sources -l

在这里插入图片描述
在这里插入图片描述

[root@redis3 ~]# wget http://download.redis.io/releases/redis-3.2.12.tar.gz
[root@redis1 ~]# tar xf redis-3.2.12.tar.gz -C /usr/src/
[root@redis3 ~]# ln -s /usr/src/redis-3.2.12/src/redis-trib.rb /usr/local/sbin/

4.2 修改配置文件

[root@redis1 ~]# vim /usr/local/redis/6379/conf/redis.conf 

需要修改和添加的部分如下:

bind 192.168.9.12 127.0.0.1
protected-mode no
port 6379
daemonize yes
logfile "/usr/local/redis/6379/log/redis.6379.log"
dir /usr/local/redis/6379/data
cluster-enabled yes
cluster-node-timeout 15000
cluster-config-file "nodes-6379.conf"
[root@redis1 ~]# su - redis -s /bin/bash -c "redis-server /usr/local/redis/6379/conf/redis.conf"
[root@redis1 ~]# su - redis -s /bin/bash -c "redis-server /usr/local/redis/6380/conf/redis.conf"
[root@redis1 ~]# netstat -anptu | grep redis | egrep -v grep

5.ruby配置集群

[root@redis1 ~]# redis-trib.rb create --replicas 1 192.168.9.12:6379 192.168.9.13:6379 192.168.9.16:6379 192.168.9.12:6380  192.168.9.13:6380  192.168.9.16:6380    //前三个主,后三个从

在这里插入图片描述
yes

在这里插入图片描述
随便登陆一个节点查看节点分配信息(因为哪个都可以看到一样的分配信息)

[root@redis1 ~]# redis-cli -h 192.168.9.12 -p 6379
192.168.9.12:6379> CLUSTER NODES

在这里插入图片描述

6.增加节点并扩容及节点下线

6.1增加节点添加得到集群

192.168.9.17

[root@redis1 ~]# redis-trib.rb add-node 192.168.9.17:6379 192.168.9.12:6379
[OK] New node added correctly.

6.2给新节点分配槽位

[root@redis-1 ~]# redis-trib.rb reshard 192.168.9.12:6379

填写要重新分配的槽位数量 例:4096
填写被分配槽位的主机node id 例:923ba9cb414781539647b83f0420b62de5e1dd57
填写充分片槽位来源 可以选择all或者 node id 输入done结束
填写yes保存这次分配计划

[root@redis1 ~]# redis-cli -h 192.168.9.12 -p 6379
192.168.9.12:6379> CLUSTER NODES

在这里插入图片描述

6.3从节点添加

[root@redis1 ~]# redis-trib.rb add-node --slave --master-id 251083c194f65ee6b887b071ea41a4c1e0a01ebc 192.168.9.17:6380 192.168.9.17:6379
[root@redis1 ~]# redis-cli -h 192.168.9.12 -p 6379
192.168.9.12:6379> CLUSTER NODES

在这里插入图片描述

6.4节点下线

把新增的节点下线并把槽位给9.12节点

[root@redis1 ~]# redis-trib.rb reshard 192.168.9.17:6379

输入4096刚刚分配的槽位数量
输入接收槽位节点IP(9.12)
输入槽位来源IP(9.17)
输入done结束
输入yes保存本次计划

[root@redis1 ~]# redis-cli -h 192.168.9.12 -p 6379 cluster nodes | grep master

在这里插入图片描述
删除节点

[root@redis1 ~]# redis-trib.rb del-node 192.168.9.17:6379 251083c194f65ee6b887b071ea41a4c1e0a01ebc

在这里插入图片描述

[root@redis1 ~]# redis-trib.rb  rebalance 192.168.9.12:6379 192.168.9.13:6379 192.168.9.16:6379
保持槽位均衡分配

7.原生方式处理redis集群

同样三台机子(配置文件同样开启集群服务),每台机子一主一从。从不能和主在同一主机上,互相指定主机。
将所有节点加入集群中

[root@redis-1 ~]# redis-cli -h 192.168.2.10 -p 7000
192.168.2.10:7000> cluster meet 192.168.2.10 7001
OK
192.168.2.10:7000> cluster meet 192.168.2.11 7000
OK
192.168.2.10:7000> cluster meet 192.168.2.11 7001
OK
192.168.2.10:7000> cluster meet 192.168.2.12 7000
OK
192.168.2.10:7000> cluster meet 192.168.2.12 7001
OK

查看

192.168.2.10:7000> cluster nodes
192.168.2.10:7000> cluster info

此时没有分配槽位,redis不能使用。

分配槽位

[root@redis-1 ~]# redis-cli -h 192.168.2.10 -p 7000 cluster addslots {0..5461}
OK
[root@redis-2 ~]#redis-cli -h 192.168.2.11 -p 7000 cluster addslots  {5462..10922}
OK
[root@redis-3 ~]# redis-cli -h 192.168.2.12 -p 7000 cluster addslots {10923..16383}
OK

查看

[root@redis-1 ~]# redis-cli -h 192.168.2.10 -p 7000
192.168.2.10:7000> cluster info
192.168.2.10:7000> cluster nodes

从库指定

[root@redis-1 ~]# redis-cli -h 192.168.2.10 -p 7001
#192.168.2.10:7001指向192.168.2.11:7000做为从库
192.168.2.10:7001> cluster replicate f2cd15016a0701ee1f5ffaaa4b8322454196eafe
OK
#192.168.2.11:7001指向192.168.2.12:7000做为从库
192.168.2.11:7001> cluster replicate 405ff2d2bf577c4b5ad2124685ca333749b9e597
OK
#192.168.2.12:7001指向192.168.2.10:7000做为从库
[root@redis-3 ~]# redis-cli -h 192.168.2.12 -p 7001
192.168.2.12:7001> cluster replicate 0ad6a664b6ca49201eb2b3b6d69767583372e800
OK

查看

[root@redis-1 ~]# redis-cli -h 192.168.2.10 -p 7000
192.168.2.10:7000> cluster nodes

8.运维中遇到的问题

session会话不一致

解决方法:
1.
ip_hash绑定 在nginx配置文件的upstream中直接添加ip_hash;

upstream tomcat{
        ip_hash;
        server 192.168.1.11:8080 weight=1;
        server 192.168.1.12:8080 weight=1;
}

location ~* \.jsp$  {
                proxy_pass http://tomcat;
        }

2.session复制
session集群复制

vim /usr/local/tomcat8/conf/server.xml 
 <Context docBase="/web_data" path="" debug="0"/>

3.session共享
在totomcat目录中的lib下添加三个连接redis的jar包等,
在tomcat的配置文件中增加session共享内容

vim /usr/local/tomcat8/conf/context.xml 
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />  
    <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
     host="192.168.1.10"
     port="6379"
     database="0"
     maxInactiveInterval="60"
     />
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值