redis5.0主從集群搭建

image.png

關(guān)于redis如何安裝,參考:redis單點(diǎn)安裝

  1. redis主從集群,master負(fù)責(zé)寫;slave負(fù)責(zé)讀
  2. 5.0版本由slaveof 改為 replicaof 名稱,完成主從配置.

5.0.7版本

image.png

主從結(jié)構(gòu)圖

image.png

優(yōu)點(diǎn)

  1. 多機(jī)備份數(shù)據(jù)
  2. 讀寫分離,減輕master壓力

缺點(diǎn)

  1. 一旦master掛了,無法提供寫服務(wù).其它節(jié)點(diǎn)正常的話,讀服務(wù)正常工作.
  2. 只能有一個(gè)master節(jié)點(diǎn),寫服務(wù)壓力不能分散.

搭建主從redis前的準(zhǔn)備

修改redis.conf共8處,即可實(shí)現(xiàn)一個(gè)主從Redis搭建. 還是很簡(jiǎn)單的.現(xiàn)在我們正式開始搭建吧.

  1. 69行: bind 127.0.0.1 改為: bind 0.0.0.0 需要跨服務(wù)器訪問,如果是生產(chǎn)最好指定IP或添加防火墻.
  2. 88行: protected-mode yes 改為: protected-mode no 如果是yes保護(hù)模式,需要配置bind或者設(shè)置密碼,no的話則設(shè)置
  3. 92行: port 6379 改為: port 6381 訪問端口
  4. 136行:daemonize no 改為: daemonize yes 守護(hù)進(jìn)程模式運(yùn)行
  5. 158行: pidfile /var/run/redis.pid 改為: pidfile /var/run/redis_6381.pid 啟動(dòng)使用的PID
  6. 263行: dir ./ 改為: dir /usr/local/redis-ms/6381/ 存儲(chǔ)日志與數(shù)據(jù)文件的目錄
  7. 287行: replicaof <masterip> <masterport> 改為:replicaof 192.168.21.22 6381 (從redis.conf配置才設(shè)置)
  8. 294行: # masterauth <master-password> 改為: masterauth o9bEuO6iDKrIhYkx slave節(jié)點(diǎn)設(shè)置master的密碼,
  9. 507行: #requirepass 123456 改為: requirepass o9bEuO6iDKrIhYkx 設(shè)置訪問時(shí)需要的密碼

創(chuàng)建必要的目錄和復(fù)制redis.conf配置文件

  1. 創(chuàng)建目錄
mkdir -p /usr/local/redis-ms/{6381,6382,6383,script}
image.png
  1. 復(fù)制redis.conf文件
#復(fù)制三次
cp ~/soft/redis-5.0.7/redis.conf /usr/local/redis-ms/6381/
cp ~/soft/redis-5.0.7/redis.conf /usr/local/redis-ms/6382/
cp ~/soft/redis-5.0.7/redis.conf /usr/local/redis-ms/6383/
# 更高級(jí)玩法: 一次將一個(gè)文件復(fù)制到多個(gè)目錄
echo /usr/local/redis-ms/6381/ /usr/local/redis-ms/6382/ /usr/local/redis-ms/6383/ |xargs -n 1 cp -v ~/soft/redis-5.0.7/redis.conf

主Redis服務(wù)的redis.conf配置參數(shù)(port:6381)

# 69行 允許
bind 0.0.0.0 
# 88行
protected-mode yes
# 92行
port 6381
# 136行
daemonize yes
# 158行
pidfile /var/run/redis_6381.pid
# 263行
dir /usr/local/redis-ms/6381/
# 509行
requirepass 123456

從Redis服務(wù)的redis配置參數(shù)(port:6382)

# 69行 允許
bind 0.0.0.0 
# 88行
protected-mode yes
# 92行
port 6382
# 136行
daemonize yes
# 158行
pidfile /var/run/redis_6382.pid
# 263行
dir /usr/local/redis-ms/6382/
# 287行
replicaof 192.168.21.22 6381
# 295行
masterauth 123456
# 509行
requirepass 123456

從Redis服務(wù)的redis配置參數(shù)(port:6383)

# 69行 允許
bind 0.0.0.0 
# 88行
protected-mode yes
# 92行
port 6383
# 136行
daemonize yes
# 158行
pidfile /var/run/redis_6383.pid
# 263行
dir /usr/local/redis-ms/6383/
# 287行
replicaof 192.168.21.22 6381
# 295行
masterauth 123456
# 509行
requirepass 123456

參數(shù)說明

bind

  1. 其實(shí)是表示允許通過哪個(gè)網(wǎng)卡過來訪問Redis, 反過來說就是與那個(gè)網(wǎng)卡綁定.
  2. bind 127.0.0.1 意思是只允許本機(jī)才能訪問Redis. 127.0.0.1是回環(huán)地址.使用ifconfig 查看
  3. bind 0.0.0.0 意思是任意網(wǎng)卡過來的請(qǐng)求都可以訪問Redis.如果在生產(chǎn)上設(shè)置0.0.0.0則最好設(shè)置密碼,否則在公網(wǎng)上都可以訪問你的Redis. (當(dāng)然啦, 防火墻必須放行redis端口)

protected-mode yes 保護(hù)模式.

  1. 開啟protected-mode保護(hù)模式,需配置bind ip或者設(shè)置訪問密碼
  2. 關(guān)閉protected-mode模式,此時(shí)外部網(wǎng)絡(luò)可以直接訪問

port 端口號(hào)

  1. 對(duì)外提供服務(wù)時(shí)所用的端口號(hào).
  2. 注意主從端口號(hào)不能一樣.

daemonize 守護(hù)模式

  1. 開啟 yes 則是守護(hù)模式,后臺(tái)運(yùn)行
  2. 關(guān)閉 no 則是非后臺(tái)運(yùn)行.

pidfile 存儲(chǔ)PID的文件
當(dāng)Redis以守護(hù)進(jìn)程方式運(yùn)行時(shí),Redis默認(rèn)會(huì)把pid寫入/var/run/redis.pid文件

replicaof 主從復(fù)制

  1. 添加master的ip與port
  2. 注意中間需要有空格.

masterauth master訪問密碼

  1. 必須是master設(shè)置了requirepass密碼選項(xiàng).才需要添加

requirepass 訪問權(quán)限

  1. 設(shè)置訪問時(shí)所需的密碼.

制作systemctl啟動(dòng),關(guān)閉,重啟命令

主從集群涉及多個(gè)實(shí)例redis,如果手動(dòng)啟動(dòng),關(guān)閉非常麻煩,耗時(shí),我們需要借用腳本來管理.

shell腳本寫命令

  1. 創(chuàng)建redis-ms.sh文件
    touch /usr/local/redis-ms/script/redis-ms.sh
  2. 配置port_list變量列表
  3. 配置PASS變量
#!/bin/sh   
#####################
# 名稱: redis主從服務(wù)腳本
# 時(shí)間: 2020-01-05
# 作者: 百里
#####################
# 端口配置
port_list=(6381 6382 6383)

# redis-server服務(wù)
EXEC=/usr/local/bin/redis-server
# 客戶端連接
CLIEXEC=/usr/local/bin/redis-cli

#pid文件位置
PIDFILE="/var/run/redis_%d.pid"
#配置文件存放位置
CONF="/usr/local/redis-ms/%d/redis.conf"
#密碼,如果有密碼則在此處添加
PASS=123456

# 啟動(dòng)腳本
start(){
    for port in ${port_list[@]};do
        pidfile=$(printf $PIDFILE $port)
        if [ -f $pidfile ];then
            echo "$pidfile exists, process is already running or crashed"
        else 
            echo "Starting Redis ${port} server..."
            conf=$(printf $CONF $port)
            $EXEC $conf
        fi
    done
}
# 停止函數(shù)
stop(){
    # 循環(huán)處理
    for port in ${port_list[@]};do
        pidfile=$(printf $PIDFILE $port)
        if [ ! -f $pidfile ];then
            echo "$pidfile does not exist, process is not running"
        else
            PID=$(cat $pidfile)
            echo "Stopping Redis ${port}..."
            if [ -z $PASS ];then
                $CLIEXEC -p $port shutdown
            else
                $CLIEXEC -p $port -a $PASS shutdown
            fi
            while [ -x /proc/${PID} ]
            do
                echo "Waiting for Redis to shutdown ..."
                sleep 1
            done
            echo "Redis stopped"              
        fi
    done
}
# 重啟函數(shù)
restart() {
    stop
    start
}
# 狀態(tài)函數(shù)
status() {
    netstat -nplt |grep redis
}

case "$1" in 
    start)
      start 
    ;;
    stop)
      stop
    ;;
    restart)
      restart
    ;;
    status)
      status
    ;;
    *)
        echo "Please use start or stop or restart or status as first argument"
    ;;
esac

自定義systemctl start|stop|restart redis-ms命令

  1. 創(chuàng)建redis-ms.service文件
    touch /usr/lib/systemd/system/redis-ms.service
  2. 向redis-ms.service配置文件寫入內(nèi)容
[Unit]
Description=redis-ms replication
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/local/redis-ms/script/redis-ms.sh start
ExecStop=/usr/local/redis-ms/script/redis-ms.sh stop
ExecReload=/usr/local/redis-ms/script/redis-ms.sh restart

[Install]
WantedBy=multi-user.target

systemctl 操作

  1. 重加載systemctl
    systemctl daemon-reload
  2. 啟動(dòng)服務(wù)
    systemctl start redis-ms
  3. 停止服務(wù)
    systemctl start redis-ms
  4. 重啟服務(wù)
    systemctl start redis-ms
  5. 加入開機(jī)啟動(dòng)服務(wù)
    systemctl enable redis-ms
  6. 檢查是否加入開機(jī)啟動(dòng)啦?
    systemctl is-enabled redis-ms

參考:

  1. https://blog.csdn.net/cw_hello1/article/details/83444013
  2. https://www.runoob.com/redis/redis-install.html
  3. https://www.cnblogs.com/kingsonfu/p/10138647.html
  4. https://www.cnblogs.com/zxtceq/p/7676911.html
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容