美文网首页
使用nginx充当mysql的负载均衡器初体验

使用nginx充当mysql的负载均衡器初体验

作者: 胡乱唱歌ing | 来源:发表于2019-01-16 15:50 被阅读0次

说明:nginx版本要求是1.9以上 ,编译nginx的时候需要加上 --with-stream
如:

./configure --prefix=/Data/apps/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_image_filter_module  --with-stream

注意

1.因为mysql默认使用了3306端口所以配置nginx tcp反向代理mysql的时候注意端口不要与mysql监听的端口一样比如我使用的是3307
2.确保能root用户能远程连接mysql
如数据库mysql 表user


image.png

nginx.conf
此段代码追加在nginx.conf文件末尾,注意不能加在http{}内

stream{
    include /Data/apps/nginx/conf/stream/*.conf;
}

stream/db.conf

server {
    listen 3307; #注意端口不能跟mysql监听的一样
    proxy_pass db;
}
upstream db {
    server 127.0.0.1:3306;
    server 192.168.233.1:3306;
}

重启nginx, 查看nginx是否监听了3307端口


image.png

然后php代码是这样子

#其实就是new mysqli的时候只需改端口号与nginx反向代理设置的端口号一样就可以了
$mysqli = new mysqli('127.0.0.1','root','root','test',3307);

完整的php代码

<?php

class MysqlClass
{
    private static $obj = NULL; //mysqlclass对象
    public $host;
    public $database;
    public $user;
    public $pwd;
    public $port;
    public $mysqli = NULL;

    //禁止对象被克隆
    private function __clone(){}

    //禁止外部实例化
    private function __construct($host="127.0.0.1",$database="test",$user="root",$pwd="root",$port="3307")
    {

        $this->host = $host;
        $this->database = $database;
        $this->user = $user;
        $this->pwd = $pwd;
        $this->port = $port;
        $this->mysqli = $this->db_connect();

    }

    //获取mysqli连接
    private function db_connect()
    {
       
        $mysqli = new mysqli($this->host,$this->user,$this->pwd,$this->database,$this->port);
        if($mysqli->connect_errno)
        {
            printf("Connect failed: %s\n", $mysqli->connect_errno);
            exit();
        }
        
        $mysqli->query("set names utf8 ");
        return $mysqli;
        

    }
    //获取db实例
    public static function get_db()
    {
        if(self::$obj === NULL)
        {
            self::$obj = new self();
        }
        return self::$obj;
    }

    public function db_query($sql)
    {
        $result = $this->mysqli->query($sql);
        $arr = [];
        while ($row = $result->fetch_assoc()) {
            $arr[] = $row;
        }
        $result->close();
        $this->mysqli->close();
        return $arr;
    }

    public function db_insert()
    {

    }
    public function db_update()
    {

    }
    public function __destruct() {

       $this->mysqli->close();
    }
}
$db = MysqlClass::get_db();

$r = $db->db_query("show tables");
var_dump($r);

结果


image.png image.png

参考资料
https://www.nginx.com/blog/tcp-load-balancing-in-nginx-plus-r5/

相关文章

网友评论

      本文标题:使用nginx充当mysql的负载均衡器初体验

      本文链接:https://www.haomeiwen.com/subject/hdumdqtx.html