Redis是一个开源的内存数据结构存储系统,它也可以用作数据库、缓存和消息队列。Redis支持多种数据类型,包括字符串、哈希、列表、集合和有序集合。它具有高性能、可扩展性和灵活性的特点,被广泛应用于许多领域,如缓存、实时分析、消息传递和排行榜等。Redis还提供了持久化功能,可以将内存中的数据保存到磁盘上,以防止数据丢失。它支持丰富的命令集合,并提供了多种语言的客户端库,使开发者能够方便地与Redis进行交互。本文档详细的记载了redis主从和sentinel哨兵模式的部署。
一、环境准备
1.下载redis
redis官网网址:https://redis.io,记录本文时官网最新的版本为7.2.5。本文档使用的是7.2,5,其他版本redis的部署方法一致,7.2.5版本的下载地址为:https://download.redis.io/releases/redis-7.2.5.tar.gz。
2.配置最大文件打开数
使用root帐号登录操作系统,编辑limits.conf文件,如下所示。
[root@yunweixia.com ~]# vi /etc/security/limits.conf * soft nofile 65535 * hard nofile 65535
3.调整内核参数
[root@yunweixia.com ~]# echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf [root@yunweixia.com ~]# sysctl -p
4.安装gcc
[root@yunweixia.com ~]# yum install -y gcc tcl
二、主节点安装部署
(一)redis的安装部署
1.解压redis
[root@yunweixia.com ~]# tar xzvf redis-7.2.5.tar.gz
2.编译redis
[root@yunweixia.com ~]# mv redis-7.2.5 /etc/redis
[root@yunweixia.com ~]# mkdir -p /etc/redis/data
[root@yunweixia.com ~]# mkdir -p /etc/redis/logs [root@yunweixia.com ~]# cd /etc/redis [root@yunweixia.com redis]# make && make install
3.备份redis配置文件
[root@yunweixia.com redis]# cp redis.conf redis.conf-bak
4,修改redis配置文件
[root@yunweixia.com redis]# vi redis.conf #bind 127.0.0.1 #绑定redis服务器网卡IP,默认为127.0.0.1,即本地回环地址。这样的话,访问redis服务只能通过本机的客户端连接,而无法通过远程连接。如果bind选项为空的话,那会接受所有来自于可用网络接口的连接,也可以设置为本机Ip地址。 protected-mode no #保护模式,默认是开启状态,只允许本地客户端连接 daemonize yes #默认情况下 redis 不是作为守护进程运行的,如果你想让它在后台运行,你就把它改成 yes。当redis作为守护进程运行的时候,它会写一个 pid 到 /var/run/redis.pid 文件里面 appendonly yes #默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。但是redis如果中途宕机,会导致可能有几分钟的数据丢失,根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性。Redis会把每次写入的数据在接收后都写入appendonly.aof文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。 requirepass Aa123456 #设置redis-cli访问密码。 masterauth Aa123456 #设置同步密码 logfile "/etc/redis/logs/redis.log" # Log目录和文件 dir /etc/redis/data/ #持久化数据目录 maxmemory 24000000kb #防止OOM,推荐设置为最大内存值的50%-70%
5.配置systemctl控制的redis服务,将以下下内容复制输入到新建的redis.service文件中。
[root@yunweixia.com redis]# vi /usr/lib/systemd/system/redis.service [Unit] Description=Redis persistent key-value database After=network.target After=network-online.target Wants=network-online.target [Service] ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf ExecStop=/bin/kill -s QUIT $MAINPID Type=forking User=root Group=root RuntimeDirectory=redis RuntimeDirectoryMode=0755 PrivateTmp=true [Install] WantedBy=multi-user.target
6.设置开机启动。
[root@yunweixia.com ~]# systemctl restart redis [root@syunweixia.com ~]# systemctl enable redis
7.使用redis-cli 连接redis
[root@yunweixia.com ~]# redis-cli -h 192.168.111.11 -a Aa123456
(二)sentinel哨兵模式的部署
默认情况下sentinel配置文件跟redis.conf在相同的目录,直接使用vi编辑sentinel.conf配置文件,修改如下几项。
1.备份sentinel配置文件
[root@yunweixia.com redis]# cp sentinel.conf sentinel.conf-bak
2.修改sentinel配置文件
[root@yunweixia.com redis]# vi sentinel.conf protected-mode no daemonize yes sentinel monitor mymaster 192.168.111.11 6379 2 #主节点IP地址和端口 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 18000 sentinel auth-pass mymaster Aa123456 #redis密码 logfile "/etc/redis/logs/sentinel.log"
dir /etc/redis/data/
3.配置systemctl控制的服务,将以下下内容复制输入到新建的redis-sentinel.service文件中。
[root@yunweixia.com redis]# vi /usr/lib/systemd/system/redis-sentinel.service [Unit] Description=Redis persistent key-value database After=network.target After=network-online.target Wants=network-online.target [Service] ExecStart=/usr/local/bin/redis-sentinel /etc/redis/sentinel.conf ExecStop=/bin/kill -s QUIT $MAINPID Type=forking User=root Group=root RuntimeDirectory=redis RuntimeDirectoryMode=0755 PrivateTmp=true [Install] WantedBy=multi-user.target
4.设置开机启动
[root@yunweixia.com ~]# systemctl restart redis-sentinel [root@yunweixia.com ~]# systemctl enable redis-sentinel
三、从节点安装部署
从节点一般需要2个,修改redis配置和主节点做同步,从节点均需要执行如下配置。
(一)redis的安装部署
从节点的部署方式参考主节点,唯一区别在于redis.conf中需要比主节点多修改如下配置:
replicaof 192.168.111.11 6379 #主节点的IP地址和端口,5.0以前版本使用slaveof replica-serve-stale-data no #如果slave无法与master同步,设置成slave不可读
(二)sentinel哨兵模式的部署
sentinel配置同主节点配置相同。
四、扩展阅读
1.调整内核参数vm.overcommit_memory的作用是什么?
vm.overcommit_memory是一个Linux内核参数,用于控制内存过量分配的行为。它有以下三个可能的取值: 0:表示内核会按需分配内存,并允许将内存准备为虚拟内存页(VMAs),即在分配内存时不进行检查。 1:表示内核会检查可用内存和剩余swap空间,并防止将分配的内存超过物理内存和交换区的总和。 2:表示内核允许将内存超过物理内存和交换区的总和,同时也允许不准备为虚拟内存页(VMAs),这可能导致后续内存分配失败而触发内存错误。 通常情况下,建议将vm.overcommit_memory设置为默认值0,即按需分配内存,因为这样可以最大限度地利用可用内存。当设置为1时,可能会导致一些进程在内存不足时失败,但也可以防止过度使用内存。而设置为2时,可能会导致一些进程在实际分配内存时失败,因此慎重使用该选项。
原创文章,作者:运维侠,如若转载,请注明出处:https://www.yunweixia.com/solutions/redis-sentinel-master-slave-deployment-tutorial.html