redis5.0主從集羣搭建

image.png

關於redis如何安裝,參考: redis單點安裝
  1. redis主從集羣,master負責寫;slave負責讀
  2. 5.0版本由slaveof 改成 replicaof 名稱,完成主從配置.

5.0.7版本

image.png

主從結構圖

image.png

優勢

  1. 多機備份數據
  2. 讀寫分離,減輕master壓力

缺點

  1. 一旦master掛了,沒法提供寫服務.其它節點正常的話,讀服務正常工做.
  2. 只能有一個master節點,寫服務壓力不能分散.

搭建主從redis前的準備

修改redis.conf共8處,便可實現一個主從Redis搭建. 仍是很簡單的.如今咱們正式開始搭建吧.
  1. 69行: bind 127.0.0.1 改成: bind 0.0.0.0 須要跨服務器訪問,若是是生產最好指定IP或添加防火牆.
  2. 88行: protected-mode yes 改成: protected-mode no 若是是yes保護模式,須要配置bind或者設置密碼,no的話則設置
  3. 92行: port 6379 改成: port 6381 訪問端口
  4. 136行:daemonize no 改成: daemonize yes 守護進程模式運行
  5. 158行: pidfile /var/run/redis.pid 改成: pidfile /var/run/redis_6381.pid 啓動使用的PID
  6. 263行: dir ./ 改成: dir /usr/local/redis-ms/6381/ 存儲日誌與數據文件的目錄
  7. 287行: replicaof <masterip> <masterport> 改成:replicaof 192.168.21.22 6381 (從redis.conf配置才設置)
  8. 294行: # masterauth <master-password> 改成: masterauth o9bEuO6iDKrIhYkx slave節點設置master的密碼,
  9. 507行: #requirepass 123456 改成: requirepass o9bEuO6iDKrIhYkx 設置訪問時須要的密碼

建立必要的目錄和複製redis.conf配置文件

  1. 建立目錄
mkdir -p /usr/local/redis-ms/{6381,6382,6383,script}

image.png

  1. 複製redis.conf文件
#複製三次
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/
# 更高級玩法: 一次將一個文件複製到多個目錄
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服務的redis.conf配置參數(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服務的redis配置參數(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服務的redis配置參數(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

參數說明

bind
  1. 實際上是表示容許經過哪一個網卡過來訪問Redis, 反過來講就是與那個網卡綁定.
  2. bind 127.0.0.1 意思是隻容許本機才能訪問Redis. 127.0.0.1是迴環地址.使用ifconfig 查看
  3. bind 0.0.0.0 意思是任意網卡過來的請求均可以訪問Redis.若是在生產上設置0.0.0.0則最好設置密碼,不然在公網上均可以訪問你的Redis. (固然啦, 防火牆必須放行redis端口)
protected-mode yes 保護模式.
  1. 開啓protected-mode保護模式,需配置bind ip或者設置訪問密碼
  2. 關閉protected-mode模式,此時外部網絡能夠直接訪問
port 端口號
  1. 對外提供服務時所用的端口號.
  2. 注意主從端口號不能同樣.
daemonize 守護模式
  1. 開啓 yes 則是守護模式,後臺運行
  2. 關閉 no 則是非後臺運行.
pidfile 存儲PID的文件
當Redis以守護進程方式運行時,Redis默認會把pid寫入/var/run/redis.pid文件

replicaof 主從複製html

  1. 添加master的ip與port
  2. 注意中間須要有空格.
masterauth master訪問密碼
  1. 必須是master設置了requirepass密碼選項.才須要添加
requirepass 訪問權限
  1. 設置訪問時所需的密碼.

製做systemctl啓動,關閉,重啓命令

主從集羣涉及多個實例redis,若是手動啓動,關閉很是麻煩,耗時,咱們須要借用腳原本管理.

shell腳本寫命令

  1. 建立redis-ms.sh文件

touch /usr/local/redis-ms/script/redis-ms.shredis

  1. 配置port_list變量列表
  2. 配置PASS變量
#!/bin/sh    
#####################
# 名稱: redis主從服務腳本
# 時間: 2020-01-05
# 做者: 百里
#####################
# 端口配置
port_list=(6381 6382 6383)

# redis-server服務
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

# 啓動腳本
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
}
# 中止函數
stop(){
    # 循環處理
    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
}
# 重啓函數
restart() {
    stop
    start
}
# 狀態函數
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. 建立redis-ms.service文件

touch /usr/lib/systemd/system/redis-ms.serviceshell

  1. 向redis-ms.service配置文件寫入內容
[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服務器

  1. 啓動服務

systemctl start redis-ms網絡

  1. 中止服務

systemctl start redis-ms函數

  1. 重啓服務

systemctl start redis-msui

  1. 加入開機啓動服務

systemctl enable redis-msspa

  1. 檢查是否加入開機啓動啦?

systemctl is-enabled redis-ms.net

參考:rest

  1. http://www.javashuo.com/article/p-vtjgxqpc-cc.html
  2. https://www.runoob.com/redis/redis-install.html
  3. https://www.cnblogs.com/kingsonfu/p/10138647.html
  4. http://www.javashuo.com/article/p-eapbamhf-gp.html
相關文章
相關標籤/搜索