三臺主機搭建redis的三對主從服務器集羣環境準備node
host1:192.168.1.9:6379 192.168.1.9:6380host2:192.168.1.106:6379 192.168.1.106:6380host3:192.168.1.110:6379 192.168.1.110:6380注意:(1)在創建redis的cluster環境時必須清空全部redis服務的全部key-value數據,沒有任何數據(2)每一個 redis node 節點採用相同的硬件配置、相同的密碼複製代碼
1.分別開啓三臺主機的6379和6380兩個端口,需給redis配置兩個獨立的配置文件,以host1爲例c++
1)給redis配置6379監聽端口redis
[root@localhost ~]# vim /app/redis/etc/redis.conf …… bind 192.168.1.9 #綁定ip …… port 6379 #綁定6379端口 …… cluster-enabled yes #開啓redis的集羣功能 …… cluster-config-file nodes-6379.conf #開啓自動建立集羣配置文件 ……複製代碼
2)給redis配置6380監聽端口vim
[root@localhost ~]# cp/app/redis/etc/redis.conf /app/redis/etc/redis.6380.conf [root@localhost ~]# vim /app/redis/etc/redis.6380.conf …… bind 192.168.1.9 #綁定ip …… port 6380 #綁定6380端口 …… cluster-enabled yes #開啓redis的集羣功能 …… cluster-config-file nodes-6379.conf #開啓自動建立集羣配置文件 …… :%s/6379/6380/g #配置文件底部實現全局替換,將全部6379替換爲6380複製代碼
2.三臺主機redis配置文件設置完成後再啓動redis服務c#
1)同時開啓兩個redis進程服務ruby
[root@localhost ~]# redis-server /app/redis/etc/redis.6380.conf && redis-server /app/redis/etc/redis.conf複製代碼
2)查看redis的6379和6380兩個端口是否處於監聽狀態bash
[root@localhost ~]# ss -tnlpState Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 511 192.168.1.9:6379 *:* users:(("redis-server",pid=7492,fd=6))LISTEN 0 511 192.168.1.9:6380 *:* users:(("redis-server",pid=7487,fd=6))LISTEN 0 511 192.168.1.9:16379 *:* users:(("redis-server",pid=7492,fd=8))LISTEN 0 511 192.168.1.9:16380 *:* users:(("redis-server",pid=7487,fd=8))複製代碼
3.將建立集羣的命令redis-trib.rb複製到/usr/bin下,此命令暫時不可用,還需編譯安裝ruby以及安裝redis模塊服務器
[root@localhost ruby-2.5.5]# cp redis-trib.rb /usr/bin複製代碼
4.安裝編譯ruby工具包時編譯環境併發
yum ×××tall -y vim lrzsz tree screen psmisc lsof tcpdump wget ntpdate gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel net-tools iotop bc zip unzip zlib-devel bash-completion nfs-utils automake libxml2 libxml2-devel libxslt libxslt-devel perl perl-ExtUtils-Embed複製代碼
5.編譯安裝ruby工具包(因yum安裝的ruby版本過低,不能知足gem安裝redis模塊所依賴的ruby版本)app
[root@localhost ~]# cd /data/ruby/[root@localhost ruby]# tar xf ruby-2.5.5.tar.gz[root@localhost ruby]# cd ruby-2.5.5/[root@localhost ruby-2.5.5]# ./configure && make –j 4 && make ×××tall複製代碼
6.安裝 rubygems包
[root@localhost ruby-2.5.5]# yum ×××tall -y rubygems複製代碼
7.分別給ruby命令和gem命令建立環境變量路徑軟鏈接
[root@localhost ruby-2.5.5]# ln -sv /data/ruby/ruby-2.5.5/bin/gem /usr/bin/[root@localhost ruby-2.5.5]# ln -sv/data/ruby/ruby-2.5.5/ruby /usr/bin/複製代碼
8.gem安裝redis模塊
[root@localhost ruby-2.5.5]# gem ×××tall redis -y複製代碼
9.修改redis模塊登陸集羣環境的密碼
[root@localhost ~]# vim /usr/local/lib/ruby/gems/2.5.0/gems/redis-4.1.2/lib/redis/client.rb#frozen_string_literal: truerequire_relative "errors"require "socket"require "cgi"class Redis class Client DEFAULTS = { :url => lambda { ENV["REDIS_URL"] }, :scheme => "redis", :host => "127.0.0.1", :port => 6379, :path => nil, :timeout => 5.0, :password => 123456, #登陸密碼改成123456 :db => 0, :driver => nil, ……複製代碼
10.使用redis-trib.rb命令建立集羣環境,會自動分配主從服務
[root@localhost ~]# redis-trib.rb create --replicas 1 192.168.1.9:6379 192.168.1.9:6380 192.168.1.106:6379 192.168.1.106:6380 192.168.1.110:6379 192.168.1.110:6380>>> Creating cluster>>> Performing hash slots allocation on 6 nodes...Using 3 masters:192.168.1.9:6379192.168.1.106:6379192.168.1.110:6379Adding replica 192.168.1.106:6380 to 192.168.1.9:6379Adding replica 192.168.1.110:6380 to 192.168.1.106:6379Adding replica 192.168.1.9:6380 to 192.168.1.110:6379M: eed2e22136cbdca6770a46bbb2e137ab693dd16b 192.168.1.9:6379 slots:0-5460 (5461 slots) master#主服務:M#主服務id:eed2e22136cbdca6770a46bbb2e137ab693dd16b#主服務ip和端口:192.168.1.9:6379#分得的槽位區間:0-5460#一共分得的槽:5460S: 8efbcf7fdd4675c77199a2a1206f0209ac2255f3 192.168.1.9:6380 replicates e387a0ba7c95d0c27d7e28a9b57d23117711eadc#從服務:S#從服務id:8efbcf7fdd4675c77199a2a1206f0209ac2255f3#從服務ip和端口:192.168.1.9:6380#從服務所屬的主服務id:e387a0ba7c95d0c27d7e28a9b57d23117711eadcM: c922b4bf56f0086609fd4fb23d987df0a77bec22 192.168.1.106:6379 slots:5461-10922 (5462 slots) masterS: a4fd89d79cdd27698bc394134b2df25b63ddb4c5 192.168.1.106:6380 replicates eed2e22136cbdca6770a46bbb2e137ab693dd16bM: e387a0ba7c95d0c27d7e28a9b57d23117711eadc 192.168.1.110:6379 slots:10923-16383 (5461 slots) masterS: 34549b777963b16e65125def8d9a8e50e27ed2a4 192.168.1.110:6380 replicates c922b4bf56f0086609fd4fb23d987df0a77bec22Can I set the above configuration? (type 'yes' to accept): yes>>> Nodes configuration updated>>> Assign a different config epoch to each node>>> Sending CLUSTER MEET messages to join the clusterWaiting for the cluster to join..>>> Performing Cluster Check (using node 192.168.1.9:6379)M: eed2e22136cbdca6770a46bbb2e137ab693dd16b 192.168.1.9:6379 slots:0-5460 (5461 slots) master 1 additional replica(s)S: a4fd89d79cdd27698bc394134b2df25b63ddb4c5 192.168.1.106:6380 slots: (0 slots) slave replicates eed2e22136cbdca6770a46bbb2e137ab693dd16bS: 8efbcf7fdd4675c77199a2a1206f0209ac2255f3 192.168.1.9:6380 slots: (0 slots) slave replicates e387a0ba7c95d0c27d7e28a9b57d23117711eadcM: c922b4bf56f0086609fd4fb23d987df0a77bec22 192.168.1.106:6379 slots:5461-10922 (5462 slots) master 1 additional replica(s)M: e387a0ba7c95d0c27d7e28a9b57d23117711eadc 192.168.1.110:6379 slots:10923-16383 (5461 slots) master 1 additional replica(s)S: 34549b777963b16e65125def8d9a8e50e27ed2a4 192.168.1.110:6380 slots: (0 slots) slave replicates c922b4bf56f0086609fd4fb23d987df0a77bec22[OK] All nodes agree about slots configuration.>>> Check for open slots...>>> Check slots coverage...[OK] All 16384 slots covered.複製代碼
11.查看slave從服務的鏈接狀態,能夠看到還未創建主從鏈接
[root@localhost ~]# redis-cli -h 192.168.1.106 -p 6380192.168.1.106:6380> auth 123456OK192.168.1.106:6380> info replication#Replicationrole:slavemaster_host:192.168.1.9master_port:6379master_link_status:down #未與主服務創建鏈接master_last_io_seconds_ago:-1master_sync_in_progress:0slave_repl_offset:1master_link_down_since_seconds:1560643385slave_priority:100slave_read_only:1connected_slaves:0master_replid:84865c623e15576c50c80a46ee16845b80b872d8master_replid2:0000000000000000000000000000000000000000master_repl_offset:0second_repl_offset:-1repl_backlog_active:0repl_backlog_size:1048576repl_backlog_first_byte_offset:0repl_backlog_histlen:0複製代碼
11.三臺salve從服務分別手動輸入主從鏈接認證密碼
1)輸入認證密碼
192.168.1.106:6380> config set masterauth 123456OK複製代碼
2)再次查看salve服務鏈接狀態,能夠看到爲up代表主從鏈接成功
192.168.1.106:6380> info replication#Replicationrole:slavemaster_host:192.168.1.9master_port:6379master_link_status:up #主從服務已創建鏈接master_last_io_seconds_ago:1master_sync_in_progress:0slave_repl_offset:0slave_priority:100slave_read_only:1connected_slaves:0master_replid:df9da60e308938e7a817ca08b20b58c248ad409dmaster_replid2:0000000000000000000000000000000000000000master_repl_offset:0second_repl_offset:-1repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:1repl_backlog_histlen:0複製代碼
12.實驗總結
1) 實現了三臺主機搭建3對主從服務器的集羣環境,實現冗餘可用和較高的併發量;
2)便可容許其中一臺主機宕機,被宕掉的一個主服務會被它的從服替代,從服務會被提高爲新的主服務,從而不影響另外兩臺主機服務器的正常工做,也不會丟失數據;
3)減小了主機的數量從而節約成本。