Linux
学习笔记摘抄自b站up主编程不良人(良心推荐)。
1. MySQL主从复制架构
1.1 现有架构存在问题
- 单一架构:
整个系统有一个应用服务器和一个数据库服务器对外提供服务架构称之为单一架构。 - 存在的问题:
现有的架构中数据库的数据非常重要,在现有架构中如果出现硬件故障或者自然灾害都会导致系统中数据可能全部丢失,会造成企业一定的损失。 - 主从复制架构:
主从复制架构核心解决的是数据的冗余备份问题。
1.2 主从复制架构的搭建
0. 架构规划
master 主节点
slave 从节点
1. 修改mysql的配置文件
[root@localhost mysql]# vim /etc/my.cnf
2. 分别在配置文件中加入如下配置
mysql(master):
server-id=1
log-bin=mysql-bin
log-slave-updates
slave-skip-errors=all
msyql(slave):
server-id=2
log-bin=mysql-bin
log-slave-updates
slave-skip-errors=all
注意:两个机器的server-id不能一致。
3. 重启mysql服务
systemctl restart mysqld
4. 登录mysql执行如下命令检测配置是否生效
SHOW VARIABLES like 'server_id';
5. 登录master节点执行如下命令
show master status;
6. 登录从节点执行如下命令:
change master to
master_host='(此处写主节点的主机号)',
master_user='(主节点账户名)',
master_password='(主节点密码)',
master_log_file='(第五步中的File Set)',
master_log_pos=(第五步中的Position);
7. 开启从节点
start slave;
8. 查看从节点状态
show slave status\G;
************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.15.0.9
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 120
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
注意:
1.出现 Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes 说明成功,
2.如果在搭建过程出现错误,可以查看查看错误日志文件 cat /var/log/mysqld.log
9. 通过客户端工具进行测试
10. 关闭主从复制(在从节点执行)
stop slave;
- 注意:如果出现Slave I/O: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: 1593错误,请执行如下命令,rm -rf /var/lib/mysql/auto.cnf删除这个文件,之所以出现会出现这样的问题,是因为我的从库主机是克隆的主库所在的主机,所以auto.cnf文件中保存的UUID会出现重复。
2. 集群 Cluster
集群:使用一组服务节点同时对系统提供服务的过程称之为集群。
应用服务器集群、数据库服务器集群、Redis集群、ES…
3. 数据库集群之读写分离架构
读写分离架构核心解决的是并发压力问题。
3.1 MYCAT 引言
基于阿里开源的Cobar产品而研发,Cobar的稳定性、可靠性、优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远。业界优秀的开源项目和创新思路被广泛融入到MYCAT的基因中,使得MYCAT在很多方面都领先于目前其他一些同类的开源项目,甚至超越某些商业产品。
MYCAT背后有一支强大的技术团队,其参与者都是5年以上资深软件工程师、架构师、DBA等,优秀的技术团队保证了MYCAT的产品质量。MYCAT并不依托于任何一个商业公司,因此不像某些开源项目,将一些重要的特性封闭在其商业产品中,使得开源项目成了一个摆设。
3.2 安装MYCAT
-
官网下载MYCAT。
-
解压MYCAT:
tar -zxvf (MYCAT文件)
-
查看解压之后目录]
[root@localhost mycat]# ll
总用量 12
drwxr-xr-x. 2 root root 190 10月 14 22:58 bin drwxrwxrwx. 2 root root 6 3月 1 2016 catlet drwxrwxrwx. 4 root root 4096 10月 14 22:58 conf drwxr-xr-x. 2 root root 4096 10月 14 22:58 lib drwxrwxrwx. 2 root root 6 10月 28 2016 logs -rwxrwxrwx. 1 root root 217 10月 28 2016 version.txt
-
把mycat文件移动到/usr目录:
mv mycat/ /usr/
-
配置mycat中conf下的配置schema.xml:
<!-- 定义MyCat的逻辑库 --> <schema name="test_schema" checkSQLschema="false" sqlMaxLimit="100" dataNode="testNode"></schema> <!-- 定义MyCat的数据节点 --> <dataNode name="testNode" dataHost="dtHost" database="test" /> <dataHost name="dtHost" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!--写节点--> <writeHost host="hostM1" url="192.168.28.128:3306" user="root" password="root"> <!--从节点--> <readHost host="hostS1" url="192.168.28.129:3306" user="root" password="root" /> </writeHost> </dataHost>
-
配置登陆mycat的权限server.xml:
<system> <!-- 这里配置的都是一些系统属性,可以自己查看mycat文--> <property name="defaultSqlParser">druidparser</property> <property name="charset">utf8mb4</property> </system> <user name="root"> <property name="password">root</property> <property name="schemas">test_schema</property> </user>
-
启动mycat:
./mycat console
-
查看日志:
tail -f ../logs/mycat.log
-
数据库连接配置,测试。
4. 应用服务器集群
搭建应用服务器集群存在的问题:
- 如何将某一时刻请求均分到后端服务集群中某一个节点,负载均衡Load Balance。
- 如何实现在应用服务器集群环境中session共享的问题。
- tomcat之间session同步。
- 使用Redis或cache DB实现session共享(推荐)。
5. 安装 Nginx
5.1 Nginx引言
Nginx是一款轻量级的Web服务器反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:京东、新浪、网易、腾讯、淘宝等。
5.2 Nginx 的安装
-
安装必要依赖:
yum install -y gcc pcre-devel zlib-devel
。 -
将Nginx上传到linux中,并解压缩:
tar -zxvf nginx-1.11.1.tar.gz
。 -
查看Nginx安装目录:
[root@localhost nginx-1.11.1]# ls
。 -
在Nginx安装目录中执行如下命令:(指定安装位置)。
./configure --prefix=/usr/nginx
-
执行上述命令后,执行如下命令:
make && make install
。 -
启动nginx,进入nginx安装目录的sbin目录中执行:
./nginx
。 -
在windows中浏览器访问,可以看到nginx欢迎页面:(注意:关闭网络防火墙)。
6. Tomcat 负载均衡集群
-
准备多个Tomcat:
tar -zxvf apache-tomcat-8.5.46.tar.gz #解压缩一个新的tomcat安装包 mv apache-tomcat-8.5.46 tom1 #将名称改为tomcat1 cp -r tomcat1/ tom2 #复制一份 cp -r tomcat1/ tom3 #复制一份
-
修改tomcat1端口号:(伪分布式)
vim tom1/conf/server.xml
关闭端口:
HTTP协议端口:
AJP协议端口:
tom2和tom3做同样的改端口操作。 -
将多个tomcat启动:
tom1/bin/startup.sh tom2/bin/startup.sh tom3/bin/startup.sh
-
在windows中分别访问tomcat,都看到主页代表启动成功,注意要关闭网络防火墙。
-
将多个tomcat配置到nginx的配置文件中:
在server标签上加入如下配置,在location /替换如下配置:upstream tomcat-servers { server (IP地址):(tomcat端口号); server 10.15.0.8:8889; server 10.15.0.8:8890; }
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; }
-
进入nginx安装目录sbin目录启动nginx:
./nginx -c /usr/nginx/conf/nginx.conf
-
访问nginx,则可以看到其中一个tomcat画面。
7. Nginx 负载均衡策略
-
轮询:
说明: 默认策略,每个请求会按时间顺序逐一分配到不同的后端服务器。 -
weight 权重:
说明: weight参数用于指定轮询几率,weight的默认值为1,;weight的数值与访问比率成正比。upstream tomcat-servers { server localhost:8080 weight=2; server localhost:8081; server localhost:8082 backup; }
注意:权重越高分配到需要处理的请求越多。此策略可以与least_conn和ip_hash结合使用主要用于后端服务器性能不均。
-
ip_hash:
说明:指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题。upstream tomcat-servers { ip_hash; #保证每个访客固定访问一个后端服务器 server localhost:8080; ...... }
-
least_conn
说明: 把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。upstream tomcat-servers{ least_conn; #把请求转发给连接数较少的后端服务器 server localhost:8080; }