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.8

 

架构介绍:

四台主机:

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 or directory?

解决方案:貌似提示注释器错误,没有/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 ~]

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

wget http://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 -ivh MySQL-server-5.6.21-1.rhel5.x86_64.rpm 

rpm -ivh MySQL-server-5.6.21-1.rhel5.x86_64.rpm 
rpm -ivh MySQL-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 mysql start;

 

查询root密码登陆:

more /root/.mysql_secret 

# The random password set for the root user at Thu Apr  9 14:43:59 2015 (local time): F6K3v_xggFoLQeiN

 

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

 

修改root密码;

mysql> use mysql;

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

 

  1. 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服务并用客户端登录)

  1. 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            |       

 

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

我这里直接用的test库,

在库里创建一张表user,

Create  table user(

User_id int(10) primary key auto_increment,

User_name varchar(10)

);

随便插入几条数据。

 

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

首先我们要锁表,

Flush tables with read lock;

 

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

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

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

 

2.2 mysql slave

  1. 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

 

  1. 登陆slave数据库

在mysql中输入命令链接master:

change master to master_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 master status看到的position

master_connect_retry=30;

 

 

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

show slave status\G;

 

 

 

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

 

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

Show processlist\G

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

 

 

  1. Java安装

安装1.7版本java

rpm -ivh jdk-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)

 

  1. 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 

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

<?xml version="1.0"?>

<!DOCTYPE mycat:schema SYSTEM "schema.dtd">

<mycat:schema xmlns:mycat="http://org.opencloudb/"> 

     

    <!-- 定义MyCat的逻辑库 --> 

    <schema name="mycat_schema" checkSQLschema="false" sqlMaxLimit="100" dataNode="testNode"></schema> 

    <!-- 定义MyCat的数据节点 --> 

    <dataNode name="testNode" dataHost="dtHost" database="test" /> 

 

     

    <!-- 定义数据主机dtHost,连接到MySQL读写分离集群 ,schema中的每一个dataHost中的host属性值必须唯一--> 

    <!-- dataHost实际上配置就是后台的数据库集群,一个datahost代表一个数据库集群 --> 

    <!-- balance="1",全部的readHoststand by writeHost参与select语句的负载均衡--> 

    <!-- writeType="0",所有写操作发送到配置的第一个writeHost,这里就是我们的hostmaster,第一个挂了切到还生存的第二个writeHost--> 

    <dataHost name="dtHost" maxCon="500" minCon="20" balance="1" 

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

        <!--心跳检测 --> 

        <heartbeat>show slave status</heartbeat> 

         

        <!--配置后台数据库的IP地址和端口号,还有账号密码 --> 

        <writeHost host="hostMaster" url="192.168.118.130:3306" user="root" password="******" > 

        <readHost host="hostSlave" url="192.168.118.131:3306" user="root" password="******" />

       </writeHost> 

                   <writeHost host="hostM2" url="192.168.118.131:3306" user="root" password="******" />

    </dataHost> 

     

 

</mycat:schema> 

 

 

接下来配置server.xml文件:

vi server.xml

如下:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mycat:server SYSTEM "server.dtd">

<mycat:server xmlns:mycat="http://org.opencloudb/">

         <system>

         <property name="defaultSqlParser">druidparser</property>

     

         </system>

         <user name="root">

                   <property name="password">******</property>

                   <property name="schemas">mycat_schema</property>

         </user>

        

</mycat:server>

 

关闭防火墙:

Service iptables stop

开启Mycat:

Mycat start

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

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

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

 

  1. 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 netmask 255.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/null 2>&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

 

  1. Keepalived安装配置

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

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

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

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

rpm -ivh keepalived-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节点ip192.168.118.128
  15.     }  
  16. }   

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

state   BACKUP

priority   90

 

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

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

 

 

 

! Configuration File 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.16 8066 {  #虚拟ip

    delay_loop 6

    lb_algo rr

    lb_kind DR

    nat_mask 255.255.255.0

persistence_timeout 0   #会话保持时间,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

  1. Ipvsadm安装配置

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

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

Ipvsadm –help

ipvsadm –L查看Keepalived路由信息。

 

  1. 整个流程测试

用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脚本的编写

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值