LVS+keepalived高可用负载均衡集群部署 ----数据库的读写分离

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LVS+keepalived高可用负载均衡集群部署 ----数据库的读写分离相关的知识,希望对你有一定的参考价值。

l  系统环境: RHEL7  

l  硬件环境:虚拟机

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  [[email protected]_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"

 #删除最小化安装文件

 

 

l  [[email protected]_11 ~]# which createrepo     #查看有没有createrepo命令  没有则安装提供命令的安装包

/usr/bin/createrepo

l  [[email protected]_11 ~]# rpm -q createrepo

createrepo-0.9.9-23.el7.noarch

l  [[email protected]_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  [[email protected]_11 ~]# vim /etc/yum.repos.d/hehe.repo  #编辑yum源

技术分享图片

l  [[email protected]_11 ~]# yum clean all

l  [[email protected]_11 ~]# yum repolist

技术分享图片

l  [[email protected]_11 ~]# yum -y install mysql-community-*   #安装mysql数据库

 

l  启动服务并设置开机自启,并验证

[[email protected]_11 ~]# systemctl start mysqld

[[email protected]_11 ~]# systemctl enable mysqld

 

技术分享图片

 

l  [[email protected]_11 ~]# cat /var/log/mysqld.log | grep password   #查看mysql初始密码

2018-03-02T11:37:27.225479Z 1 [Note] A temporary password is generated for [email protected]: 52hjzs/FZrfu

l  [[email protected]_11 ~]# mysql -uroot -p'52hjzs/FZrfu'     #并进行首次登录

技术分享图片



设置数据库密码:

[[email protected]_11 ~]# vim /etc/my.cnf  ——》修改数据库主配置文件

[mysqld]

validate_password_policy=0   ——》修改密码的验证策略(0表示只检查密码长度,默认8位长度)

validate_password_length=6   ——》修改密码的默认长度

 

[[email protected]_11 ~]# systemctl restart mysqld  ——》重启数据库

[[email protected]_11 ~]# mysql -uroot -p'8tuwu8<qN7m8'  ——》用初始密码登录数据库

mysql> alter user [email protected]"localhost" identified by "123456"; ——》设置新密码

 

[[email protected]_11 ~]# mysql -uroot -p123456  ——》新密码登录数据库

mysql>

 

l  备注:192.168.4.22步骤同上

 

 

 

 

l  配置192.168.4.11为主数据库;192.168.4.22为从数据库

添加一个授权用户

[[email protected]_11 ~]# mysql -uroot -p123456

mysql> grant replication  slave on *.* to [email protected]"192.168.4.22" identified by "123456";

 

启用binlog日志

[[email protected]_11 ~]# vim /etc/my.cnf

[mysqld]

server_id=11

log-bin=master11

binlog-format="mixed"

validate_password_policy=0

validate_password_length=6

重启数据库,使配置生效

[[email protected]_11 ~]# systemctl restart mysqld

[[email protected]_11 ~]# ls /var/lib/mysql/master11.*

/var/lib/mysql/master11.000001  /var/lib/mysql/master11.index

查看正在使用的binlog日志文件

[[email protected]_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

[[email protected]_22 ~]# vim /etc/my.cnf

[mysqld]

server_id=22

validate_password_policy=0

validate_password_length=6

[[email protected]_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

[[email protected]_11 ~]# mysql -uroot -p123456

mysql> grant replication slave,replication client on *.* to [email protected]"%" identified by "123456";

Query OK, 0 rows affected, 1 warning (0.15 sec)

 

mysql> grant select on *.* to [email protected]'%' 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服务:

 

[[email protected]_77 ~]# maxscale -f /etc/maxscale.cnf ——启动服务

 

[[email protected]_77 ~]# netstat -anptul | grep 4006  ——》读写分离端口

[[email protected]_77 ~]# netstat -anptul | grep 4010 ——》管理端口

 

 

 

如何验证读写分离 !!!!!!

方法:因为是主从关系,所以在从数据库上设置一个数据与主数据库不同,,,当客户端进行读的操作时,如果看到不同的那个数据,说明“读”的流量被分到了从数据库上,,,当客户端进行的的操作后,,,分别查看主从数据库,如果都有该数据,说明“写”的数据被分到了主数据库上,所以从数据库才能同步。。。

主数据库192.168.4.11:

mysql> grant all on *.* to [email protected]'%' 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高可用负载均衡集群部署 ----数据库的读写分离的主要内容,如果未能解决你的问题,请参考以下文章

LVS+keepalived高可用负载均衡集群部署---LAMP网站服务器与LVS服务器

集群------LVS+Keepalived高可用负载均衡群集

Ubuntu构建LVS+Keepalived高可用负载均衡集群生产环境部署

DNS+keepalived+lvs实现高可用负载均衡集群

centos7部署负载均衡LVS+keepalived

LVS&Keepalived—集群负载均衡企业高可用详解