主从复制:
哨兵:
集群:
数据冗余:
故障恢复:
负载均衡:
高可用基石:
主机 | 主机名 | 操作系统 | IP 地址 | 主要软件 |
---|---|---|---|---|
Master | CentOS 7-1 | CentOS 7 | 192.168.126.11 | squid-3.5.28.tar.gz |
Slave1 | CentOS 7-2 | CentOS 7 | 192.168.126.12 | squid-3.5.28.tar.gz |
Slave2 | CentOS 7-3 | CentOS 7 | 192.168.126.13 | squid-3.5.28.tar.gz |
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
yum -y install gcc gcc-c++ make
cd /opt
#将软件包传至该目录下
tar zxvf redis-5.0.7.tar.gz -C /opt/
cd redis-5.0.7/
make -j 4 && make PREFIX=/usr/local/redis install
cd /opt/redis-5.0.7/utils/
./install_server.sh
#回车,直到出现以下选项,手动修改为“/usr/local/redis/bin/redis-server”
Please select the redis executable path [/usr/local/bin/redis-server] /usr/local/redis/bin/redis-server
ln -s /usr/local/redis/bin/* /usr/local/bin/
netstat -natp | grep "redis"
#当 install_server.sh 脚本运行完毕,Redis 服务就已经启动,默认侦听端口为 6379
Master:
vim /etc/redis/6379.conf
bind 0.0.0.0 #70行,注释掉 bind 项,默认监听所有网卡
daemonize yes #137行,开启守护进程
logfile /var/1og/redis_ 6379.1og #172行,指定日志文件目录
dir /var/lib/redis/6379 #264行,指定工作目录
appendonly yes #700行,开启 AOF 持久化功能
Slave:
vim /etc/redis/6379. conf
bind 0.0.0.0 #70行,修改监听地址为 0.0.0.0
daemonize yes #137行,开启守护进程
logfile /var/log/redis_ 6379. log #172行,指定日志文件目录
dir /var/lib/redis/6379 #264行,指定工作目录
replicaof 192.168.126.11 6379 #288行,指定要同步的 Master 节点 IP 和端口
appendonly yes #700行,开启 AOF 持久化功能
/etc/init.d/redis_6379 restart
#重启服务使配置生效
在 Master 上看日志:
tail -f /var/log/redis_6379.log
在 Master 上验证从节点:
redis-cli info replication
哨兵的核心功能就是在主从复制的基础上,哨兵引入了主节点的自动故障转移
哨兵模式的原理:
哨兵模式的作用:
哨兵结构由两部分组成,哨兵节点和数据节点:
vim /opt/redis-5.0.7/sentinel.conf
protected- mode no #17行,关闭保护模式
port 26379 #21行,Redis哨兵默认的监听端口
daemonize yes #26行,指定sentinel为后台启动
logfile "/var/log/sentinel.log" #36行,指定日志存放路径
dir "/var/lib/redis/6379" #65行,指定数据库存放路径
sentinel monitor mymaster 192.168.126.11 6379 2
#84行,修改,指定该哨兵节点监控 192.168.126.11:6379 这个主节点,该主节点的名称是 mymaster
#最后的 2 的含义与主节点的故障判定有关:至少需要 2 个哨兵节点同意,才能判定主节点故障并进行故障转移
sentinel down-after -milliseconds mymaster 30000#113行,判定服务器 down 掉的时间周期,默认 30000毫秒 (30秒)
sentinel failover-timeout mymaster 180000 #146行,故障节点的最大超时时间为 180000 (180秒)
先启动 Master,再启动 Slave
cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &
redis-cli -p 26379 info Sentinel
ps -ef | grep "redis"
#查看 redis-server 的进程号
kill -9 [进程号]
#杀死 Master 节点上的 redis-server 的进程号
tail /var/log/sentinel.log
redis-cli -p 26379 info Sentinel
cd /etc/redis/
mkdir -P redis-cluster/redis600{
1..6)
#
for i in {
1..6}
do
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis600$i
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis600$i
done
ls -R
#其他五个文件夹的配置文件以此类推修改,注意六个端口都不一样
cd /etc/redis/redis-cluster/redis6001
vim redis. conf
#bind 127.0.0.1 #69行,注释掉 bind 项,默认监听所有网卡
protected-mode no #88行,修改,关闭保护模式
port 6001 #92行,修改,redis 监听端口,
daemonize yes #136行,开启守护进程,以独立进程启动
appendonly yes #699行,修改,开启 AOF 持久化
cluster-enabled yes #832行,取消注释,开启群集功能
cluster-config-file nodes-6001.conf #840行,取消注释,群集名称文件设置
cluster-node-t imeout 15000 #846行,取消注释群集超时时间设置
#分别进入那六个文件夹,执行命令"redis-server redis.conf"来启动 redis 节点
cd /etc/redis/redis-cluster/redis6001
redis-server redis.conf
for i in {
1..6}
do
cd /etc/redis/redis-cluster/redis600$i
redis-server redis.conf
done
ps -ef | grep "redis"
redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1
#六个实例分为三组,每组一主一从,前面的做主节点,后面的做从节点
#下面交互的时候需要输入 yes 才可以创建
#-replicas 1 表示每个主节点有一个从节点
redis-cli -p 6001 -c
#加 -c 参数,节点之间就可以互相跳转
127.0.0.1:6001> CLUSTER SLOTS
#查看节点的哈希槽编号范围
127.0.0.1:6001> set name wanger
-> Redirected to slot [5798] located at 127.0.0.1:6002
OK
#新建一个键的值
127.0.0.1:6002> CLUSTER KEYSLOT name
(integer) 5798
#查看 name 键的槽编号
ctrl+c
#退出
redis-cli -p 6001 -c
127.0.0.1:6001> KEYS *
(empty list or set)
127.0.0.1:6001>
ctrl+c
redis-cli -p 6005 -c
127.0.0.1:6005> KEYS *
1) "name"
#可以发现,对应的 slave 节点也有这条数据,但是别的节点没有