mycat读写分离和ansible模块使用,redis编译安装

1、MyCAT中间件服务实现读写分离

官网:mycat官网
下载:mycat版本下载

  • 原理:Mycat首先会创建一个代理数据库,默认名字是TESTDB,客户端连接的也是这个数据库,它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。

流程图
在这里插入图片描述

Mycat的特性:

1、支持前端作为MySQL通用代理
2、后端JDBC方式支持Oracle,DB2,SQL Server,mongodb,巨杉
3、基于心跳的自动故障切换,支持读写分离
4、支持MySQL Cluster,Galera,Percona,cluster集群
5、支持数据的多片自动路由与聚合
6、支持sum,count,max等常用的聚合函数,支持跨库分页
7、支持库内分表,支持单库内部任意join全局表,支持跨库2表join
8、基于caltlet的多表join
9、支持通过全局表,ER关系的分片策略,实现了高效的多表join查询

读写分离配置:
环境搭建:

系统版本Centos7.8
mysql版本5.6.51
mycat版本1.6.7
主mysql192.168.116.145
从mysql192.168.116.146
mycat服务器192.168.116.130
客户端192.168.116.131
  1. 主从环境部署数据库
    主从原理介绍:主从原理
主从数据库版本的yum源

vi /etc/yum.repos.d/mysql.repo
[mysql]
name=mysql5.6
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.6-community-el6-x86_64/
gpgcheck=0

yum install mysql-community-server -y  主从都安装相同版本的数据库
  1. 主mysql配置
vi /etc/my.cnf
[mysqld]
server-id=1
log-bin
general_log=ON                                #开启这个是为了检验读写功能,实际使用可以不加
general_log_file=/var/log/mysql/general.log   #开启这个是为了检验读写功能,实际使用可以不加

mkdir /var/log/mysql -p                                            创建通用日志目录
chown mysql.mysql /var/log/mysql                                   授权通用日志目录权限
systemctl start mysqld                                             启动服务

mysql命令行配置
show master logs;                                                  确认创建账户前二进制进度
grant replication slave on *.* to aa@'%' identified by 'aa1234';   创建主从账户
grant all on *.* to mycat@'%' identified by 'aa1234';              创建mycat的账户
create database mycat;                                             创建mycat代理的真实数据库mycat
  1. 从mysql配置
vi /etc/my.cnf
[mysqld]
server-id=2
log-bin
general_log=ON                                #开启这个是为了检验读写功能,实际使用可以不加
general_log_file=/var/log/mysql/general.log   #开启这个是为了检验读写功能,实际使用可以不加

mkdir /var/log/mysql -p                                            创建通用日志目录
chown mysql.mysql /var/log/mysql                                   授权通用日志目录权限
systemctl start mysqld                                             启动服务

mysql命令行配置:

CHANGE MASTER TO
  MASTER_HOST='192.168.116.145',           
  MASTER_USER='aa',                  
  MASTER_PASSWORD='aa1234',             
  MASTER_PORT=3306,                        
  MASTER_LOG_FILE='mysqld-bin.000001',           
  MASTER_LOG_POS=120;  
  start slave;                                                     启动主从配置
  show slave status\G                                              确认主从成功

在这里插入图片描述

  1. mycat服务器配置:
安装Java环境
yum install -y java  

下载mycat包
wget http://dl.mycat.org.cn/1.6.7.5/2021-6-16/Mycat-server-1.6.7.5-release-20210616151418-linux.tar.gz

解压压缩包到目录下
tar xf Mycat-server-1.6.7.5-release-20210616151418-linux.tar.gz -C /usr/local/

将目录下的工具定义到本地变量
echo 'PATH=/usr/local/mycat/bin:$PATH' >/etc/profile.d/mycat.sh
source /etc/profile.d/mycat.sh
ss -tnl                                             确认端口启动,服务正常运行

在这里插入图片描述

vi /usr/local/mycat/conf/server.xml  查看mycat默认配置文件

        <user name="root" defaultAccount="true">
                <property name="password">123456</property>
                <property name="schemas">TESTDB</property>
                <property name="defaultSchema">TESTDB</property>

TESTDB    是mycat的生成的代理数据库
root      TESTDB代理数据库的账户
123456    TESTDB代理数据库的密码

在这里插入图片描述

mycat进行读写分离服务的配置

vi /usr/local/mycat/conf/schema.xml
#删除文件其他内容,只保留这些
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1" ></schema>
        <dataNode name="dn1" dataHost="localhost1" database="mycat" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
          writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost  host="host1" url="192.168.116.145:3306" user="mycat" password="aa1234">
        <readHost host="host2" url="192.168.116.146:3306" user="mycat" password="aa1234"/>
        </writeHost>
        </dataHost>
</mycat:schema>

mycat restart             重启mycat使读写分离生效
  1. 客户端测试和主从数据库查看通用日志
默认mycat会生成一个代理数据库,这个数据库只是代理作用,跟真实的主从mysql数据库没关系
mysql -uroot -p123456 -h192.168.116.130 -P8066   连接代理数据库
show databases;                                  默认只有TESTDB数据库,没有其他数据库

在这里插入图片描述

use TESTDB;                              进入代理的数据库中,实际就是进入到上面主数据库新建的mycat这个数据库了
create table aa(id int,name char(5));    新建表格
insert aa(id,name)values(1,'aa');        插入数据,进行写操作
select * from aa;                        查看数据,进行读操作
  1. 主数据库查看通用日志
tail -F /var/log/mysql/general.log         可以看到插入数据成功
select user()                              心跳配置,每隔10秒mycat就查询后台数据库,判断数据库的up/down

在这里插入图片描述

  1. 从数据库查看通用日志
tail -F /var/log/mysql/general.log 
其中这个是主数据库复制过来从数据库的,所以有下面这个写操作
BEGIN
insert aa(id,name)values(1,'aa')
COMMIT /* implicit, from Xid_log_event */
select * from aa          查询表格时,只有从数据库有记录,主数据库没记录,这就说明读写分离成功

在这里插入图片描述

2、ansible常用模块总结

基本介绍:

  • ansible官网:ansible
  • 安装方式:yum install -y ansible
  • ansible主配置文件:/etc/ansible/ansible.cfg
  • ansible控制节点的配置文件:/etc/ansible/hosts

环境:

系统版本Centos7.8
ansible控制节点192.168.116.145
被控制节点1192.168.116.146
被控制节点2192.168.116.147

ansible控制服务器配置:

 ansible是通过免密码登录节点进行控制的,需要分发秘钥
 ssh-keygen                    一直回车就行
 ssh-copy-id 192.168.116.146   分发秘钥给节点1
 ssh-copy-id 192.168.116.147   分发秘钥给节点2

编辑文件,设置需要控制的节点
vi /etc/ansible/hosts        最后一行添加
[node]
192.168.116.146
192.168.116.147
  1. ping模块:
ansible all -m ping      确认主机联通性
all代表全部主机
-m表示指定模块名字

在这里插入图片描述
2. shell 系统命令模块:

ansible all -m shell -a 'ifconfig ens33' 使用shell命令返回内容
-a '': 指定传输的参数内容

在这里插入图片描述
3. copy 复制模块:

将ansible控制服务器的文件分发给节点
ansible node -m copy -a 'src=/etc/hosts dest=/root/etc.hosts owner=root group=root mode=600'  

node 为/etc/ansible/hosts  定义的节点组名
-m copy  指定使用copy模块
-a ''         指定参数
src=/etc/hosts  ansible控制服务器的文件
dest=/root/etc.hosts 目标节点生成的文件
owner=root        节点新生成文件的属主
group=root        节点新生成文件的属组
mode=600         节点新生成文件的权限

ansible node -m shell -a 'ls -l /root'    确认分发文件成功

在这里插入图片描述

  1. fetch 拉取节点文件模块
从节点拉取文件到控制服务器上,只能拉取文件,不能拉取目录

ansible all -m fetch -a 'src=/etc/hosts dest=/root/'
ll /root                    本地确认拉取成功

在这里插入图片描述

  1. file 文件管理模块
 对节点新建文件夹
 
ansible all -m file -a 'path=/root/test state=directory owner=root group=root mode=700'

在这里插入图片描述

对节点新建文件,不设置文件属性,默认就是root

ansible all -m file -a 'path=/root/test/test.txt state=touch'
ansible all -m shell -a 'ls -l /root/test'   确认文件生成

在这里插入图片描述

ansible all -m file -a 'dest=/root/test/test.txt state=absent'  删除节点的文件
ansible all -m shell -a 'ls -l /root/test'                     确认文件被删除

在这里插入图片描述

  1. yum 服务安装模块
ansible all -m yum -a 'name=httpd'      安装服务,多个服务中间用逗号隔开

在这里插入图片描述

  1. service 服务管理模块
    ansible all -m service -a ‘name=httpd state=started enabled=yes’ 对安装的服务进行开启,开机启动
    在这里插入图片描述
  2. group 用户组管理模块
ansible all -m group -a 'name=aa gid=1011'    对节点新建用户组aa

在这里插入图片描述

  1. user 用户管理模块
ansible all -m user -a 'name=aa comment="test" uid=1011 home=/home/aa group=aa'   新建用户aa
注意:用户组需要先创建才能创建用户

在这里插入图片描述

ansible all -m user -a 'name=aa state=absent remove=yes'  删除用户及其家目录

在这里插入图片描述
其他模块有:cron计划任务模块,script脚本文件使用模块,setup系统信息输出模块等

3、ansible-playbook批量安装httpd,按主机名提供不同的index.html(如node1的index.html欢迎页面为welcome node1)

节点配置:

节点1配置主机名:
hostnamectl set-hostname node1

节点2配置主机名:
hostnamectl set-hostname node2

ansible控制服务器配置:

mkdir /ansible/{xml,conf} -p                         创建配置目录
cd  /ansible
vi conf/index.html                                   创建网站主页文件,添加下面内容
{{ ansible_hostname }}  # 这个变量是setup模块定义的主机名模块,直接可以调用

vi xml/httpd.xml                                     创建xml文件,注意空格和对齐
- hosts: node
  remote_user: root
  tasks:
     - name: install httpd
       yum: name=httpd
     - name: copy index.html
       template: src=/ansible/conf/index.html dest=/var/www/html/index.html owner=apache group=apache mode=644
     - name: start httpd
       service: name=httpd state=started enabled=yes

ansible-playbook -C httpd.xml                      检查xml文件语法是否正确
ansible-playbook httpd.xml                         对节点开始配置

在这里插入图片描述
ansible控制器进行检查节点是否配置成功

ansible all -m shell -a 'cat /var/www/html/index.html'  查看网页文件内容
curl 192.168.116.146                                    访问节点1网站
curl 192.168.116.147                                    访问节点2网站

在这里插入图片描述

4、编译安装redis

redis官网:redis官网
redis版本下载:redis

Redis 特性 :

  1. 速度快: 10W QPS(并发),基于内存,C语言实现
  2. 单线程,6.0版本以前都是单线程
  3. 键值匹配,数据可持久化
  4. 支持多种数据结构
  5. 支持多种编程语言
  6. 功能丰富: 支持Lua脚本,发布订阅,事务,pipeline等功能
  7. 代码短小精悍,开发容易,不依赖外部库,使用简单
  8. 支持主从复制
  9. 支持高可用和分布式

编译步骤:

yum install -y gcc jemalloc-devel                             安装依赖包和环境
wget https://download.redis.io/releases/redis-5.0.7.tar.gz    下载源码包
tar xf redis-5.0.7.tar.gz                                     解压压缩包
cd redis-5.0.7                                                进入目录
make PREFIX=/usr/local/redis install                          编译并安装到目录下

将redis的工具定义到本地变量
echo 'PATH=/usr/local/redis/bin:$PATH' > /etc/profile.d/redis.sh  
source /etc/profile.d/redis.sh

创建redis的配置目录及其他目录
mkdir /usr/local/redis/{etc,log,data,run} -p

将源码包的配置文件复制到安装目录下
cp redis.conf /usr/local/redis/etc/

创建redis账户
useradd -r -s /sbin/nologin redis

把redis安装的目录及子目录权限设置为redis
chown redis.redis -R /usr/local/redis

添加redis服务到systemd守护进程,设置开机启动
vi /usr/lib/systemd/system/redis.service 
#添加下面内容
[Unit]
Description=Redis persistent key-value database
After=network.target
[Service]
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf --supervised systemd
ExecStop=/bin/kill -s QUIT $MAINPID
ExecReload=/bin/kill -s QUIT $MAINPID;/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf --supervised systemd
Type=notify
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target

systemctl daemon-reload                重新加载systemd配置文件
systemctl start redis                  启动redis
systemctl enable redis                 开启开机自启redis
redis-cli                              进入交互界面
set a 1                                新增键和值
get a                                  获取值,确认编译完成

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值