redis-单节点-主从节点-哨兵模式
场景:先做好单节点,再做主从,二进制安装方式。ip和密码根据需求更改
=================单节点======================================
https://www.cnblogs.com/weibin1/p/10249590.html
【下载、解压、安装】
cd /usr/local
credis-4.0.6.tar.gz
wget http://download.redis.io/releases/redis-7.4.1.tar.gz
tar zxvf redis-4.0.6.tar.gz
cd redis-4.0.6
make && make install
【末尾追加环境变量】
vim /etc/profile
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export PATH=/usr/local/redis/src:$PATH
source /etc/profile #生效
【日志和pid】
mkdir -p /data/redis && touch /data/redis/redis.log
chown 644 -R /data/redis/redis.log
touch /data/redis/redis.pid
chown 644 /data/redis/redis.pid
【配置文件】grep -vE '^$|^#' redis.conf #文件名,过滤#号开头和空行
cp redis.conf /etc/redis.conf #!
vim /etc/redis.conf
daemonize yes #以后台daemon方式运行redis
maxmemory 100mb #最大使用内存
requirepass 密码 #设置密码
bind 0.0.0.0 #监听地址--0.0.0.0
logfile "/data/redis/redis.log" #RDB文件存放路径
pidfile /data/redis/redis6379.pid
save 900 1 #900秒有1次更改就保存数据
save 300 10
save 60 10000
【systemd服务文件】
vim /etc/systemd/system/redis.service
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /etc/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
PIDFile=/data/redis/redis6379.pid #在redis.conf文件查看
ExecStartPost=/bin/sleep 2
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
#systemd服务管理
systemctl daemon-reload
systemctl enable --now redis
systemctl start redis && systemctl status redis
#不使用systemd文件管理redis的方式,就用这种方式管理:
#redis-server /etc/redis.conf >> /data/redis/redis.log & #后台启动redis,与redis.conf里的logfile一致路径
#nohup redis-server /etc/redis.conf >>/data/redis/redis.log 2>&1 & #后台运行启动,以/etc/redis.conf配置文件启动redis服务,日志输出到data/redis目录下
#停止redis/
ps -aux | grep redis
redis 849 0.1 0.2 263696 7704 ? Ssl Aug21 146:20 /usr/bin/redis-server 0.0.0.0:6379
root 432175 0.0 0.0 221940 1180 pts/0 S+ 15:11 0:00 grep --color=auto redis
849--redis的进程号
kill 849 #杀掉进程
redis-cli -h 10.88.66.76 -p 6379 -a 密码 #命令行登录与退出
10.88.66.76:6379> exit
【热更新redis配置】
1.进入redis
redis-cli -h 10.10.10.150 -p 6379 -a 123456
#CONFIG SET maxmemory 2gb #改内存,CONFIG GET maxmemory验证
#CONFIG SET requirepass new_password #改密码
#CONFIG SET port 6380 #看需求改端口
【卸载redis服务】直接把相关目录和文件删除即可
【密码登录认证】
redis-cli -h 192.168.0.67 -p 6379
auth 你的密码
【改密码】
redis-cli -h 192.168.0.67 -p 6379
auth 123456
config set requirepass 新密码
config get requirepass
auth 新密码 #验证
#数据导出---一般不需要导出,作为缓存的。java服务进来以后,就会产生数据了
=================主从节点=====================================
logfile "/var/log/redis.log" #RDB存储路径
https://www.cnblogs.com/weibin1/p/10441832.html
【先停服务再做主从】
redis-cli -h 10.88.66.76 -p 6379 -a 密码 #停止redis服务
10.88.66.76:6379> shutdown
【配置文件】grep -vE '^$|^#' filename
master#vim redis.conf
masterauth "123456" # 其它redis视我为master时的验证密码
requirepass "123456" # 本机redis的登录密码
slaveof#vim redis.conf
masterauth "123456" # 其它redis视我为master时的验证密码
requirepass "123456" # 本机redis的登录密码
slaveof 192.168.1.9 6379 # master的ip和redis端口
【后台启动redis】
redis-server /etc/redis.conf >> /data/redis/redis.log & #如果直接删除了redis目录后,第二次启动时,要把原有的redis.log删除。不然冲突,存储不了数据
【验证】
slaveof#redis-cli -h 主ip -a 主密码
info replication #看身份
【停止服务】
redis-cli -h 服务ip -p 6379 -a 密码 #命令行登录与退出
服务ip:6379> exit
redis-cli -h 服务ip -p 6379 -a 密码 #停止redis服务
服务ip:6379> shutdown
#卸载redis服务---直接把相关目录和文件删除即可
======================哨兵======================
哨兵是什么?
1. 哨兵是redis用于主从或集群的不可缺少的故障切换机制。
2. 单台redis的话,程序连接的是redis服务的6379端口;主从或集群的话,程序不再直接连接redis服务了,
而要连接的是多个哨兵,哨兵会告诉程序端找哪个redis服务。
redis主哨兵
master ~]# cp /usr/local/redis-4.0.6/sentinel.conf /etc/sentinel.conf
master ~]# vim /etc/sentinel.conf
port 6380
sentinel monitor mymaster 本机ip 6380 2 #改
sentinel auth-pass mymaster 123456 #增
daemonize yes #增
slave ~]# cp /usr/local/redis-4.0.6/sentinel.conf /etc/sentinel.conf #grep -vE '^$|^#' filename #去除空行和#开头行
slave ~]# vim /etc/sentinel.conf
port 6381
sentinel monitor mymaster 192.168.1.9 6380 2 # master的ip和redis端口,2表示,几台slaveof认为master挂了才算
sentinel auth-pass mymaster 123456
daemonize yes
【测试故障】
起哨兵服务
master ~]#redis-sentinel /etc/sentinel.conf >> /dev/null &
slave ~]#redis-sentinel /etc/sentinel.conf >> /dev/null &
master服务停掉
redis-cli -h 192.168.61.101 -a 1
192.168.1.9:6379> shutdown
not connected> quit
[root@slaveof ~]#
5秒后,是否升级master
redis主slave:6379> info replication
# Replication
role:master
redis从slave:6379> info replication
# Replication
role:master
注意1: master角色是非抢占模式
即:一旦集群中存在master,则其余节点视其为master,除非master挂掉
注意2: 从库是只读的
}
======================配置文件详解==========================
vim /usr/local/redis/redis.conf
# master节点配置
bind 0.0.0.0 -::1 # 监听ip,多个ip用空格分隔
daemonize yes # 允许后台启动
logfile "/usr/local/redis/redis.log" # 日志路径
dir /usr/local/redis/data # 数据库备份文件存放目录
masterauth 123123 # slave连接master密码,master可省略
requirepass 123123 # 设置master连接密码,slave可省略
appendonly yes # 在/usr/local/redis/data目录生成appendonly.aof文件,将每一次写操作请求都追加到appendonly.aof 文件中
vim /usr/local/redis/redis.conf
#slave1节点配置
bind 0.0.0.0 -::1 # 监听ip,多个ip用空格分隔
daemonize yes # 允许后台启动
logfile "/usr/local/redis/redis.log" # 日志路径
dir /usr/local/redis/data # 数据库备份文件存放目录
replicaof 192.168.1.21 6379 # replicaof用于追随某个节点的redis,被追随的节点为主节点,追随的为从节点。就是设置master节点
masterauth 123123 # slave连接master密码,master可省略
requirepass 123123 # 设置master连接密码,slave可省略
appendonly yes # 在/usr/local/redis/data目录生成appendonly.aof文件,将每一次写操作请求都追加到appendonly.aof 文件中
vim /usr/local/redis/redis.conf
#slave2节点配置
bind 0.0.0.0 -::1 # 监听ip,多个ip用空格分隔
daemonize yes # 允许后台启动
logfile "/usr/local/redis/redis.log" # 日志路径
dir /usr/local/redis/data # 数据库备份文件存放目录
replicaof 192.168.1.21 6379 # replicaof用于追随某个节点的redis,被追随的节点为主节点,追随的为从节点。就是设置master节点
masterauth 123123 # slave连接master密码,master可省略
requirepass 123123 # 设置master连接密码,slave可省略
appendonly yes # 在/usr/local/redis/data目录生成appendonly.aof文件,将每
# 三个节点都执行
cat >/usr/local/redis/sentinel.conf<<EOF
port 26379
daemonize yes
logfile "/usr/local/redis/sentinel.log"
# sentinel工作目录
dir "/usr/local/redis/sentinel"
# 判断master失效至少需要2个sentinel同意,建议设置为n/2+1,n为sentinel个数
# sentinel monitor <master-name> <ip> <port> <count>
sentinel monitor mymaster 192.168.1.21 6379 2
sentinel auth-pass mymaster 123123
# 判断master主观下线时间,默认30s
sentinel down-after-milliseconds mymaster 30000
EOF
==========================================
redis主的哨兵配置文件需要改动的地方如下,其余保持默认即可
[root@master ~]# cp /usr/local/redis-4.0.6/sentinel.conf /etc/sentinel.conf
[root@master ~]# vim /etc/sentinel.conf
bind 192.168.1.9
sentinel monitor mymaster 192.168.1.9 6379 2
sentinel auth-pass mymaster 123456
logfile "/var/log/sentinel.log"
daemonize yes
redis主的哨兵配置文件需要改动的地方如下,其余保持默认即可
[root@master ~]# cp /usr/local/redis-4.0.6/sentinel.conf /etc/sentinel.conf
[root@master ~]# vim /etc/sentinel.conf
bind 192.168.1.9
sentinel monitor mymaster 192.168.1.9 6379 2
sentinel auth-pass mymaster 123456
logfile "/var/log/sentinel.log"
daemonize yes
----遇到的报错:
systemd[1]: Can't open PID file /data/redis/redis6379.pid (yet?) after start: No such file or directory
因为:pid文件权限不足,644/755/777权限,或者没有文件,systemd在启动 Redis 服务时,PID 文件尚未被 Redis 进程创建。进程慢了,在systemd的redis服务文件里添加:
vi /etc/systemd/system/redis.service
[Service]
ExecStartPost=/bin/sleep 2
再重载重启查看redis-->systemctl daemon-reload && systemctl restart redis && systemctl status redis