本次創建是爲了簡化服務的部署時間,使用的都是比較基礎的命令方法,易懂!
因爲密鑰無法連接本機,所以搭建服務,全程沒有部署密鑰!
vim Auto-deploy-redis.sh
注:腳本沒有關閉回顯,所以解壓,和編譯時會顯示在屏幕,其他正則操作不會顯示!
#!/bin/bash
#redis哨兵一鍵式部署腳本
#下載redis軟件包:
cd /opt
yum -y install wget #不確定是否有安裝wget命令,直接安一個
yum -y install sshpass
#如果是相讓下載軟件快點的話,建議更換阿里源:
# for i in 11 12 13
#do
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "yum -y install wget"
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "mkdir /etc/yum.repos.d/repo_bak"
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "mkdir repo_bak"
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repo_bak/"
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "cd /etc/yum.repos.d/ && wget http://mirrors.aliyun.com/repo/Centos-7.repo" #下載阿里源
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "yum clean all" #清空緩存
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "yum makecache" #生產新的緩存
#done
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
#非交互式創建密鑰(密鑰目前操作有點問題,就不使用密鑰了)
#ssh-keygen -t rsa -f /root/.ssh/id_rsa -N ''
#準備環境
for i in 11 12 13
do
#拷貝公鑰到相關服務器(全程使用 sshpass工具)
#sshpass -p "123456" ssh-copy-id [email protected].$i
#非交互式遠程登錄下載相關插件
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "yum -y install gcc make "
#拷貝下好的軟件包傳送過去
sshpass -p "123456" scp /opt/redis-5.0.5.tar.gz [email protected].$i:/opt
done
do
#解壓&&預編譯&&安裝
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "cd /opt/ && tar -zxvf redis-5.0.5.tar.gz -C /usr/local/"
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "cd /usr/local/redis-5.0.5 && make && make install"
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "mv /usr/local/redis-5.0.5 /usr/local/redis"
#方便命令啓動,設置全局變量
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "mkdir -p /opt/redis/{conf,data,log,tmp}"
#拷貝配置文件redis.conf和sentinel.conf
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "cp /usr/local/redis/redis.conf /opt/redis/conf/redis-6379.conf"
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "cp /usr/local/redis/sentinel.conf /opt/redis/conf/sentinel-26379.conf"
done
#配置redis主從模式
for i in 11 12 13
do
#protected-mode配置,默認是yes,需要配置bind ip或設置訪問密碼,
#關閉protected-mode模式,此時外部網絡可以直接訪問
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/^protected-mode/s/yes/no/' /opt/redis/conf/redis-6379.conf"
#修改IP地址
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/^bind/s/127.0.0.1/0.0.0.0/' /opt/redis/conf/redis-6379.conf"
#開啓後臺運行
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/^daemonize/s/no/yes/' /opt/redis/conf/redis-6379.conf"
#db等相關目錄位置
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/^dir/s/.\//\/opt\/redis\/data\//' /opt/redis/conf/redis-6379.conf"
#開啓日誌形式
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/^appendonly/s/no/yes/' /opt/redis/conf/redis-6379.conf"
#設置訪問密碼
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/requirepass/s/# requirepass foobared/requirepass 123456/' /opt/redis/conf/redis-6379.conf"
#設置連接主的密碼
done
#從服務器要單獨修改一個地方,指定主服務器配置:我這裏的主是11,從是12,13
for i in 12 13
do
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/replicaof/s/# replicaof <masterip> <masterport>/replicaof 192.168.1.11 6379/' /opt/redis/conf/redis-6379.conf"
done
#部署sentinel 哨兵服務
for i in 11 12 13
do
#保護模式關閉,也可以不用去管它,因爲它默認是註釋的
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/# protected-mode/s/^#//' /opt/redis/conf/sentinel-26379.conf"
#後臺運行
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/^daemonize/s/no/yes/' /opt/redis/conf/sentinel-26379.conf"
#哨兵文件目錄
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/^dir/s#tmp#opt/redis/tmp/#' /opt/redis/conf/sentinel-26379.conf"
#指定日誌文件路徑
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/^logfile/s/\"\"/\/opt\/redis\/log\/sentinel-26379.log/' /opt/redis/conf/sentinel-26379.conf"
#指定監視主服務器
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/sentinel monitor/s/127.0.0.1/192.168.1.11/' /opt/redis/conf/sentinel-26379.conf"
#主服務器設置了密碼,哨兵得在sentinel monitor 下配置asentinel auth-pass mymaster 123456
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/sentinel monitor mymaster/asentinel auth-pass mymaster 123456' /opt/redis/conf/sentinel-26379.conf"
# 如果mymaster 30秒內沒有響應,則認爲其主觀失效 (默認即可,也可以修改)
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/down-after-milliseconds mymaster/s/30000/10000/' /opt/redis/conf/sentinel-26379.conf"
# 該參數指定一個時間段,在該時間段內沒有實現故障轉移成功,則會再一次發起故障轉移的操作,單位毫秒 (默認即可)
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/failover-timeout mymaster/s/180000/160000/' /opt/redis/conf/sentinel-26379.conf"
done
#啓動服務
for i in 11 12 13
do
#方便管理做的操作,可不做
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "mkdir /opt/tar-gz && mv /opt/redis-5.0.5.tar.gz /opt/tar-gz/"
#啓動redis
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "redis-server /opt/redis/conf/redis-6379.conf"
#啓動哨兵
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "redis-sentinel /opt/redis/conf/sentinel-26379.conf"
done
Sentinel操作
[root@redis-master ~] redis-cli -p 26379 //哨兵模式查看
127.0.0.1:26379> sentinel master mymaster //輸出被監控的主節點的狀態信息
......
127.0.0.1:26379> sentinel slaves mymaster //查看mymaster的從信息,可以看到有2個從節點
......
127.0.0.1:26379> sentinel sentinels mymaster //查看其它sentinel(哨兵)信息
**到此就一鍵式部署完畢了!**這個shell腳本其實都是可以快速改編的,可以很快的修改成單機redis主從-哨兵服務
!
這個看shell腳本里的內容,需要改的地方觀摩了
借閱了一些資料:
非交互式遠程登錄參考文章:
sshpass工具遠程傳輸,拷貝的使用方式參考文章