centOS7安装redis单例&&配置主从+哨兵+VIP

目录

单机版的redis安装

Redis集群搭建(主从+哨兵)

 

redis主从+哨兵配置完成后,使用脚本功能实现VIP漂移


单机版的redis安装

1.安装依赖

#先检查有没有gcc
gcc --version
#如果没有,就进行安装
yum install gcc -y

#如果缺少tcl包,在这里安装一下(如果make test出现You need tcl 8.5 or newer in order to run the Redis test的话)
yum install tcl -y

2.获取资源,上传或者直接下载

wget http://download.redis.io/releases/redis-4.0.6.tar.gz

3.解压

tar xzvf redis-4.0.6.tar.gz

4.安装

cd redis-4.0.6

#编译
make

cd src

# 安装到指定的目录
make install PREFIX=/usr/local/redis

如果安装的过程中,报错如下:

zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录

则运行如下命令后,再执行安装命令

make MALLOC=libc

5.将解压包中的配置文件移动到安装目录下:

mkdir /usr/local/redis/etc

cp redis.conf /usr/local/redis/etc/

6.修改配置文件---》这里指的是单机版的配置文件修改,主从+哨兵模式请参考文章中的专用配置

1) 修改Redis以守护进程方式启动

2)修改允许其他客户端连接登录此Redis数据库,或者改为bind 0.0.0.0

3)开启远程访问

 

4)设置连接登录Redis数据库密码

5)修改安装目录,存放数据库

修改总结:

#允许远程访问
bind 0.0.0.0
#关闭远程保护
protected-mode no
#添加一个密码
requirepass "123" 
#后台运行
daemonize yes
#修改为你的安装目录 redis_端口号 这里主服务器端口为6379默认不动它
pidfile /home/redis/redis_6379.pid
#修改为你的安装目录
logfile /home/redis/redis.log
#修改为你的安装目录
dir /usr/local/redis/

7.启动redis

./redis-server etc/redis.conf

7.将redis服务器添加到systemctl服务器中,便于管理,centOS7.8下,redis版本为4.0.6,执行systemctl enable redis后,开机重启一直不起作用,sentinel可以正常个启动,一直不知道哪里有问题,尝试了好久都没有设置成功,试着使用redis-5.0.12版本,同样出现开机自启动不成功。

vi /usr/lib/systemd/system/redis.service

#表示基础信息
[Unit]
#描述
Description=Redis
#在哪个服务之后启动
After=network.target

#表示服务信息
[Service]
Type=forking
#注意:需要和redis.conf配置文件中的信息一致
PIDFile=/var/run/redis_6379.pid
#启动服务的命令
#redis-server安装的路径 和 redis.conf配置文件的路径
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf
#重新加载命令
ExecReload=/bin/kill -s HUP $MAINPID
#停止服务的命令,使用如下方式停止程序时,可以停止,但是停止后systemctl status redis 
# 有failed信息,报错信息看下面的图,但是不影响使用
# ExecStop=/bin/kill -s QUIT $MAINPID
# 如果觉得看着不舒服,可以使用下面这一条代替,redis服务器端口号根据实际情况进行修改
ExecStop=/home/redis/bin/redis-cli -p 6379 shutdown
# 用于设置是否使用私有的tmp目录
# 使用ExecStop=/bin/kill -s QUIT $MAINPID,发现必须加PrivateTmp=true,才可以使用systemctl
# 正常启动程序,不加的话会报错,不使用该种方式停止服务时,不开启
PrivateTmp=true

#安装相关信息
[Install]
#以哪种方式启动
WantedBy=multi-user.target
#multi-user.target表明当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行。

报错信息:

完整的redis.service,直接复制,修改后即可使用

vi /usr/lib/systemd/system/redis.service

[Unit]
Description=Redis
After=network.target
 
[Service]
Type=forking
PIDFile=/var/run/redis_6379.pid
ExecStart=/home/redis/bin/redis-server  /home/redis/etc/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
#ExecStop=/bin/kill -s QUIT $MAINPID
ExecStop=/home/redis/bin/redis-cli -a "password" -p 6379 shutdown
#PrivateTmp=True
 
[Install]
WantedBy=mutli-user.target

附加一下哨兵的systemctl服务,哨兵服务,按照下面的配置,已经试过好多次了,下面的配置运行一切正常,不用加PIDFile,加了反而会有警告

vi /usr/lib/systemd/system/redis-sentinel.service

[Unit]
Description=Redis-sentinel
After=network.target

[Service]
Type=forking
ExecStart=/home/redis/bin/redis-sentinel /home/redis/etc/sentinel.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/home/redis/bin/redis-cli -p 26379 shutdown
#PrivateTmp=true

[Install]
WantedBy=multi-user.target

 

编辑完成后,重新加载系统服务,使配置生效

systemctl daemon-reload

命令使用:

开机启动: systemctl enable redis.service

查看服务是否设置开机启动: systemctl is-enabled redis.service

停止服务开机启动: systemctl disable redis.service

启动: systemctl start redis.service

查看状态: systemctl status redis.service

重启: systemctl restart redis.service

停止: systemctl stop redis.service

8.设置redis相关命令在任意目录下可以使用

将安装后的bin文件目录下的脚本拷贝到/usr/local/bin/目录下即可

redis-benchmark 
redis-check-aof 
redis-check-rdb 
redis-cli 
redis-sentinel 
redis-server 

主要是上面这几个文件
切换到安装目录的bin文件下
cp * /usr/local/bin/

 

 

 

Redis集群搭建(主从+哨兵)

可以参考下面这篇文章:

https://blog.csdn.net/xch_yang/article/details/104019552

这篇文章中有一个错误,这里指正出来:在哨兵搭建环节,配置sentinel.conf时,错误的地方如下:

//端口默认为26379。
port 26379
//关闭保护模式,可以外部访问。
protected-mode no
//设置为后台启动。
daemonize yes
//日志文件。
logfile "/home/redis/sentinel.log"
//指定主机IP地址和端口,并且指定当有2台哨兵认为主机挂了,则对主机进行容灾切换。
sentinel monitor mymaster 192.168.231.130 6379 2
//当在Redis实例中开启了requirepass,这里就需要提供密码。
sentinel auth-pass mymaster pwdtest@2019
//这里设置了主机多少秒无响应,则认为挂了。
sentinel down-after-milliseconds mymaster 3000
//主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1。
sentinel parallel-syncs mymaster 1
//故障转移的超时时间,这里设置为三分钟。
sentinel failover-timeout mymaster 180000

redis主从+哨兵配置完成后,使用脚本功能实现VIP漂移

参考链接:下面链接中的脚本都可以使用--->测试有效

https://www.w3cschool.cn/redis_all_about/redis_all_about-91n5271k.html

https://www.sijitao.net/3070.html

注意:

上述两个脚本执行之前,都必须先在redis master中创建好脚本中使用的VIP,否则会切换不成功,一定要先创建,一定要先创建,一定要先创建。

# 手动创建虚拟ip
ip addr add 192.168.171.100/24 dev ens33

在sentinel进行切换时还会自动调用一个脚本(如果设置的话),做一些自动化操作,比如如果我们需要一个虚拟IP永远飘在Master上,那么可以在sentinel配置文件中配置:

sentinel client-reconfig-script mymaster /home/redis/script/failover.sh

在发生主从切换,Master发生变化时,该脚本会被sentinel进行调用,调用的参数如其配置文件所描述的:

因此,我们可以在failover.sh中进行判断,如果该脚本所运行的主机IP等于新的Master IP,那么将VIP加上,如果不等于,则该机器为Slave,就去掉VIP。通过这种方式进行VIP的切换:

cd /home/redis/script

vi failover.sh

下面的脚本Demo,只需要更改VIP和IFACE、MASK即可,其他的可以通用。

#!/bin/sh
_DEBUG="on"
DEBUGFILE=/home/redis/script/sentinel_failover.log
VIP='192.168.171.110'
MASTERIP=${6}
MASK='24'
IFACE='ens33'
MYIP=$(ip -4 -o addr show dev ${IFACE}| grep -v secondary| awk '{split($4,a,"/");print a[1]}')
#MYIP='192.168.171.10'

DEBUG () {
        if [ "$_DEBUG" = "on" ]; then
                echo `$@` >>  ${DEBUGFILE}
        fi
}

set -e
DEBUG date
DEBUG echo $@
DEBUG echo "Master: ${MASTERIP} My IP: ${MYIP}"
if [ ${MASTERIP} = ${MYIP} ]; then
        if [ $(ip addr show ${IFACE} | grep ${VIP} | wc -l) = 0 ]; then
                /sbin/ip addr add ${VIP}/${MASK} dev ${IFACE}
        DEBUG date
                DEBUG echo "/sbin/ip addr add ${VIP}/${MASK} dev ${IFACE}"
        DEBUG date
        DEBUG echo "IP Arp cleaning: /usr/sbin/arping -q -f -c 1 -A ${VIP} -I ${IFACE}"
                /usr/sbin/arping -q -f -c 1 -A ${VIP} -I ${IFACE}
        DEBUG date
        DEBUG echo "IP Failover finished!"
        fi
        exit 0
else
        if [ $(ip addr show ${IFACE} | grep ${VIP} | wc -l) != 0 ]; then
                /sbin/ip addr del ${VIP}/${MASK} dev ${IFACE}
                DEBUG echo "/sbin/ip addr del ${VIP}/${MASK} dev ${IFACE}"
        fi
        exit 0
fi

赋予脚本可执行权限

chmod 755 failover.sh

配置完成后,重新启动sentinel即可------>记得一定要提前将VIP配置好。

全部正常启动后,可以在从机去连接主机测试,redis-cli -h 192.168.171.110 -a password

 

收藏一下主从+哨兵配置:

 

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值