keepalived+mycat+mysql框架搭建

介绍

Keepalived: v1.2.13

Linux:centos x64 6.8版本

Mycat:1.5.1版本

Mysql:5.6.21版本

nc: 1.84-24

ipvsadm: 1.26-4

jdk:1.7

 

架构介绍:

四台主机:

Master:192.168.118.128

Slave:192.168.118.129

DBMaster:192.168.118.130

DBSlave:192.168.118.131

虚拟ip:192.168.118.16

端口:8066

流程图:

 

 

1. Mysql安装

问题1:tar.gz包解压后,进入解压后的文件,执行./scripts/mysql_install_db  --user=mysql。提示bash:scripts/mysql_install_db: /usr/bin/perl: bad interpreter: No such file ordirectory?

解决方案:貌似提示注释器错误,没有/usr/bin/perl文件或者档案,解决办法(安装perl跟perl-devel即可):

执行  yum-y install perl perl-devel

后在执行./scripts/mysql_install_db  --user=mysql初始化数据库即可。

 

安装Mysql:

查看下是否有系统自带mysql的rpm包,如果有,需要删除自带的旧rpm包。

[root@linuxidc ~]#rpm -qa | grep mysql

mysql-libs-5.1.71-1.el6.x86_64

[root@linuxidc ~]# yum-y remove mysql-libs-5.1*

[root@linuxidc ~]# rpm-qa | grep mysql

[root@linuxidc ~]#

 

在MySQL官网下载安装MySQL-5.6.21所需的rpm软件包。

需要下载三个rpm软件包:

MySQL-client-5.6.21-1.rhel5.x86_64.rpm 

MySQL-devel-5.6.21-1.rhel5.x86_64.rpm 

MySQL-server-5.6.21-1.rhel5.x86_64.rpm

[root@linuxidc ~]

wgethttp://dev.mysql.com/Downloads/MySQL-5.6/MySQL-server-5.6.21-1.rhel5.x86_64.rpm

wgethttp://dev.mysql.com/Downloads/MySQL-5.6/MySQL-devel-5.6.21-1.rhel5.x86_64.rpm

wget http://dev.mysql.com/Downloads/MySQL-5.6/MySQL-client-5.6.21-1.rhel5.x86_64.rpm

 

rpm -ivhMySQL-server-5.6.21-1.rhel5.x86_64.rpm 

rpm -ivhMySQL-server-5.6.21-1.rhel5.x86_64.rpm 
rpm -ivhMySQL-client-5.6.21-1.rhel5.x86_64.rpm  

 

修改配置文件位置。
[root@linuxidc tools]#
cp /usr/share/mysql/my-default.cnf /etc/my.cnf

 

初始化MySQL及修改MySQL默认的root密码。
[root@linuxidc tools]#
/usr/bin/mysql_install_db 
[root@linuxidc tools]#
ps -ef | grep mysql 

 

执行完之后启动 mysql:

Service mysqlstart;

 

查询root密码登陆:

more/root/.mysql_secret 

# Therandom password set for the root user at Thu Apr  9 14:43:59 2015 (localtime): F6K3v_xggFoLQeiN

 

 [root@linuxidc tools]# mysql -uroot -pF6K3v_xggFoLQeiN 
Warning: Using a password on the command lineinterface can be insecure. 
Welcome to the MySQL monitor.  Commandsend with ; or \g. 

 

修改root密码;

mysql> usemysql;

mysql> UPDATEuser SET Password = PASSWORD(“******”) WHERE user = 'root';

 

2. Mysql主从复制

在mysql主从两台机器上打开vi /etc/my.cnf文件,在mysqld下加一行:

lower_case_table_names =1

2.1 mysql master

Myql主从复制的搭建:

两台机器192.168.18.130(master) 192.168.118.31(slave)

先从master开始:

1.      打开/etc/my.cnf文件(mysql启动默认是从/etc/my.cnf读取的,所以你别的地方有配置文件的话建议直接移到/etc目录下)

2.      在[mysqld]下加入配置:

## replication 

server_id=6 

binlog-ignore-db=mysql 

log-bin=master-mysql-bin 

binlog_cache_size=1M 

binlog_format=mixed 

expire_logs_days=7 

slave_skip_errors=1062 

(serverid 全局唯一的

binlog-ignore-db=mysql复制过滤,我们不同步mysql系统自带的数据库

log-bin=master-mysql-bin开启logbin功能并设置logbin文件的名称

binlog_format=mixed 混合型复制模式,默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。

接下来重启mysql服务并用客户端登录)

3.      Slave想要同步master上的数据首先肯定需要权限,所以我们要在master上开通权限。

grant replication slave, replication client on *.* to'root'@'192.168.118.131' identified by  ‘密码’;(不知道这句有没有用,我自己是开启了任何ip都可以链接master的权限,不建议在服务器上这样做)

或者自己开启slave服务器链接master服务器的权限

 

刷新授权信息,查看master状态:

Flush privileges;

Show master status;

-------------------------+----------+--------------+------------------+-------------------+

| File                    | Position | Binlog_Do_DB |Binlog_Ignore_DB | Executed_Gtid_Set |

+-------------------------+----------+--------------+------------------+-------------------+

| master-mysql-bin.000001 |     1160 |              | mysql            |       

 

4.      在master上创建一个数据库,

我这里直接用的test库,

在库里创建一张表user,

Create table user(

User_id int(10) primary keyauto_increment,

User_name varchar(10)

);

随便插入几条数据。

 

接下来我们把test这个库的数据全部备份下来,

首先我们要锁表,

Flush tables with read lock;

 

接下来用mysql的备份命令进行备份,(不知道这一步可不可以省略,没试过)

Mysqldump –p3306 –uroot –p –add-drop-tabletest > /tmp/edu-master.sql

然后把sql文件用xftp发送到slave服务器上

 

2.2 mysql slave

5.      Slave的配置:

打开配置文件/etc/my.cnf

在[mysqld]下加入:

## replication 

server_id=5 

binlog-ignore-db=mysql 

log-bin=mysql-slave-bin 

binlog_cache_size = 1M 

binlog_format=mixed 

expire_logs_days=7 

slave_skip_errors=1062 

relay_log=mysql-relay-bin 

log_slave_updates=1 

read_only=1 

 

然后重启mysql:

Service mysql restart

然后创建一下数据库,因为备份下来的数据文件里面是不包含创建数据库命令的,所以要手动创建一下,(这里我用的是test数据库,所以不用自己创建,如果在master上是自己创建的数据库,这里需要在slave上在创建一次,省略)

 

把从master哪里备份过来的sql文件恢复到slave中

mysql –uroot –p test < /tmp/edu-master.sql

 

6.      登陆slave数据库

在mysql中输入命令链接master:

change master tomaster_host='192.168.118.130',master_user='root',master_password=”******”,master_port=3306,master_log_file='master-mysql-bin.000001',master_log_pos=1160,master_connect_retry=30;

 

 

change

master  to

master_host='192.168.118.130'    #master主机的ip地址

 master_user='root',

master_password=’******’,

我们刚刚在master有执行过授权的账号密码就是这个

master_port=3306,master数据库的端口号

 master_log_file= ‘master-mysql-bin.000001',  #show master status 看到的

master_log_pos=1160,   #这个是我们通过show masterstatus看到的position

master_connect_retry=30;

 

 

使用命令查看slave状态,可以看到slave目前还未开始同步

show slave status\G;

 

 

执行strat slave 开始主从同步,看到两个Yes就代表成功了。

 

在master机器上查看状态,可以看见slave的链接信息。

Showprocesslist\G

最后可以测试一下,在master中插入数据,去slave查看数据是否已经插入。

 

 

3. Java安装

安装1.7版本java

rpm -ivhjdk-7u80-linux-x64.rpm

安装完成后java –version查看版本,是否安装成功。反正我安装成功了。

OpenJDK Runtime Environment(rhel-2.6.10.1.el6_9-x86_64 u141-b02)

OpenJDK 64-Bit Server VM (build 24.141-b02,mixed mode)

 

4. Mycat安装配置读写分离

 

将mycat的安装包解压到/usr/local目录下,

cd /usr/local/mycat

ll

设置Mycat的环境变量

Vi /etc/profile

加入两行;

export MYCAT_HOME=/usr/local/mycat

export PATH=$PATH:$MYCAT_HOME/bin

使配置文件立即生效,

source /etc/profile

进入mycat配置文件目录:

cd /usr/local/mycat/conf/

vi schema.xml 

这个配置文件主要是用来配置数据库节点,逻辑表等等东西的:

 

     

     

     

     

     

 

     

     

     

     

     

   

       writeType="0" dbType="mysql"dbDriver="native" switchType="2"slaveThreshold="100"> 

         

       show slave status 

         

         

         

       

       

       

    

     

 

 

 

 

接下来配置server.xml文件:

vi server.xml

如下:

        

         druidparser

     

        

        

                   ******

                   mycat_schema

        

        

 

关闭防火墙:

Service iptables stop

开启Mycat:

Mycat start

用navicat连接Mycat进行查询和新增,mycat默认端口是8066,

查看Mycat.log日志,查看路由是否正确.

注意:mycat.log日志默认是info级别,要在mycat/conf/log4j.xml中修改日志级别为debug之后再看。

 

5. Web服务器上realserver脚本

在web服务器上/etc/init.d下新建realserver脚本(两个都要)。内容如下:

SNS_VIP=192.168.118.16   #虚拟ip(集群虚拟ip要相同)

/etc/rc.d/init.d/functions

case "$1" in

start)

       ifconfig lo:0 $SNS_VIP netmask255.255.255.255 broadcast $SNS_VIP

       /sbin/route add -host $SNS_VIP dev lo:0

       echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore

       echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce

       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

       echo "2">/proc/sys/net/ipv4/conf/all/arp_announce

       sysctl -p >/dev/null 2>&1

       echo "RealServer Start OK"

       ;;

stop)

       ifconfig lo:0 down

       route del $SNS_VIP >/dev/null2>&1

       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore

       echo "0">/proc/sys/net/ipv4/conf/lo/arp_announce

       echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore

       echo "0">/proc/sys/net/ipv4/conf/all/arp_announce

       echo "RealServer Stoped"

       ;;

*)

       echo "Usage: $0 {start|stop}"

       exit 1

esac

exit 0

 

然后service realserver start启动realserver

如果报权限不够,则赋予realserver相应权限:chmod 755 /etc/init.d/realserver

如果访问function被拒绝,则赋予functions相应权限:chmod 755 /etc/rc.d/init.d/functions

 

6. Keepalived安装配置

keepalived+ipvsadm不是装在mycat+mysql服务器上,准备一个新的服务器,单独放keepalived+ipvsadm

安装keepalived之前首先安装nc插件。用来对Mycat的8066端口做心跳检测。

直接用rpm -ivh nc-1.84-24.el6.x86_64.rpm安装就可以用。

安装keepalived:(主从负载均衡服务器都要配置)

rpm -ivhkeepalived-1.2.13-5.el6_6.x86_64.rpm

配置keepalived.conf:

1.  global_defs {  

2.    notification_email {  

3.       root@localhost  

4.    }  

5.     notification_email_from root@localhost  

6.    smtp_server localhost  

7.     smtp_connect_timeout 30  

8.    router_id  NodeA  

9.  }   

默认的配置文件中,使用第三方smtp服务器,但这在现实中几乎没有意义(需要验证的原因),我们将其指定为localhost, 将通知信息的发送交给本地sendmail服务处理。查阅说明文档得知route_id配置是为了标识当前节点,我将其设置为NodeA。

1.  vrrp_instance VI_1 {  

2.     state MASTER   #指定A节点为主节点 备用节点上设置为BACKUP即可  

3.      interface eth0   #绑定虚拟IP的网络接口  

4.     virtual_router_id 51  #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP组  

5.      priority 100   #主节点的优先级(1-254之间),备用节点必须比主节点优先级低  

6.     advert_int 1   #组播信息发送间隔,两个节点设置必须一样  

7.      authentication {   #设置验证信息,两个节点必须一致  

8.         auth_type PASS  

9.          auth_pass 1111  

10.    }  

11.     virtual_ipaddress {   #指定虚拟IP, 两个节点设置必须一样。 

12.         192.168.118.16   #测试过程中发现,该虚拟ip只有和真实ip在同一网段,才好用

13.                            #不知道是不是跟我的虚拟机用的nat模式联网有关。

14.                           #测试主机A节点ip为192.168.118.128

15.     }  

16.}   

按同样的方法配置节点B并修改配置文件,可将A节点的配置文件复制到B节点,并修改以下几项: 
router_id  NodeB

state   BACKUP

priority   90

 

执行命令 ip a (注意ifconfig命令无法查看到配置的虚拟IP),可以看到节点A已经绑定了192.168.118.16的ip,此时,关闭A的keepalived,在节点B上上执行ip a就发现虚拟IP已经绑定到节点B上,再开启A的keepalived,虚拟IP又绑定回节点A之上。 

Keepalived.conf完整配置如下:(两个负载均衡服务器都要配置)

 

 

 

! ConfigurationFile for keepalived

global_defs {

   notification_email{

    root@localhost

   }

  notification_email_from root@localhost

  smtp_server localhost

  smtp_connect_timeout 30

  router_id NodeA

}

vrrp_instance VI_1 {

   state MASTER

   interface eth0

   virtual_router_id 51

   priority 100

   advert_int 1

   authentication {

       auth_type PASS

       auth_pass 1111

    }

   virtual_ipaddress {

       192.168.118.16

    }

}

virtual_server 192.168.118.168066 {  #虚拟ip

    delay_loop 6

    lb_algo rr

    lb_kind DR

   nat_mask 255.255.255.0

persistence_timeout0   #会话保持时间,x s之内用户无相应则下一次用户请求时重新

                     #路由

   protocol TCP

 

    real_server 192.168.118.130 8066 {   #真实服务器1

        weight 1

        MISC_CHECK {

        misc_path"/etc/keepalived/check_mycat_status.sh 192.168.118.130 8066"

        misc_timeout 3

        }  

}

    real_server 192.168.118.131 8066 {   #真实服务器2

        weight 1

        MISC_CHECK {

        misc_path"/etc/keepalived/check_mycat_status.sh 192.168.118.131 8066"

        misc_timeout 3

        }

    }

}

 

说明:因为用tcp_check健康检测后面的mycat会报错,所以这里用misc_check的方式做心跳检测,misc_path引号中内容分别是:自定义心跳检测shell脚本的路径、检测的服务器ip、检测的端口。(引号必须要)

Misc_timeout是脚本执行超时时间。

Misc自定义脚本如下:(执行下列脚本必须要安装nc插件)

创建脚本:

vi check_mycat_status.sh

脚本内容:

#!/bin/bash

result=`nc -v -z $1 $2`

flag="succeeded"

if [[ $result =~ $flag ]]

then

         exit 0

else;

         exit 1

fi

 

给该脚本赋予执行权限:

Chmod 755 check_mycat_status.sh

7. Ipvsadm安装配置

Ipvsadm安装:(两个负载均衡服务器都要配置)

rpm -ivhipvsadm-1.26-4.el6.x86_64.rpm检查安装是否成功:

Ipvsadm –help

用ipvsadm –L查看Keepalived路由信息。

 

8. 整个流程测试

用navicat链接虚拟ip 192.168.118.16 端口号8066,用户名root,密码******,

通过Keepalived服务器转发到两台数据库服务器的Mycat上,ip地址为192.168.118.130和192.168.118.131,端口号为8066。连上mycat服务器后,通过mycat对master数据库进行写,对slave数据库进行读操作。Master的数据会更新到slave数据库。

 

 

Mysql的安装的主从复制的配置,

双点Mycat读写分离的安装配置

分流服务器主从Keepalived+ipvsadm的安装、配置和数据库服务器realserver脚本的编写

你可能感兴趣的:(数据库,负载均衡)