centOS7安装redis单例配置主从+哨兵+VIP
目錄
單機(jī)版的redis安裝
Redis集群搭建(主從+哨兵)
?
redis主從+哨兵配置完成后,使用腳本功能實(shí)現(xiàn)VIP漂移
單機(jī)版的redis安裝
1.安裝依賴
#先檢查有沒有g(shù)cc gcc --version #如果沒有,就進(jìn)行安裝 yum install gcc -y#如果缺少tcl包,在這里安裝一下(如果make test出現(xiàn)You need tcl 8.5 or newer in order to run the Redis test的話) yum install tcl -y2.獲取資源,上傳或者直接下載
wget http://download.redis.io/releases/redis-4.0.6.tar.gz3.解壓
tar xzvf redis-4.0.6.tar.gz4.安裝
cd redis-4.0.6#編譯 makecd src# 安裝到指定的目錄 make install PREFIX=/usr/local/redis如果安裝的過程中,報(bào)錯(cuò)如下:
zmalloc.h:50:31: 致命錯(cuò)誤:jemalloc/jemalloc.h:沒有那個(gè)文件或目錄
則運(yùn)行如下命令后,再執(zhí)行安裝命令
make MALLOC=libc5.將解壓包中的配置文件移動(dòng)到安裝目錄下:
mkdir /usr/local/redis/etccp redis.conf /usr/local/redis/etc/6.修改配置文件---》這里指的是單機(jī)版的配置文件修改,主從+哨兵模式請參考文章中的專用配置
1)?修改Redis以守護(hù)進(jìn)程方式啟動(dòng)
2)修改允許其他客戶端連接登錄此Redis數(shù)據(jù)庫,或者改為bind 0.0.0.0
3)開啟遠(yuǎn)程訪問
?
4)設(shè)置連接登錄Redis數(shù)據(jù)庫密碼
5)修改安裝目錄,存放數(shù)據(jù)庫
修改總結(jié):
#允許遠(yuǎn)程訪問 bind 0.0.0.0 #關(guān)閉遠(yuǎn)程保護(hù) protected-mode no #添加一個(gè)密碼 requirepass "123" #后臺(tái)運(yùn)行 daemonize yes #修改為你的安裝目錄 redis_端口號(hào) 這里主服務(wù)器端口為6379默認(rèn)不動(dòng)它 pidfile /home/redis/redis_6379.pid #修改為你的安裝目錄 logfile /home/redis/redis.log #修改為你的安裝目錄 dir /usr/local/redis/7.啟動(dòng)redis
./redis-server etc/redis.conf7.將redis服務(wù)器添加到systemctl服務(wù)器中,便于管理,centOS7.8下,redis版本為4.0.6,執(zhí)行systemctl enable redis后,開機(jī)重啟一直不起作用,sentinel可以正常個(gè)啟動(dòng),一直不知道哪里有問題,嘗試了好久都沒有設(shè)置成功,試著使用redis-5.0.12版本,同樣出現(xiàn)開機(jī)自啟動(dòng)不成功。
vi /usr/lib/systemd/system/redis.service
#表示基礎(chǔ)信息 [Unit] #描述 Description=Redis #在哪個(gè)服務(wù)之后啟動(dòng) After=network.target#表示服務(wù)信息 [Service] Type=forking #注意:需要和redis.conf配置文件中的信息一致 PIDFile=/var/run/redis_6379.pid #啟動(dòng)服務(wù)的命令 #redis-server安裝的路徑 和 redis.conf配置文件的路徑 ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf #重新加載命令 ExecReload=/bin/kill -s HUP $MAINPID #停止服務(wù)的命令,使用如下方式停止程序時(shí),可以停止,但是停止后systemctl status redis # 有failed信息,報(bào)錯(cuò)信息看下面的圖,但是不影響使用 # ExecStop=/bin/kill -s QUIT $MAINPID # 如果覺得看著不舒服,可以使用下面這一條代替,redis服務(wù)器端口號(hào)根據(jù)實(shí)際情況進(jìn)行修改 ExecStop=/home/redis/bin/redis-cli -p 6379 shutdown # 用于設(shè)置是否使用私有的tmp目錄 # 使用ExecStop=/bin/kill -s QUIT $MAINPID,發(fā)現(xiàn)必須加PrivateTmp=true,才可以使用systemctl # 正常啟動(dòng)程序,不加的話會(huì)報(bào)錯(cuò),不使用該種方式停止服務(wù)時(shí),不開啟 PrivateTmp=true#安裝相關(guān)信息 [Install] #以哪種方式啟動(dòng) WantedBy=multi-user.target #multi-user.target表明當(dāng)系統(tǒng)以多用戶方式(默認(rèn)的運(yùn)行級(jí)別)啟動(dòng)時(shí),這個(gè)服務(wù)需要被自動(dòng)運(yùn)行。報(bào)錯(cuò)信息:
完整的redis.service,直接復(fù)制,修改后即可使用
vi /usr/lib/systemd/system/redis.service
[Unit] Description=Redis After=network.target[Service] Type=forking PIDFile=/var/run/redis_6379.pid ExecStart=/home/redis/bin/redis-server /home/redis/etc/redis.conf ExecReload=/bin/kill -s HUP $MAINPID #ExecStop=/bin/kill -s QUIT $MAINPID ExecStop=/home/redis/bin/redis-cli -a "password" -p 6379 shutdown #PrivateTmp=True[Install] WantedBy=mutli-user.target附加一下哨兵的systemctl服務(wù),哨兵服務(wù),按照下面的配置,已經(jīng)試過好多次了,下面的配置運(yùn)行一切正常,不用加PIDFile,加了反而會(huì)有警告
vi /usr/lib/systemd/system/redis-sentinel.service
[Unit] Description=Redis-sentinel After=network.target[Service] Type=forking ExecStart=/home/redis/bin/redis-sentinel /home/redis/etc/sentinel.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/home/redis/bin/redis-cli -p 26379 shutdown #PrivateTmp=true[Install] WantedBy=multi-user.target?
編輯完成后,重新加載系統(tǒng)服務(wù),使配置生效
systemctl daemon-reload
命令使用:
開機(jī)啟動(dòng): systemctl enable redis.service
查看服務(wù)是否設(shè)置開機(jī)啟動(dòng): systemctl is-enabled redis.service
停止服務(wù)開機(jī)啟動(dòng): systemctl disable redis.service
啟動(dòng): systemctl start redis.service
查看狀態(tài): systemctl status redis.service
重啟: systemctl restart redis.service
停止: systemctl stop redis.service
8.設(shè)置redis相關(guān)命令在任意目錄下可以使用
將安裝后的bin文件目錄下的腳本拷貝到/usr/local/bin/目錄下即可
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server 主要是上面這幾個(gè)文件 切換到安裝目錄的bin文件下 cp * /usr/local/bin/?
?
?
Redis集群搭建(主從+哨兵)
可以參考下面這篇文章:
https://blog.csdn.net/xch_yang/article/details/104019552
這篇文章中有一個(gè)錯(cuò)誤,這里指正出來:在哨兵搭建環(huán)節(jié),配置sentinel.conf時(shí),錯(cuò)誤的地方如下:
//端口默認(rèn)為26379。 port 26379 //關(guān)閉保護(hù)模式,可以外部訪問。 protected-mode no //設(shè)置為后臺(tái)啟動(dòng)。 daemonize yes //日志文件。 logfile "/home/redis/sentinel.log" //指定主機(jī)IP地址和端口,并且指定當(dāng)有2臺(tái)哨兵認(rèn)為主機(jī)掛了,則對主機(jī)進(jìn)行容災(zāi)切換。 sentinel monitor mymaster 192.168.231.130 6379 2 //當(dāng)在Redis實(shí)例中開啟了requirepass,這里就需要提供密碼。 sentinel auth-pass mymaster pwdtest@2019 //這里設(shè)置了主機(jī)多少秒無響應(yīng),則認(rèn)為掛了。 sentinel down-after-milliseconds mymaster 3000 //主備切換時(shí),最多有多少個(gè)slave同時(shí)對新的master進(jìn)行同步,這里設(shè)置為默認(rèn)的1。 sentinel parallel-syncs mymaster 1 //故障轉(zhuǎn)移的超時(shí)時(shí)間,這里設(shè)置為三分鐘。 sentinel failover-timeout mymaster 180000redis主從+哨兵配置完成后,使用腳本功能實(shí)現(xiàn)VIP漂移
參考鏈接:下面鏈接中的腳本都可以使用--->測試有效
https://www.w3cschool.cn/redis_all_about/redis_all_about-91n5271k.html
https://www.sijitao.net/3070.html
注意:
上述兩個(gè)腳本執(zhí)行之前,都必須先在redis master中創(chuàng)建好腳本中使用的VIP,否則會(huì)切換不成功,一定要先創(chuàng)建,一定要先創(chuàng)建,一定要先創(chuàng)建。
# 手動(dòng)創(chuàng)建虛擬ip ip addr add 192.168.171.100/24 dev ens33在sentinel進(jìn)行切換時(shí)還會(huì)自動(dòng)調(diào)用一個(gè)腳本(如果設(shè)置的話),做一些自動(dòng)化操作,比如如果我們需要一個(gè)虛擬IP永遠(yuǎn)飄在Master上,那么可以在sentinel配置文件中配置:
sentinel client-reconfig-script mymaster /home/redis/script/failover.sh在發(fā)生主從切換,Master發(fā)生變化時(shí),該腳本會(huì)被sentinel進(jìn)行調(diào)用,調(diào)用的參數(shù)如其配置文件所描述的:
因此,我們可以在failover.sh中進(jìn)行判斷,如果該腳本所運(yùn)行的主機(jī)IP等于新的Master IP,那么將VIP加上,如果不等于,則該機(jī)器為Slave,就去掉VIP。通過這種方式進(jìn)行VIP的切換:
cd /home/redis/script
vi failover.sh
下面的腳本Demo,只需要更改VIP和IFACE、MASK即可,其他的可以通用。
#!/bin/sh _DEBUG="on" DEBUGFILE=/home/redis/script/sentinel_failover.log VIP='192.168.171.110' MASTERIP=${6} MASK='24' IFACE='ens33' MYIP=$(ip -4 -o addr show dev ${IFACE}| grep -v secondary| awk '{split($4,a,"/");print a[1]}') #MYIP='192.168.171.10'DEBUG () {if [ "$_DEBUG" = "on" ]; thenecho `$@` >> ${DEBUGFILE}fi }set -e DEBUG date DEBUG echo $@ DEBUG echo "Master: ${MASTERIP} My IP: ${MYIP}" if [ ${MASTERIP} = ${MYIP} ]; thenif [ $(ip addr show ${IFACE} | grep ${VIP} | wc -l) = 0 ]; then/sbin/ip addr add ${VIP}/${MASK} dev ${IFACE}DEBUG dateDEBUG echo "/sbin/ip addr add ${VIP}/${MASK} dev ${IFACE}"DEBUG dateDEBUG echo "IP Arp cleaning: /usr/sbin/arping -q -f -c 1 -A ${VIP} -I ${IFACE}"/usr/sbin/arping -q -f -c 1 -A ${VIP} -I ${IFACE}DEBUG dateDEBUG echo "IP Failover finished!"fiexit 0 elseif [ $(ip addr show ${IFACE} | grep ${VIP} | wc -l) != 0 ]; then/sbin/ip addr del ${VIP}/${MASK} dev ${IFACE}DEBUG echo "/sbin/ip addr del ${VIP}/${MASK} dev ${IFACE}"fiexit 0 fi賦予腳本可執(zhí)行權(quán)限
chmod 755 failover.sh
配置完成后,重新啟動(dòng)sentinel即可------>記得一定要提前將VIP配置好。
全部正常啟動(dòng)后,可以在從機(jī)去連接主機(jī)測試,redis-cli -h 192.168.171.110 -a password
?
收藏一下主從+哨兵配置:
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的centOS7安装redis单例配置主从+哨兵+VIP的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5G NR SSB 学习
- 下一篇: autojs的使用文档