Redis集羣搭建

                                                                          Redis集羣搭建

在Centos7.5上多臺宿主機使用docker部署redis集羣的過程,redis集羣一般需要6臺redis服務器,使用docker可以節省服務器資源,除開放主從6379和6380端口外還得開放集羣總線端口,集羣總線端口爲redis客戶端連接端口+10000即16379

集羣架構

主機名

IP

redis集羣ip(並非爲redis容器的ip)

redistest(部署用)

52.83.180.202

 

redis1

52.82.63.165

52.82.63.165:6379 52.82.63.165:6380

redis2

52.83.47.118

52.83.47.118:6379 52.83.47.118:6380

redis3

52.83.98.202

52.83.98.202:6379 52.83.98.202:6380

redis1:6379

redis1:6380

redis2:6379

redis2:6380

redis3:6379

redis3:6380

一、redistest機器部署docker和ansible

1.安裝docker:yum install docker 

2.啓動docker:systemctl start docker 

3.我這裏是使用的AWS的機器所以需要使用祕鑰對登錄其它三個Redis節點 如果是用密碼登錄的話就沒必要這麼做 爲了方便登錄此處生成祕鑰

   ssh-keygen

   cd ~/.ssh 

   將id_rsa.pub追加到三個Redis節點/root/.ssh/authorized_keys中

4.部署ansible,方便給Redis節點統一部署docker和Redis避免登錄每個節點

   yum -y install ansible

5.修改ansible的配置文件和host

   修改host方便後面ansible的配置:

   vi /etc/hosts

    52.82.63.165 redis1

    52.83.47.118 redis2

    52.83.98.202 redis3

   vi /etc/ansible/ansible.cfg

    [defualts]

    inxentory = /etc/ansible/hosts

    host_key_cheking = False

    pull_interval   = 15

    sudo_user       = root

    transport       = paramiko

    module_lang     = C

    sudo_exe        = sudo

    # SSH timeout

    timeout         = 30

    remote_tmp      = ~/.ansible/tmp

    [ssh_connection]

    scp_if_ssh      = True

    control_path = ~/.ssh/      #配置登錄其它節點祕鑰的路徑

6.配置ansible命令分發的機器

   vi /etc/ansible/hosts

   [redis]

   redis[1:3] ansible_ssh_private_key_file=~/.ssh/id_rsa ansible_ssh_user=root  (如果Redis節點使用密碼登錄的話就使用ansible_ssh_pass=xxxx)

7.使用ansible給各Redis節點安裝docker和下載redis鏡像

   ansible redis -m shell -a 'yum -y install docker;systemctl start docker;docker pull redis';

   檢查每個節點是否下載了Redis鏡像:

   ansible redis -m shell -a  'docker images | grep redis'

8.給各節點創建掛載目錄

  ansible redis -m shell -a 'mkdir -p /var/redis/63{79,80}/{conf,logs,data}';

9.創建redis模板配置文件

  vi redis.conf.tem

     protected-mode no

     bind 0.0.0.0

     port ${PORT}

     daemonize no  #關閉以守護進程運行

     dir /var/lib/redis

     logfile /var/log/redis/redis.log

     appendonly yes

     appendfilename "appendonly.aof"

     appendfsync everysec

     cluster-enabled yes

     cluster-config-file nodes.conf

     cluster-node-timeout 5000

     cluster-announce-ip ${IP}           #指定redis集羣ip,即爲宿主機ip

     cluster-announce-port ${PORT}

     cluster-announce-bus-port 1${PORT}

10.使用envsubst命令修改模板文件後分發到各個節點(也可以使用ansible-playbook完成)

     for ip in 52.82.63.165 52.83.47.118 52.83.98.202;

     do

     for port in 63{79,80};

     do

     scp -i ~/workdir/ssh-keys/id_rsa redis.conf.tem $ip:;

     ssh -i ~/workdir/ssh-keys/id_rsa $ip "export IP=$ip PORT=$port;envsubst < redis.conf.tem > /var/redis/${port}/conf/redis.conf";

     done;

     done

     登錄任意節點檢查:tree /var/redis/ 看是否存在相應的文件夾和文件

11.創建redis實例

     -p 端口映射,需要把每個實例的63(79|80) 和163(79|80)端口都映射出來

     -v 指定目錄映射

     –name 給容器命名

     -d 容器放入後臺

     for i in 63{79,80};

     do

     ansible redis -m shell -a "docker run -itd -p $i:$i -p 1$i:1$i -v /var/redis/$i/logs:/var/log/redis -v /var/redis/$i/data:/var/lib/redis/ -v /var/redis/$i/conf/redis.conf:/etc/redis/redis.conf --name redis$i redis";

     done

     驗證redis實例 隨便進入一臺redis服務器,進入redis容器內部,執行完命令後看見6個PONG則驗證成功

二.搭建Redis集羣:

1.安裝ruby環境(也可使用docker裏的ruby鏡像) 創建3個主redis節點分別爲每個redis服務器上的6379端口

   yum -y install ruby rubygems ruby-devel

   redis-3.2.1.gem 官網被強只能手動下載所以不能使用命令 gem install redis-3.2.1.gem

   wget  https://rubygems.org/downloads/redis-3.2.1.gem

   gem install -l redis-3.2.1.gem

2.將Redis解壓包中 的redis-trib.rb複製到/sbin/中,創建主節點

   redis-trib.rb create 52.82.63.165:6379 52.83.47.118:6379 52.83.98.202:6379

3.爲每個主節點添加在不同redis服務器的從節點

   redis-trib.rb add-node --slave --master-id 節點的M ip(從節點的ip) : 6380 主節點IP:6379

   此處有個疑問就是 爲啥添加從節點的時候 後面這個主節點的IP都是第一個節點的IP也能成功,望各位大佬指教

4.檢查集羣狀態

   redis-trib.rb check 52.82.63.165:6379

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章