1.MariaDB
# mariadb其实就是mysql
# mysql已经被oracle收购,它即将闭源,马上要开始收费了
# 因此还想免费试用开源的数据库mysql,就在centos7上,将mysql分支为mariadb
yum install mariadb-server
mysql_secure_installation
# 直接输入 y、n 一步一步走,设置root密码,删除匿名用户等等操作
# 主机 mysql 下执行改 sql,root用户远程只可以使用 123 作登录密码
grant all privileges on *.* to root@'%' identified by '123';
# 刷新授权表,使得权限立即生效
flush privileges;
# 远程 cmd 下执行 mysql -u root -p -h 192.168.1.xxx
# 前提远程主机已经安装了 mysql 服务
# 输入密码后即可
set password = PASSWORD('xxx');
create user zhangsan@'%' identified by '123';
# 修改mysql的配置文件 /etc/my.cnf ,复制以下信息
#
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
log-error=/var/log/mysqld.log
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
# 修改了配置文件,重启服务
systemctl restart mariadb
# 在Linux下输入命令
# 将数据库数据备份到 /data/db/dump 文件里面
mysqldump -u root -p --all-databases > /data/db.dump
# 可以删除一些不重要的库或者表做实验
# 在Linux下输入命令
mysql -uroot -p < /opt/db.dump
# 或者在 MariaDB 命令行下执行
source /opt/db.dump
# 两台服务器
# 每一台服务器都有 MariaDB
1.vim /etc/my.cnf
# 写入如下,去掉注释
[mysqld]
server-id=1 # 指明主库的身份id为1
log-bin=mysqls14-bin # 指明binlog的日志名
2.修改了配置文件,重启mariadb,使得binlog生效
systemctl restart mariadb
3.登录mysql,检查主库的状态
show master status;
MariaDB [(none)]> show master status;
+---------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------------+----------+--------------+------------------+
| mysqls14-bin.000001 | 245 | | |
+---------------------+----------+--------------+------------------+
注意这个 file 的名字和 POoition 的值
4.创建一个用户,用于进行主从同步
create user 'leon'@'%' identified by 'leon123';
5.授予账号权限,授予一个从库的身份权限
grant replication slave on *.* to 'leon'@'%';
6.锁定mysql的表,防止数据写入
# 为什么要锁住:因为先锁住防止数据进入,从库就可以完全复制主库数据。
# 不能从库一边复制,主库同时又在写入
flush table with read lock;
# 注意,此时进入 从库
的设置!
1.9.2从库的设置
1.vim /etc/my.cnf,去掉注释
server-id=10 # 只要和主机的 server-id 不一样就可以
2.重启myariadb
systemctl restart mariadb
3.查看slave机器的身份信息
show variables like 'server_id'; # vim /etc/my.cnf 里面的 server_id
show variables like 'log_bin'; # 要为 OFF 状态,主库是 ON 状态
4.通过命令,开启主从同步技术,直接复制到从库的 MariaDB下执行即可
change master to master_host='192.168.12.xx', # 主库的ip
master_user='leon', # 被赋权的用户
master_password='leon123', # 被赋权的用户的密码
master_log_file='mysqls14-bin.000001', # 主库 show master status; 查看得到的 file 名
master_log_pos=245; # 主库 show master status; 查看得到的 Position 值
5.刷新数据
flush privileges;
6.开启slave,Mariadb下执行
start slave;
7.检查slave状态,检查两条参数,如果都是yes,即主从ok
# Mariadb下执行:show slave status
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
# 注意,此时再次进入 主库
的设置!
7.主从同步,将从库与主库的数据,保持一致后,它俩都在同一个起跑线,然后解除锁表,一同写入数据,保证数据一致性
1.导出当前的数据,用于slave机器导入数据,保证在一个起始点
mysqldump -u root -p --all-databases > /data/db.dump
2.将此db.dump文件远程传输给从机服务器,用于导入
scp /data/db.dump root@192.168.12.xx:/tmp/
3.登录slave从库,导入主库的数据信息
source /tmp/db.dump
4.此时可以查看主库和从库的信息,是否一致
8.查看主库的状态信息,binlog信息
show master status;
9.解锁表,开始主从同步
unlock tables;
10.此时可以在主库中写入数据,查看从库中是否生成了记录
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
# 可指定版本
1.tar -zxvf redis-4.0.10.tar.gz # 解压缩
2.cd redis-4.0.10 # 切换目录
3.make && make install # 在目录下执行编译和安装
# 编译安装完成后,redis默认会将redis命令添加到环境变量中/usr/local/bin底下
# 可直接清除原先的 conf 文件
vim redis.conf ,写入以下内容(不要加上注释)
port 6379 # 指定端口
bind 0.0.0.0 # 绑定本地 ip
daemonize yes # 后台运行redis
pidfile /data/6379/redis.pid # 将redis进程的id写入到redis.pid这个文件
loglevel notice # 日志级别
dir /data/6379 # 配置redis数据存放点 touch/data/6379
logfile "/data/6379/redis.log" # 指定日志文件 touch/data/6379/redis.log
protected-mode yes # redis3.0之后的安全模式
requirepass leon123 # 给redis添加密码,登录Redis使用 auth+密码
redis-server redis.onf
# 只要配饰多个 conf 文件即可
# 本质上只是端口不同
# 现在重新配置一个 redis-6366.conf 的配置文件,(文件名自定义)
vim redis-6366.conf ,写入以下内容(不要加上注释)
port 6366 # 指定端口
bind 0.0.0.0 # 绑定本地 ip
daemonize yes # 后台运行redis
pidfile /data/6379/redis.pid # 将redis进程的id写入到redis.pid这个文件
loglevel notice # 日志级别
dir /data/6366 # 配置redis数据存放点 touch/data/6366
logfile "/data/6379/redis.log" # 指定日志文件 touch/data/6366/redis.log
protected-mode yes # redis3.0之后的安全模式
requirepass leon123 # 给redis添加密码,登录Redis使用 auth+密码
redis-server redis.onf
redis-server redis-6366.onf
# 即是指定不同的 conf 配置文件实现多个 redis 的启动
# 终端1
redis-cli -p 6376
# 终端2
redis-cli -p 6399
# 通过指定不同的端口来登录不同的 redis 服务
# 多个服务之间彼此不干涉
# 进入 redis 完成之后输入
auth + 密码 密码就是 conf 文件的 requirepass 的值
完成登录
# 现有 若干个终端 连接同一个 redis 服务
# 终端X(订阅者)
SUBSCRIBE CCAV # 代表监听该 CCAV 这个频道的信息
# 终端y(订阅者)
SUBSCRIBE CCAV # 代表也监听该 CCAV 这个频道的信息
# 终端y(发布者)
PUBLISH CCAV 'Hello!'
# y 在 CCAV 这个频道里发布了一个 'Hello' 信息,此时 x 和 y 均可以收到 'Hello'
# 每个终端都可以在这个频道发消息,监听这个频道的人都能收到
# 终端X(订阅者)
PSUBSCRIBE CC* # 代表订阅该 CC* (CC开头的频道)
# 终端y(发布者)
PUBLISH CCTV 'Hello!' # 在 CCTV 频道里面发布一个 'Hello'
# 终端y(发布者)
PUBLISH CCAV '666' # 在 CCAV 频道里面发布一个 '666'
# 此时 x 即可收到 CCTV 的 'Hello' 和 CCAV 的 '666'
# 启动redis服务端,此时可以设置redis的key,通过save命令触发rdb持久化
1.在配置文件中写入参数,支持rdb模式
vim redis.conf
port 6366 # 指定端口
bind 0.0.0.0 # 绑定本地 ip
daemonize yes # 后台运行redis
pidfile /data/6366/redis.pid # 将redis进程的id写入到redis.pid这个文件
loglevel notice # 日志级别
dir /data/6366 # 配置redis数据存放点 touch/data/6366
logfile "/data/6379/redis.log" # 指定日志文件 touch/data/6366/redis.log
protected-mode yes # redis3.0之后的安全模式
requirepass leon123 # 给redis添加密码,登录Redis使用 auth+密码
dbfilename dbmp.rdb # 文件目录 /data/6379
save 900 1 # 每 900 秒 1 次修改就保存,自定制
save 300 10 # 每 300 秒 10 次修改就保存,自定制
save 60 10000 # 每 60 秒 10000 次修改就保存,自定制
vim redis.conf
port 6366 # 指定端口
bind 0.0.0.0 # 绑定本地 ip
daemonize yes # 后台运行redis
pidfile /data/6379/redis.pid # 将redis进程的id写入到redis.pid这个文件
loglevel notice # 日志级别
dir /data/6366 # 配置redis数据存放点 touch/data/6366
logfile "/data/6379/redis.log" # 指定日志文件 touch/data/6366/redis.log
protected-mode yes # redis3.0之后的安全模式
requirepass leon123 # 给redis添加密码,登录Redis使用 auth+密码
dbfilename dbmp.rdb # 文件目录 /data/6379
save 900 1 # 每 900 秒 1 次修改就保存,自定制
save 300 10 # 每 300 秒 10 次修改就保存,自定制
save 60 10000 # 每 60 秒 10000 次修改就保存,自定制
appendonly yes
appendfsync everysec # 文件目录 /data/6379
2.启动redis-server服务端,默认就会生成appendonly.aof持久化文件
此时进入redis-cli的操作,都会被记录,且追加到appendonly.aof文件中,以达到持久化的操作
3.redis 持久化方式有哪些?有什么区别?
rdb:基于快照的持久化,速度更快,一般用作备份,主从复制也是依赖于rdb持久化功能
aof:以追加的方式记录redis操作日志的文件。可以最大程度的保证redis数据安全,类似于mysql的binlog
1.准备redis.conf配置文件,确保开启rdb功能,配置参数如下
port 6379
daemonize yes
pidfile /data/redis.pid
loglevel notice
logfile "/data/redis.log"
dir /data/ # 规定问价存放目录
dbfilename dbmp.rdb # 规定文件名字
save 900 1
save 300 10
save 60 10000
2.启动redis服务端
redis-server redis.conf
3.插入redis数据,通过save命令,强制写入持久化rdb文件(此时还是使用rdb持久化)
set name leon
set age 11
set hobby girl
save
4.通过命令,切换到aof持久化,(注意此步只是临时生效,必须将AOF的配置,写入redis.conf)
127.0.0.1:6379> CONFIG set appendonly yes #开启AOF功能
OK
127.0.0.1:6379> CONFIG SET save "" #关闭RDB功能
OK
5.修改配置文件,添加aof参数,(此步重启后,rdb持久化完全切换aof持久化,且数据保持一致)
port 6379
daemonize yes
pidfile /data/redis.pid
loglevel notice
logfile "/data/redis.log"
dir /data/
appendonly yes
appendfsync everysec
6.重启redis服务
1.环境准备3个redis实例,<6381为主,6382,6383为从>
redis-6381.conf
redis-6382.conf
redis-6383.conf
2.三个配置文件的区别,仅仅是端口的不同修改即可
port 6381/6382/6383...
daemonize yes
pidfile /data/6381/redis.pid
loglevel notice
logfile "/data/6380/redis.log"
dbfilename dump.rdb
dir /data/6381
protected-mode no
2.启动三个redis实例
redis-server 6381.conf
redis-server 6382.conf
redis-server 6383.conf
3.此时可以查看redis身份信息,通过info参数。此时还未配置主从,因此都是master身份
redis-cli -p 6381 info Replication
redis-cli -p 6382 info Replication
redis-cli -p 6383 info Replication
4.配置从节点的身份<6381为主,6382,6383为从>,通过命令指明master节点信息即可
# 设置 6382 为从 6381 的从机
127.0.0.1:6382> SLAVEOF 127.0.0.1 6381
# 设置 6383 为从 6381 的从机
127.0.0.1:6383> SLAVEOF 127.0.0.1 6381
5.查看各个各个节点的身份信息
redis-cli -p 6381 info Replication 主节点 (role:master)
redis-cli -p 6382 info Replication 从节点 (role:slave)
redis-cli -p 6383 info Replication 从节点 (role:slave)
1.将主机的 redis 服务挂掉
ps -ef | grep redis
kill -9 主节点 6381
2.将6382去掉slave从机的身份
redis-cli -p 6382 slaveof no one
3.将6382设置新的主人,此时从机是6383
redis-cli -p 6383 slaveof 127.0.0.1 6382
# 通过配置 6383.conf 文件,给 6383 换主人
4.在配置文件中,添加一条参数即可(主节点不做配置,从节点指明主人的ip端口信息即可)
port 6383
daemonize yes
pidfile /data/6383/redis.pid
loglevel notice
logfile "/data/6380/redis.log"
dbfilename dump.rdb
dir /data/6383
protected-mode no
slaveof 127.0.0.1 6382
5.此时状态
6381.conf 服务已被手动挂掉(可以启动服务,指定主机,配置与 6383.conf 一样)
6382.conf 现在为主机
6383.conf 是 6382 的从机
# vim
redis-6381.conf
redis-6382.conf
redis-6383.conf
# 仅仅端口不同
port 6381
bind 0.0.0.0
daemonize yes
pidfile /data/6381/redis.pid
loglevel notice
logfile "/data/6381/redis.log"
dir /data/6381
# 其中6383、6383配置文件,端口确保不同,且配置上主从参数
slaveof 127.0.0.1 6379
[root@localhost /opt/redis-4.0.10]#redis-server redis-6381.conf
[root@localhost /opt/redis-4.0.10]#redis-server redis-6382.conf
[root@localhost /opt/redis-4.0.10]#redis-server redis-6383.conf
redis-cli -p 6381 info replication (master)
redis-cli -p 6382 info replication (slave)
redis-cli -p 6383 info replication (slave)
# vim
redis-sentinel-26381.conf
redis-sentinel-26382.conf
redis-sentinel-26383.conf
# 哨兵配置文件,一致,仅有端口区别
# Sentinel节点的端口
port 26381
dir /data/26381
logfile "26381.log"
daemonize yes
# 当前Sentinel节点监控 127.0.0.1:6381 这个主节点
# 2代表判断主节点失败至少需要2个Sentinel节点节点同意
# mymaster是主节点的别名
sentinel monitor mymaster 127.0.0.1 6381 2
# 每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达
# 如果超过30000毫秒30s且没有回复,则判定不可达
sentinel down-after-milliseconds mymaster 30000
# 当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点
# 原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1
sentinel parallel-syncs mymaster 1
# 故障转移超时时间为180000毫秒
sentinel failover-timeout mymaster 180000
redis-sentinel redis-sentinel-26381.conf
redis-sentinel redis-sentinel-26382.conf
redis-sentinel redis-sentinel-26383.conf
ps -ef | grep redis
# 三个 redis 实例
root 2295 1 0 15:02 ? 00:00:00 redis-server 0.0.0.0:6381
root 2300 1 0 15:02 ? 00:00:00 redis-server 0.0.0.0:6382
root 2305 1 0 15:02 ? 00:00:00 redis-server 0.0.0.0:6383
# 三个 redis 哨兵
root 2314 1 3 15:02 ? 00:00:00 redis-sentinel *:26381 [sentinel]
root 2319 1 0 15:02 ? 00:00:00 redis-sentinel *:26382 [sentinel]
root 2324 1 2 15:02 ? 00:00:00 redis-sentinel *:26383 [sentinel]
# 如果我们此时结束掉 6381
# 那么 6382 或者 6383 中的一个将自动变成 master
# 如果 6383 变成 master,6382 自动 salveof 6383,conf文件也被自动修改
# 如果再次启动 6381,6381 也将自动 slaveod 6383,conf文件也被自动修改
# 每个配置文件仅仅端口不一样
-rw-r--r--. 1 root root 135 Apr 14 15:50 redis-7001.conf
-rw-r--r--. 1 root root 135 Apr 14 15:54 redis-7002.conf
-rw-r--r--. 1 root root 135 Apr 14 15:54 redis-7003.conf
-rw-r--r--. 1 root root 135 Apr 14 15:55 redis-7004.conf
-rw-r--r--. 1 root root 135 Apr 14 15:55 redis-7005.conf
-rw-r--r--. 1 root root 135 Apr 14 15:55 redis-7006.conf
# 每个配置文件仅仅端口不一样
port 7001
bind 0.0.0.0
daemonize yes
pidfile /data/7001/redis.pid
loglevel notice
logfile "/data/7001/redis.log"
dir /data/7001
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-require-full-coverage no
# redis-server redis-700x.conf
root 2776 1 0 16:09 ? 00:00:00 redis-server 0.0.0.0:7001 [cluster]
root 2781 1 0 16:09 ? 00:00:00 redis-server 0.0.0.0:7002 [cluster]
root 2786 1 0 16:09 ? 00:00:00 redis-server 0.0.0.0:7003 [cluster]
root 2791 1 0 16:10 ? 00:00:00 redis-server 0.0.0.0:7004 [cluster]
root 2802 1 0 16:10 ? 00:00:00 redis-server 0.0.0.0:7005 [cluster]
root 2807 1 0 16:10 ? 00:00:00 redis-server 0.0.0.0:7006 [cluster]
1.下载源码
wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
2.解压缩ruby
tar -xvf ruby-2.3.1.tar.gz
3.编译安装ruby
./configure --prefix=/opt/ruby/
make && make install
4.准备ruby的环境变量
cp ./bin/ruby /usr/local/bin
cp ./bin/gem /usr/local/bin
5.下载ruby的软件包管理工具
wget http://rubygems.org/downloads/redis-3.3.0.gem
6.安装ruby操作redis的模块
gem install -l redis-3.3.0.gem # 安装ruby操作redis的模块
7.查看ruby语言的包邮哪些
gem list -- check redis gem
8.配置环境变量redis-trib.rb,用于创建redis-cluster
find /opt -name redis-trib.rb
9.配置环境变量,用于快速执行redis-trib.rb这个命令
cp /opt/redis-4.0.10/src/redis-trib.rb /usr/local/bin
10.启动六个redis实例之后,通过redis-trib.rb命令,一键创建redis-cluster集群功能
# 其实就是分配槽位,分配主从关系
# 通过这个命令,创建集群功能
# 1 代表每个主只有一个从
# 自动给后面6个节点,分配主从关系,7001、7002、7003是主节点,7004、7005、7006是从节点
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
11.完成之后可以查看主从身份信息
edis-cli -p 7001 info replication (master)
edis-cli -p 7002 info replication (master)
edis-cli -p 7003 info replication (master)
edis-cli -p 7004 info replication (slave)
edis-cli -p 7005 info replication (slave)
edis-cli -p 7006 info replication (slave)
12.redis-cli -p 7001 -c 登录到指定 redis
# -c 代表集群方式登录 redis,必须加,不加报错
# 设置 key
# 自动根据哈希规则将 key 对应的值分发到不同的 redis实例 里面
13.在任意节点都可以通过 get 取到 set 的值,即使 key 在不同的 redis实例 里面
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。