下面是linux 安装redis的shell脚本,如果是从服务器把role改成2即可。
#!/usr/bin/env bash
# ----------------------------------------
# Functions: onekey install redis sentinel
# Auther: denglianyong
# ----------------------------------------
# syntx check
# define some variables
#redis_sentinel_ip=`ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'`
redis_sentinel_ip=192.168.210.3
sentinel_port=8001
redis_port=6379
redis_sentinel_dir=/data/redis-sentinel/$sentinel_port
redis_dir=/usr/local/redis
version=4.0.1
role=1 #1:master 2:slave
master_ip=192.168.210.3
password="pfnl0bdh9wlhafpv"
install_redis(){
#redis_pid_dir=/var/run/redis
redis_log=/var/log/redis
#redis_rdb_aof_dir=/var/lib/redis
#
#[ -d $redis_pid_dir ] || mkdir $redis_pid_dir
[ -d $redis_log ] || mkdir $redis_log
[ -d $redis_sentinel_dir ] || mkdir -p $redis_sentinel_dir
# upgrade os && install dev tools
#yum update -y && yum groupinstall -y "Development Tools" && yum -y install tcl
# download latest redis
if [ ! -f /usr/local/src/redis-$version.tar.gz ]; then
wget http://download.redis.io/releases/redis-$version.tar.gz -P /usr/local/src
fi
cd /usr/local/src && tar zxvf redis-$version.tar.gz -C /usr/local/
cd /usr/local/ && ln -sv redis-$version redis && cd redis && make && taskset -c 1 sudo make test
# config sysctl.conf
echo 512 > /proc/sys/net/core/somaxconn
sysctl vm.overcommit_memory=1
# config three redis
#mkdir -pv $redis_sentinel_dir/
# copy excute command
\cp $redis_dir/src/{redis-server,redis-sentinel} $redis_sentinel_dir/
# copy redis.conf & sentinel.conf
\cp $redis_dir/{redis.conf,sentinel.conf} $redis_sentinel_dir/
# config redis.conf
# example by /data/redis-sentinel/9000/redis.conf
sed -i "s/bind 127.0.0.1/bind $redis_sentinel_ip/g" $redis_sentinel_dir/redis.conf
sed -i "s/port 6379/port $redis_port/g" $redis_sentinel_dir/redis.conf
sed -i "s/# requirepass foobared/requirepass $password/g" $redis_sentinel_dir/redis.conf
sed -i 's/protected-mode\ yes/protected-mode\ no/g' $redis_sentinel_dir/redis.conf
sed -i 's/daemonize no/daemonize yes/g' $redis_sentinel_dir/redis.conf
sed -i 's/appendonly no/appendonly yes/g' $redis_sentinel_dir/redis.conf
#sed -i 's/logfile ""/logfile \"\/data\/redis-sentinel\"/g' $redis_sentinel_dir/redis.conf
sed -i "s/logfile \"\"/logfile \/var\/log\/redis\/redis.log/g" $redis_sentinel_dir/redis.conf
#sed -i 's/dir \.\//dir \/data\/redis-sentinel\//g' $redis_sentinel_dir/redis.conf
#sed -i 's/appendonly.aof/\/data\/redis-sentinel\/appendonly.aof/g' $redis_sentinel_dir/redis.conf
# rename config for secuirty
#rename-command SHUTDOWN REDIS_SHUTDOWN
#rename-command FLUSHDB REDIS_FLUSHDB
#rename-command FLUSHALL REDIS_FLUSHALL
#rename-command KEYS REDIS_KEYS
echo 'rename-command CONFIG REDIS_CONFIG' >> $redis_sentinel_dir/redis.conf
echo 'rename-command FLUSHALL REDIS_FLUSHALL' >> $redis_sentinel_dir/redis.conf
echo 'rename-command FLUSHDB REDIS_FLUSHDB' >> $redis_sentinel_dir/redis.conf
if [ $role -eq 2 ];then
echo "slaveof $master_ip $redis_port" >> $redis_sentinel_dir/redis.conf
fi
# ln redis-server & redis-sentinel
cp $redis_dir/src/{redis-server,redis-sentinel,redis-cli} /usr/local/sbin/
# start redis
cd $redis_sentinel_dir/
./redis-server redis.conf
# watch redis master/slave status
ps -ef | grep redis
$redis_dir/src/redis-cli -h $redis_sentinel_ip -p $redis_port -a $password info replication
sleep 5
# config sentinel.conf & start sentinel 1
# example by /data/redis-sentinel/9000/sentinel.conf
sed -i 's/\# protected-mode no/protected-mode no/g' $redis_sentinel_dir/sentinel.conf
sed -i "s/port 26379/port $sentinel_port/g" $redis_sentinel_dir/sentinel.conf
sed -i "s#127.0.0.1 6379#$redis_sentinel_ip 6379#g" $redis_sentinel_dir/sentinel.conf
sed -i "s#dir /tmp#dir $redis_sentinel_dir#g" $redis_sentinel_dir/sentinel.conf
echo "daemonize yes" >> $redis_sentinel_dir/sentinel.conf
# start sentinel
$redis_sentinel_dir/redis-sentinel $redis_sentinel_dir/sentinel.conf
# watch sentinel status
ps -ef | grep redis
$redis_dir/src/redis-cli -h $redis_sentinel_ip -p $sentinel_port sentinel masters
}
start(){
cd $redis_sentinel_dir/
./redis-server redis.conf
# start sentinel
$redis_sentinel_dir/redis-sentinel $redis_sentinel_dir/sentinel.conf
}
stop(){
ps aux| grep 'redis' |grep -v 'grep' |awk '{print $2}'|xargs kill -9
}
usage()
{
echo "Usage: ./redis.sh [install|start|stop ]"
exit 1
}
if [ "$1" = "install" ]; then
install_redis
elif [ "$1" = "start" ]; then
start
elif [ "$1" = "stop" ]; then
stop
else
usage
fi