1. 程式人生 > >redis主從+集群

redis主從+集群

redis主從

接上篇-redis基礎

說明:docker版本:18.03.0-ce
   redis版本: redis-4.0.9

4、redis主從配置

  • 1、redis的復制功能是支持多個數據庫之間的數據同步。一類是主數據庫(master)一類是從數據庫(slave),主數據庫可以進行讀寫操作,當發生寫操作的時候自動將數據同步到從數據庫,而從數據庫一般是只讀的,並接收主數據庫同步過來的數據,一個主數據庫可以有多個從數據庫,而一個從數據庫只能有一個主數據庫。

  • 2、通過redis的復制功能可以很好的實現數據庫的讀寫分離,提高服務器的負載能力。主數據庫主要進行寫操作,而從數據庫負責讀操作。

4.1、redis主從同步過程:

1:當一個從數據庫啟動時,會向主數據庫發送sync命令,
2:主數據庫接收到sync命令後會開始在後臺保存快照(執行rdb操作),並將保存期間接收到的命令緩存起來
3:當快照完成後,redis會將快照文件和所有緩存的命令發送給從數據庫。
4:從數據庫收到後,會載入快照文件並執行收到的緩存的命令。

Dockerfile文件
[root@dockers redis]# cat Dockerfile 
FROM centos

# 解壓redis到這個目錄下
ADD redis-4.0.9.tar.gz /usr/local

# 安裝必須要的gcc make工具包,並創建一個軟鏈接用於識別,並安裝
RUN yum -y install gcc gcc-c++  make     && ln -sv /usr/local/redis-4.0.9 /usr/local/redis     && cd /usr/local/redis-4.0.9     && make && make install PREFIX=/usr/local/redis     && groupadd -g 3000 redis && useradd -g 3000 -u 3001 redis     && rm -rf /var/lib/yum/*     && chown redis:redis /usr/local/redis* -R

ENV PATH /usr/local/redis/bin:$PATH

VOLUME /data

EXPOSE 6379

# 運行腳本,如果不指定那麽密碼就是123456
CMD ["redis-server","/data/redis.conf"]

啟動: 
Host# docker run -dit -v /redisdata:/data -p 12345:6379 --name r3 --restart=always redis:v2

4.2、主從配置

redis-dockerfile文件

    啟動的時候redis的時候會報這個問題,容器與主機使用的是同一個內核,所以直接改本地的文件
   echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf

主機:都是127.0.0.1本機上配置  
端口:   主:22220    
            從1:22221   
            從2:22222

1、從節點開始需要文件指定master地址及端口
    dir /data     # 設置同步文件的路徑
    slaveof 127.0.0.1 22220   # 設置主redis的地址及端口
    masterauth 123456          # 主服務器的認證密碼,如果主redis有,一定需要配置
docker 啟動如下

技術分享圖片

[root@dockers redis]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                     NAMES
01aeedbc3e3b        redis:v2            "redis-server /data/…"   About a minute ago   Up About a minute   0.0.0.0:22222->6379/tcp   slave2
0d0ea2e0c54b        redis:v2            "redis-server /data/…"   2 minutes ago        Up 2 minutes        0.0.0.0:22221->6379/tcp   slave1
09df0dac0ac2        redis:v2            "redis-server /data/…"   4 minutes ago        Up 4 minutes        0.0.0.0:22220->6379/tcp   master

2、測試
1、查看主
技術分享圖片
技術分享圖片

2、查看從
技術分享圖片

報錯如下,是因為不在同一個機器上,需要使用宿主機的IP地址
技術分享圖片

3、效果圖
技術分享圖片

redis主從+集群