Build a highly available redis cluster to avoid the suffering brought by the standalone mode

If redis is used in projects now, it is rarely said that clusters are not used. After all, if there is only one redis in production, there will be great risks, such as machine hangs or memory explosion. For example, our production environment

has also encountered In this case, the redis memory is not enough to hang up. Of course, these are all intolerable to us. The first one must be high reliability, and the second one is high performance. Well, let me build them

one by one .



One: Redis cluster building

1. Download

   First go to the official website to download the newer version 3.2.0, the download method is still very simple, such as the introduction on the official website.

$ wget http://download.redis.io/releases/redis-3.2.0.tar.gz
$ tar xzf redis-3.2.0.tar.gz
$ cd redis-3.2.0
$ make

2. redis config

 Since we To do a cluster, and the redis-trib.rb that comes with redis can run normally, we need to open three masters and three slaves in the cluster, so here I need to create 6 folders, and the name of the folder is Use the name of the port address, for example: 6389.6380....6384.


3. config configuration.

   Now the distribution of the directory is roughly as shown in the figure above. The next thing to do is to configure redis.conf. Here you need to configure four options. . .



<1> port port address, for example, the port under the 6380 folder is 6380,

# Accept connections on the specified port, default is 6379 (IANA #815344).
# If port 0 is specified Redis will not listen on a TCP socket.
port 6379 <2> cluster-enabled        and



cluster-config-file

You need to enable the cluster mode of redis, and then configure a cluster-config-file file. This file is used to store the real-time information of redis. Redis will dynamically append and

modify the content information under this conf, but remember that this node-6379 .conf can be configured according to the port folder. For example, the 6380 folder can be changed to nodes-6380.conf. . . # Normal Redis instances can't be part of a Redis Cluster; only nodes that are
# started as cluster nodes can. In order to start a Redis instance as a # cluster node enable the cluster support uncommenting the following: # cluster- enabled yes







# Every cluster node has a cluster configuration file. This file is not
# intended to be edited by hand. It is created and updated by Redis nodes.
# Every Redis Cluster node requires a different cluster configuration file.
# Make sure that instances running in the same system do not have
# overlapping cluster configuration file names.
#
cluster-config-file nodes-6379.confCopy

code



<3> directory

      For the convenience of management, the root directory I configure here depends on which folder, such as under 6380 My dir is: dir ./6380/

# Note that you must specify a directory here, not a file name.
dir ./6379/


<4> protected-mode

      This is a function added by redis 3.2, from the function comments , we can find that the default is to prevent the outside world from accessing redis, so here we change it to no, which can be accessed remotely.

# By default protected mode is enabled. You should disable it only if
# you are sure you want clients from other hosts to connect to Redis
# even if no authentication is configured, nor a specific set of interfaces
# are explicitly listed using the "bind "directive.
protected-mode no

ok, so far, our config has been modified, and the folders of other ports can also be configured in sequence ~

2: Open redis

    So far, each port folder has been configured successfully, connect Come down and ready to open, it's really good~~~, there are too many windows, a little cute.

Next, we can see if the node-6379.conf file is generated under 6379, such as the following:


3: Configure redis-trib.rb

   because redis-trib.rb is written by ruby, and our computer must not ruby and some configuration dependencies, but that's ok, with a strong yum installation, all is not a problem.



1. Execute the replicas command

[Jack @ localhost ~] $ Cluster / Redis-trib.rb Create --replicas. 1 192.168.161.133:6379 192.168.161.133:6380 192.168.161.133:6381 192.168.161.133:6382 192.168.161.133:6383 192.168.161.133:6384
/ usr/bin/env: ruby: No such file or directory
[jack@localhost ~]$

   You can see that ruby ​​is not installed, so the next step is to install ruby. . .



2. Install ruby ​​[must be administrator privileges]
Copy code

[jack@localhost ~]$ sudo
usage: sudo [-D level] -h | -K | -k | -V
usage: sudo -v [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-u user
            name|#uid]
usage: sudo -l[l] [-AknS] [-D level] [-g groupname|# gid] [-p prompt] [-U user
            name] [-u user name|#uid] [-g groupname|#gid] [command]
usage: sudo [-AbEHknPS] [-r role] [-t type] [-C fd] [-D level] [-g
            groupname|#gid] [-p prompt] [-u user name|#uid] [-g groupname|#gid]
            [VAR=value] [-i|-s] [<command>]
usage: sudo -e [-AknS] [-r role] [-t type] [-C fd] [-D level] [-g
            groupname|#gid] [-p prompt] [-u user name|#uid] file ...
[jack@localhost ~]$ su
Password:
jacsu: incorrect password
[jack@localhost ~]$ yum install ruby
Loaded plugins: fastestmirror, refresh-packagekit, security
You need to be root to perform this command.
[jack@localhost ~]$ jack
bash: jack: command not found
[jack@localhost ~]$ su
Password:
[root@localhost jack]# yum install ruby
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
* base: mirror.bit.edu.cn
* extras: mirror.bit.edu.cn
* updates: mirror.bit.edu.cn
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package ruby.x86_64 0:1.8.7.374-4.el6_6 will be installed
--> Processing Dependency: ruby-libs = 1.8.7.374-4.el6_6 for package: ruby-1.8.7.374-4.el6_6.x86_64
--> Processing Dependency: libruby.so.1.8()(64bit) for package: ruby-1.8.7.374-4.el6_6.x86_64
--> Running transaction check
---> Package ruby-libs.x86_64 0:1.8.7.374-4.el6_6 will be installed
--> Processing Dependency: libreadline.so.5()(64bit) for package: ruby-libs-1.8.7.374-4.el6_6.x86_64
--> Running transaction check
---> Package compat-readline5.x86_64 0:5.2-17.1.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
Package                Arch         Version                   Repository  Size
================================================================================
Installing:
ruby                   x86_64       1.8.7.374-4.el6_6         base       538 k
Installing for dependencies:
compat-readline5       x86_64       5.2-17.1.el6              base       130 k
ruby-libs              x86_64       1.8.7.374-4.el6_6         base       1.7 M

Transaction Summary
================================================================================
Install       3 Package(s)

Total download size: 2.3 M
Installed size: 7.8 M
Is this ok [y/N]: y
Downloading Packages:
(1/3): compat-readline5-5.2-17.1.el6.x86_64.rpm          | 130 kB     00:00    
(2/3): ruby-1.8.7.374-4.el6_6.x86_64.rpm                 | 538 kB     00:00    
(3/3): ruby-libs-1.8.7.374-4.el6_6.x86_64.rpm            | 1.7 MB     00:02    
--------------------------------------------------------------------------------
Total                                           747 kB/s | 2.3 MB     00:03    
warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Importing GPG key 0xC105B9DE:
Userid : CentOS-6 Key (CentOS 6 Official Signing Key) <[email protected]>
Package: centos-release-6-5.el6.centos.11.1.x86_64 (@anaconda-CentOS-201311272149.x86_64/6.5)
From   : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Is this ok [y/N]: y
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : compat-readline5-5.2-17.1.el6.x86_64                         1/3
  Installing : ruby-libs-1.8.7.374-4.el6_6.x86_64                           2/3
  Installing : ruby-1.8.7.374-4.el6_6.x86_64                                3/3
  Verifying  : compat-readline5-5.2-17.1.el6.x86_64                         1/3
  Verifying  : ruby-libs-1.8.7.374-4.el6_6.x86_64                           2/3
  Verifying  : ruby-1.8.7.374-4.el6_6.x86_64                                3/3

Installed:
  ruby.x86_64 0:1.8.7.374-4.el6_6                                              

Dependency Installed:
  compat-readline5.x86_64 0:5.2-17.1.el6  ruby-libs.x86_64 0:1.8.7.374-4.el6_6

Complete!
[root@localhost jack] #Copy

code



3. Install rubygems

     Then we run the replicas command again and see what happens. . .

[Jack the root @ localhost] Cluster # / Redis-trib.rb Create --replicas. 1 192.168.161.133:6379 192.168.161.133:6380 192.168.161.133:6381 192.168.161.133:6382 192.168.161.133:6383 192.168.161.133:6384
Cluster /redis-trib.rb:24:in `require': no ​​such file to load -- rubygems (LoadError)
    from cluster/redis-trib.rb:24
[root@localhost jack] #The

     result is too hard, but it still reports an error, Looking at the prompt, it seems that a rubygems is missing, this time we still install it through yum.
Copy code

[root@localhost jack]# yum install -y rubygems
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
* base: mirror.bit.edu.cn
* extras: mirror.bit.edu.cn
* updates: mirror.bit.edu.cn
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package rubygems.noarch 0:1.3.7-5.el6 will be installed
--> Processing Dependency: ruby-rdoc for package: rubygems-1.3.7-5.el6.noarch
--> Running transaction check
---> Package ruby-rdoc.x86_64 0:1.8.7.374-4.el6_6 will be installed
--> Processing Dependency: ruby-irb = 1.8.7.374-4.el6_6 for package: ruby-rdoc-1.8.7.374-4.el6_6.x86_64
--> Running transaction check
---> Package ruby-irb.x86_64 0:1.8.7.374-4.el6_6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
Package           Arch           Version                    Repository    Size
================================================================================
Installing:
rubygems          noarch         1.3.7-5.el6                base         207 k
Installing for dependencies:
ruby-irb          x86_64         1.8.7.374-4.el6_6          base         317 k
ruby-rdoc         x86_64         1.8.7.374-4.el6_6          base         381 k

Transaction Summary
================================================================================
Install       3 Package(s)

Total download size: 905 k
Installed size: 3.0 M
Downloading Packages:
(1/3): ruby-irb-1.8.7.374-4.el6_6.x86_64.rpm             | 317 kB     00:00    
(2/3): ruby-rdoc-1.8.7.374-4.el6_6.x86_64.rpm            | 381 kB     00:00    
(3/3): rubygems-1.3.7-5.el6.noarch.rpm                   | 207 kB     00:00    
--------------------------------------------------------------------------------
Total                                           625 kB/s | 905 kB     00:01    
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : ruby-irb-1.8.7.374-4.el6_6.x86_64                            1/3
  Installing : ruby-rdoc-1.8.7.374-4.el6_6.x86_64                           2/3
  Installing : rubygems-1.3.7-5.el6.noarch                                  3/3
  Verifying  : ruby-rdoc-1.8.7.374-4.el6_6.x86_64                           1/3
  Verifying  : ruby-irb-1.8.7.374-4.el6_6.x86_64                            2/3
  Verifying  : rubygems-1.3.7-5.el6.noarch                                  3/3

Installed:
  rubygems.noarch 0:1.3.7-5.el6                                                

Dependency Installed:
  ruby-irb.x86_64 0:1.8.7.374-4.el6_6    ruby-rdoc.x86_64 0:1.8.7.374-4.el6_6  

Complete!
[root@localhost jack]#

复制代码



4. 安装redis驱动



   Or continue to give up, we continue to run the replicas command command.

[Jack the root @ localhost] Cluster # / Redis-trib.rb Create --replicas. 1 192.168.161.133:6379 192.168.161.133:6380 192.168.161.133:6381 192.168.161.133:6382 192.168.161.133:6383 192.168.161.133:6384
/ usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no ​​such file to load -- redis (LoadError)
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require. rb:31:in `require'
    from cluster/redis-trib.rb:25
[root@localhost jack]



#Fuck, there is still a problem, this time it seems that a gem_original_require is not installed, of course, this generally means that the ruby ​​version is too old So now you can either upgrade the ruby ​​version or install

the ruby ​​redis driver directly.

[root@localhost jack]# gem install redis
Successfully installed redis-3.3.0
1 gem installed
Installing ri documentation for redis-3.3.0...
Installing RDoc documentation for redis-3.3.0...



6. Running the replicas command

   finally seems to have solved all the dependencies, and then we can actually execute it. The bitter tears. . . Hold. . .
Copy code

[root@localhost jack]# cluster/redis-trib.rb create --replicas 1 192.168.161.133:6379 192.168.161.133:6380 192.168.161.133:6381 192.168.161.133:63382 192.168.1613:16.1833:163.13 6384
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.161.133:6379
192.168.161.133:6380
192.168.161.133:6381
Adding replica 3: 192.168.161.133:6382 to 192.168.161 6379
Adding replica 192.168.161.133:6383 to 192.168.161.133:6380
Adding replica 192.168.161.133:6384 to 192.168.161.133:6381
M: fdae457e803e2e04a7c549c69b44a2beefdae3bc 192.168.161.133:6379
   slots:0-5460 (5461 slots) master
M: 74285cee0fa65e64b443ecc630e447a8a65ee9f8 192.168.161.133:6380
   slots:5461-10922 (5462 slots) master
M: 14ed067a1b85044325d5800fa8479a6b4e41a10c 192.168.161.133:6381
   slots:10923-16383 (5461 slots) master
S: c50b1ff1fe3a00b16703f3b5705d2dafe046240b 192.168.161.133:6382
   replicates fdae457e803e2e04a7c549c69b44a2beefdae3bc
S: 8f7bd92f7ffb48e327820693a5820b5be7ea5556 192.168.161.133:6383
   replicates 74285cee0fa65e64b443ecc630e447a8a65ee9f8
S: 4a85ed078b4c99afad7f3a9a8df09082c681a649 192.168.161.133:6384
   replicates 14ed067a1b85044325d5800fa8479a6b4e41a10c
Can 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 cluster
Waiting for the cluster to join....
>>> Performing Cluster Check (using node 192.168.161.133:6379)
M: fdae457e803e2e04a7c549c69b44a2beefdae3bc 192.168.161.133:6379
   slots:0-5460 (5461 slots) master
M: 74285cee0fa65e64b443ecc630e447a8a65ee9f8 192.168.161.133:6380
   slots:5461-10922 (5462 slots) master
M: 14ed067a1b85044325d5800fa8479a6b4e41a10c 192.168.161.133:6381
   slots:10923-16383 (5461 slots) master
M: c50b1ff1fe3a00b16703f3b5705d2dafe046240b 192.168.161.133:6382
   slots: (0 slots) master
   replicates fdae457e803e2e04a7c549c69b44a2beefdae3bc
M: 8f7bd92f7ffb48e327820693a5820b5be7ea5556 192.168.161.133:6383
   slots: (0 slots) master
   replicates 74285cee0fa65e64b443ecc630e447a8a65ee9f8
M: 4a85ed078b4c99afad7f3a9a8df09082c681a649 192.168.161.133:6384
   slots: (0 slots) master
   replicates 14ed067a1b85044325d5800fa8479a6b4e41a10c
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@localhost jack]#

复制代码

As you can see from the above, the trib program tells us whether to use 6379, 6380, 6381 as the master and 6382, 6383, 6384 as the slave. . Then I sanctioned. . In this way, our cluster

is created. Well, this article will stop here, it is not particularly complicated~~~

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=327040321&siteId=291194637