1. 程式人生 > >linux上一鍵安裝redis以及主從配置(指令碼自動安裝)

linux上一鍵安裝redis以及主從配置(指令碼自動安裝)

一、環境配置
    1:任何位置建立資料夾
       mkdir redis;cd  redis;mkdir conf;cd conf
       #下載安裝安裝包
       wget http://www.redis.cn/download.html/redis-5.0.3.tar.gz
    2:書寫自動安裝redis的指令碼和自動安裝主從
       cd ..
       vim install.sh
    3:在conf目錄中再編寫啟動指令碼redis
      cd conf;vim redis
       

#!/bin/bash

cd  /usr/local/redis/bin

case $1 in 
start)
    ./redis-server redis.conf | grep "is starting" > /dev/null && echo "redis Successful opening" || echo "redis Open failure"
    ;;
stop)
    ./redis-cli shutdown;ps -ef | grep -v grep | grep  redis-server  && echo "redis Shutdown failure"  || echo "redis Shut down successfully"
    ;;
restart)
    ./redis-cli shutdown;ps -ef | grep -v grep | grep  redis-server  && echo "redis Shutdown failure"  || echo "redis Shut down successfully"
    ./redis-server redis.conf | grep "is starting" > /dev/null && echo "redis Successful opening" || echo "redis Open failure"
    ;;
*)
    exit
    exit
    ;;
esac



       
#!/bin/bash



redis-install(){
yum install gcc-c++  wget vim -y

cd conf

#啟動和關閉指令碼
chmod +x redis
cp redis  /usr/bin/

tar -zxf redis-5.0.3.tar.gz
cd redis-5.0.3
make MALLOC=libc
make
cd src
make install PREFIX=/usr/local/redis
cd ..
cp redis.conf /usr/local/redis/bin/
cd ..
rm -rf redis-5.0.3/
cd /usr/local/redis/bin

##讓redis可以後臺啟動
AA=`cat -n redis.conf  | grep daemonize | grep -v "#" | awk '{print $1}'`
sed -i ''"$AA"'c  daemonize yes'   redis.conf

#開機自啟:
echo  "/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis-conf"  >> /etc/rc.local

#建立登入資料庫的命令
cp /usr/local/redis/bin/redis-cli /usr/bin/

clear
echo "啟動 redis start "
echo "關閉 redis stop "
echo "重啟 redis restart"
}


#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~主從搭建~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#注意事項:
#    1:主從模式時matser節點開啟持久化(不開的話,matser節點重啟,從會出現丟失資料)
#	2:先開啟主機上的服務,後開機從機上的服務
#	3:預設是開啟保護模式protected-mode yes(cat -n /usr/local/redis/bin/redis.conf | grep protected-mode)
#	   生效條件:bind被註釋掉和沒有配置訪問密碼的時候才生效
#	4:dir:指定rdb檔案路徑(在一臺伺服器上啟動多個Redis服務時,注意修改為不同檔案路徑)
#	5:從服務預設為只讀模式 replica-read-only yes


master(){
#主庫操作:

read -p "請輸入本機內網ip:"  IP
clear
read -p  "請設定redis密碼:"  Pass1
clear
read -p "請設定redis主從連線密碼:"   PAss1

#redis只接收來自該IP的請求(這裡沒有設定,就接收所有請求)
AA=`cat -n /usr/local/redis/bin/redis.conf | grep 127.0.0.1 | grep -v "#" | awk '{print $1}'`
sed -i ''"$AA"'c  bind '"$IP"''  /usr/local/redis/bin/redis.conf

#配置監聽埠(預設6379)
BB=`cat -n /usr/local/redis/bin/redis.conf | grep port | grep -v "#" | awk '{print $1}'`
sed -i ''"$BB"'c  port 6379'  /usr/local/redis/bin/redis.conf

#配置log檔案地址logfile:
CC=`cat -n /usr/local/redis/bin/redis.conf | grep logfile | grep -v "#" | awk '{print $1}'`
sed -i ''"$CC"'c  logfile "6379.log"'  /usr/local/redis/bin/redis.conf

#配置映象備份的名稱(dbfilename:映象備份檔案的檔名)
DD=`cat -n /usr/local/redis/bin/redis.conf | grep dbfilename | grep -v "#" | awk '{print $1}'`
sed -i ''"$DD"'c  dbfilename "dump-6379.rdb"'  /usr/local/redis/bin/redis.conf

#啟動壓縮(rdbcompression:在進行映象備份時,是否進行壓縮)
EE=`cat -n /usr/local/redis/bin/redis.conf | grep rdbcompression | grep -v "#" | awk '{print $1}'`
sed -i ''"$EE"'c  rdbcompression yes'  /usr/local/redis/bin/redis.conf

##設定主從連線的密碼
FF=`cat -n /usr/local/redis/bin/redis.conf | grep masterauth | awk '{print $1}'`
sed -i ''"$FF"'c  masterauth '"$PAss1"''  /usr/local/redis/bin/redis.conf

#設定redis的密碼
GG=`cat -n /usr/local/redis/bin/redis.conf | grep requirepass | grep -v I | awk '{print $1}'`
sed -i ''"$GG"'c requirepass '"$Pass1"''  /usr/local/redis/bin/redis.conf

#設定最大連線數(最大支援10000個)
HH=`cat -n /usr/local/redis/bin/redis.conf | grep maxclients | awk '{print $1}'`
sed -i ''"$HH"'c  maxclients 10000'  /usr/local/redis/bin/redis.conf

clear
echo "本機redis密碼: ${Pass1}"
echo  "已設定redis主從連線密碼:  ${PAss1}"
echo "請先啟動主,再啟動從!!"
echo "再驗證主從:  redis-cli -h $IP -p 6379 -a redis密碼"
echo  "進入資料庫再使用:info replication"
}



slave(){
#從庫操作:

read -p "請輸入本機內網ip:"  IPP
clear
read -p "請設定redis密碼:"  Pass
clear
read -p "請輸入redis主的ip地址:"  IIPP
clear
read -p "請輸入redis主的port :"  Port
clear
read -p "請輸入redis主從連線密碼:"   PAss

#redis只接收來自該IP的請求(這裡沒有設定,就接收所有請求)
AAA=`cat -n /usr/local/redis/bin/redis.conf | grep 127.0.0.1 | grep -v "#" | awk '{print $1}'`
sed -i ''"$AAA"'c  bind '"$IPP"''  /usr/local/redis/bin/redis.conf

#配置監聽埠(預設6379)
BBB=`cat -n /usr/local/redis/bin/redis.conf | grep port | grep -v "#" | awk '{print $1}'`
sed -i ''"$BBB"'c  port 6380'  /usr/local/redis/bin/redis.conf

#配置log檔案地址logfile:
CCC=`cat -n /usr/local/redis/bin/redis.conf | grep logfile | grep -v "#" | awk '{print $1}'`
sed -i ''"$CCC"'c  logfile "6380.log"'  /usr/local/redis/bin/redis.conf

#配置映象備份的名稱(dbfilename:映象備份檔案的檔名)
DDD=`cat -n /usr/local/redis/bin/redis.conf | grep dbfilename | grep -v "#" | awk '{print $1}'`
sed -i ''"$DDD"'c  dbfilename "dump-6380.rdb"'  /usr/local/redis/bin/redis.conf

#啟動壓縮(rdbcompression:在進行映象備份時,是否進行壓縮)
EEE=`cat -n /usr/local/redis/bin/redis.conf | grep rdbcompression | grep -v "#" | awk '{print $1}'`
sed -i ''"$EEE"'c  rdbcompression yes'  /usr/local/redis/bin/redis.conf

#配置主的ip和埠以及主從連線密碼
FFF=`cat -n /usr/local/redis/bin/redis.conf | grep replicaof | grep -v M | awk '{print $1}'`
sed -i  ''"$FFF"'c  replicaof '"$IIPP"' '"$Port"''  /usr/local/redis/bin/redis.conf
FFF2=`cat -n /usr/local/redis/bin/redis.conf | grep masterauth | awk '{print $1}'`
sed -i ''"$FFF2"'c  masterauth '"$PAss"''  /usr/local/redis/bin/redis.conf

#設定redis密碼
GGG=`cat -n /usr/local/redis/bin/redis.conf | grep requirepass | grep -v I | awk '{print $1}'`
sed -i ''"$GGG"'c requirepass '"$Pass"''  /usr/local/redis/bin/redis.conf

#設定最大連線數(最大支援10000個)
HHH=`cat -n /usr/local/redis/bin/redis.conf | grep maxclients | awk '{print $1}'`
sed -i ''"$HHH"'c  maxclients 10000'  /usr/local/redis/bin/redis.conf


clear
echo "本機redis密碼: ${Pass}"
echo "請先啟動主,再啟動從!!"
echo "再驗證主從:  redis-cli -h $IPP -p 6380 -a redis密碼"
echo  "進入資料庫再使用:info replication"

}

muan(){
echo "1:安裝redis "
echo "2:安裝redis主 "
echo "3:安裝redis從 "
}

muan
read -p "請輸入選擇:"  XZ
case $XZ in
1)
  exit;;
2)
  master;;
3)
  slave;;
*)
  exit
  exit;;
esac