Linux运维——redis集群,作 mysql 的缓存服务器

redis集群:

master【server2】

[root@server2 ~]# cd /etc/redis/
[root@server2 redis]# vim 6379.conf
   ##配置一个master最少要对应一个slave,用户才可以往里面写数据
[root@server2 redis]# /etc/init.d/redis_6379 restart

【server1】

[root@server1 ~]# /etc/init.d/redis_6379 stop
[root@server1 ~]# chkconfig redis_6379 off
[root@server1 ~]# cd /usr/local/
[root@server1 local]# mkdir rediscluster
[root@server1 local]# cd rediscluster/
[root@server1 rediscluster]# mkdir 7000 7001 7002 7003 7004 7005
[root@server1 rediscluster]# cd 7000
[root@server1 7000]# vim redis.conf

        Linux运维——redis集群,作 mysql 的缓存服务器_第1张图片
[root@server1 7000]# redis-server redis.conf
[root@server1 7000]# ps aux|grep redis-server
root      2265  0.1  0.7 153824  7700 ?        Ssl  17:53   0:00 redis-server *:7000 [cluster]
root      2272  0.0  0.0 112648   964 pts/0    R+   17:54   0:00 grep --color=auto redis-server

[root@server1 7000]# cd ..
[root@server1 rediscluster]# cp 7000/redis.conf 7001/
[root@server1 rediscluster]# cp 7000/redis.conf 7002
[root@server1 rediscluster]# cp 7000/redis.conf 7003
[root@server1 rediscluster]# cp 7000/redis.conf 7004
[root@server1 rediscluster]# cp 7000/redis.conf 7005
[root@server1 rediscluster]# cd 7001
[root@server1 7001]# vim redis.conf

    Linux运维——redis集群,作 mysql 的缓存服务器_第2张图片
[root@server1 7001]# redis-server redis.conf
[root@server1 7001]# ps aux|grep redis-server
root      2265  0.1  0.7 153824  7700 ?        Ssl  17:53   0:00 redis-server *:7000 [cluster]
root      2295  0.0  0.7 153824  7696 ?        Ssl  17:55   0:00 redis-server *:7001 [cluster]
root      2300  0.0  0.0 112648   960 pts/0    R+   17:55   0:00 grep --color=auto redis-server

[root@server1 7001]# cd ../7002
[root@server1 7002]# vim redis.conf

Linux运维——redis集群,作 mysql 的缓存服务器_第3张图片
[root@server1 7002]# redis-server redis.conf
[root@server1 7002]# ps aux|grep redis-server
root      2265  0.1  0.7 153824  7700 ?        Ssl  17:53   0:00 redis-server *:7000 [cluster]
root      2295  0.1  0.7 153824  7696 ?        Ssl  17:55   0:00 redis-server *:7001 [cluster]
root      2312  0.0  0.7 153824  7700 ?        Ssl  17:56   0:00 redis-server *:7002 [cluster]
root      2317  0.0  0.0 112648   964 pts/0    R+   17:56   0:00 grep --color=auto redis-server

[root@server1 7002]# cd ../7003
[root@server1 7003]# vim redis.conf

Linux运维——redis集群,作 mysql 的缓存服务器_第4张图片
[root@server1 7003]# redis-server redis.conf
[root@server1 7003]# ps aux|grep redis-server
root      2265  0.1  0.7 153824  7700 ?        Ssl  17:53   0:00 redis-server *:7000 [cluster]
root      2295  0.0  0.7 153824  7696 ?        Ssl  17:55   0:00 redis-server *:7001 [cluster]
root      2312  0.1  0.7 153824  7700 ?        Ssl  17:56   0:00 redis-server *:7002 [cluster]
root      2328  0.0  0.7 153824  7696 ?        Ssl  17:56   0:00 redis-server *:7003 [cluster]
root      2333  0.0  0.0 112648   960 pts/0    R+   17:57   0:00 grep --color=auto redis-server

[root@server1 7003]# cd ../7004
[root@server1 7004]# vim redis.conf

           Linux运维——redis集群,作 mysql 的缓存服务器_第5张图片
[root@server1 7004]# redis-server redis.conf
[root@server1 7004]# ps aux|grep redis-server
root      2265  0.1  0.7 153824  7700 ?        Ssl  17:53   0:00 redis-server *:7000 [cluster]
root      2295  0.0  0.7 153824  7696 ?        Ssl  17:55   0:00 redis-server *:7001 [cluster]
root      2312  0.1  0.7 153824  7700 ?        Ssl  17:56   0:00 redis-server *:7002 [cluster]
root      2328  0.1  0.7 153824  7696 ?        Rsl  17:56   0:00 redis-server *:7003 [cluster]
root      2344  0.0  0.7 153824  7700 ?        Ssl  17:57   0:00 redis-server *:7004 [cluster]
root      2349  0.0  0.0 112648   964 pts/0    R+   17:57   0:00 grep --color=auto redis-server

[root@server1 7004]# cd ../7005
[root@server1 7005]# vim redis.conf

Linux运维——redis集群,作 mysql 的缓存服务器_第6张图片
[root@server1 7005]# redis-server redis.conf
[root@server1 7005]# ps aux|grep redis-server
root      2265  0.1  0.7 153824  7700 ?        Ssl  17:53   0:00 redis-server *:7000 [cluster]
root      2295  0.0  0.7 153824  7696 ?        Ssl  17:55   0:00 redis-server *:7001 [cluster]
root      2312  0.1  0.7 153824  7700 ?        Ssl  17:56   0:00 redis-server *:7002 [cluster]
root      2328  0.1  0.7 153824  7696 ?        Rsl  17:56   0:00 redis-server *:7003 [cluster]
root      2344  0.1  0.7 153824  7700 ?        Ssl  17:57   0:00 redis-server *:7004 [cluster]
root      2353  0.0  0.7 153824  7700 ?        Ssl  17:58   0:00 redis-server *:7005 [cluster]
root      2358  0.0  0.0 112648   964 pts/0    R+   17:58   0:00 grep --color=auto redis-server

[root@server1 7005]# cd

[root@server1 ~]# cd redis-5.0.3/
[root@server1 redis-5.0.3]# cd src/
[root@server1 src]# cp redis-trib.rb /usr/local/bin/
[root@server1 src]# cd
[root@server1 ~]# yum install ruby -y
[root@server1 ~]# redis-cli  --cluster help
[root@server1 ~]# redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 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

Linux运维——redis集群,作 mysql 的缓存服务器_第7张图片

测试:
[root@server1 ~]# redis-cli --cluster check 127.0.0.1:7000


[root@server1 ~]# redis-cli --cluster check 127.0.0.1:7001
[root@server1 ~]# redis-cli --cluster check 127.0.0.1:7002
[root@server1 ~]# redis-cli --cluster check 127.0.0.1:7003
[root@server1 ~]# redis-cli --cluster check 127.0.0.1:7004
[root@server1 ~]# redis-cli --cluster check 127.0.0.1:7005

[root@server1 ~]# redis-cli -c -p 7000
127.0.0.1:7000> info

Linux运维——redis集群,作 mysql 的缓存服务器_第8张图片
[root@server1 ~]# redis-cli -c -p 7005
127.0.0.1:7005> INFO

Linux运维——redis集群,作 mysql 的缓存服务器_第9张图片
127.0.0.1:7005> set name westos
-> Redirected to slot [5798] located at 127.0.0.1:7001
OK
127.0.0.1:7001> get name
"westos"

当主宕机,从替代成为了主;当原主恢复,作为了新主的从机:


[root@server1 ~]# redis-cli -c -p 7001
127.0.0.1:7001> SHUTDOWN
not connected>
[root@server1 ~]# ps aux|grep redis-server
root      2265  0.0  1.4 163040 14280 ?        Ssl  17:53   0:00 redis-server *:7000 [cluster]
root      2312  0.1  0.7 156384  8084 ?        Ssl  17:56   0:01 redis-server *:7002 [cluster]
root      2328  0.0  0.7 156384  8032 ?        Ssl  17:56   0:00 redis-server *:7003 [cluster]
root      2344  0.0  0.7 156384  8056 ?        Ssl  17:57   0:00 redis-server *:7004 [cluster]
root      2353  0.0  1.2 163040 12540 ?        Ssl  17:58   0:00 redis-server *:7005 [cluster]
root      2422  0.0  0.0 112648   964 pts/0    R+   18:10   0:00 grep --color=auto redis-server

[root@server1 ~]# redis-cli -c -p 7004
127.0.0.1:7004> INFO

           Linux运维——redis集群,作 mysql 的缓存服务器_第10张图片
[root@server1 ~]# cd /usr/local/rediscluster/7001
[root@server1 7001]# redis-server redis.conf
[root@server1 7001]# ps aux|grep redis-server
root      2265  0.1  1.4 163040 14288 ?        Ssl  17:53   0:01 redis-server *:7000 [cluster]
root      2312  0.1  0.7 156384  8092 ?        Ssl  17:56   0:01 redis-server *:7002 [cluster]
root      2328  0.0  0.7 156384  8040 ?        Ssl  17:56   0:00 redis-server *:7003 [cluster]
root      2344  0.1  1.2 163040 12540 ?        Ssl  17:57   0:00 redis-server *:7004 [cluster]
root      2353  0.0  1.4 163040 14520 ?        Ssl  17:58   0:00 redis-server *:7005 [cluster]
root      2432  0.1  0.9 156896 10012 ?        Ssl  18:11   0:00 redis-server *:7001 [cluster]
root      2439  0.0  0.0 112648   960 pts/0    R+   18:11   0:00 grep --color=auto redis-server
[root@server1 7001]# redis-cli -c -p 7004
127.0.0.1:7004> INFO

            Linux运维——redis集群,作 mysql 的缓存服务器_第11张图片
127.0.0.1:7004> get name
"westos"
[root@server1 7001]# redis-cli --cluster check 127.0.0.1:7004

加减节点

[root@server1 rediscluster]# mkdir 7006
[root@server1 rediscluster]# mkdir 7007
[root@server1 rediscluster]# cp 7000/redis.conf 7006
[root@server1 rediscluster]# cp 7000/redis.conf 7007
[root@server1 rediscluster]# cd 7006
[root@server1 7006]# vim redis.conf

                Linux运维——redis集群,作 mysql 的缓存服务器_第12张图片
 [root@server1 rediscluster]# redis-server redis.conf
 [root@server1 rediscluster]# cd ../7007
 [root@server1 7007]# vim redis.conf

                              Linux运维——redis集群,作 mysql 的缓存服务器_第13张图片
 [root@server1 7007]# redis-server redis.conf

Linux运维——redis集群,作 mysql 的缓存服务器_第14张图片
[root@server1 rediscluster]# redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000
[root@server1 rediscluster]# redis-cli --cluster info  127.0.0.1:7006
 Linux运维——redis集群,作 mysql 的缓存服务器_第15张图片

[root@server1 rediscluster]# redis-cli --cluster add-node --cluster-slave --cluster-master-id

73901351b9303f07bd69c890117062db0c4df571 127.0.0.1:7007 127.0.0.1:7000
[root@server1 rediscluster]# redis-cli --cluster reshard 127.0.0.1:7004
[root@server1 rediscluster]# redis-cli --cluster info 127.0.0.1:7001

Linux运维——redis集群,作 mysql 的缓存服务器_第16张图片

哈细槽不完整或过半master宕机都会导致整个集群不可用
不完整:kill一个master、slave进程对

 

二、redis做mysql的缓存器

1.搭建lnmp

1)PHP的rpm包安装
gearmand-1.1.12-18.el7.x86_64.rpm
libgearman-1.1.12-18.el7.x86_64.rpm
libzip-0.10.1-8.el7.x86_64.rpm
openssl-1.0.2k-16.el7.x86_64.rpm
openssl-libs-1.0.2k-16.el7.x86_64.rpm
php-cli-5.4.16-46.el7.x86_64.rpm
php-common-5.4.16-46.el7.x86_64.rpm
php-fpm-5.4.16-46.el7.x86_64.rpm
php-mysql-5.4.16-46.el7.x86_64.rpm
php-pdo-5.4.16-46.el7.x86_64.rpm
php-pecl-gearman-1.1.2-1.el7.x86_64.rpm
php-pecl-igbinary-1.2.1-1.el7.x86_64.rpm
php-pecl-redis-2.2.8-1.el7.x86_64.rpm
php-process-5.4.16-46.el7.x86_64.rpm
php-xml-5.4.16-46.el7.x86_64.rpm
[root@server1 rhel7]# yum install * -y
[root@server1 rhel7]# cd /etc/php-fpm.d/
[root@server1 php-fpm.d]# vim www.conf

 
[root@server1 php-fpm.d]# systemctl start php-fpm

2)nginx的原码安装
nginx-1.14.2.tar.gz
[root@server1 ~]# yum install gcc pcre-devel zlib-devel -y
[root@server1 ~]# tar zxf nginx-1.14.2.tar.gz
[root@server1 ~]# cd nginx-1.14.2/
[root@server1 nginx-1.14.2]# vim auto/cc/gcc


[root@server1 nginx-1.14.2]# ./configure --prefix=/usr/local/nginx
[root@server1 nginx-1.14.2]# make
[root@server1 nginx-1.14.2]# make install
[root@server1 nginx-1.14.2]# cd /usr/local/nginx/conf/
[root@server1 conf]# vim nginx.conf

 

  Linux运维——redis集群,作 mysql 的缓存服务器_第17张图片

Linux运维——redis集群,作 mysql 的缓存服务器_第18张图片
[root@server1 conf]# ln -s /usr/local/nginx/sbin/nginx  /usr/local/bin/
[root@server1 conf]# nginx -t
[root@server1 conf]# nginx

[root@server1 conf]# cd /usr/local/nginx/html/
[root@server1 html]# vim index.php

 
[root@server1 html]# ls
50x.html  index.html  index.php  test.php  test.sql  worker.php

Linux运维——redis集群,作 mysql 的缓存服务器_第19张图片

[root@server1 html]# mv worker.php /usr/local/
[root@server1 html]# mv test.sql ~
[root@server1 html]# ls
50x.html  index.html  index.php  test.php
[root@server1 html]# rm -f index.php
[root@server1 html]# mv test.php index.php
[root@server1 html]# vim index.php
        $redis = new Redis();
        $redis->connect('172.25.19.2',6379) or die ("could net connect redis server");
  #      $query = "select * from test limit 9";
        $query = "select * from test";
        for ($key = 1; $key < 10; $key++)
        {
                if (!$redis->get($key))
                {
                        $connect = mysql_connect('172.25.19.3','redis','westos');
                        mysql_select_db(test);
                        $result = mysql_query($query);
                        //如果没有找到$key,就将该查询sql的结果缓存到redis
                        while ($row = mysql_fetch_assoc($result))
                        {
                                $redis->set($row['id'],$row['name']);
                        }
                        $myserver = 'mysql';
                        break;
                }
                else
                {
                        $myserver = "redis";
                        $data[$key] = $redis->get($key);
                }
        }

        echo $myserver;
        echo "
";
        for ($key = 1; $key < 10; $key++)
        {
                echo "number is $key";

                echo "
";

                echo "name is $data[$key]";

                echo "
";
        }
?>

5)redis
[root@server2 redis]# redis-cli
127.0.0.1:6379> INFO [section]

Linux运维——redis集群,作 mysql 的缓存服务器_第20张图片

4)maridb
[root@server3 ~]# cd /var/lib/mysql
[root@server3 mysql]# rm -fr *
[root@server3 mysql]# ls
[root@server3 mysql]# cd
[root@server3 ~]# rpm -e `rpm -qa|grep mysql` --nodeps  ##卸载mysql相关的包
warning: /etc/my.cnf saved as /etc/my.cnf.rpmsave

[root@server3 ~]# yum install mariadb -y
[root@server3 ~]# yum install mariadb-server -y
[root@server3 ~]# vim /etc/my.cnf

[root@server3 ~]# systemctl start mariadb.service
[root@server1 ~]# scp test.sql server3:   
[root@server3 ~]# mysql
MariaDB [(none)]> show databases;

Linux运维——redis集群,作 mysql 的缓存服务器_第21张图片
[root@server3 ~]# mysql < test.sql
[root@server3 ~]# mysql
MariaDB [(none)]> use test;
MariaDB [test]> select * from test;

Linux运维——redis集群,作 mysql 的缓存服务器_第22张图片

MariaDB [test]> grant all on test.* to redis@'%' identified by 'westos';

测试缓存:访问172.25.19.1 刷两次

Linux运维——redis集群,作 mysql 的缓存服务器_第23张图片

Linux运维——redis集群,作 mysql 的缓存服务器_第24张图片
【server2】
[root@server2 redis]# redis-cli
127.0.0.1:6379> get 1
"test1"
127.0.0.1:6379> get 2
"test2"
127.0.0.1:6379>

测试存在的数据同步问题:
MariaDB [test]> desc test;

Linux运维——redis集群,作 mysql 的缓存服务器_第25张图片

MariaDB [test]> update test set name='westos' where id=1;
MariaDB [test]> select * from test;                 ##数据库已经更新

Linux运维——redis集群,作 mysql 的缓存服务器_第26张图片

[root@server2 redis]# redis-cli             ##redis缓存的还是更新前的数据
127.0.0.1:6379> get 1
"test1"
127.0.0.1:6379>

三、Gearman数据库更新触发更改

client:mysql ->update -> trigger(触发器生效)->mysqludf_json(转化为json数据结构)->gman_do_background(gearmand:4730)(把通识的json模块发给gearmand)
server:gearmand gearmanip:4730
worker:php->php-gesrman:4730(连接server4370拿更新任务) -> 传给php-redis->sync_to_redis(更新redis)

1.安装gearman软件

[root@server1 redis]# yum install -y gearmand-1.1.8-2.el6.x86_64.rpm libgearman-* libevent-*

[root@server1 redis]# systemctl start gearmand

2.安装php的gearman扩展

[root@server3 mysql]# yum install unzip -y
[root@server3 ~]# unzip lib_mysqludf_json-master.zip
[root@server3 ~]# cd lib_mysqludf_json-master/
[root@server3 lib_mysqludf_json-master]# yum install gcc mariadb-devel -y

3. 安装 lib_mysqludf_json

[root@server3 lib_mysqludf_json-master]# cp lib_mysqludf_json.so /usr/lib64/mysql/plugin/ #拷贝 lib_mysqludf_json.so 模块
查看 mysql 的模块目录:

[root@server3 lib_mysqludf_json-master]# mysql
MariaDB [(none)]> show global variables like 'plugin_dir';   #查看模块目录


MariaDB [(none)]> CREATE FUNCTION json_object RETURNS STRING SONAME 'lib_mysqludf_json.so'; #注册 UDF 函数
MariaDB [(none)]> select * from mysql.func;   #查看函数


4. 安装 gearman-mysql-udf

这个插件是用来管理调用 Gearman 的分布式的队列
[root@server3 ~]# tar zxf gearman-mysql-udf-0.6.tar.gz
[root@server3 ~]# yum install libgearman-1.1.12-18.el7.x86_64.rpm libgearman-devel-1.1.12-18.el7.x86_64.rpm  libevent-devel-2.0.21-4.el7.x86_64.rpm -y
[root@server3 ~]# cd gearman-mysql-udf-0.6/
[root@server3 gearman-mysql-udf-0.6]# ./configure --libdir=/usr/lib64/mysql/plugin/ --with-mysql
[root@server3 gearman-mysql-udf-0.6]# make && make install
[root@server3 gearman-mysql-udf-0.6]# cd /usr/lib64/mysql/plugin/
注册 UDF 函数:
[root@server3 plugin]# mysql
MariaDB [(none)]> CREATE FUNCTION gman_do_background RETURNS STRING SONAME 'libgearman_mysql_udf.so';

MariaDB [(none)]> CREATE FUNCTION gman_servers_set RETURNS STRING SONAME 'libgearman_mysql_udf.so';

MariaDB [(none)]> select * from mysql.func;    #查看函数

Linux运维——redis集群,作 mysql 的缓存服务器_第27张图片
MariaDB [(none)]> SELECT gman_servers_set('172.25.19.1:4730');    #指定 gearman 的服务信息


5. 编写 mysql 触发器

[root@server3 plugin]# cd
[root@server3 ~]# vim test.sql

Linux运维——redis集群,作 mysql 的缓存服务器_第28张图片

[root@server3 ~]# mysql < test.sql

6.编写 gearman 的 worker 端

 [root@server1 ~]# rpm -q gearmand
gearmand-1.1.12-18.el7.x86_64
[root@server1 ~]# systemctl start gearmand

[root@server1 ~]# cd /usr/local/
[root@server1 local]# vim worker.php
$worker = new GearmanWorker();
$worker->addServer();
$worker->addFunction('syncToRedis', 'syncToRedis');

$redis = new Redis();
$redis->connect('172.25.19.2', 6379);

while($worker->work());
function syncToRedis($job)
{
        global $redis;
        $workString = $job->workload();
        $work = json_decode($workString);
        if(!isset($work->id)){
                return false;
        }
        $redis->set($work->id, $work->name);
}
?>

[root@server1 local]# which php
/usr/bin/php

7. 后台运行 worker

[root@server1 local]# nohup php /usr/local/worker.php &
[1] 5539
[root@server1 local]# nohup: ignoring input and appending output to ‘nohup.out’

测试:更新 mysql 中的数据

 [root@server3 ~]# mysql

MariaDB [(none)]> SHOW TRIGGERS FROM test;

Linux运维——redis集群,作 mysql 的缓存服务器_第29张图片

MariaDB [(none)]> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [test]> update test set name='new' where id=1;

MariaDB [test]> select * from test;

Linux运维——redis集群,作 mysql 的缓存服务器_第30张图片
[root@server2 redis]# redis-cli
127.0.0.1:6379> get 1
"new"

刷新测试页面数据同步

Linux运维——redis集群,作 mysql 的缓存服务器_第31张图片

你可能感兴趣的:(Linux运维——redis集群,作 mysql 的缓存服务器)