MyCat負載均衡 下篇


MyCat負載均衡 下篇

 

  之前在 一步一步在Windows中使用MyCat負載均衡 上篇 中已經講了如何配置出MyCat。下面講其相關的使用。

五、配置MyCat-eye

 對於MyCat監控官網還提供一個MyCat-eye web系統來展示它的運行情況。

MyCat發展到目前的版本,已經不是一個單純的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流數據庫,也支持MongoDB這種新型NoSQL方式的存儲,未來還會支持更多類型的存儲。而在最終用戶看來,無論是那種存儲方式,在MyCat里,都是一個傳統的數據庫表,支持標准的SQL語句進行數據的操作,這樣一來,對前端業務系統來說,可以大幅降低開發難度,提升開發速度

 MyCAT-WEB就是基於mycat的一個性能監控工具,方便大家更有效的使用mycat管理mycat監控mycat,讓大家的mycat工作更加高效。

下載:http://dl.mycat.io/

  運行eye之前還需要安 zookeeper,所以先安裝 zookeeper ,

  解壓到 D:\zookeeper-3.4.6 

  到目錄conf 下創建 zoo.cfg 文件,默認就是加載這個文件,文件內容 我直接copy 的sample里面的

復制代碼
#zoo.cfg 的內容
#   心跳檢查的時間 2秒
tickTime=2000
# 初始化時 連接到服務器端的間隔次數,總時間10*2=20秒
initLimit=10
# ZK Leader 和follower 之間通訊的次數,總時間5*2=10秒 
syncLimit=5
# 存儲內存中數據庫快照的位置,如果不設置參數,更新事務日志將被存儲到默認位置。
dataDir=D:\\zookeeper-3.4.6\\zkdata
# 錯誤日志的存放位置
dataLogDir=F:\\zookeeper-3.4.6\\logs

# ZK 服務器端的監聽端口
clientPort=2181
復制代碼

 

     然后 cd 到bin 目錄下 執行zkServer.cmd 就啟動成功了。

     注意:dataDir  和  dataLogDir 目錄不會自動創建,得手動創建才能啟動。

     可以用netstat -ano|findstr "2181" 看看是否OK。

     也可以用JPS 查看啟動的JAVA 進程的情況,會出現這樣

C:\windows\system32>jps
8068
10040 QuorumPeerMain  // 這東西是zk的東西,源碼有介紹
10556 Jps

   也可以用自帶客戶端命令 :  zkCli.cmd -server 127.0.0.1:2181

  關於JPS的東西,可以自己去JAVA_HOME\bin 目錄下去看,里面很多命令

  安裝好zookeeper后,啟動MyCat

  windows啟動  

  啟動start.bat

  inux啟動    

  啟動start.sh

  打開mycat-web窗口
  輸入網址:http://localhost:8082/mycat/

若沒配置好zookeeper會出現下面的頁面

當配置好后會出現:

  添加mycat服務,用戶名,密碼為之前配置的mycat ,123456,保存

 

  還可以添加對mysql的監控,在mysql管理中添加。

  對SQL的監控我這測試了幾天,還沒數據,可能哪里配置沒有加,所以后面再處理。eye具體的使用資料網上不是很多,需要自己探索。

 

六、在NET中使用MyCat

 由於MyCAT與MySQL協議有些許差異,開發者可能不能夠直接使用Oracle官方提供的Mysql.Data(ADO層)來與MyCAT直接連接,因此我們專門為.NET開發者設計了針對MyCAT優化過的ADO層驅動,即Pomelo.Data.MyCat,開發者通過使用MyCatConnection、MyCatCommand類可以實現對MyCAT的連接與查詢。下面將展示一個簡短的使用MyCat for ADO.NET來向MyCAT寫入數據。

  在vs中nuget引入Pomelo.Data.MyCat,但安裝報下面的錯

  錯誤提示net框架4.5版本低了,所以調到4.6。

  MyCatConnection, MyCatCommand等內容在命名空間 Pomelo.Data.MyCat 中. 按照常規的ADO.NET開發流程即可實現對MyCAT的操作。

  Pomelo.Data.MyCat的使用與mysql一致:

  封裝基礎代碼:

復制代碼
private static readonly string connectionString = "server=localhost;database=TESTDB;uid=mycat;pwd=123456";

/// <summary>
        /// 執行SQL語句,返回影響的記錄數
        /// </summary>
        /// <param name="SQLString">SQL語句</param>
        /// <returns>影響的記錄數</returns>
        public static int ExecuteSql(string SQLString, params MyCatParameter[] cmdParms)
        {
            using (MyCatConnection connection = new MyCatConnection(connectionString))
            {
                using (MyCatCommand cmd = new MyCatCommand())
                {
                    try
                    {
                        PrepareCommand(cmd, connection, null, SQLString, cmdParms);
                        int rows = cmd.ExecuteNonQuery();
                        cmd.Parameters.Clear();
                        return rows;
                    }
                    catch (MyCatException e)
                    {
                        throw e;
                    }
                }
            }
        }


        /// <summary>
        /// 執行查詢語句,返回DataSet
        /// </summary>
        /// <param name="SQLString">查詢語句</param>
        /// <returns>DataSet</returns>
        public static DataSet Query(string SQLString)
        {
            using (MyCatConnection connection = new MyCatConnection(connectionString))
            {
                DataSet ds = new DataSet();
                try
                {
                    connection.Open();
                    MyCatDataAdapter command = new MyCatDataAdapter(SQLString, connection);
                    command.Fill(ds, "ds");
                }
                catch (MyCatException ex)
                {
                    throw new Exception(ex.Message);
                }
                return ds;
            }
        }

        private static void PrepareCommand(MyCatCommand cmd, MyCatConnection conn, MyCatTransaction trans, string cmdText, MyCatParameter[] cmdParms)
        {
            if (conn.State != ConnectionState.Open)
                conn.Open();
            cmd.Connection = conn;
            cmd.CommandText = cmdText;
            if (trans != null)
                cmd.Transaction = trans;
            cmd.CommandType = CommandType.Text;//cmdType;
            if (cmdParms != null)
            {


                foreach (MyCatParameter parameter in cmdParms)
                {
                    if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
                        (parameter.Value == null))
                    {
                        parameter.Value = DBNull.Value;
                    }
                    cmd.Parameters.Add(parameter);
                }
            }
        }
復制代碼

插入數據:

復制代碼
string name = textBox1.Text;
            if (string.IsNullOrEmpty(name)) return;

            StringBuilder strSql = new StringBuilder();
            strSql.Append("insert into hotnews(");
            strSql.Append("newsname)");
            strSql.Append(" values (");
            strSql.Append("@newsname)");
            MyCatParameter[] parameters = {
                    new MyCatParameter("@newsname", MyCatDbType.VarChar,100),
                   };
            parameters[0].Value = name;

            int rows = ExecuteSql(strSql.ToString(), parameters);
            if (rows > 0)
            {
                label1.Text = "添加成功";
            }
            else
            {
                label1.Text = "添加失敗";
            }
復制代碼

查詢數據:

復制代碼
 StringBuilder strSql = new StringBuilder();
            strSql.Append("select * ");
            strSql.Append(" FROM hotnews ");

            DataSet ds = Query(strSql.ToString());
            dataGridView1.DataSource = ds.Tables[0];
復制代碼

 

七、注意

 MyCat 主鍵ID自增長配置,但保存時還是會出現下面的情況,當還是沒指定ID時,插入的ID還是下面的ID會導致插入失敗,因此想做分布式最好是將ID設置為自己生成GUID,這樣不管哪個庫都是全局唯一。若還是想自增型,可以參考園友這篇:MyCat 主鍵ID自增長配置

 

需要提醒的是MyCat不僅用於MySQL,而且支持Oracle、DB2、SQL Server、PostgreSQL等

基於心跳的自動故障切換,支持讀寫分離,支持MySQL主從,以及galera cluster集群

支持單庫內部任意join,支持跨庫2表join,甚至基於caltlet的多表join

支持數據的多片自動路由與聚合,支持sum,count,max等常用的聚合函數,支持跨庫分頁

更多功能請參考官網

MyCat官網:http://www.mycat.org.cn/

 

作者: 歡醉 
公眾號【一個碼農的日常】 1號群: 437802986 2號群: 340250479 
出處: http://zhangs1986.cnblogs.com/ 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM