Redis
修改母盘
1G 一个CPU
10
20
30
源码安装
[root@redis-node2 ~]# tar zxf redis-7.4.0.tar.gz [root@redis-node2 ~]# cd redis-7.4.0/ [root@redis-node2 redis-7.4.0]# dnf install make gcc initscripts -y [root@redis-node2 redis-7.4.0]# make && make install
如果出现问题,直接删除目录,重新解压编译
[root@redis-node1 ~]# ls anaconda-ks.cfg Downloads Public Templates Desktop Music redis-7.4.0 Videos Documents Pictures redis-7.4.0.tar.gz [root@redis-node1 ~]# rm -rf redis-7.4.0
修改配置文件
[root@redis-node1 utils]# cd /root/redis-7.4.0/utils/ [root@redis-node2 utils]# vim install_server.sh #bail if this system is managed by systemd _pid_1_exe="$(readlink -f /proc/1/exe)" #if [ "${_pid_1_exe##*/}" = systemd ] #then # echo "This systems seems to use systemd." # echo "Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!" # exit 1 #fi [root@redis-node1 utils]# ./install_server.sh #全部空格,默认
[root@redis-node1 utils]# vim /etc/redis/6379.conf bind * -::* protected-mode no
[root@redis-node1 ~]# /etc/init.d/redis_6379 restart [root@redis-node1 ~]# redis-cli 127.0.0.1:6379> 127.0.0.1:6379> set key1 value OK 127.0.0.1:6379> get key1 "value" 127.0.0.1:6379> select 1 OK 127.0.0.1:6379[1]> get key1 (nil) 127.0.0.1:6379[1]>
拷贝redis
提前下载
[root@redis-node2&3 ~]# dnf install initscripts -y [root@redis-node2&3 ~]# dnf install rsync -y
[root@redis-node1 ~]# scp -r redis-7.4.0 root@172.25.254.20:/root [root@redis-node1 ~]# scp -r redis-7.4.0 root@172.25.254.30:/root
[root@redis-node3 ~]# cd redis-7.4.0/ [root@redis-node3 redis-7.4.0]# cd utils/ [root@redis-node3 utils]# ./install_server.sh [root@redis-node3 utils]# vim /etc/redis/6379.conf bind * -::* protected-mode no [root@redis-node3 utils]# /etc/init.d/redis_6379 restart
主从复制
slave修改配置文件
20 30
[root@redis-node3 ~]# vim /etc/redis/6379.conf protected-mode no replicaof 172.25.254.10 6379 [root@redis-node2 utils]# /etc/init.d/redis_6379 restart Stopping ... Redis stopped Starting Redis server..
主测试
主从同步原理
要补课
哨兵
监管
master
[root@redis-node1 ~]# cd redis-7.4.0/ [root@redis-node1 redis-7.4.0]# cp sentinel.conf /etc/redis/ [root@redis-node1 redis-7.4.0]# vim /etc/redis/sentinel.conf protected-mode no #关闭保护模式 port 26379 #监听端口 daemonize no #进入不打如后台 pidfile /var/run/redis-sentinel.pid #sentinel进程pid文件 loglevel notice #日志级别 92 sentinel monitor mymaster 172.25.254.10 6379 2 #创建sentinel监控监控master主机,2表示必须得到2票 133 sentinel down-after-milliseconds mymaster 10000 #master中断时长,10秒连不上视为master下线 sentinel parallel-syncs mymaster 1 #发生故障转移后,同时开始同步新master数据的slave数量 sentinel failover-timeout mymaster 180000 #整个故障切换的超时时间为3分钟
[root@redis-node1 redis-7.4.0]# redis-sentinel /etc/redis/sentinel.conf sentinel monitor mymaster 172.25.254.10 6379 2 sentinel down-after-milliseconds mymaster 10000 sentinel parallel-syncs mymaster 1 # Default is 3 minutes. sentinel failover-timeout mymaster 180000
复制
[root@redis-node1 ~]# scp /etc/redis/sentinel.conf root@172.25.254.20:/etc/redis/sentinel.conf [root@redis-node1 ~]# scp /etc/redis/sentinel.conf root@172.25.254.30:/etc/redis/sentinel.conf
备份
10 20 30
哨兵模式会更改配置模式
[root@redis-node3 redis]# cp sentinel.conf sentinel.conf.bak
启用哨兵
[root@redis-node1 redis]# redis-sentinel /etc/redis/sentinel.conf
[root@redis-node1 redis]# vim sentinel.conf
检测20
恢复故障
在后台运行哨兵
[root@redis-node1 redis]# vim sentinel.conf # daemonized. daemonize yes
存在的问题
当master挂掉的时候,可能还会有数据传入,所以这个时候就得禁止写入数据
#临时 [root@redis-node2 redis]# redis-cli 127.0.0.1:6379> CONFIG GET min-slaves-to-write 1) "min-slaves-to-write" 2) "0" 127.0.0.1:6379> CONFIG set min-slaves-to-write 2 OK 127.0.0.1:6379> CONFIG GET min-slaves-to-write 1) "min-slaves-to-write" 2) "2" #最少slave必须为2,否则禁止写入
#永久更改 [root@redis-node2 redis]# vim sentinel.conf # protected from the outside world via firewalling or other means. protected-mode no min-slaves-to-write 2
下午的最后一个实验
卸载redis
进入目录 停止服务
110
120
130
redis cluster
卸载
[root@redis-node1 ~]# cd redis-7.4.0/ [root@redis-node1 redis-7.4.0]# killall -9 redis-server [root@redis-node1 redis-7.4.0]# make uninstall cd src && make uninstall make[1]: Entering directory '/root/redis-7.4.0/src' rm -f /usr/local/bin/{redis-server,redis-benchmark,redis-cli,redis-check-rdb,redis-check-aof,redis-sentinel} make[1]: Leaving directory '/root/redis-7.4.0/src'
环境主机
10 20 30
110 120 130
编辑配置文件
vim /etc/redis/redis.conf bind * -::* cluster-enabled yes masterauth "123456" requirepass "123456" cluster-config-file nodes-6379.conf cluster-node-timeout 15000 [root@redis-node1 ~]# systemctl restart redis.service [root@redis-node1 ~]# netstat -antlupe | grep redi tcp 0 0 0.0.0.0:26379 0.0.0.0:* LISTEN 0 74276 38409/redis-sentine tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 978 85408 39314/redis-server tcp 0 0 172.25.254.10:54654 172.25.254.10:6379 ESTABLISHED 0 85436 38409/redis-sentine tcp 0 0 172.25.254.10:6379 172.25.254.10:54654 ESTABLISHED 978 85440 39314/redis-server tcp6 0 0 :::26379 :::* LISTEN 0 74277 38409/redis-sentine tcp6 0 0 :::6379 :::* LISTEN 978 85409 39314/redis-server [root@redis-node1 ~]# for i in 20 30 110 120 130 ; do scp /etc/redis/redis.conf root@172.25.254.$i:/etc/redis/redis.conf; done
创建redis-cluster
创建之前一定不能写入数据! [root@redis-node1 ~]# redis-cli --cluster create -a '123456' 172.25.254.10:6379 172.25.254.20:6379 172.25.254.30:6379 172.25.254.110:6379 172.25.254.120:6379 172.25.254.130:6379--cluster-replicas 1 #yes [root@redis-node1 ~]# redis-cli -a 123456 --cluster check 172.25.254.10:6379 #查看集群节点信息 [root@redis-node1 ~]# redis-cli -a 123456 --cluster info 172.25.254.10:6379 #查看集群信息
分布式集群,内容互相是看不见的
集群扩容
50 150
增加集群
#添加master [root@redis-node1 ~]# redis-cli -a 123456 --cluster add-node 172.25.254.40:6379 172.25.254.10:6379 [root@redis-node1 ~]# redis-cli -a 123456 --cluster check 172.25.254.10:6379 #查看集群节点信息 #分配槽位 [root@redis-node1 ~]# redis-cli -a 123456 --cluster reshard 172.25.254.20:6379 4096 ID (M 50) all yes #添加salve7.7 clsuter集群维护添加节点的时候是先添加node节点到集群,然后分配槽位,删除节点的操作与添加节点的操作正好相反,是先将被删除的Redis node上的槽位迁移到集群中的其他Redis node节点上,然后再将其删除,如果一个Redis node节点上的槽位没有被完全迁移,删除该node的时候会提示有数据且无法删除。 [root@redis-master1 ~]# redis-cli -a 123456 --cluster add-node 172.25.254.150:6379 172.25.254.20:6379 --cluster-slave --cluster-master-id 009571cb206a89afa6658b60b2d403136056ac09 [root@redis-node1 ~]# redis-cli -a 123456 --cluster check 172.25.254.20:6379 [root@redis-node1 ~]# redis-cli -a 123456 --cluster check 172.25.254.150:6379
集群维护
#移除要下线主机的哈希槽位 [root@redis-node1 ~]# redis-cli -a 123456 --cluster reshard 172.25.254.20:6379 #删除master [root@redis-node1 ~]# redis-cli -a 123456 --cluster del-node 172.25.254.120:6379 d458f34fa900d83212c021dc1e65396e490b5495 [root@redis-node1 ~]# redis-cli -a 123456 --cluster del-node 172.25.254.10:6379 5ab2e93f4f0783983676f7bd118efaacfb202bd1