redis理论
Redis 并不能保证数据的强一致性. 这意味这在实际中集群在特定的条件下可能会丢失写操作.
第一个原因是因为集群是用了异步复制
redis命令
redis-cli -c -h host -p port -a password
host:远程redis服务器host
port:远程redis服务端口
password:远程redis服务密码(无密码的的话就不需要-a参数了)
集群状态
redis-cli -h localhost -p 7001 -a JD2020 cluster info
集群节点信息
redis-cli -h localhost -p 7001 -a JD2020 cluster nodes
节点内存、cpu、key数量等信息(每个节点都需查看)
redis-cli -h localhost -p 7001 -a JD2020 info
-----------------------
查看队列消息:
redis集群(一主两从,三哨兵)
node1
node2
node3
①node1:redis.conf
daemonize no 改成 yes 意思是后台运行
logfile "/usr/local/src/redis-5.0.5/log/server.log" 这一行是配置redis的日志文件
masterauth "123456" 配置密码为123456
requirepass "123456" 配置密码为123456
②node2/node3:redis.conf
daemonize no 改成 yes 意思是后台运行
logfile "/usr/local/src/redis-5.0.5/log/server.log" 这一行是配置redis的日志文件
masterauth "123456" 配置密码为123456
requirepass "123456" 配置密码为123456
slaveof node1 6379 依赖的主机IP和端口号
③node1/node2/node3 启动
src/redis-server redis.conf
④node1/node2/node3 验证role -c 集群启动
redis-cli -c -h node1 -p 6379
node1>auth 123456
node1>role
node1>redis-cli -c -h node2 -p 6379
node1>auth 123456
node1>role
⑤如果node1:master挂了,手动切换
kill -9 node1:redis
node1>redis-cli -c -h node1 -p 6379
Connection refused 连接拒绝
node2>redis-cli -c -h node2 -p 6379
node2>auth 123456
node2>role 显示 slave
node2>slaveof no one
node2>role 显示 master
node2>keys *
node2>set key2 'vv2' 显示ok,
但是,如果此时连接node3的redis
node3>redis-cli -c -h node3 -p 6379
node3>auth 123456
node3>keys * 不会显示key2 ,还是显示原先的数据。
node3>info replication 还是显示master_host是node1
node3>slaveof node2 6379
node3>keys * 会显示key2,master_host是node2
此为临时手动切换mater的方法。
⑥哨兵模式配置
node1/node2/node3: sentinel.conf
proteed-mode no 去掉注释
sentinel monitor mymaster node1 6379 2 这里配置的都是主机器的IP地址
sentinel auth-pass mymaster 123456 这里是配置集群的密码
node1/node2/node3启动:
src/redis-sentinel sentinel.conf & 后台启动ct
⑦测试
kill -9 node1:redis
等待1分钟:
node2>redis-cli -c -h node2 -p 6379
node2>role
node3>redis-cli -c -h node3 -p 6379
node3>role
其中有一个一定是master。
重启node1 的redis / sentinel
node1>redis-cli -c -h node1 -p 6379
node1>role 1)显示 slave 2)显示master的IP
redis集群
整合成集群:
/export/redis-cluster/src/redis-cli -a JD2020 --cluster create ip1:7001 ip2:7001 \
ip3:7001 ip1:7002 ip2:7002 ip3:7002 --cluster-replicas 1
yes
–replicas 1 表示我们希望为集群中的每个主节点创建一个从节点
redis.conf
requirepass password
masterauth password
bind 0.0.0.0
protected-mode no
cluster-config-file /export/common/redis-cluster/conf/7001-node.conf
port 6379
pidfile /export/redis-cluster/redis_7001.pid
cluster-enabled yes
appendonly yes
dir /export/data/redis-cluster/7001
logfile /export/redis-cluster/logs/redis-7001.log
----------------------------------------------
客户端连接
redis-cli -c -h localhost -p port -a password
redis安装
规划:三节点,4c8g
1.第一个节点
在各个节点创建如下目录:
mkdir -p /export/common/redis-cluster/conf/
mkdir -p /export/data/redis-cluster/7001
mkdir -p /export/data/redis-cluster/7002
mkdir -p /export/redis-cluster/logs/
解压redis
tar xvf redis-5.05..tar.gz -C/export/packages/
编译redis
cd /export/packages/redis-5.0.5
make && make install
编辑redis.conf
vim /export/common/redis-cluster/conf/redis_7001.conf host_ip要改
---------------------------------------------EOF
requirepass JD2020
masterauth JD2020
bind HOST_IP 127.0.0.1
protected-mode no
cluster-config-file /export/common/redis-cluster/conf/7001-node.conf
port 7001
pidfile /export/redis-cluster/redis_7001.pid
cluster-enabled yes
appendonly yes
dir /export/data/redis-cluster/7001
logfile /export/redis-cluster/logs/redis-7001.log
--------------------------------------------EOF
vim /export/common/redis-cluster/conf/redis_7002.conf host_ip要改
---------------------------------------------
requirepass JD2020
masterauth JD2020
bind HOST_IP 127.0.0.1
protected-mode no
cluster-config-file /export/common/redis-cluster/conf/7002-node.conf
port 7002
pidfile /export/redis-cluster/redis_7002.pid
cluster-enabled yes
appendonly yes
dir /export/data/redis-cluster/7002
logfile /export/redis-cluster/logs/redis-7002.log
--------------------------------------------
启动redis
/export/redis-cluster/src/redis-server /export/common/redis-cluster/conf/redis_7001.conf &
/export/redis-cluster/src/redis-server /export/common/redis-cluster/conf/redis_7002.conf &
二、三节点
参照第一个节点操作。
ps -ef |grep redis
在第一个节点执行:
echo -e "yes\\n" |redis-cli --cluster create 192.168.0.101:7001 192.168.0.101:7002 \
192.168.0.102:7001 192.168.0.102:7002 192.168.0.103:7001 \
192.168.0.103:7002--cluster-replicas 1 |tee /tmp/t.tmp
Predixy:
高性能全特征redis代理,支持Redis Sentinel和Redis Cluster
规划:predixy作为redis代理,可与redis复用一个节点。
解压压缩包
tar xvf predixy-1.0.5-bin-amd64-linux.tar.gz -c /export/packages
创建软链接
ln -s /export/packages/predixy-1.0.5 /export/servers/predixy
获取redis集群master节点
redis-cli -h 192.168.0.101 -p 7001 -c cluster nodes|grep master
编辑cluster.conf
vim /export/servers/predixy/conf/cluster.conf
---------------------------------------------
ClusterServerPool {
MasterReadPriority 60
StaticSlaveReadPriority 50
DynamicSlaveReadPriority 50
RefreshInterval 1
ServerTimeout 1
ServerFailureLimit 10
ServerRetryTimeout 1
KeepAlive 120
Servers {
+ 192.168.0.101:7001
+ 192.168.0.102:7001
+ 192.168.0.103:7001
}
}
---------------------------------------------
启动predixy
cd /export/servers/predixy/bin/ && nohup ./predixy ../conf/cluster.conf &