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