redis集群、memcached高可用、vmware esxi

部署redis集群
注意:master和slave不能是同一台服务器的两个端口
环境:
三台服务器:A、B、C
6379:master
6380:slave
A:IP:192.168.100.11,port:6379、6380
B:IP:192.168.100.12,port:6379、6380
C:IP:192.168.100.11,port:6379、6380

编译安装

#安装redis依赖的环境包
[root@localhost soft]# yum -y install gcc gcc-c++ bzip2
[root@localhost soft]# tar -jxvf jemalloc-5.2.0.tar.bz2
[root@localhost soft]# cd jemalloc-5.2.0
[root@localhost jemalloc-5.2.0]# ./configure --prefix=/usr/local/jemalloc
[root@localhost jemalloc-5.2.0]# make -j 2 && make install

#编译安装redis并设置软连接
[root@localhost soft]# tar -zxvf redis-5.0.5.tar.gz
[root@localhost soft]# cd redis-5.0.5
[root@localhost redis-5.0.5]# make MALLOC=jemalloc
[root@localhost redis-5.0.5]# make PREFIX=/data/tools/redis-5.0.5 install
[root@localhost redis-5.0.5]# mkdir /data/tools/redis-5.0.5/conf
[root@localhost redis-5.0.5]# cp redis.conf /data/tools/redis-5.0.5/conf/redis_6379.conf
[root@localhost ~]# ln -sv /data/tools/redis-5.0.5 /data/tools/redis
‘/data/tools/redis’ -> ‘/data/tools/redis-5.0.5’
[root@localhost ~]# ln -sv /data/tools/redis/bin/redis-* /usr/bin/
‘/usr/bin/redis-benchmark’ -> ‘/data/tools/redis/bin/redis-benchmark’
‘/usr/bin/redis-check-aof’ -> ‘/data/tools/redis/bin/redis-check-aof’
‘/usr/bin/redis-check-rdb’ -> ‘/data/tools/redis/bin/redis-check-rdb’
‘/usr/bin/redis-cli’ -> ‘/data/tools/redis/bin/redis-cli’
‘/usr/bin/redis-sentinel’ -> ‘/data/tools/redis/bin/redis-sentinel’
‘/usr/bin/redis-server’ -> ‘/data/tools/redis/bin/redis-server’

redis_6379.conf、redis_6380.conf配置(两份配置,除了端口其他都一样)

#redis_6379.conf
bind 0.0.0.0
daemonize yes
pidfile /data/tools/redis/run/redis_6379.pid
logfile "/data/tools/redis/logs/redis_6379.log"
stop-writes-on-bgsave-error no
dbfilename redis6379_dump.rdb
dir /data/tools/redis/data/
requirepass 123456
#REPLICATION
masterauth 123456
maxmemory 1G
#CLUSTER
cluster-enabled yes
cluster-config-file /data/tools/redis/conf/nodes-6379.conf
cluster-node-timeout 15000
cluster-replica-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes

添加服务自启动

#创建redis启动用户
[root@localhost ~]# groupadd  -g 1000 redis && useradd -u 1000 -g 1000 redis -s /sbin/nologin
[root@localhost ~]# mkdir -pv /data/tools/redis/{conf,logs,data,run} 
mkdir: created directory ‘/data/tools/redis/logs’
mkdir: created directory ‘/data/tools/redis/data’
mkdir: created directory ‘/data/tools/redis/run’
[root@localhost ~]# chown redis.redis -R  /data/tools/redis/

#添加服务自启动redis6379.service、redis6380.service(除了配置文件名字不一样,其他一样)
[root@localhost ~]# cat /usr/lib/systemd/system/redis6379.service 
Description=Redis persistent key-value database 
After=network.target 
After=network-online.target 
Wants=network-online.target 

[Service] 
ExecStart = /data/tools/redis/bin/redis-server /data/tools/redis/conf/redis_6379.conf --supervised systemd 
ExecReload = /bin/kill -s HUP $MAINPID  
ExecStop = /bin/kill -s QUIT $MAINPID 
Type = notify 
User = redis 
Group = redis 
RuntimeDirectory = redis 
RuntimeDirectoryMode = 0755 

[Install] 
WantedBy=multi-user.target

#设置开机启动并启动服务,每台服务器启动6379和6380端口
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl enable --now redis6379
Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /usr/lib/systemd/system/redis.service.

验证服务

#6379、6380为客户端服务端口
#16379、16380为服务端服务端口
[root@localhost ~]# ss -tln
State      Recv-Q Send-Q                                      Local Address:Port                                                     Peer Address:Port              
LISTEN     0      128                                                     *:6379                                                                *:*                  
LISTEN     0      128                                                     *:6380                                                                *:*                  
LISTEN     0      128                                                     *:22                                                                  *:*                  
LISTEN     0      128                                                     *:16379                                                               *:*                  
LISTEN     0      128                                                     *:16380                                                               *:*                  
LISTEN     0      128                                                    :::22                                                                 :::* 

创建集群

[root@localhost ~]# redis-cli -a 123456 --cluster create 192.168.100.11:6379 192.168.100.11:6380 192.168.100.12:6379 192.168.100.12:6380 192.168.100.13:6379 192.168.100.13:6380  --cluster-replicas 1
Warning: Using a password with ‘-a‘ or ‘-u‘ option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.100.12:6380 to 192.168.100.11:6379
Adding replica 192.168.100.13:6380 to 192.168.100.12:6379
Adding replica 192.168.100.11:6380 to 192.168.100.13:6379
M: 6ea21fa0bd64dc75c065e7d0da7c8c3bbdfbb200 192.168.100.11:6379
   slots:[0-5460] (5461 slots) master
S: 047b0910f7268161e25199ac1e797a5ea1fe1e59 192.168.100.11:6380
   replicates 5894c491e89d893ba90deb85b282dc008d4e16c6
M: 1962b458826fef76e3b92a06e94dd82e4285854a 192.168.100.12:6379
   slots:[5461-10922] (5462 slots) master
S: 9be6ef428dda8b0fef89e2bb7bdee4de56cb8296 192.168.100.12:6380
   replicates 6ea21fa0bd64dc75c065e7d0da7c8c3bbdfbb200
M: 5894c491e89d893ba90deb85b282dc008d4e16c6 192.168.100.13:6379
   slots:[10923-16383] (5461 slots) master
S: 60bae29c47b0265fbf0f873b593aee62b7d4e215 192.168.100.13:6380
   replicates 1962b458826fef76e3b92a06e94dd82e4285854a
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.100.11:6379)
M: 6ea21fa0bd64dc75c065e7d0da7c8c3bbdfbb200 192.168.100.11:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 047b0910f7268161e25199ac1e797a5ea1fe1e59 192.168.100.11:6380
   slots: (0 slots) slave
   replicates 5894c491e89d893ba90deb85b282dc008d4e16c6
S: 60bae29c47b0265fbf0f873b593aee62b7d4e215 192.168.100.13:6380
   slots: (0 slots) slave
   replicates 1962b458826fef76e3b92a06e94dd82e4285854a
M: 1962b458826fef76e3b92a06e94dd82e4285854a 192.168.100.12:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
M: 5894c491e89d893ba90deb85b282dc008d4e16c6 192.168.100.13:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 9be6ef428dda8b0fef89e2bb7bdee4de56cb8296 192.168.100.12:6380
   slots: (0 slots) slave
   replicates 6ea21fa0bd64dc75c065e7d0da7c8c3bbdfbb200
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

检查集群

[root@localhost ~]# redis-cli --cluster info 192.168.100.11:6379 -a 123456
Warning: Using a password with ‘-a‘ or ‘-u‘ option on the command line interface may not be safe.
192.168.100.11:6379 (6ea21fa0...) -> 0 keys | 5461 slots | 1 slaves.
192.168.100.12:6379 (1962b458...) -> 0 keys | 5462 slots | 1 slaves.
192.168.100.13:6379 (5894c491...) -> 0 keys | 5461 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.

[root@localhost ~]# redis-cli --cluster check 192.168.100.11:6379 -a 123456
Warning: Using a password with ‘-a‘ or ‘-u‘ option on the command line interface may not be safe.
192.168.100.11:6379 (6ea21fa0...) -> 0 keys | 5461 slots | 1 slaves.
192.168.100.12:6379 (1962b458...) -> 0 keys | 5462 slots | 1 slaves.
192.168.100.13:6379 (5894c491...) -> 0 keys | 5461 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.100.11:6379)
M: 6ea21fa0bd64dc75c065e7d0da7c8c3bbdfbb200 192.168.100.11:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 60bae29c47b0265fbf0f873b593aee62b7d4e215 192.168.100.13:6380
   slots: (0 slots) slave
   replicates 1962b458826fef76e3b92a06e94dd82e4285854a
S: 047b0910f7268161e25199ac1e797a5ea1fe1e59 192.168.100.11:6380
   slots: (0 slots) slave
   replicates 5894c491e89d893ba90deb85b282dc008d4e16c6
M: 1962b458826fef76e3b92a06e94dd82e4285854a 192.168.100.12:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 9be6ef428dda8b0fef89e2bb7bdee4de56cb8296 192.168.100.12:6380
   slots: (0 slots) slave
   replicates 6ea21fa0bd64dc75c065e7d0da7c8c3bbdfbb200
M: 5894c491e89d893ba90deb85b282dc008d4e16c6 192.168.100.13:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

可以看到,至此redis的cluster创建完成。

memcached高可用

通过yum 安装与气动

yum -y install memcached

#cat /etc/sysconfig/memcached
PORT="11211" #监听端口
PORT="memcached" #气动用户
MAXCONN="1024" 最大连接数
CACHESIZE="1024" #最大使用内存
OPTIONS="" 其他选项

#气动
systemctl start memcached

#验证服务
[root@localhost ~]# ps -ef|grep memcached
memcach+  10767      1  0 13:22 ?        00:00:00 /usr/bin/memcached -u memcached -p 11211 -m 64 -c 1024
root      10775   9419  0 13:22 pts/0    00:00:00 grep --color=auto memcached
[root@localhost ~]# netstat -tunlpa|grep memcached
tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN      10767/memcached     
tcp6       0      0 :::11211                :::*                    LISTEN      10767/memcached     
udp        0      0 0.0.0.0:11211           0.0.0.0:*                           10767/memcached     
udp6       0      0 :::11211                :::*                                10767/memcached

#部署repcached实现双主
[root@localhost ~]# yum -y install lievent libevent-devel
[root@localhost ~]# mkdir -p /data/soft
[root@localhost ~]# cd /data/soft/
[root@localhost soft]# tar -zxvf memcached-1.2.8-repcached-2.2.1.tar.gz 
[root@localhost memcached-1.2.8-repcached-2.2.1]# ./configure --prefix=/data/tools/repcached --enable-replication

#报错
[root@localhost memcached-1.2.8-repcached-2.2.1]# make && make install
make  all-recursive
make[1]: Entering directory `/data/soft/memcached-1.2.8-repcached-2.2.1‘
Making all in doc
make[2]: Entering directory `/data/soft/memcached-1.2.8-repcached-2.2.1/doc‘
make[2]: Nothing to be done for `all‘.
make[2]: Leaving directory `/data/soft/memcached-1.2.8-repcached-2.2.1/doc‘
make[2]: Entering directory `/data/soft/memcached-1.2.8-repcached-2.2.1‘
gcc -DHAVE_CONFIG_H -I.  -DNDEBUG   -g -O2 -MT memcached-memcached.o -MD -MP -MF .deps/memcached-memcached.Tpo -c -o memcached-memcached.o `test -f ‘memcached.c‘ || echo ‘./‘`memcached.c
memcached.c: In function ‘add_iov’:
memcached.c:697:30: error: ‘IOV_MAX’ undeclared (first use in this function)
         if (m->msg_iovlen == IOV_MAX ||
                              ^
memcached.c:697:30: note: each undeclared identifier is reported only once for each function it appears in
make[2]: *** [memcached-memcached.o] Error 1
make[2]: Leaving directory `/data/soft/memcached-1.2.8-repcached-2.2.1‘
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/data/soft/memcached-1.2.8-repcached-2.2.1‘
make: *** [all] Error 2
#解决,删除57和60行这个
[root@localhost memcached-1.2.8-repcached-2.2.1]# vim memcached.c
#if defined(__FreeBSD__) || defined(__APPLE__)
#endif

#验证是否可执行,-x为对方主的ip地址,-X为数据库同步端口
#server1操作
[root@localhost ~]# /data/tools/repcached/bin/memcached -d -m 11211 -u root -c 2048 -x 192.168.100.12 -X 16000
[root@localhost ~]# ss -tln
State       Recv-Q Send-Q                                      Local Address:Port                                                     Peer Address:Port              
LISTEN      0      128                                                     *:11211                                                               *:*                  
LISTEN      0      128                                                     *:6379                                                                *:*                  
LISTEN      0      128                                                     *:6380                                                                *:*                  
LISTEN      0      128                                                     *:22                                                                  *:*                  
LISTEN      0      128                                                     *:16379                                                               *:*                  
LISTEN      0      128                                                     *:16380                                                               *:*                  
LISTEN      0      128                                                     *:16000                                                               *:*                  
LISTEN      0      128                                                    :::11211                                                              :::*                  
LISTEN      0      128                                                    :::22                                                                 :::*  

#server2操作
[root@localhost ~]# /data/tools/repcached/bin/memcached -d -m 11211 -u root -c 2048 -x 192.168.100.11 -X 16000
[root@localhost ~]# ss -tln
State       Recv-Q Send-Q                                      Local Address:Port                                                     Peer Address:Port              
LISTEN      0      128                                                     *:11211                                                               *:*                  
LISTEN      0      128                                                     *:6379                                                                *:*                  
LISTEN      0      128                                                     *:6380                                                                *:*                  
LISTEN      0      128                                                     *:22                                                                  *:*                  
LISTEN      0      128                                                     *:16379                                                               *:*                  
LISTEN      0      128                                                     *:16380                                                               *:*                  
LISTEN      0      128                                                     *:16000                                                               *:*                  
LISTEN      0      128                                                    :::11211                                                              :::*                  
LISTEN      0      128                                                    :::22    

#验证
#server1操作,连接server2的服务器
[root@localhost ~]# yum -y install telnet
[root@localhost ~]# telnet 192.168.100.11 11211
Trying 192.168.100.11...
Connected to 192.168.100.11.
Escape character is ‘^]‘.
set name 0 0 4
jack
STORED
stored
ERROR
get name
VALUE name 0 4
jack
END
quit

#server1上查看数据是否同步
[root@localhost ~]# telnet 192.168.100.11 11211
Trying 192.168.100.11...
Connected to 192.168.100.11.
Escape character is ‘^]‘.
get name
END
set name 0 0 4
jack
STORED
get name
VALUE name 0 4
jack
END
quit
Connection closed by foreign host.
[root@localhost ~]# telnet 192.168.100.12 11211
Trying 192.168.100.12...
Connected to 192.168.100.12.
Escape character is ‘^]‘.
get name
VALUE name 0 4
jack
END
quit
Connection closed by foreign host.

可以看到memcached高可用正常

安装 Vmware esxi

基于vmware workstation虚拟机运行vmware esxi,安装两台esxi服务器,IP地址分为是192.168.126.128/129

稍后指定操作系统
redis集群、memcached高可用、vmware esxi
redis集群、memcached高可用、vmware esxi
选择esxi版本(因为我们装的是7.0没有,所以就选择了6.x)
redis集群、memcached高可用、vmware esxi
选择保存的位置
redis集群、memcached高可用、vmware esxi
选择磁盘容量
redis集群、memcached高可用、vmware esxi
自定义硬件
redis集群、memcached高可用、vmware esxi
配置内存redis集群、memcached高可用、vmware esxi
配置处理器数量,开启虚拟化(不开启后期会报错)
redis集群、memcached高可用、vmware esxi
选择镜像
redis集群、memcached高可用、vmware esxi
redis集群、memcached高可用、vmware esxi
开始安装esxi节点
加载内核
redis集群、memcached高可用、vmware esxi
加载驱动
redis集群、memcached高可用、vmware esxi
确认安装redis集群、memcached高可用、vmware esxi
同意协议,按F11
redis集群、memcached高可用、vmware esxi
扫描可用硬盘redis集群、memcached高可用、vmware esxi
选择硬盘并安装
redis集群、memcached高可用、vmware esxi
redis集群、memcached高可用、vmware esxi
设置管理员密码
redis集群、memcached高可用、vmware esxi
开始安装
redis集群、memcached高可用、vmware esxi
安装过程中
redis集群、memcached高可用、vmware esxi
安装完成
redis集群、memcached高可用、vmware esxi
配置IP地址:将服务器配置为静态IP地址,当前为DHCP获取的IP地址。
配置界面进程登录,按F2进行登录
redis集群、memcached高可用、vmware esxi
登录服务器
输入安装过程中管理员密码,管理员账号为root,密码为安装过程中设置的密码
redis集群、memcached高可用、vmware esxi
配置静态IP地址:
当前为DHCP获取的IP地址
redis集群、memcached高可用、vmware esxi
redis集群、memcached高可用、vmware esxi
更改IP地址为静态IP地址、配置DNS并重启网络服务
redis集群、memcached高可用、vmware esxi
输入Y保存
redis集群、memcached高可用、vmware esxi
至此vmware esxi安装和配置基本完成。

redis集群、memcached高可用、vmware esxi

上一篇:从Linux源码看Socket(TCP)Client端的Connect


下一篇:linux下限定连接ip和端口