目录
单机版的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
收藏一下主从+哨兵配置: