安装redis
tar zxf redis-4.0.8.tar.gz
cd redis-4.0.8
yum install gcc -y
make
make install
which redis-cli
cd utils/
./install_server.sh
修改配置文件,接受所有端口的链接
vim /etc/redis/6379.conf
70 bind 0.0.0.0
重新加载配置文件
/etc/init.d/redis_6379 stop
/etc/init.d/redis_6379 start
netstat -antlp
配置主从
在servre2中修改配置文件,设置master为172.25.31.1
vim /etc/redis/6379.conf
283 slaveof 172.25.31.1 6379
重新加载
/etc/init.d/redis_6379 restart
测试
在server1中写入
[root@server1 utils]# redis-cli
127.0.0.1:6379> set name wyh
OK
127.0.0.1:6379> get name
"wyh"
在server2中查看
[root@server2 utils]# redis-cli
127.0.0.1:6379> get name
"wyh"
复制成功
redis的高可用
Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:
- 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
- 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API
向管理员或者其他应用程序发送通知。 - 自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作,
它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器;
当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。
在server1中
修改sentinel配置文件
cd /root/redis-4.0.8
cp sentinel.conf /etc/redis
cd /etc/redis/
vim sentinel.conf
15 bind 0.0.0.0
16 #
17 protected-mode no
97 # Default is 30 seconds.
98 sentinel monitor mymaster 172.25.31.1 6379 2 #Sentinel 去监视一个名为 mymaster 的主服务器, 这个主服务器的 IP 地址为 172.25.31.1 , 端口号为 6379
将sentinel配置文件发送到server2、3上
scp sentinel.conf server2:/etc/redis
scp sentinel.conf server3:/etc/redis
开启sentinel(server1、2、3都开)
redis-server /etc/redis/sentinel.conf --sentinel
关掉server1的redis,Servre3成为master
重新打开server1的redis
系统会自动在server1的/etc/redis/6379.conf文件中写入如下一行
搭建并使用Redis集群
搭建集群的第一件事情我们需要一些运行在 集群模式的Redis实例. 这意味这集群并不是由一些普通的
…………
Redis实例组成的,集群模式需要通过配置启用,开启集群模式后的Redis实例便可以使用集群特有的命令和特性了.
进入一个新目录/usr/local/cluster, 并创建六个以端口号为名字的子目录,在每个目录中运行一个 Redis 实例
cd /usr/local/
mkdir cluster
cd cluster/
mkdir 700{1..6}
编辑集群的配置文件
cd 7001
vim redis.conf
port 7001
cluster-enabled yes #打开实例的集群模式
cluster-config-file nodes.conf #设定了保存节点配置文件的路径,默认值为 nodes.conf.节点配置文件无须人为修改,它由Redis集群在启动时创建,并在有需要时自动进行更新
cluster-node-timeout 5000
appendonly yes
daemonize yes
pidfile /usr/local/cluster/7001/redis.pid
logfile /usr/local/cluster/7001/redis.log
开启实例,查看日志
redis-server redis.conf
cat redis.log
1533:M 12 Aug 10:06:26.780 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
1533:M 12 Aug 10:06:26.780 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
1533:M 12 Aug 10:06:26.780 * Ready to accept connections
[root@server1 7001]# echo 511 > /proc/sys/net/core/somaxconn
[root@server1 7001]# sysctl -w vm.overcommit_memory = 1
error: "vm.overcommit_memory" must be of the form name=value
error: Malformed setting "="
error: "1" must be of the form name=value
发现有报错,按照提示更改即可
echo 511 > /proc/sys/net/core/somaxconn
sysctl -w vm.overcommit_memory=1
vim /etc/sysctl.conf
vm.overcommit_memory=1
echo never > /sys/kernel/mm/transparent_hugepage/enabled
将配置文件复制到其他实例目录中
cp redis.conf ../7002
cp redis.conf ../7003
cp redis.conf ../7004
cp redis.conf ../7005
cp redis.conf ../7006
修改配置文件的端口号和pid、日志文件的位置
如下
cd ../7002
vim redis.conf
port 7002
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
pidfile /usr/local/cluster/7002/redis.pid
logfile /usr/local/cluster/7002/redis.log
开启实例,查看日志,此次没有报错
redis-server redis.conf
cat redis.log
其余四个实例也按如上方法开启
使用 Redis 集群命令行工具 redis-trib
要使用此工具需要先安装如下安装包
cd /root/redis-4.0.8/src/
cp redis-trib.rb /usr/local/bin/
yum install rubygems-1.3.7-5.el6.noarch.rpm
yum install ruby-2.2.3-1.el6.x86_64.rpm libyaml-0.1.3-4.el6_6.x86_64.rpm -y
gem install --local redis-4.0.1.gem
gem list --local
确保redis_6379服务已关闭
/etc/init.d/redis_6379 stop
chkconfig redis_6379 off
搭建集群
redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
检查集群
redis-trib.rb check 127.0.0.1:7001
测试
哈希槽 < 16834 : 集群损坏
master down过半 : 集群损坏
redis-cli -c -p 7001
关掉master7002实例,slave7006由slave升为master,集群依旧可用
ps ax
kill -9 1552
redis-trib.rb check 127.0.0.1:7001
redis-cli -c -p 7001
继续关掉7006集群,集群将不可用
ps ax
kill -9 1578
redis-trib.rb check 127.0.0.1:7001
redis-cli -c -p 7001
重新打开7002 7006实例,恢复集群
redis-server redis.conf
cd ../7002
redis-server redis.conf
ps ax
redis-trib.rb check 127.0.0.1:7001
停掉两个主节点(过半),集群也将不可用
ps ax
kill -9 1533 1603
redis-trib.rb check 127.0.0.1:7002