mycat主从复制读写分离nginx负载均衡请求转发
Posted 保护胖仔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mycat主从复制读写分离nginx负载均衡请求转发相关的知识,希望对你有一定的参考价值。
1.主从复制
1.现有单体架构存在的问题
随着互联网发展和兴起,当大量请求涌入的时候,单节点的应用服务器(tomcat)和单节点的数据库服务器(mysql),会因为处理速度过慢,或者出现极端情况导致宕机.
单节点故障
当一台服务器宕机,导致整个应用的瘫痪
单节点压力
2.解决 :单节点故障,解决高并发的问题
3.集群(cluster):及众多的服务器去完成一项工作
节点(node):指一台服务器
4.单节点的数据库服务器需要解决的问题
第一个问题 负载均衡
第二个问题 数据同步
1.搭建主从复制
1.配置网卡
只需要修改静态网卡
2.crt连接
3.关闭网络防火墙
4.安装mysql并开启mysql远程访问权限
5.搭建主从复制
a.配置mysql配置文件 /etc/my.cnf
server-id=1 唯一标识
log-bin=mysql-bin 日志文件的名字
log-slave-updates 从机随着日志文件的变化而变化
slave-skip-errors=all 从机跳过错误的sql语句
b.测试配置文件是否配置成功
重新启动mysql服务
systemctl restart mysqld
登录到mysql客户端
mysql -uroot -proot
检测配置是否生效
SHOW VARIABLES like 'server_id';
6.配置主从复制
.关于该问题的解决方案其实很简单,停掉备库实例,删除备库的auto.cnf文件,启动备库实例,此时备库就会产生一个新的auto.cnf文件(产生新的UUID)。重启mysql
find / -name "auto.cnf"
rm -rf /var/lib/mysql/auto.cnf
a.查看主机状态
show master status;
b.在所用的从机中加入如下配置
change master to
master_host='192.168.65.101',
master_user='root',
master_password='root',
master_log_file='mysql-bin.000001',
master_log_pos=120;
c.开启从机同步
start slave;
d.查看从机的同步状态
show slave status;
如果需要停掉从机使用 stop slave;
如果从机两个选项都是yes 说明同步成功
2.搭建读写分离
3. mycat 的下载与安装
1. 从官网下载mycat
wget <http://dl.mycat.io/>1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
2. 解压Mycat压缩包
3. 移动到usr目录中
4. 配置mycat环境变量(推荐配置/etc/profile)
5. 配置mycat中conf下的配置schema.xml
<!-- 定义MyCat的逻辑库 -->
<schema name="给mycat起的逻辑名称" checkSQLschema="false" sqlMaxLimit="100" dataNode="testNode"></schema>
<!-- 定义MyCat的数据节点 -->
<dataNode name="testNode" dataHost="dtHost" database="真是数据库的名称" />
<dataHost name="dtHost" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100"> <heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="192.168.28.128:3306" user="root" password="root">
<!-- can have multi read hosts -->
<readHost host="hostS1" url="192.168.28.129:3306" user="root" password="root" /> </writeHost>
</dataHost>
6. 配置登陆mycat的权限server.xml
<system>
<!-- 这里配置的都是一些系统属性,可以自己查看mycat文-->
<property name="defaultSqlParser">druidparser</property>
<!-- mycat6要将utf8mb4改为utf8-->
<property name="charset">utf8mb4</property>
</system>
<user name="root">
<property name="password">root</property>
<property name="schemas">mycat对应的逻辑名</property>
</user>
7. 启动mycat
mycat start
8. 测试mycat
jdbc:mysql://192.168.216.6:8066/mycat
mycat是schema.xml的逻辑名
8066是mycat的端口号
192.168.216.6是mycat所在的虚拟机
<!-- 定义MyCat的逻辑库 -->
<schema name="给mycat起的逻辑名称" checkSQLschema="false" sqlMaxLimit="100" dataNode="testNode"></schema>
<!-- 定义MyCat的数据节点 --> <dataNode name="testNode" dataHost="dtHost" database="真是数据库的名称" />
<dataHost name="dtHost" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="192.168.28.128:3306" user="root" password="root"> <!-- can have multi read hosts -->
<readHost host="hostS1" url="192.168.28.129:3306" user="root" password="root" /> </writeHost>
</dataHost>
2.搭建应用服务器集群
1. 准备应用服务器 3台tomcat
a.三台tomcat 在同一个服务器上,保证端口不一致
b.创建3个虚拟机,并且安装tomcat
2. 配置网卡
3. 关闭防火墙
4. 安装tomcat
5. 网页访问
6. 安装nginx
a. 下载nginx安装包
b. 上传到linux系统中
c. 解压tar
d. 使用./configure检查环境的完整性
e. 安装gcc
报错cc is not found
yum install -y gcc
报错 error: the HTTP rewrite module requires the PCRE library.
yum install -y pcre-devel
error: the HTTP gzip module requires the zlib library.
yum install -y zlib-devel
f .编译并安装nginx
make 编译
make install 安装
make && make install 编译并安装
默认安装目录为 /usr/local/nginx
g. 进入nginx的安装目录
conf 配置文件目录
html 静态页面目录
logs 日志文件目录
sbin 可执行文件目录
./nginx
启动nginx服务
./nginx -s stop
关闭nginx
h.访问nginx的web页面
http://192.168.65.10:80
i.配置nginx管理tomcat服务器
vim /usr/local/nginx/conf/nginx.conf
1.配置tomcat的ip和端口的列表
upstream tomcat-servers
server 192.168.174.101:8989;
server 192.168.174.102:8989;
server 192.168.174.103:8989;
注意:不要放置在server标签的内部
2.配置nginx代理tomcat-servers
location /
proxy_pass http://tomcat-servers;
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_next_upstream http_502 http_504 error timeout invalid_header;
scp index.jsp root@192.168.65.9:/usr/tom3/webapps/ROOT 远程拷贝
nginx的负载均衡策略
轮询:
每个请求会按时间顺序逐一分配到不同的后端服务器。(默认)
weight(权重):
权重方式,在轮询策略的基础上指定轮询的几率。
配置方式
weight=2;
ip_hash(解决session共享的问题)
会根据当前服务器的ip取hash值然后取模运算
ip_hash;
least_conn
把请求转发给连接数较少的后端服务器。
least_conn;
以上是关于mycat主从复制读写分离nginx负载均衡请求转发的主要内容,如果未能解决你的问题,请参考以下文章