上次搭测试环境的时候写了一个redis哨兵模式搭建的博客,不幸的是我的博客网站挂掉了,这次搭生产环境再将redis哨兵模式集群模式搭建记录一次。(博客园不会丢掉我的数据吧。。)
本次部署包含三个节点,一个主节点,两个从节点,每个节点上包含一个哨兵,实现主节点死掉之后再重启可以同步数据(sentinel)。
一.将需要安装redis压缩包上传到其中一台服务器的/usr/local目录下。
cd /usr/local //进入文件夹
tar -xvf redis-5.0.4.tar.gz //解压
cd redis-5.0.4 //进入目录
make MALLOC=libc
此处make的时候如果出现错误需要yum gcc
yum install gcc
yum install gcc-c++
有可能还要安装tcl(如果make test出现You need tcl 8.5 or newer in order to run the Redis test的话)
yum install tcl
注意:在这里可以通过scp命令将make好的redis-5.0.4复制到其余两个服务器中去,当然也可以每个服务器上传redis压缩包和解压,再make。进行同样操作就行。
二.修改配置文件并启动redis测试
mv redis.conf redis.conf.bak//备份原来配置文件
vi redis.conf //编辑配置文件
mkdir log //新建log文件目录
添加一行如下:(表示将redis设置为后台启动)
daemonize yes
启动redis并测试
src/redis-server redis.conf
src/redis-cli
redis> set name kk
OK
redis> get name
"kk"
到此处单节点的就算安装成功啦
三.主从节点配置说明
将三个服务器的单节点都安装成功,然后通过修改配置文件的方式形成哨兵模式集群
1.主节点的redis.conf文件配置如下:
#添加一个密码 requirepass "123456" #后台运行 daemonize yes #修改为你的安装目录 redis_端口号 这里主服务器端口为6379默认不动它 pidfile "/usr/local/redis-5.0.4/redis_6379.pid" #修改为你的安装目录 logfile "/usr/local/redis-5.0.4/log/log.log" #修改为你的安装目录 dir "/usr/local/redis-5.0.4"
#主节点密码
masterauth "123456"
主节点sentinel.conf配置如下:
#添加为后台运行 daemonize yes #端口号 port 26379 #这里配置写上主服务器IP 端口 2个sentinel选举成功后才有效 sentinel monitor mymaster 10.92.129.xx 6379 2 #主服务器 redis密码 sentinel auth-pass mymaster 123456 # Generated by CONFIG REWRITE dir "/usr/local/redis-5.0.4" protected-mode no
2.从节点1的redis.conf配置文件如下:
#添加一个密码 requirepass "123456" #端口为6379 使用前请查看端口是否被占用 port 6379 #服务器转变为指定服务器的从属服务器 如果是在别的主机上安装这里的IP改为主服务器所属机器IP Redis端口即可 这里本地我们写127.0.0.1 #是哪个主节点的从节点 slaveof 10.92.129.xx 6379 #后台运行 daemonize yes #主节点密码 必须加,否则无法同步数据 masterauth "123456" #修改为你的安装目录 redis_端口号 端口改为该redis服务端口 pidfile "/usr/local/redis-5.0.4/redis_6379.pid" #修改为你的安装目录 logfile "/usr/local/redis-5.0.4/log/log.log" #修改为你的安装目录 dir "/usr/local/redis-5.0.4"
从节点1的哨兵配置文件 sentinel.conf:
#添加为后台运行 daemonize yes #这里从服务1的默认端口我们不动 稍后修改从2即可 port 26379 #这里配置写上主服务器IP 端口 2个sentinel选举成功后才有效 sentinel monitor mymaster 10.92.129.xx 6379 2 #主服务器 redis密码 sentinel auth-pass mymaster 123456 # Generated by CONFIG REWRITE dir "/usr/local/redis-5.0.4" protected-mode no
3.从节点2的redis.conf配置如下:
#添加一个密码 requirepass "123456" #端口为6379 使用前请查看端口是否被占用 port 6379 #服务器转变为指定服务器的从属服务器 如果是在别的主机上安装这里的IP改为主服务器所属机器IP Redis端口即可 这里本地我们写127.0.0.1 #是哪个主节点从节点
slaveof 10.92.129.xx 6379 masterauth "123456" #后台运行 daemonize yes #修改为你的安装目录 redis_端口号 端口改为该redis服务端口 pidfile "/usr/local/redis-5.0.4/redis_6379.pid" #修改为你的安装目录 logfile "/usr/local/redis-5.0.4/log/log.log" #修改为你的安装目录 dir "/usr/local/redis-5.0.4"
从节点2的sentinel.conf
#添加为后台运行 daemonize yes #这里从服务1的默认端口我们不动 稍后修改从2即可 port 26379 #这里配置写上主服务器IP 端口 2个sentinel选举成功后才有效 sentinel monitor mymaster 10.92.129.xx 6379 2 #主服务器 redis密码 sentinel auth-pass mymaster 123456 # Generated by CONFIG REWRITE dir "/usr/local/redis-5.0.4" protected-mode no
三.设置为服务和开机自启动 (三个节点都可以做(需要的话))
vi /etc/init.d/redis
加上下面的脚本
#!/bin/sh # # Simple Redis init.d script conceived to work on Linux systems # as it does use of the /proc filesystem. ### BEGIN INIT INFO # Provides: redis_6379 # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Redis data structure server # Description: Redis data structure server. See https://redis.io ### END INIT INFO #redis服务端口 REDISPORT=6379 #redis启动脚本位置 EXEC=/usr/local/redis-5.0.4/src/redis-server #redi客户端位置 CLIEXEC=/usr/local/redis-5.0.4/src/redis-cli #进程文件位置 PIDFILE=/usr/local/redis-5.0.4/redis_${REDISPORT}.pid #redis配置文件位置 CONF="/usr/local/redis-5.0.4/redis.conf" #sentinel配置文件位置 SLCONF="/usr/local/redis-5.0.4/sentinel.conf" case "$1" in start) if [ -f $PIDFILE ] then echo "$PIDFILE exists, process is already running or crashed" else echo "Starting Redis server..." $EXEC $CONF #上面是启动redis服务,下面是启动哨兵 $EXEC $SLCONF --sentinel fi ;; stop) if [ ! -f $PIDFILE ] then echo "$PIDFILE does not exist, process is not running" else PID=$(cat $PIDFILE) echo "Stopping ..."
#设置关闭的密码 redis的密码 $CLIEXEC -a '123456' -p $REDISPORT shutdown while [ -x /proc/${PID} ] do echo "Waiting for Redis to shutdown ..." sleep 1 done echo "Redis stopped" fi ;; *) echo "Please use start or stop as first argument" ;; esac
保存之后启动redis的命令:service redis start
关闭redis的命令 :service redis stop
设置为开机自启动:chkconfig redis on