标签:虚拟机
l 系统环境: RHEL7l 硬件环境:虚拟机
l 项目描述:为解决网站访问压力大的问题,需要搭建高可用、负载均衡的 web集群。
l 架构说明:整个服务架构采用功能分离的方式部署。后端采用2台mysql 数据库,实现主从结构以及读写分离。中间LAMP网站服务器共有2台, 前端 2台LVS服务器通过keepalived实现高可用负载均衡。
l 关键技术:keepalived 、lvs DR模式 、mysql主从 、maxscale 读写 分离
l 项目拓扑图:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
注:所有系统 环境 禁用selinux和防火墙
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
l <部署3台数据库服务器>:
mysql_11 : 192.168.4.11 作为数据库主服务器
mysql_22 : 192.168.4.22 作为数据库从服务器
mysql_77 : 192.168.4.77 作为数据库读写分离服务器
l 步骤一:创建安装包存放目录11、22、77
mkdir /root/tar_home
l 步骤二:下载数据库软件包,这里我们选择mysql
下载地址:https://dev.mysql.com/downloads/mysql/ 注意:需要注册一个账号
l 备注:我们这里有5.7.17版本的,就不浪费时间下载5.7.21版本了。
l 步骤三:通过xftp传输mysql安装包,然后开始安装11、22同样的配置步骤:
l [root@mysql_11 ~]# rm haha/mysql-community-server-minimal-5.7.17-1.el7.x86_64.rpm
rm:是否删除普通文件 "haha/mysql-community-server-minimal-5.7.17-1.el7.x86_64.rpm"?y
#删除最小化安装文件
l [root@mysql_11 ~]# which createrepo #查看有没有createrepo命令 没有则安装提供命令的安装包
/usr/bin/createrepo
l [root@mysql_11 ~]# rpm -q createrepo
createrepo-0.9.9-23.el7.noarch
l [root@mysql_11 ~]# createrepo haha/ #创建索引文件repodata
Spawning worker 0 with 11 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
l [root@mysql_11 ~]# vim /etc/yum.repos.d/hehe.repo #编辑yum源
l [root@mysql_11 ~]# yum clean all
l [root@mysql_11 ~]# yum repolist
l [root@mysql_11 ~]# yum -y install mysql-community-* #安装mysql数据库
l 启动服务并设置开机自启,并验证
[root@mysql_11 ~]# systemctl start mysqld
[root@mysql_11 ~]# systemctl enable mysqld
l [root@mysql_11 ~]# cat /var/log/mysqld.log | grep password #查看mysql初始密码
2018-03-02T11:37:27.225479Z 1 [Note] A temporary password is generated for root@localhost: 52hjzs/FZrfu
l [root@mysql_11 ~]# mysql -uroot -p'52hjzs/FZrfu' #并进行首次登录
设置数据库密码:
[root@mysql_11 ~]# vim /etc/my.cnf ——》修改数据库主配置文件
[mysqld]
validate_password_policy=0 ——》修改密码的验证策略(0表示只检查密码长度,默认8位长度)
validate_password_length=6 ——》修改密码的默认长度
[root@mysql_11 ~]# systemctl restart mysqld ——》重启数据库
[root@mysql_11 ~]# mysql -uroot -p'8tuwu8<qN7m8' ——》用初始密码登录数据库
mysql> alter user root@"localhost" identified by "123456"; ——》设置新密码
[root@mysql_11 ~]# mysql -uroot -p123456 ——》新密码登录数据库
mysql>
l 备注:192.168.4.22步骤同上
l 配置192.168.4.11为主数据库;192.168.4.22为从数据库
添加一个授权用户
[root@mysql_11 ~]# mysql -uroot -p123456
mysql> grant replication slave on *.* to tom@"192.168.4.22" identified by "123456";
启用binlog日志
[root@mysql_11 ~]# vim /etc/my.cnf
[mysqld]
server_id=11
log-bin=master11
binlog-format="mixed"
validate_password_policy=0
validate_password_length=6
重启数据库,使配置生效
[root@mysql_11 ~]# systemctl restart mysqld
[root@mysql_11 ~]# ls /var/lib/mysql/master11.*
/var/lib/mysql/master11.000001 /var/lib/mysql/master11.index
查看正在使用的binlog日志文件
[root@mysql_11 ~]# mysql -uroot -p123456
mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master11.000001 | 154 | | | |
+-----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
l 配置192.168.4.11为主数据库;192.168.4.22为从数据库
修改配置文件,指定server_id
[root@mysql_22 ~]# vim /etc/my.cnf
[mysqld]
server_id=22
validate_password_policy=0
validate_password_length=6
[root@mysql_22 ~]# systemctl restart mysqld
指定自己是192.168.4.11的从库
mysql> change master to
-> master_host="192.168.4.11",
-> master_user="tom",
-> master_password="123456",
-> master_log_file="master11.000001",
-> master_log_pos=154;
mysql> show slave status\G;
……
Slave_IO_Running: No
Slave_SQL_Running: No
……
mysql> start slave;
mysql> show slave status\G;
……
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
……
l 验证192.168.4.11和192.168.4.22互为主从
192.168.4.11
192.168.4.22
192.168.4.11 创建库aa
192.168.4.22 查看
证明!!! 192.168.4.11与192.168.4.22互为主从
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
开始配置192.168.4.77 作为数据库读写分离服务器
注!!! 读写分离服务器只需要有mysql命令即可,步虚要安装mysql数据库服务
准备读写分离服务包:
步骤一:安装maxscale服务包
步骤二:修改主配置文件/etc/maxscale.cnf
[server1]
type=server
address=192.168.4.11
port=3306
protocol=MySQLBackend
[server2]
type=server
address=192.168.4.22
port=3306
protocol=MySQLBackend
[MySQL Monitor] ——》数据库 监视
type=monitor
module=mysqlmon
servers=server1,server2
user=scalemon ——》该用户: 监控数据库服务器的运行状态和主从状态
passwd=123456
monitor_interval=10000
#[Read-Only Service] ——》定义只读服务器,加#注释,本次不使用
#type=service
#router=readconnroute
#servers=server1
#user=myuser
#passwd=mypwd
#router_options=slave
[Read-Write Service] ——》读写分离服务
type=service
router=readwritesplit
servers=server1,server2
user=maxscale ——》该用户:检查接收客户端的连接请求时,连接的用户名和密码在数据库服务器上是否存在
passwd=123456
max_slave_connections=100%
[MaxAdmin Service] ——》管理服务
type=service
router=cli
…… ……
#[Read-Only Listener] ——》只读服务,加 # 注释,本次不使用
#type=listener
#service=Read-Only Service
#protocol=MySQLClient
#port=4008
…… ……
[Read-Write Listener] ——》读写分离服务
type=listener
service=Read-Write Service ——》当有人来访问11的端口4006时,转到上面的读写分离服务Read-Write Service
protocol=MySQLClient
port=4006
[MaxAdmin Listener]
type=listener
service=MaxAdmin Service
protocol=maxscaled
socket=default
port=4010
步骤三:根据读写分离服务器(192.168.4.77)的配置,在数据库服务器(192.168.4.11 、 192.168.4.22)上添
加相对应的授权用户
添加授权监控用户和路由用户192.168.4.11
[root@mysql_11 ~]# mysql -uroot -p123456
mysql> grant replication slave,replication client on *.* to scalemon@"%" identified by "123456";
Query OK, 0 rows affected, 1 warning (0.15 sec)
mysql> grant select on *.* to maxscale@'%' identified by "123456";
Query OK, 0 rows affected, 1 warning (0.15 sec)
l 因为192.168.4.11和192.168.4.22主从同步的关系,所以192.168.4.22上同步授权用户:
l 但没有tom用户,因为这是定义主从关系的授权用户
步骤四:在读写分析服务器192.168.4.77 上启动maxscale服务:
[root@maxscale_77 ~]# maxscale -f /etc/maxscale.cnf ——启动服务
[root@maxscale_77 ~]# netstat -anptul | grep 4006 ——》读写分离端口
[root@maxscale_77 ~]# netstat -anptul | grep 4010 ——》管理端口
如何验证读写分离 !!!!!!
方法:因为是主从关系,所以在从数据库上设置一个数据与主数据库不同,,,当客户端进行读的操作时,如果看到不同的那个数据,说明“读”的流量被分到了从数据库上,,,当客户端进行的的操作后,,,分别查看主从数据库,如果都有该数据,说明“写”的数据被分到了主数据库上,所以从数据库才能同步。。。
主数据库192.168.4.11:
mysql> grant all on *.* to bob@'%' identified by "123456"; #授权一个客户端专用用户
从数据库192.168.4.22:
确认读写分离服务器192.168.4.77是否开启,以及是否具有mysql命令:
客户端:192.168.4.254:
l 先确认具有mysql命令
l 确认说明“读”的流量被分到了从数据库上
l 确认“写”的数据被分到了主数据库上
192.168.4.11 和192.168.4.22、
未完待续。。。
LVS+keepalived高可用负载均衡集群部署(一) ----数据库的读写分离
标签:虚拟机
原文地址:http://blog.51cto.com/13473916/2082468