文章目录
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"
/>