1、安装,可以从官网或者github上边获取源码包
yum install gcc
tar zxf redis-5.0.3.tar.gz
cd redis-5.0.3/
make && make install
cd utils/
./install_server.sh
安装完成之后自动开启:
管理方式
脚本方式管理:
/etc/init.d/redis_6379 start|stop|restart|status
systemd方式管理:
systemctl start|stop|restart|status redis_6379
2、主从复制
配置:
master:
bind 0.0.0.0
systemctl restart redis_6379
slave:
bind 0.0.0.0
replicaof masterip 6379
systemctl restart redis_6379
测试:
master:
redis-cli
set name westos 插入key
get name
westos 查到结果
slave:
redis-cli
get name
westos 结果
del name slave只读,不可对数据操作
3、高可用(主从ok)
1)、配置redis-sentinel
master:
cd redis-5.0.3
cp sentinel.conf /etc/redis/
cd /etc/redis/
vim sentinel.conf ##主要更改下面两个参数即可
protected-mode no
sentinel monitor mymaster masgerip 6379 2
slave:
vim sentinel.conf
protected-mode no
sentinel monitor mymaster masterip 6379 2
2)、启动sentinel
注意:先启动redis数据库,再启动serntinel
如图172.25.27.107是现在的master
3)、高可用测试
关掉server7的redis服务
关掉server7的redis服务:
方式1:
127.0.0.1:6379> SHUTDOWN
not connected>
方式2:
redis-cli -c -p shutdown
通过选举产生新的master为server6
关于sentinel更多情况看这里:http://www.redis.cn/topics/sentinel.html
4、创建redis单机集群
配置集群
[root@server4 ]# cd /usr/local/
[root@server4 local]# mkdir redis-cluster
[root@server4 local]# cd redis-cluster/
[root@server4 redis-cluster]# mkdir 700{1..6}
##在每个目录中编写配置文件
[root@server4 redis-cluster]# cd 7001/
[root@server4 7001]# vim redis.conf
port 7001 //随便写,与目录名相同方便看,其他一样
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
[root@server4 7001]# redis-server redis.conf
创建集群
redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 \
127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 \
--cluster-replicas 1
数据文件:
/usr/local/redis-cluster/7001/appendonly.aof
查看数据
当master挂掉时,他的slave会自动接管,成为新的master
当master重启之后就会成为新的slave
当同时挂掉半数以上的master时,集群就挂掉了
脚本方式创建集群:
cd /root/redis-5.0.3/utils/create-cluster
./create-cluster start ##开启
./create-cluster create ##创建
./create-cluster stop ##关闭
./create-cluster clean ##清空数据
脚本:
[root@server5 create-cluster]# cat create-cluster
#!/bin/bash
# Settings
PORT=30000
TIMEOUT=2000
NODES=6
REPLICAS=1
# You may want to put the above config parameters into config.sh in order to
# override the defaults without modifying this script.
if [ -a config.sh ]
then
source "config.sh"
fi
# Computed vars
ENDPORT=$((PORT+NODES))
if [ "$1" == "start" ]
then
while [ $((PORT < ENDPORT)) != "0" ]; do
PORT=$((PORT+1))
echo "Starting $PORT"
../../src/redis-server --port $PORT --cluster-enabled yes --cluster-config-file nodes-${PORT}.conf --cluster-node-timeout $TIMEOUT --appendonly yes --appendfilename appendonly-${PORT}.aof --dbfilename dump-${PORT}.rdb --logfile ${PORT}.log --daemonize yes
done
exit 0
fi
if [ "$1" == "create" ]
then
HOSTS=""
while [ $((PORT < ENDPORT)) != "0" ]; do
PORT=$((PORT+1))
HOSTS="$HOSTS 127.0.0.1:$PORT"
done
../../src/redis-cli --cluster create $HOSTS --cluster-replicas $REPLICAS
exit 0
fi
if [ "$1" == "stop" ]
then
while [ $((PORT < ENDPORT)) != "0" ]; do
PORT=$((PORT+1))
echo "Stopping $PORT"
../../src/redis-cli -p $PORT shutdown nosave
done
exit 0
fi
if [ "$1" == "watch" ]
then
PORT=$((PORT+1))
while [ 1 ]; do
clear
date
../../src/redis-cli -p $PORT cluster nodes | head -30
sleep 1
done
exit 0
fi
if [ "$1" == "tail" ]
then
INSTANCE=$2
PORT=$((PORT+INSTANCE))
tail -f ${PORT}.log
exit 0
fi
if [ "$1" == "call" ]
then
while [ $((PORT < ENDPORT)) != "0" ]; do
PORT=$((PORT+1))
../../src/redis-cli -p $PORT $2 $3 $4 $5 $6 $7 $8 $9
done
exit 0
fi
if [ "$1" == "clean" ]
then
rm -rf *.log
rm -rf appendonly*.aof
rm -rf dump*.rdb
rm -rf nodes*.conf
exit 0
fi
if [ "$1" == "clean-logs" ]
then
rm -rf *.log
exit 0
fi
echo "Usage: $0 [start|create|stop|watch|tail|clean]"
echo "start -- Launch Redis Cluster instances."
echo "create -- Create a cluster using redis-cli --cluster create."
echo "stop -- Stop Redis Cluster instances."
echo "watch -- Show CLUSTER NODES output (first 30 lines) of first node."
echo "tail <id> -- Run tail -f of instance at base port + ID."
echo "clean -- Remove all instances data, logs, configs."
echo "clean-logs -- Remove just instances logs."